@revikornmann/muka-ui 0.9.2 → 0.11.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 (41) hide show
  1. package/dist/cjs/components/BottomBar/BottomBar.css +24 -2
  2. package/dist/cjs/components/BottomBar/BottomBar.js +1 -0
  3. package/dist/cjs/components/BottomBar/BottomBar.js.map +1 -1
  4. package/dist/cjs/components/ChatComposer/ChatComposer.css +52 -61
  5. package/dist/cjs/components/ChatComposer/ChatComposer.js +29 -6
  6. package/dist/cjs/components/ChatComposer/ChatComposer.js.map +1 -1
  7. package/dist/cjs/components/ChatComposer/index.js +6 -1
  8. package/dist/cjs/components/ChatComposer/index.js.map +1 -1
  9. package/dist/esm/components/BottomBar/BottomBar.css +24 -2
  10. package/dist/esm/components/BottomBar/BottomBar.js +1 -0
  11. package/dist/esm/components/BottomBar/BottomBar.js.map +1 -1
  12. package/dist/esm/components/ChatComposer/ChatComposer.css +52 -61
  13. package/dist/esm/components/ChatComposer/ChatComposer.js +29 -6
  14. package/dist/esm/components/ChatComposer/ChatComposer.js.map +1 -1
  15. package/dist/esm/components/ChatComposer/index.js +1 -0
  16. package/dist/esm/components/ChatComposer/index.js.map +1 -1
  17. package/dist/styles/components/BottomBar.css +24 -2
  18. package/dist/styles/components/ChatComposer.css +52 -61
  19. package/dist/styles/index.css +2771 -2757
  20. package/dist/styles/muka-dark.css +2771 -2757
  21. package/dist/styles/muka-light.css +2771 -2757
  22. package/dist/styles/tokens-bouwplan-dark.css +3 -2
  23. package/dist/styles/tokens-bouwplan-light.css +3 -2
  24. package/dist/styles/tokens-fscl-dark.css +3 -2
  25. package/dist/styles/tokens-fscl-light.css +3 -2
  26. package/dist/styles/tokens-grip-dark.css +3 -2
  27. package/dist/styles/tokens-grip-light.css +3 -2
  28. package/dist/styles/tokens-muka-dark.css +3 -2
  29. package/dist/styles/tokens-muka-light.css +3 -2
  30. package/dist/styles/tokens-wireframe-dark.css +3 -2
  31. package/dist/styles/tokens-wireframe-light.css +3 -2
  32. package/dist/styles/wireframe-dark.css +2771 -2757
  33. package/dist/styles/wireframe-light.css +2771 -2757
  34. package/dist/types/components/BottomBar/BottomBar.d.ts +3 -2
  35. package/dist/types/components/BottomBar/BottomBar.d.ts.map +1 -1
  36. package/dist/types/components/ChatComposer/ChatComposer.d.ts +50 -18
  37. package/dist/types/components/ChatComposer/ChatComposer.d.ts.map +1 -1
  38. package/dist/types/components/ChatComposer/index.d.ts +1 -0
  39. package/dist/types/components/ChatComposer/index.d.ts.map +1 -1
  40. package/package.json +1 -1
  41. package/tokens/t4-components/bottombar.json +11 -5
@@ -62,6 +62,30 @@
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
+
84
+ /* Let the composer fill the wider bar instead of its standalone 768px cap. */
85
+ .muka-bottombar--chat .muka-chat-composer {
86
+ max-width: none;
87
+ }
88
+
65
89
  /* ─── Tab item ────────────────────────────────────────── */
66
90
 
67
91
  .muka-bottombar__tab {
@@ -118,8 +142,6 @@
118
142
  var(--bottombar-floating-backdrop-start),
119
143
  var(--bottombar-floating-backdrop-end)
120
144
  );
121
- backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
122
- -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
123
145
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
124
146
 
