@epicbagel/saas-kit 1.29.0 → 1.30.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.
@@ -1142,6 +1142,7 @@ var Chat = _react.forwardRef.call(void 0, function Chat2({
1142
1142
  const workspace = layout === "workspace";
1143
1143
  const shortViewport = useIsShortViewport();
1144
1144
  const compactSuggestions = mobileCompactSuggestions && (isMobile || shortViewport);
1145
+ const compactComposer = mobileCompactComposer && (isMobile || shortViewport);
1145
1146
  const showEmptyFileDropzone = emptyFileDropzone && Boolean(onFilesSelected) && attachments.length === 0;
1146
1147
  const liveVoiceActive = voiceSession && voiceSession.state !== "disconnected" && voiceSession.state !== "error";
1147
1148
  const showEmptyPending = !conversationStarted && pending && Boolean(emptyPendingContent) && !liveVoiceActive;
@@ -1327,7 +1328,9 @@ var Chat = _react.forwardRef.call(void 0, function Chat2({
1327
1328
  "pt-3",
1328
1329
  application && "px-4 py-3 md:bg-transparent md:px-0 md:pb-0 md:backdrop-blur-none md:supports-backdrop-filter:bg-transparent",
1329
1330
  workspace && "border-0 bg-gradient-to-t from-background via-background to-transparent px-4 pb-[max(1.25rem,env(safe-area-inset-bottom))] pt-8 backdrop-blur-none supports-[backdrop-filter]:bg-gradient-to-t",
1330
- workspace && mobileCompactComposer && "max-md:pb-[max(0.75rem,env(safe-area-inset-bottom))] max-md:pt-3"
1331
+ workspace && mobileCompactComposer && "max-md:pb-[max(0.75rem,env(safe-area-inset-bottom))] max-md:pt-3",
1332
+ // A short window's dock is as tight as a phone's.
1333
+ workspace && compactComposer && "pb-[max(0.75rem,env(safe-area-inset-bottom))] pt-3"
1331
1334
  ),
1332
1335
  children: [
1333
1336
  !compactSuggestions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -1375,7 +1378,7 @@ var Chat = _react.forwardRef.call(void 0, function Chat2({
1375
1378
  addFilesLabel,
1376
1379
  uploadingLabel,
1377
1380
  appearance: composerAppearance,
1378
- compactOnBlur: mobileCompactComposer && isMobile,
1381
+ compactOnBlur: compactComposer,
1379
1382
  helperText: composerHelperText,
1380
1383
  privacyNote: composerPrivacyNote,
1381
1384
  className: workspace ? "mx-auto max-w-3xl rounded-3xl shadow-sm" : void 0
@@ -232,7 +232,8 @@ interface ChatInputProps {
232
232
  /**
233
233
  * Fold an empty, unfocused composer into a short text row and control bar. Focusing its textarea
234
234
  * expands it; drafts and staged files always keep it expanded. Chat enables
235
- * this only for an active mobile conversation with `mobileCompactComposer`.
235
+ * this only for an active conversation on a phone or a short window, with
236
+ * `mobileCompactComposer`.
236
237
  */
237
238
  compactOnBlur?: boolean;
238
239
  /** Content inside the composer surface, above its files and text field. */
@@ -414,9 +415,10 @@ interface ChatProps {
414
415
  /** Visual treatment for both empty and active text composers. */
415
416
  composerAppearance?: ChatInputProps["appearance"];
416
417
  /**
417
- * On phones (below 768px), fold an active conversation's empty composer
418
- * into a short text row above its controls until the textarea is focused. Drafts and files stay
419
- * expanded. Desktop and the new-conversation composer are unchanged.
418
+ * On phones (below 768px wide) and short windows (below 900px tall), fold an
419
+ * active conversation's empty composer into a short text row above its
420
+ * controls until the textarea is focused. Drafts and files stay expanded.
421
+ * Taller desktop windows and the new-conversation composer are unchanged.
420
422
  */
421
423
  mobileCompactComposer?: boolean;
422
424
  /** Quiet contextual copy inside the composer action row. */
@@ -232,7 +232,8 @@ interface ChatInputProps {
232
232
  /**
233
233
  * Fold an empty, unfocused composer into a short text row and control bar. Focusing its textarea
234
234
  * expands it; drafts and staged files always keep it expanded. Chat enables
235
- * this only for an active mobile conversation with `mobileCompactComposer`.
235
+ * this only for an active conversation on a phone or a short window, with
236
+ * `mobileCompactComposer`.
236
237
  */
237
238
  compactOnBlur?: boolean;
238
239
  /** Content inside the composer surface, above its files and text field. */
@@ -414,9 +415,10 @@ interface ChatProps {
414
415
  /** Visual treatment for both empty and active text composers. */
415
416
  composerAppearance?: ChatInputProps["appearance"];
416
417
  /**
417
- * On phones (below 768px), fold an active conversation's empty composer
418
- * into a short text row above its controls until the textarea is focused. Drafts and files stay
419
- * expanded. Desktop and the new-conversation composer are unchanged.
418
+ * On phones (below 768px wide) and short windows (below 900px tall), fold an
419
+ * active conversation's empty composer into a short text row above its
420
+ * controls until the textarea is focused. Drafts and files stay expanded.
421
+ * Taller desktop windows and the new-conversation composer are unchanged.
420
422
  */
421
423
  mobileCompactComposer?: boolean;
422
424
  /** Quiet contextual copy inside the composer action row. */
@@ -1142,6 +1142,7 @@ var Chat = forwardRef(function Chat2({
1142
1142
  const workspace = layout === "workspace";
1143
1143
  const shortViewport = useIsShortViewport();
1144
1144
  const compactSuggestions = mobileCompactSuggestions && (isMobile || shortViewport);
1145
+ const compactComposer = mobileCompactComposer && (isMobile || shortViewport);
1145
1146
  const showEmptyFileDropzone = emptyFileDropzone && Boolean(onFilesSelected) && attachments.length === 0;
1146
1147
  const liveVoiceActive = voiceSession && voiceSession.state !== "disconnected" && voiceSession.state !== "error";
1147
1148
  const showEmptyPending = !conversationStarted && pending && Boolean(emptyPendingContent) && !liveVoiceActive;
@@ -1327,7 +1328,9 @@ var Chat = forwardRef(function Chat2({
1327
1328
  "pt-3",
1328
1329
  application && "px-4 py-3 md:bg-transparent md:px-0 md:pb-0 md:backdrop-blur-none md:supports-backdrop-filter:bg-transparent",
1329
1330
  workspace && "border-0 bg-gradient-to-t from-background via-background to-transparent px-4 pb-[max(1.25rem,env(safe-area-inset-bottom))] pt-8 backdrop-blur-none supports-[backdrop-filter]:bg-gradient-to-t",
1330
- workspace && mobileCompactComposer && "max-md:pb-[max(0.75rem,env(safe-area-inset-bottom))] max-md:pt-3"
1331
+ workspace && mobileCompactComposer && "max-md:pb-[max(0.75rem,env(safe-area-inset-bottom))] max-md:pt-3",
1332
+ // A short window's dock is as tight as a phone's.
1333
+ workspace && compactComposer && "pb-[max(0.75rem,env(safe-area-inset-bottom))] pt-3"
1331
1334
  ),
1332
1335
  children: [
1333
1336
  !compactSuggestions && /* @__PURE__ */ jsx(
@@ -1375,7 +1378,7 @@ var Chat = forwardRef(function Chat2({
1375
1378
  addFilesLabel,
1376
1379
  uploadingLabel,
1377
1380
  appearance: composerAppearance,
1378
- compactOnBlur: mobileCompactComposer && isMobile,
1381
+ compactOnBlur: compactComposer,
1379
1382
  helperText: composerHelperText,
1380
1383
  privacyNote: composerPrivacyNote,
1381
1384
  className: workspace ? "mx-auto max-w-3xl rounded-3xl shadow-sm" : void 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epicbagel/saas-kit",
3
- "version": "1.29.0",
3
+ "version": "1.30.0",
4
4
  "description": "Accessible React primitives, layout components and design tokens for SaaS apps, built on Radix UI and Tailwind CSS v4.",
5
5
  "license": "MIT",
6
6
  "keywords": [