125
147
  /* The transparent frosted margin around the pill overlays scrolling content;
@@ -23,6 +23,7 @@ exports.BottomBarTab = BottomBarTab;
23
23
  * **Variants:**
24
24
  * - `actions`: Renders children as a row of action buttons.
25
25
  * - `navigation`: Renders BottomBarTab children as a tab bar.
26
+ * - `chat`: Houses a ChatComposer, capped at `container.max-width.lg` and centered.
26
27
  *
27
28
  * **Floating:** When `floating={true}`, the bar becomes a floating card
28
29
  * with rounded corners, padding, and shadow — used in "top level" views.
@@ -1 +1 @@
1
- {"version":3,"file":"BottomBar.js","sourceRoot":"","sources":["../../../../components/BottomBar/BottomBar.tsx"],"names":[],"mappings":";;;;AACA,2BAAyB;AAqBzB;;GAEG;AACI,MAAM,YAAY,GAAgC,CAAC,EACxD,IAAI,EACJ,UAAU,EACV,KAAK,EACL,MAAM,GAAG,KAAK,EACd,OAAO,GACR,EAAE,EAAE;IACH,MAAM,UAAU,GAAG;QACjB,qBAAqB;QACrB,MAAM,IAAI,6BAA6B;KACxC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,oCACE,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,KAAK,mBACK,MAAM,gBACT,KAAK,EACjB,IAAI,EAAC,QAAQ,aAEb,iCAAM,SAAS,EAAC,0BAA0B,YACvC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GACpC,EACP,iCAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAQ,IACnD,CACV,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,YAAY,gBA2BvB;AAsCF;;;;;;;;;;;;;;;;;GAiBG;AACI,MAAM,SAAS,GAA6B,CAAC,EAClD,OAAO,EACP,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,gBAAgB,GAAG;QACvB,gBAAgB;QAChB,mBAAmB,OAAO,EAAE;QAC5B,IAAI,IAAI,mBAAmB,IAAI,EAAE;QACjC,QAAQ,IAAI,0BAA0B;QACtC,SAAS,IAAI,OAAO,KAAK,YAAY,IAAI,2BAA2B,SAAS,EAAE;QAC/E,eAAe,IAAI,8BAA8B;QACjD,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,aAAa,GAAG,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,OAAO,CACL,oCAAQ,SAAS,EAAE,gBAAgB,aAChC,CAAC,QAAQ,IAAI,QAAQ,IAAI,CACxB,gCAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,WAAW,GAAG,CAC7D,EACD,gCAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAE,aAAa,YACzD,QAAQ,GACL,IACC,CACV,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,SAAS,aAgCpB;AAEF,kBAAe,iBAAS,CAAC"}
1
+ {"version":3,"file":"BottomBar.js","sourceRoot":"","sources":["../../../../components/BottomBar/BottomBar.tsx"],"names":[],"mappings":";;;;AACA,2BAAyB;AAqBzB;;GAEG;AACI,MAAM,YAAY,GAAgC,CAAC,EACxD,IAAI,EACJ,UAAU,EACV,KAAK,EACL,MAAM,GAAG,KAAK,EACd,OAAO,GACR,EAAE,EAAE;IACH,MAAM,UAAU,GAAG;QACjB,qBAAqB;QACrB,MAAM,IAAI,6BAA6B;KACxC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,oCACE,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,KAAK,mBACK,MAAM,gBACT,KAAK,EACjB,IAAI,EAAC,QAAQ,aAEb,iCAAM,SAAS,EAAC,0BAA0B,YACvC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GACpC,EACP,iCAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAQ,IACnD,CACV,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,YAAY,gBA2BvB;AAsCF;;;;;;;;;;;;;;;;;;GAkBG;AACI,MAAM,SAAS,GAA6B,CAAC,EAClD,OAAO,EACP,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,gBAAgB,GAAG;QACvB,gBAAgB;QAChB,mBAAmB,OAAO,EAAE;QAC5B,IAAI,IAAI,mBAAmB,IAAI,EAAE;QACjC,QAAQ,IAAI,0BAA0B;QACtC,SAAS,IAAI,OAAO,KAAK,YAAY,IAAI,2BAA2B,SAAS,EAAE;QAC/E,eAAe,IAAI,8BAA8B;QACjD,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,aAAa,GAAG,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,OAAO,CACL,oCAAQ,SAAS,EAAE,gBAAgB,aAChC,CAAC,QAAQ,IAAI,QAAQ,IAAI,CACxB,gCAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,WAAW,GAAG,CAC7D,EACD,gCAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAE,aAAa,YACzD,QAAQ,GACL,IACC,CACV,CAAC;AACJ,CAAC,CAAC;AAhCW,QAAA,SAAS,aAgCpB;AAEF,kBAAe,iBAAS,CAAC"}
@@ -3,15 +3,9 @@
3
3
  .muka-chat-composer {
4
4
  display: flex;
5
5
  flex-direction: column;
6
- gap: var(--spacing-2);
6
+ gap: var(--spacing-3);
7
7
  width: 100%;
8
8
  max-width: 768px;
9
- padding: var(--spacing-3);
10
- background-color: var(--color-surface-level3);
11
- border-radius: var(--radius-xl);
12
- box-shadow:
13
- 0 0 0.5px var(--color-black-alpha-5, rgba(0, 0, 0, 0.09)),
14
- 0 8px 8px var(--color-black-alpha-5, rgba(0, 0, 0, 0.09));
15
9
  }
16
10
 
17
11
  .muka-chat-composer--disabled {
@@ -19,28 +13,33 @@
19
13
  pointer-events: none;
20
14
  }
21
15
 
22
- /* ─── Staged attachments slot ──────────────────────────── */
16
+ /* ─── Input row ────────────────────────────────────────── */
23
17
 
24
- .muka-chat-composer__attachments {
18
+ .muka-chat-composer__row {
25
19
  display: flex;
26
- flex-wrap: wrap;
27
- gap: var(--spacing-2);
20
+ width: 100%;
21
+ align-items: flex-end;
22
+ gap: var(--spacing-3);
28
23
  }
29
24
 
30
- /* ─── Input row ────────────────────────────────────────── */
25
+ /* ─── Text field ───────────────────────────────────────── */
31
26
 
32
- .muka-chat-composer__row {
27
+ .muka-chat-composer__field {
33
28
  display: flex;
34
- width: 100%;
35
- align-items: stretch;
29
+ flex: 1 1 auto;
30
+ min-width: 0;
31
+ box-sizing: border-box;
32
+ align-items: center;
33
+ gap: var(--spacing-1);
34
+ min-height: var(--input-field-height-lg, 48px);
35
+ padding: 0 var(--spacing-2);
36
36
  border: var(--border-width-regular) solid var(--input-field-color-default-border);
37
37
  border-radius: var(--input-field-radius-lg);
38
38
  background-color: var(--input-field-color-default-background);
39
- padding: var(--spacing-2);
40
39
  transition: border-color 0.12s ease;
41
40
  }
42
41
 
43
- .muka-chat-composer__row:focus-within {
42
+ .muka-chat-composer__field:focus-within {
44
43
  border-color: var(--input-field-color-focus-border, var(--color-action-default));
45
44
  }
46
45
 
@@ -48,16 +47,17 @@
48
47
  flex: 1 1 auto;
49
48
  min-width: 0;
50
49
  width: 100%;
50
+ box-sizing: border-box;
51
51
  resize: none;
52
52
  border: none;
53
53
  background: transparent;
54
54
  outline: none;
55
- padding: var(--spacing-1) var(--spacing-2);
55
+ padding: 0 var(--spacing-1);
56
56
  color: var(--color-text-default-default);
57
- font-family: var(--text-body-md-regular-fontFamily);
58
- font-weight: var(--text-body-md-regular-fontWeight);
59
- font-size: var(--text-body-md-regular-fontSize);
60
- line-height: var(--text-body-md-regular-lineHeight);
57
+ font-family: var(--text-body-base-regular-fontFamily);
58
+ font-weight: var(--text-body-base-regular-fontWeight);
59
+ font-size: var(--text-body-base-regular-fontSize);
60
+ line-height: var(--text-body-base-regular-lineHeight);
61
61
  appearance: none;
62
62
  -webkit-appearance: none;
63
63
  }
@@ -66,57 +66,48 @@
66
66
  color: var(--color-text-subtle-default);
67
67
  }
68
68
 
69
- /* ─── Actions row (leading + trailing) ─────────────────── */
70
-
71
- .muka-chat-composer__actions {
72
- display: flex;
73
- align-items: center;
74
- justify-content: space-between;
75
- gap: var(--spacing-2);
69
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
70
+ .muka-chat-composer__emoji {
71
+ flex-shrink: 0;
76
72
  }
77
73
 
78
- .muka-chat-composer__leading {
79
- display: flex;
80
- align-items: center;
81
- gap: var(--spacing-1);
82
- }
74
+ /* ─── Recording bar ────────────────────────────────────── */
83
75
 
84
- .muka-chat-composer__trailing {
76
+ .muka-chat-composer__recording {
85
77
  display: flex;
78
+ flex: 1 1 auto;
79
+ min-width: 0;
80
+ box-sizing: border-box;
86
81
  align-items: center;
87
- gap: var(--spacing-1);
88
- margin-left: auto;
82
+ min-height: var(--input-field-height-lg, 48px);
83
+ padding: var(--card-padding-sm);
84
+ border: var(--border-width-regular) solid var(--card-color-default-border);
85
+ border-radius: var(--radius-lg);
86
+ background-color: var(--card-color-default-background);
89
87
  }
90
88
 
91
- /* ─── Send button ──────────────────────────────────────── */
89
+ /* ─── Staged attachments strip ─────────────────────────── */
92
90
 
93
- .muka-chat-composer__send {
94
- display: inline-flex;
95
- align-items: center;
96
- justify-content: center;
97
- width: var(--size-3xl, 40px);
98
- height: var(--size-3xl, 40px);
99
- border: none;
100
- border-radius: var(--radius-lg);
101
- background-color: var(--button-color-primary-background-default);
102
- color: var(--button-color-primary-foreground-default);
103
- cursor: pointer;
104
- flex-shrink: 0;
105
- -webkit-tap-highlight-color: transparent;
106
- transition: background-color 0.12s ease;
91
+ .muka-chat-composer__attachments-strip {
92
+ position: relative;
93
+ width: 100%;
107
94
  }
108
95
 
109
- .muka-chat-composer__send:hover:not(:disabled) {
110
- background-color: var(--button-color-primary-background-hover, var(--button-color-primary-background-default));
96
+ .muka-chat-composer__attachments {
97
+ display: flex;
98
+ gap: var(--spacing-3);
99
+ overflow-x: auto;
100
+ scroll-behavior: smooth;
101
+ scrollbar-width: none;
111
102
  }
112
103
 
113
- .muka-chat-composer__send:disabled {
114
- background-color: var(--color-surface-level1);
115
- color: var(--color-text-subtle-default);
116
- cursor: not-allowed;
104
+ .muka-chat-composer__attachments::-webkit-scrollbar {
105
+ display: none;
117
106
  }
118
107
 
119
- .muka-chat-composer__send:focus-visible {
120
- outline: 2px solid var(--color-action-default);
121
- outline-offset: 2px;
108
+ .muka-chat-composer__overflow {
109
+ position: absolute;
110
+ top: 50%;
111
+ right: var(--spacing-2);
112
+ transform: translateY(-50%);
122
113
  }
@@ -4,27 +4,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.ChatComposer = void 0;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
6
  const react_1 = require("react");
7
+ const Button_1 = require("../Button");
7
8
  const Icon_1 = require("../Icon");
8
9
  const Spinner_1 = require("../Spinner");
9
10
  require("./ChatComposer.css");
10
11
  /**
11
12
  * ChatComposer — input affordance for chat conversations.
12
13
  *
13
- * Auto-growing textarea with a send button. Submits on Enter (Shift+Enter for
14
- * newline). Designed to live in a `BottomBar`.
14
+ * A horizontal row of `[leading button] · [input field] · [trailing button]`.
15
+ * The trailing button toggles between a mic (empty field) and a send button
16
+ * (text entered). Supports a voice-recording layout and a staged-attachments
17
+ * strip. Submits on Enter (Shift+Enter for a newline). Designed to live in a
18
+ * `BottomBar`.
15
19
  */
16
- exports.ChatComposer = (0, react_1.forwardRef)(({ value, onChange, onSubmit, placeholder = 'Reply...', attachments, leading, trailing, loading = false, disabled = false, hideSendButton = false, sendLabel = 'Send message', maxHeight = 160, autoFocus = false, className = '', }, forwardedRef) => {
20
+ exports.ChatComposer = (0, react_1.forwardRef)(({ value, onChange, onSubmit, placeholder = 'Reply...', onLeadingClick, leadingIcon = 'add', leadingLabel = 'Add attachment', onEmoji, showEmoji = true, emojiLabel = 'Add emoji', onRecordStart, micLabel = 'Record voice message', sendLabel = 'Send message', recording = false, recordingSlot, onRecordPause, onRecordDiscard, pauseLabel = 'Pause recording', discardLabel = 'Discard recording', attachments, attachmentsOverflowLabel = 'Show more attachments', loading = false, disabled = false, maxLines = 10, autoFocus = false, className = '', }, forwardedRef) => {
17
21
  const textareaRef = (0, react_1.useRef)(null);
22
+ const attachmentsRef = (0, react_1.useRef)(null);
18
23
  (0, react_1.useImperativeHandle)(forwardedRef, () => textareaRef.current);
24
+ // Auto-grow the textarea up to `maxLines`, then scroll.
19
25
  (0, react_1.useEffect)(() => {
20
26
  const el = textareaRef.current;
21
27
  if (!el)
22
28
  return;
23
29
  el.style.height = 'auto';
30
+ const lineHeight = parseFloat(getComputedStyle(el).lineHeight) || 20;
31
+ const maxHeight = lineHeight * maxLines;
24
32
  const next = Math.min(el.scrollHeight, maxHeight);
25
33
  el.style.height = `${next}px`;
26
- }, [value, maxHeight]);
27
- const canSubmit = !disabled && !loading && value.trim().length > 0;
34
+ el.style.overflowY = el.scrollHeight > maxHeight ? 'auto' : 'hidden';
35
+ }, [value, maxLines, recording]);
36
+ const canSubmit = recording
37
+ ? !disabled && !loading
38
+ : !disabled && !loading && value.trim().length > 0;
28
39
  const handleSubmit = () => {
29
40
  if (!canSubmit)
30
41
  return;
@@ -36,8 +47,18 @@ exports.ChatComposer = (0, react_1.forwardRef)(({ value, onChange, onSubmit, pla
36
47
  handleSubmit();
37
48
  }
38
49
  };
50
+ const scrollAttachments = () => {
51
+ const el = attachmentsRef.current;
52
+ if (!el)
53
+ return;
54
+ el.scrollBy({ left: el.clientWidth * 0.8, behavior: 'smooth' });
55
+ };
56
+ // Trailing button is a mic only when the field is empty, not recording, and
57
+ // a record handler is supplied; otherwise it is the send button.
58
+ const showMic = !recording && onRecordStart && value.trim().length === 0;
39
59
  const classes = [
40
60
  'muka-chat-composer',
61
+ recording && 'muka-chat-composer--recording',
41
62
  disabled && 'muka-chat-composer--disabled',
42
63
  className,
43
64
  ]
@@ -46,7 +67,9 @@ exports.ChatComposer = (0, react_1.forwardRef)(({ value, onChange, onSubmit, pla
46
67
  return ((0, jsx_runtime_1.jsxs)("form", { className: classes, onSubmit: (e) => {
47
68
  e.preventDefault();
48
69
  handleSubmit();
49
- }, children: [attachments && ((0, jsx_runtime_1.jsx)("div", { className: "muka-chat-composer__attachments", children: attachments })), (0, jsx_runtime_1.jsx)("div", { className: "muka-chat-composer__row", children: (0, jsx_runtime_1.jsx)("textarea", { ref: textareaRef, className: "muka-chat-composer__input", value: value, onChange: (e) => onChange(e.target.value), onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled, autoFocus: autoFocus, rows: 1, "aria-label": placeholder }) }), (leading || (!hideSendButton && (trailing || true))) && ((0, jsx_runtime_1.jsxs)("div", { className: "muka-chat-composer__actions", children: [(0, jsx_runtime_1.jsx)("div", { className: "muka-chat-composer__leading", children: leading }), (0, jsx_runtime_1.jsx)("div", { className: "muka-chat-composer__trailing", children: trailing ?? (!hideSendButton && ((0, jsx_runtime_1.jsx)("button", { type: "submit", className: "muka-chat-composer__send", disabled: !canSubmit, "aria-label": sendLabel, children: loading ? ((0, jsx_runtime_1.jsx)(Spinner_1.Spinner, { size: "sm", variant: "inverse" })) : ((0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "arrow-up", size: "sm" })) }))) })] }))] }));
70
+ }, children: [attachments && ((0, jsx_runtime_1.jsxs)("div", { className: "muka-chat-composer__attachments-strip", children: [(0, jsx_runtime_1.jsx)("div", { className: "muka-chat-composer__attachments", ref: attachmentsRef, children: attachments }), (0, jsx_runtime_1.jsx)(Button_1.Button, { type: "button", className: "muka-chat-composer__overflow", variant: "secondary", size: "sm", iconOnly: true, "aria-label": attachmentsOverflowLabel, onClick: scrollAttachments, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "arrow-right-s", size: "xs" }) })] })), (0, jsx_runtime_1.jsxs)("div", { className: "muka-chat-composer__row", children: [(0, jsx_runtime_1.jsx)(Button_1.Button, { type: "button", variant: "secondary", size: "lg", iconOnly: true, disabled: disabled, "aria-label": recording ? discardLabel : leadingLabel, onClick: recording ? onRecordDiscard : onLeadingClick, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: recording ? 'delete-bin' : leadingIcon, size: "md" }) }), recording ? ((0, jsx_runtime_1.jsx)("div", { className: "muka-chat-composer__recording", children: recordingSlot })) : ((0, jsx_runtime_1.jsxs)("div", { className: "muka-chat-composer__field", children: [(0, jsx_runtime_1.jsx)("textarea", { ref: textareaRef, className: "muka-chat-composer__input", value: value, onChange: (e) => onChange(e.target.value), onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled,
71
+ // eslint-disable-next-line jsx-a11y/no-autofocus
72
+ autoFocus: autoFocus, rows: 1, "aria-label": placeholder }), showEmoji && ((0, jsx_runtime_1.jsx)(Button_1.Button, { type: "button", className: "muka-chat-composer__emoji", variant: "ghost", size: "md", iconOnly: true, disabled: disabled, "aria-label": emojiLabel, onClick: onEmoji, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "emotion-happy", size: "sm" }) }))] })), recording && ((0, jsx_runtime_1.jsx)(Button_1.Button, { type: "button", variant: "secondary", size: "lg", iconOnly: true, disabled: disabled, "aria-label": pauseLabel, onClick: onRecordPause, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "pause-circle", size: "md" }) })), showMic ? ((0, jsx_runtime_1.jsx)(Button_1.Button, { type: "button", variant: "secondary", size: "lg", iconOnly: true, disabled: disabled, "aria-label": micLabel, onClick: onRecordStart, children: (0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "mic", size: "md" }) })) : ((0, jsx_runtime_1.jsx)(Button_1.Button, { type: "submit", variant: "primary", size: "lg", iconOnly: true, disabled: !canSubmit, "aria-label": sendLabel, children: loading ? ((0, jsx_runtime_1.jsx)(Spinner_1.Spinner, { size: "sm", variant: "inverse" })) : ((0, jsx_runtime_1.jsx)(Icon_1.Icon, { name: "send-plane2", size: "md" })) }))] })] }));
50
73
  });
51
74
  exports.ChatComposer.displayName = 'ChatComposer';
52
75
  exports.default = exports.ChatComposer;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatComposer.js","sourceRoot":"","sources":["../../../../components/ChatComposer/ChatComposer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatComposer.js","sourceRoot":"","sources":["../../../../components/ChatComposer/ChatComposer.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ChatComposer = void 0;
6
+ exports.default = exports.ChatComposer = void 0;
4
7
  var ChatComposer_1 = require("./ChatComposer");
5
8
  Object.defineProperty(exports, "ChatComposer", { enumerable: true, get: function () { return ChatComposer_1.ChatComposer; } });
9
+ var ChatComposer_2 = require("./ChatComposer");
10
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(ChatComposer_2).default; } });
6
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../components/ChatComposer/index.ts"],"names":[],"mappings":";;;AAAA,+CAAsE;AAA7D,4GAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../components/ChatComposer/index.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAsE;AAA7D,4GAAA,YAAY,OAAA;AACrB,+CAAyC;AAAhC,wHAAA,OAAO,OAAA"}
@@ -62,6 +62,30 @@
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
+
84
+ /* Let the composer fill the wider bar instead of its standalone 768px cap. */
85
+ .muka-bottombar--chat .muka-chat-composer {
86
+ max-width: none;
87
+ }
88
+
65
89
  /* ─── Tab item ────────────────────────────────────────── */
66
90
 
67
91
  .muka-bottombar__tab {
@@ -118,8 +142,6 @@
118
142
  var(--bottombar-floating-backdrop-start),
119
143
  var(--bottombar-floating-backdrop-end)
120
144
  );
121
- backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
122
- -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
123
145
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
124
146
 
125
147
  /* The transparent frosted margin around the pill overlays scrolling content;
@@ -19,6 +19,7 @@ export const BottomBarTab = ({ icon, activeIcon, label, active = false, onClick,
19
19
  * **Variants:**
20
20
  * - `actions`: Renders children as a row of action buttons.
21
21
  * - `navigation`: Renders BottomBarTab children as a tab bar.
22
+ * - `chat`: Houses a ChatComposer, capped at `container.max-width.lg` and centered.
22
23
  *
23
24
  * **Floating:** When `floating={true}`, the bar becomes a floating card
24
25
  * with rounded corners, padding, and shadow — used in "top level" views.
@@ -1 +1 @@
1
- {"version":3,"file":"BottomBar.js","sourceRoot":"","sources":["../../../../components/BottomBar/BottomBar.tsx"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAC;AAqBzB;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,IAAI,EACJ,UAAU,EACV,KAAK,EACL,MAAM,GAAG,KAAK,EACd,OAAO,GACR,EAAE,EAAE;IACH,MAAM,UAAU,GAAG;QACjB,qBAAqB;QACrB,MAAM,IAAI,6BAA6B;KACxC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,kBACE,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,KAAK,mBACK,MAAM,gBACT,KAAK,EACjB,IAAI,EAAC,QAAQ,aAEb,eAAM,SAAS,EAAC,0BAA0B,YACvC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GACpC,EACP,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAQ,IACnD,CACV,CAAC;AACJ,CAAC,CAAC;AAsCF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAClD,OAAO,EACP,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,gBAAgB,GAAG;QACvB,gBAAgB;QAChB,mBAAmB,OAAO,EAAE;QAC5B,IAAI,IAAI,mBAAmB,IAAI,EAAE;QACjC,QAAQ,IAAI,0BAA0B;QACtC,SAAS,IAAI,OAAO,KAAK,YAAY,IAAI,2BAA2B,SAAS,EAAE;QAC/E,eAAe,IAAI,8BAA8B;QACjD,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,aAAa,GAAG,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,OAAO,CACL,kBAAQ,SAAS,EAAE,gBAAgB,aAChC,CAAC,QAAQ,IAAI,QAAQ,IAAI,CACxB,cAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,WAAW,GAAG,CAC7D,EACD,cAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAE,aAAa,YACzD,QAAQ,GACL,IACC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"BottomBar.js","sourceRoot":"","sources":["../../../../components/BottomBar/BottomBar.tsx"],"names":[],"mappings":";AACA,OAAO,iBAAiB,CAAC;AAqBzB;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,IAAI,EACJ,UAAU,EACV,KAAK,EACL,MAAM,GAAG,KAAK,EACd,OAAO,GACR,EAAE,EAAE;IACH,MAAM,UAAU,GAAG;QACjB,qBAAqB;QACrB,MAAM,IAAI,6BAA6B;KACxC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,CACL,kBACE,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAC,KAAK,mBACK,MAAM,gBACT,KAAK,EACjB,IAAI,EAAC,QAAQ,aAEb,eAAM,SAAS,EAAC,0BAA0B,YACvC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,GACpC,EACP,eAAM,SAAS,EAAC,2BAA2B,YAAE,KAAK,GAAQ,IACnD,CACV,CAAC;AACJ,CAAC,CAAC;AAsCF;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,SAAS,GAA6B,CAAC,EAClD,OAAO,EACP,IAAI,EACJ,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,IAAI,EACf,SAAS,EACT,eAAe,GAAG,KAAK,EACvB,QAAQ,EACR,SAAS,GAAG,EAAE,GACf,EAAE,EAAE;IACH,MAAM,gBAAgB,GAAG;QACvB,gBAAgB;QAChB,mBAAmB,OAAO,EAAE;QAC5B,IAAI,IAAI,mBAAmB,IAAI,EAAE;QACjC,QAAQ,IAAI,0BAA0B;QACtC,SAAS,IAAI,OAAO,KAAK,YAAY,IAAI,2BAA2B,SAAS,EAAE;QAC/E,eAAe,IAAI,8BAA8B;QACjD,SAAS;KACV,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,MAAM,aAAa,GAAG,OAAO,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,OAAO,CACL,kBAAQ,SAAS,EAAE,gBAAgB,aAChC,CAAC,QAAQ,IAAI,QAAQ,IAAI,CACxB,cAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAC,WAAW,GAAG,CAC7D,EACD,cAAK,SAAS,EAAC,yBAAyB,EAAC,IAAI,EAAE,aAAa,YACzD,QAAQ,GACL,IACC,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,SAAS,CAAC"}
@@ -3,15 +3,9 @@
3
3
  .muka-chat-composer {
4
4
  display: flex;
5
5
  flex-direction: column;
6
- gap: var(--spacing-2);
6
+ gap: var(--spacing-3);
7
7
  width: 100%;
8
8
  max-width: 768px;
9
- padding: var(--spacing-3);
10
- background-color: var(--color-surface-level3);
11
- border-radius: var(--radius-xl);
12
- box-shadow:
13
- 0 0 0.5px var(--color-black-alpha-5, rgba(0, 0, 0, 0.09)),
14
- 0 8px 8px var(--color-black-alpha-5, rgba(0, 0, 0, 0.09));
15
9
  }
16
10
 
17
11
  .muka-chat-composer--disabled {
@@ -19,28 +13,33 @@
19
13
  pointer-events: none;
20
14
  }
21
15
 
22
- /* ─── Staged attachments slot ──────────────────────────── */
16
+ /* ─── Input row ────────────────────────────────────────── */
23
17
 
24
- .muka-chat-composer__attachments {
18
+ .muka-chat-composer__row {
25
19
  display: flex;
26
- flex-wrap: wrap;
27
- gap: var(--spacing-2);
20
+ width: 100%;
21
+ align-items: flex-end;
22
+ gap: var(--spacing-3);
28
23
  }
29
24
 
30
- /* ─── Input row ────────────────────────────────────────── */
25
+ /* ─── Text field ───────────────────────────────────────── */
31
26
 
32
- .muka-chat-composer__row {
27
+ .muka-chat-composer__field {
33
28
  display: flex;
34
- width: 100%;
35
- align-items: stretch;
29
+ flex: 1 1 auto;
30
+ min-width: 0;
31
+ box-sizing: border-box;
32
+ align-items: center;
33
+ gap: var(--spacing-1);
34
+ min-height: var(--input-field-height-lg, 48px);
35
+ padding: 0 var(--spacing-2);
36
36
  border: var(--border-width-regular) solid var(--input-field-color-default-border);
37
37
  border-radius: var(--input-field-radius-lg);
38
38
  background-color: var(--input-field-color-default-background);
39
- padding: var(--spacing-2);
40
39
  transition: border-color 0.12s ease;
41
40
  }
42
41
 
43
- .muka-chat-composer__row:focus-within {
42
+ .muka-chat-composer__field:focus-within {
44
43
  border-color: var(--input-field-color-focus-border, var(--color-action-default));
45
44
  }
46
45
 
@@ -48,16 +47,17 @@
48
47
  flex: 1 1 auto;
49
48
  min-width: 0;
50
49
  width: 100%;
50
+ box-sizing: border-box;
51
51
  resize: none;
52
52
  border: none;
53
53
  background: transparent;
54
54
  outline: none;
55
- padding: var(--spacing-1) var(--spacing-2);
55
+ padding: 0 var(--spacing-1);
56
56
  color: var(--color-text-default-default);
57
- font-family: var(--text-body-md-regular-fontFamily);
58
- font-weight: var(--text-body-md-regular-fontWeight);
59
- font-size: var(--text-body-md-regular-fontSize);
60
- line-height: var(--text-body-md-regular-lineHeight);
57
+ font-family: var(--text-body-base-regular-fontFamily);
58
+ font-weight: var(--text-body-base-regular-fontWeight);
59
+ font-size: var(--text-body-base-regular-fontSize);
60
+ line-height: var(--text-body-base-regular-lineHeight);
61
61
  appearance: none;
62
62
  -webkit-appearance: none;
63
63
  }
@@ -66,57 +66,48 @@
66
66
  color: var(--color-text-subtle-default);
67
67
  }
68
68
 
69
- /* ─── Actions row (leading + trailing) ─────────────────── */
70
-
71
- .muka-chat-composer__actions {
72
- display: flex;
73
- align-items: center;
74
- justify-content: space-between;
75
- gap: var(--spacing-2);
69
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
70
+ .muka-chat-composer__emoji {
71
+ flex-shrink: 0;
76
72
  }
77
73
 
78
- .muka-chat-composer__leading {
79
- display: flex;
80
- align-items: center;
81
- gap: var(--spacing-1);
82
- }
74
+ /* ─── Recording bar ────────────────────────────────────── */
83
75
 
84
- .muka-chat-composer__trailing {
76
+ .muka-chat-composer__recording {
85
77
  display: flex;
78
+ flex: 1 1 auto;
79
+ min-width: 0;
80
+ box-sizing: border-box;
86
81
  align-items: center;
87
- gap: var(--spacing-1);
88
- margin-left: auto;
82
+ min-height: var(--input-field-height-lg, 48px);
83
+ padding: var(--card-padding-sm);
84
+ border: var(--border-width-regular) solid var(--card-color-default-border);
85
+ border-radius: var(--radius-lg);
86
+ background-color: var(--card-color-default-background);
89
87
  }
90
88
 
91
- /* ─── Send button ──────────────────────────────────────── */
89
+ /* ─── Staged attachments strip ─────────────────────────── */
92
90
 
93
- .muka-chat-composer__send {
94
- display: inline-flex;
95
- align-items: center;
96
- justify-content: center;
97
- width: var(--size-3xl, 40px);
98
- height: var(--size-3xl, 40px);
99
- border: none;
100
- border-radius: var(--radius-lg);
101
- background-color: var(--button-color-primary-background-default);
102
- color: var(--button-color-primary-foreground-default);
103
- cursor: pointer;
104
- flex-shrink: 0;
105
- -webkit-tap-highlight-color: transparent;
106
- transition: background-color 0.12s ease;
91
+ .muka-chat-composer__attachments-strip {
92
+ position: relative;
93
+ width: 100%;
107
94
  }
108
95
 
109
- .muka-chat-composer__send:hover:not(:disabled) {
110
- background-color: var(--button-color-primary-background-hover, var(--button-color-primary-background-default));
96
+ .muka-chat-composer__attachments {
97
+ display: flex;
98
+ gap: var(--spacing-3);
99
+ overflow-x: auto;
100
+ scroll-behavior: smooth;
101
+ scrollbar-width: none;
111
102
  }
112
103
 
113
- .muka-chat-composer__send:disabled {
114
- background-color: var(--color-surface-level1);
115
- color: var(--color-text-subtle-default);
116
- cursor: not-allowed;
104
+ .muka-chat-composer__attachments::-webkit-scrollbar {
105
+ display: none;
117
106
  }
118
107
 
119
- .muka-chat-composer__send:focus-visible {
120
- outline: 2px solid var(--color-action-default);
121
- outline-offset: 2px;
108
+ .muka-chat-composer__overflow {
109
+ position: absolute;
110
+ top: 50%;
111
+ right: var(--spacing-2);
112
+ transform: translateY(-50%);
122
113
  }