@moldable-ai/ui 0.2.31 → 0.2.33

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 (56) hide show
  1. package/dist/components/app-error-boundary.d.ts +1 -1
  2. package/dist/components/chat/chat-image-lightbox.d.ts +8 -0
  3. package/dist/components/chat/chat-image-lightbox.d.ts.map +1 -1
  4. package/dist/components/chat/chat-image-lightbox.js +24 -2
  5. package/dist/components/chat/chat-input.d.ts +3 -2
  6. package/dist/components/chat/chat-input.d.ts.map +1 -1
  7. package/dist/components/chat/chat-input.js +3 -3
  8. package/dist/components/chat/chat-message.d.ts.map +1 -1
  9. package/dist/components/chat/chat-message.js +3 -1
  10. package/dist/components/chat/chat-panel.d.ts +3 -1
  11. package/dist/components/chat/chat-panel.d.ts.map +1 -1
  12. package/dist/components/chat/chat-panel.js +53 -39
  13. package/dist/components/chat/conversation-history.d.ts +4 -2
  14. package/dist/components/chat/conversation-history.d.ts.map +1 -1
  15. package/dist/components/chat/conversation-history.js +20 -15
  16. package/dist/components/ui/alert.d.ts +1 -1
  17. package/dist/components/ui/button.d.ts +2 -2
  18. package/dist/components/ui/button.js +1 -1
  19. package/dist/components/ui/context-menu.d.ts.map +1 -1
  20. package/dist/components/ui/context-menu.js +1 -0
  21. package/dist/components/ui/date-field.d.ts +1 -1
  22. package/dist/components/ui/dropdown-menu.d.ts +1 -0
  23. package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
  24. package/dist/components/ui/dropdown-menu.js +3 -2
  25. package/dist/components/ui/material.d.ts +1 -1
  26. package/dist/components/ui/material.d.ts.map +1 -1
  27. package/dist/components/ui/menu-items.d.ts +2 -1
  28. package/dist/components/ui/menu-items.d.ts.map +1 -1
  29. package/dist/components/ui/menu-items.js +3 -2
  30. package/dist/components/ui/message-scroller-controller.d.ts +15 -17
  31. package/dist/components/ui/message-scroller-controller.d.ts.map +1 -1
  32. package/dist/components/ui/message-scroller-controller.js +106 -91
  33. package/dist/components/ui/message-scroller-primitive.d.ts +2 -0
  34. package/dist/components/ui/message-scroller-primitive.d.ts.map +1 -1
  35. package/dist/components/ui/message-scroller-primitive.js +2 -0
  36. package/dist/components/ui/message-scroller.d.ts.map +1 -1
  37. package/dist/components/ui/message-scroller.js +2 -2
  38. package/dist/components/ui/number-input.d.ts +1 -1
  39. package/dist/components/ui/popover.js +1 -1
  40. package/dist/components/ui/search-field.d.ts +1 -1
  41. package/dist/components/ui/sidebar.d.ts +6 -2
  42. package/dist/components/ui/sidebar.d.ts.map +1 -1
  43. package/dist/components/ui/sidebar.js +26 -7
  44. package/dist/components/ui/toolbar-controls.d.ts +10 -2
  45. package/dist/components/ui/toolbar-controls.d.ts.map +1 -1
  46. package/dist/components/ui/toolbar-controls.js +25 -7
  47. package/package.json +1 -1
  48. package/src/components/ui/button.md +3 -2
  49. package/src/components/ui/dropdown-menu.md +16 -14
  50. package/src/components/ui/menu-items.md +2 -0
  51. package/src/components/ui/message-scroller.md +6 -3
  52. package/src/components/ui/sidebar.md +11 -5
  53. package/src/components/ui/toolbar-controls.md +11 -7
  54. package/src/styles/index.css +132 -1
  55. package/src/tokens/moldable/brand.css +124 -7
  56. package/src/tokens/platform-contract.test.ts +5 -1
@@ -1,7 +1,6 @@
1
1
  import { MessageScrollerPolicy } from './message-scroller-policy.js';
2
2
  const READING_LEAF_SELECTOR = '[data-message-scroll-anchor]';
3
3
  const POSITION_EPSILON_PX = 0.5;
4
- const WARMUP_BATCH_SIZE = 3;
5
4
  const PROGRAMMATIC_SCROLL_TIMEOUT_MS = 800;
6
5
  function now() {
7
6
  return typeof performance !== 'undefined' ? performance.now() : Date.now();
@@ -107,22 +106,21 @@ export class MessageScrollerController {
107
106
  messageElements = new Map();
108
107
  handledTurnAnchors = new WeakSet();
109
108
  visibleMessageIds = new Set();
110
- warmedItems = new WeakSet();
111
109
  lastScrollTop = 0;
112
- previousFirstItem = null;
110
+ previousItems = [];
113
111
  previousItemCount = 0;
114
112
  anchoredElement = null;
115
113
  trackedFirstVisible = null;
116
114
  readingLeaves = [];
117
115
  pendingScrollToMessage = null;
116
+ pendingHistoryLoad = null;
118
117
  defaultPositionApplied = false;
119
118
  spacerHeight = 0;
120
119
  spacerGap = 0;
121
120
  programmaticDeadline = 0;
122
121
  stateFrame = null;
123
122
  visibilityFrame = null;
124
- warmupHandle = null;
125
- warmupUsesIdleCallback = false;
123
+ historyLoadFrame = null;
126
124
  intersectionObserver = null;
127
125
  constructor(options) {
128
126
  this.options = options;
@@ -248,6 +246,36 @@ export class MessageScrollerController {
248
246
  this.scheduleVisibilitySync();
249
247
  return true;
250
248
  }
249
+ /**
250
+ * Capture history position before an asynchronous older-page request.
251
+ * Distance from the bottom remains invariant when rows are inserted above
252
+ * the reader and is also safe when stale history is replaced by a shorter
253
+ * authoritative page.
254
+ */
255
+ beginHistoryLoad = () => {
256
+ const viewport = this.viewport;
257
+ if (!viewport || this.pendingHistoryLoad)
258
+ return;
259
+ const anchor = this.firstVisibleItem();
260
+ this.pendingHistoryLoad = {
261
+ anchorElement: anchor?.element ?? null,
262
+ anchorTop: anchor?.top ?? 0,
263
+ distanceFromBottom: distanceFromBottom(viewport),
264
+ scrollHeight: viewport.scrollHeight,
265
+ };
266
+ };
267
+ finishHistoryLoad = (changed) => {
268
+ if (!changed) {
269
+ this.pendingHistoryLoad = null;
270
+ return;
271
+ }
272
+ if (this.historyLoadFrame !== null)
273
+ return;
274
+ this.historyLoadFrame = requestAnimationFrame(() => {
275
+ this.historyLoadFrame = null;
276
+ this.restorePendingHistoryLoad(false);
277
+ });
278
+ };
251
279
  // MARK: - DOM events
252
280
  handleScroll() {
253
281
  const viewport = this.viewport;
@@ -258,6 +286,14 @@ export class MessageScrollerController {
258
286
  this.policy.cancelProgrammaticScroll();
259
287
  }
260
288
  const scrollTop = viewport.scrollTop;
289
+ if (this.pendingHistoryLoad &&
290
+ viewport.scrollHeight === this.pendingHistoryLoad.scrollHeight) {
291
+ const anchor = this.firstVisibleItem();
292
+ this.pendingHistoryLoad.anchorElement = anchor?.element ?? null;
293
+ this.pendingHistoryLoad.anchorTop = anchor?.top ?? 0;
294
+ this.pendingHistoryLoad.distanceFromBottom =
295
+ distanceFromBottom(viewport);
296
+ }
261
297
  const userScrolled = this.policy.handleScrollEvent({
262
298
  scrollTop,
263
299
  lastScrollTop: this.lastScrollTop,
@@ -296,8 +332,8 @@ export class MessageScrollerController {
296
332
  }
297
333
  /**
298
334
  * Content box resized (streaming growth, images decoding, disclosures
299
- * collapsing, `content-visibility` reveals). Which way the viewport moves
300
- * — if at all — is entirely the policy's call.
335
+ * collapsing). Which way the viewport moves — if at all — is entirely the
336
+ * policy's call.
301
337
  */
302
338
  handleResize() {
303
339
  const viewport = this.viewport;
@@ -335,11 +371,15 @@ export class MessageScrollerController {
335
371
  /** Children of the content element changed. Runs before the next paint. */
336
372
  handleContentMutation() {
337
373
  const children = this.itemChildren();
338
- const previousFirst = this.previousFirstItem;
374
+ const previousItems = this.previousItems;
339
375
  const previousCount = this.previousItemCount;
340
- this.previousFirstItem = children[0] ?? null;
376
+ this.previousItems = children;
341
377
  this.previousItemCount = children.length;
342
- this.scheduleWarmup();
378
+ if (this.pendingHistoryLoad && previousCount > 0) {
379
+ this.markTurnAnchorsHandled(children, 0);
380
+ this.restorePendingHistoryLoad(true);
381
+ return;
382
+ }
343
383
  if (this.flushPendingScrollToMessage())
344
384
  return;
345
385
  if (previousCount === 0) {
@@ -354,10 +394,8 @@ export class MessageScrollerController {
354
394
  this.scheduleVisibilitySync();
355
395
  return;
356
396
  }
357
- const previousFirstIndex = previousFirst
358
- ? children.indexOf(previousFirst)
359
- : -1;
360
- if (this.preserveScrollOnPrepend && previousFirstIndex > 0) {
397
+ const retainedShift = firstRetainedItemShift(previousItems, children);
398
+ if (this.preserveScrollOnPrepend && retainedShift > 0) {
361
399
  this.markTurnAnchorsHandled(children, 0);
362
400
  this.preservePrependPosition();
363
401
  return;
@@ -466,7 +504,11 @@ export class MessageScrollerController {
466
504
  cancelAnimationFrame(this.visibilityFrame);
467
505
  this.visibilityFrame = null;
468
506
  }
469
- this.cancelWarmup();
507
+ if (this.historyLoadFrame !== null) {
508
+ cancelAnimationFrame(this.historyLoadFrame);
509
+ this.historyLoadFrame = null;
510
+ }
511
+ this.pendingHistoryLoad = null;
470
512
  this.unobserveVisibility();
471
513
  }
472
514
  // MARK: - Positioning
@@ -583,24 +625,43 @@ export class MessageScrollerController {
583
625
  this.snapshotReadingLeaves();
584
626
  }
585
627
  }
586
- trackFirstVisibleItem() {
628
+ restorePendingHistoryLoad(preferAnchor) {
587
629
  const viewport = this.viewport;
588
- if (!viewport) {
589
- this.trackedFirstVisible = null;
630
+ const pending = this.pendingHistoryLoad;
631
+ if (!viewport || !pending)
590
632
  return;
591
- }
633
+ this.pendingHistoryLoad = null;
634
+ const anchor = pending.anchorElement;
635
+ const target = preferAnchor && anchor?.isConnected
636
+ ? viewport.scrollTop +
637
+ elementViewportTop(anchor, viewport) -
638
+ pending.anchorTop
639
+ : maxScrollTop(viewport) - pending.distanceFromBottom;
640
+ viewport.scrollTop = Math.max(0, target);
641
+ this.lastScrollTop = viewport.scrollTop;
642
+ this.trackFirstVisibleItem();
643
+ this.snapshotReadingLeaves();
644
+ this.scheduleStateCommit();
645
+ this.scheduleVisibilitySync();
646
+ }
647
+ firstVisibleItem() {
648
+ const viewport = this.viewport;
649
+ if (!viewport)
650
+ return null;
592
651
  const viewportRect = viewport.getBoundingClientRect();
593
- for (const child of this.itemChildren()) {
594
- const rect = child.getBoundingClientRect();
652
+ for (const element of this.itemChildren()) {
653
+ const rect = element.getBoundingClientRect();
595
654
  if (rect.bottom > viewportRect.top && rect.top < viewportRect.bottom) {
596
- this.trackedFirstVisible = {
597
- element: child,
655
+ return {
656
+ element,
598
657
  top: rect.top - viewportRect.top,
599
658
  };
600
- return;
601
659
  }
602
660
  }
603
- this.trackedFirstVisible = null;
661
+ return null;
662
+ }
663
+ trackFirstVisibleItem() {
664
+ this.trackedFirstVisible = this.firstVisibleItem();
604
665
  }
605
666
  // MARK: - State stores
606
667
  scheduleStateCommit() {
@@ -700,72 +761,6 @@ export class MessageScrollerController {
700
761
  }
701
762
  return { currentAnchorId, visibleMessageIds: visibleIds };
702
763
  }
703
- // MARK: - Content-visibility warm-up
704
- /**
705
- * Rows outside the viewport skip rendering via `content-visibility: auto`
706
- * and a placeholder intrinsic size. Their first reveal during an upward
707
- * scroll pays first-time layout of complex markdown — felt as hitches on
708
- * the first pass through history. Rendering each row once at idle records
709
- * its real size (the `auto` keyword keeps last-remembered sizes), so the
710
- * first real scroll finds everything measured and warm.
711
- */
712
- scheduleWarmup() {
713
- if (this.warmupHandle !== null)
714
- return;
715
- const run = () => {
716
- this.warmupHandle = null;
717
- this.warmupBatch();
718
- };
719
- if (typeof requestIdleCallback === 'function') {
720
- this.warmupUsesIdleCallback = true;
721
- this.warmupHandle = requestIdleCallback(run, { timeout: 1_000 });
722
- }
723
- else {
724
- this.warmupUsesIdleCallback = false;
725
- this.warmupHandle = window.setTimeout(run, 150);
726
- }
727
- }
728
- warmupBatch() {
729
- if (typeof getComputedStyle !== 'function')
730
- return;
731
- const batch = [];
732
- for (const child of this.itemChildren()) {
733
- if (this.warmedItems.has(child))
734
- continue;
735
- this.warmedItems.add(child);
736
- const style = getComputedStyle(child);
737
- const contentVisibility = style.getPropertyValue('content-visibility').trim() || 'visible';
738
- if (contentVisibility === 'auto')
739
- batch.push(child);
740
- if (batch.length >= WARMUP_BATCH_SIZE)
741
- break;
742
- }
743
- if (batch.length === 0)
744
- return;
745
- for (const element of batch) {
746
- element.style.contentVisibility = 'visible';
747
- }
748
- requestAnimationFrame(() => {
749
- // Back to the stylesheet's `auto`; the rendered pass left a
750
- // remembered intrinsic size behind.
751
- for (const element of batch) {
752
- element.style.contentVisibility = '';
753
- }
754
- this.scheduleWarmup();
755
- });
756
- }
757
- cancelWarmup() {
758
- if (this.warmupHandle === null)
759
- return;
760
- if (this.warmupUsesIdleCallback &&
761
- typeof cancelIdleCallback === 'function') {
762
- cancelIdleCallback(this.warmupHandle);
763
- }
764
- else {
765
- clearTimeout(this.warmupHandle);
766
- }
767
- this.warmupHandle = null;
768
- }
769
764
  // MARK: - Helpers
770
765
  flushPendingScrollToMessage() {
771
766
  const pending = this.pendingScrollToMessage;
@@ -805,6 +800,9 @@ export class MessageScrollerController {
805
800
  function maxScrollTop(viewport) {
806
801
  return Math.max(0, viewport.scrollHeight - viewport.clientHeight);
807
802
  }
803
+ function distanceFromBottom(viewport) {
804
+ return Math.max(0, maxScrollTop(viewport) - viewport.scrollTop);
805
+ }
808
806
  function elementViewportTop(element, viewport) {
809
807
  return (element.getBoundingClientRect().top - viewport.getBoundingClientRect().top);
810
808
  }
@@ -878,6 +876,23 @@ function countTurnAnchorsAt(children, startIndex) {
878
876
  }
879
877
  return count;
880
878
  }
879
+ /**
880
+ * Returns how far the first retained row moved toward the end of the list.
881
+ * Looking beyond the former first child matters when a synthetic row (for
882
+ * example, the compaction divider) is replaced while older messages are
883
+ * inserted above the stable transcript rows.
884
+ */
885
+ function firstRetainedItemShift(previous, current) {
886
+ if (previous.length === 0 || current.length === 0)
887
+ return 0;
888
+ const currentIndexes = new Map(current.map((element, index) => [element, index]));
889
+ for (const [previousIndex, element] of previous.entries()) {
890
+ const currentIndex = currentIndexes.get(element);
891
+ if (currentIndex !== undefined)
892
+ return currentIndex - previousIndex;
893
+ }
894
+ return 0;
895
+ }
881
896
  function readRowGap(element) {
882
897
  if (!element || typeof getComputedStyle !== 'function')
883
898
  return 0;
@@ -37,6 +37,8 @@ type MessageScrollerButtonProps = Omit<React.ComponentProps<'button'>, 'children
37
37
  };
38
38
  declare function MessageScrollerButton({ behavior, children, className, direction, onClick, render, tabIndex, type, ...props }: MessageScrollerButtonProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
39
39
  declare function useMessageScroller(): {
40
+ beginHistoryLoad: () => void;
41
+ finishHistoryLoad: (changed: boolean) => void;
40
42
  scrollToEnd: (options?: MessageScrollerScrollOptions) => boolean;
41
43
  scrollToMessage: (messageId: string, options?: MessageScrollerScrollOptions) => boolean;
42
44
  scrollToStart: (options?: MessageScrollerScrollOptions) => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"message-scroller-primitive.d.ts","sourceRoot":"","sources":["../../../src/components/ui/message-scroller-primitive.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-scroller-primitive.d.ts","sourceRoot":"","sources":["../../../src/components/ui/message-scroller-primitive.tsx"],"names":[],"mappings":"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"}
@@ -199,6 +199,8 @@ function MessageScrollerButton({ behavior = 'smooth', children, className, direc
199
199
  function useMessageScroller() {
200
200
  const controller = useController();
201
201
  return React.useMemo(() => ({
202
+ beginHistoryLoad: controller.beginHistoryLoad,
203
+ finishHistoryLoad: controller.finishHistoryLoad,
202
204
  scrollToEnd: controller.scrollToEnd,
203
205
  scrollToMessage: controller.scrollToMessage,
204
206
  scrollToStart: controller.scrollToStart,
@@ -1 +1 @@
1
- {"version":3,"file":"message-scroller.d.ts","sourceRoot":"","sources":["../../../src/components/ui/message-scroller.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EACL,eAAe,IAAI,wBAAwB,EAC3C,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,8BAA8B,CAAA;AAErC,iBAAS,uBAAuB,CAC9B,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,QAAQ,CAAC,2CAGtE;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,IAAI,CAAC,2CAW5D;AAED,iBAAS,uBAAuB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,QAAQ,CAAC,2CAWhE;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,OAAO,CAAC,2CAQ/D;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,YAAoB,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,IAAI,CAAC,2CAY5D;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAiB,EACjB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAqB,EACrB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,MAAM,CAAC,GAC7D,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,2CAyB9D;AAED,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,GAC7B,CAAA"}
1
+ {"version":3,"file":"message-scroller.d.ts","sourceRoot":"","sources":["../../../src/components/ui/message-scroller.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EACL,eAAe,IAAI,wBAAwB,EAC3C,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,8BAA8B,CAAA;AAErC,iBAAS,uBAAuB,CAC9B,KAAK,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,QAAQ,CAAC,2CAGtE;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,IAAI,CAAC,2CAW5D;AAED,iBAAS,uBAAuB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,QAAQ,CAAC,2CAWhE;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,OAAO,CAAC,2CAQ/D;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,YAAoB,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,IAAI,CAAC,2CAS5D;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAiB,EACjB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,OAAqB,EACrB,IAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,wBAAwB,CAAC,MAAM,CAAC,GAC7D,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,2CAyB9D;AAED,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,GAC7B,CAAA"}
@@ -11,13 +11,13 @@ function MessageScroller({ className, ...props }) {
11
11
  return (_jsx(MessageScrollerPrimitive.Root, { "data-slot": "message-scroller", className: cn('group/message-scroller relative flex size-full min-h-0 flex-col overflow-hidden', className), ...props }));
12
12
  }
13
13
  function MessageScrollerViewport({ className, ...props }) {
14
- return (_jsx(MessageScrollerPrimitive.Viewport, { "data-slot": "message-scroller-viewport", className: cn('message-scroller-viewport size-full min-h-0 min-w-0 overflow-y-auto overscroll-contain [contain:content] [scrollbar-gutter:stable]', className), ...props }));
14
+ return (_jsx(MessageScrollerPrimitive.Viewport, { "data-slot": "message-scroller-viewport", className: cn('message-scroller-viewport size-full min-h-0 min-w-0 overflow-y-auto overscroll-none [contain:content] [scrollbar-gutter:stable]', className), ...props }));
15
15
  }
16
16
  function MessageScrollerContent({ className, ...props }) {
17
17
  return (_jsx(MessageScrollerPrimitive.Content, { "data-slot": "message-scroller-content", className: cn('flex h-max min-h-full flex-col', className), ...props }));
18
18
  }
19
19
  function MessageScrollerItem({ className, scrollAnchor = false, ...props }) {
20
- return (_jsx(MessageScrollerPrimitive.Item, { "data-slot": "message-scroller-item", scrollAnchor: scrollAnchor, className: cn('min-w-0 shrink-0 [contain-intrinsic-size:auto_10rem] [content-visibility:auto]', className), ...props }));
20
+ return (_jsx(MessageScrollerPrimitive.Item, { "data-slot": "message-scroller-item", scrollAnchor: scrollAnchor, className: cn('min-w-0 shrink-0', className), ...props }));
21
21
  }
22
22
  function MessageScrollerButton({ direction = 'end', className, children, render, variant = 'secondary', size = 'icon-sm', ...props }) {
23
23
  return (_jsx(MessageScrollerPrimitive.Button, { "data-slot": "message-scroller-button", "data-direction": direction, "data-variant": variant, "data-size": size, direction: direction, className: cn('border-border bg-background text-foreground hover:bg-muted hover:text-foreground absolute left-1/2 -translate-x-1/2 cursor-pointer transition-[translate,scale,opacity] duration-200 data-[active=false]:pointer-events-none data-[direction=end]:bottom-4 data-[direction=start]:top-4 data-[active=true]:translate-y-0 data-[direction=end]:data-[active=false]:translate-y-full data-[direction=start]:data-[active=false]:-translate-y-full data-[active=false]:scale-95 data-[active=true]:scale-100 data-[active=false]:opacity-0 data-[active=true]:opacity-100 data-[direction=start]:[&_svg]:rotate-180', className), render: render ?? _jsx(Button, { variant: variant, size: size }), ...props, children: children ?? (_jsxs(_Fragment, { children: [_jsx(ArrowDown, {}), _jsx("span", { className: "sr-only", children: direction === 'end' ? 'Scroll to end' : 'Scroll to start' })] })) }));
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  declare const numberInputVariants: (props?: ({
4
4
  variant?: "default" | "filled" | null | undefined;
5
- size?: "default" | "sm" | "lg" | null | undefined;
5
+ size?: "sm" | "default" | "lg" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  export interface NumberInputProps extends Omit<React.ComponentProps<'input'>, 'defaultValue' | 'onChange' | 'size' | 'type' | 'value'>, VariantProps<typeof numberInputVariants> {
8
8
  value?: number | null;
@@ -16,7 +16,7 @@ function PopoverClose({ ...props }) {
16
16
  return _jsx(PopoverPrimitive.Close, { "data-slot": "popover-close", ...props });
17
17
  }
18
18
  function PopoverContent({ className, align = 'center', material = 'regular', sideOffset = 4, size = 'default', ...props }) {
19
- return (_jsx(PopoverPortal, { children: _jsx(Material, { variant: material, elevation: "overlay", asChild: true, children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", "data-size": size, align: align, sideOffset: sideOffset, className: cn('text-popover-foreground outline-hidden z-50 max-h-[var(--radix-popover-content-available-height)] max-w-[var(--radix-popover-content-available-width)] overflow-y-auto overscroll-contain p-[var(--density-pane-padding)]', 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', 'origin-(--radix-popover-content-transform-origin) duration-[var(--motion-duration-normal)]', 'data-[size=content]:w-fit data-[size=default]:w-72 data-[size=lg]:w-96 data-[size=sm]:w-56', className), ...props }) }) }));
19
+ return (_jsx(PopoverPortal, { children: _jsx(Material, { variant: material, elevation: "overlay", asChild: true, children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", "data-size": size, align: align, sideOffset: sideOffset, className: cn('moldable-popover text-popover-foreground outline-hidden z-50 max-h-[var(--radix-popover-content-available-height)] max-w-[var(--radix-popover-content-available-width)] overflow-y-auto overscroll-contain p-[var(--density-pane-padding)]', 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95', 'data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', 'origin-(--radix-popover-content-transform-origin) duration-[var(--motion-duration-normal)]', 'data-[size=content]:w-fit data-[size=default]:w-72 data-[size=lg]:w-96 data-[size=sm]:w-56', className), ...props }) }) }));
20
20
  }
21
21
  function PopoverAnchor({ ...props }) {
22
22
  return _jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
@@ -3,7 +3,7 @@ import type { ControlSize } from '../../tokens/contracts.js';
3
3
  import { type VariantProps } from 'class-variance-authority';
4
4
  declare const searchFieldVariants: (props?: ({
5
5
  variant?: "default" | "filled" | null | undefined;
6
- density?: "compact" | "default" | "comfortable" | null | undefined;
6
+ density?: "default" | "compact" | "comfortable" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
8
  interface SearchFieldProps extends Omit<React.ComponentProps<'input'>, 'defaultValue' | 'size' | 'type' | 'value'>, VariantProps<typeof searchFieldVariants> {
9
9
  controlSize?: ControlSize;
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import type { UISidebarStyle } from '../../tokens/contracts.js';
3
3
  import { Button } from './button.js';
4
4
  import { Input } from './input.js';
5
+ import type { MaterialVariant } from './material.js';
5
6
  import { Separator } from './separator.js';
6
7
  import { TooltipContent } from './tooltip.js';
7
8
  import { type VariantProps } from 'class-variance-authority';
@@ -20,10 +21,11 @@ declare function SidebarProvider({ defaultOpen, open: openProp, onOpenChange: se
20
21
  open?: boolean;
21
22
  onOpenChange?: (open: boolean) => void;
22
23
  }): import("react/jsx-runtime").JSX.Element;
23
- declare function Sidebar({ side, variant, sidebarStyle, collapsible, className, children, ref, ...props }: React.ComponentProps<'div'> & {
24
+ declare function Sidebar({ side, variant, sidebarStyle, material, collapsible, className, children, ref, ...props }: React.ComponentProps<'div'> & {
24
25
  side?: 'left' | 'right';
25
26
  variant?: 'sidebar' | 'floating' | 'inset';
26
27
  sidebarStyle?: UISidebarStyle;
28
+ material?: MaterialVariant;
27
29
  collapsible?: 'offcanvas' | 'icon' | 'none';
28
30
  }): import("react/jsx-runtime").JSX.Element;
29
31
  declare function SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>): import("react/jsx-runtime").JSX.Element;
@@ -33,7 +35,9 @@ declare function SidebarInput({ className, ...props }: React.ComponentProps<type
33
35
  declare function SidebarHeader({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
34
36
  declare function SidebarFooter({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
35
37
  declare function SidebarSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): import("react/jsx-runtime").JSX.Element;
36
- declare function SidebarContent({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
38
+ declare function SidebarContent({ className, edgeFade, ...props }: React.ComponentProps<'div'> & {
39
+ edgeFade?: boolean;
40
+ }): import("react/jsx-runtime").JSX.Element;
37
41
  declare function SidebarGroup({ className, ...props }: React.ComponentProps<'div'>): import("react/jsx-runtime").JSX.Element;
38
42
  declare function SidebarGroupLabel({ className, asChild, style, ...props }: React.ComponentProps<'div'> & {
39
43
  asChild?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sidebar.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAK9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AASvC,OAAO,EAEL,cAAc,EAGf,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,KAAK,YAAY,EAAO,MAAM,0BAA0B,CAAA;AAkHjE,KAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,UAAU,GAAG,WAAW,CAAA;IAC/B,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAChC,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC,QAAQ,EAAE,OAAO,CAAA;IACjB,aAAa,EAAE,MAAM,IAAI,CAAA;CAC1B,CAAA;AAID,iBAAS,UAAU,wBAOlB;AAED,iBAAS,eAAe,CAAC,EACvB,WAAkB,EAClB,IAAI,EAAE,QAAQ,EACd,YAAY,EAAE,WAAW,EACzB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;CACvC,2CAoFA;AAED,iBAAS,OAAO,CAAC,EACf,IAAa,EACb,OAAmB,EACnB,YAAY,EACZ,WAAyB,EACzB,SAAS,EACT,QAAQ,EACR,GAAG,EACH,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;IAC1C,YAAY,CAAC,EAAE,cAAc,CAAA;IAC7B,WAAW,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAAA;CAC5C,2CAyIA;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,2CAoBrC;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,2CAuB3E;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAY1E;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,2CASpC;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAS1E;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAS1E;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,2CASxC;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAY3E;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CASzE;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,OAAe,EACf,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,2CAqBrD;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,2CAiBxD;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAS7B;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,2CASvE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,2CAS3E;AAED,QAAA,MAAM,yBAAyB;;;8EAoB9B,CAAA;AAED,iBAAS,iBAAiB,CAAC,EACzB,OAAe,EACf,QAAgB,EAChB,OAAmB,EACnB,IAAgB,EAChB,OAAO,EACP,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,CAAA;CAC/D,GAAG,YAAY,CAAC,OAAO,yBAAyB,CAAC,2CAoDjD;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,OAAe,EACf,WAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAClC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,2CAsBA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAiB7B;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,2CAiCA;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,2CAa1E;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,2CAS5B;AAED,iBAAS,oBAAoB,CAAC,EAC5B,OAAe,EACf,IAAW,EACX,QAAgB,EAChB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,2CAoBA;AAED,OAAO,EACL,OAAO,EACP,cAAc,EACd,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,UAAU,GACX,CAAA"}
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ import { cn } from '../../lib/utils.js';
9
9
  import { useIsMobile } from '../../hooks/use-mobile.js';
10
10
  import { useAppFrameRuntime } from './app-frame.js';
11
11
  import { Button } from './button.js';
12
+ import { EdgeFade } from './edge-fade.js';
12
13
  import { Input } from './input.js';
13
14
  import { Separator } from './separator.js';
14
15
  import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, } from './sheet.js';
@@ -160,7 +161,7 @@ function SidebarProvider({ defaultOpen = true, open: openProp, onOpenChange: set
160
161
  ...style,
161
162
  }, className: cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', className), ...props, children: children }) }) }));
162
163
  }
163
- function Sidebar({ side = 'left', variant = 'sidebar', sidebarStyle, collapsible = 'offcanvas', className, children, ref, ...props }) {
164
+ function Sidebar({ side = 'left', variant = 'sidebar', sidebarStyle, material, collapsible = 'offcanvas', className, children, ref, ...props }) {
164
165
  const theme = useOptionalTheme();
165
166
  const resolvedSidebarStyle = sidebarStyle ?? theme?.sidebarStyle ?? 'edge-to-edge';
166
167
  const resolvedVariant = resolvedSidebarStyle === 'floating'
@@ -176,9 +177,16 @@ function Sidebar({ side = 'left', variant = 'sidebar', sidebarStyle, collapsible
176
177
  !(state === 'collapsed' && collapsible === 'offcanvas'),
177
178
  forwardedRef: ref,
178
179
  });
180
+ const usesWebMaterial = resolvedVariant === 'floating' &&
181
+ material !== undefined &&
182
+ !materialRegion.active;
179
183
  if (collapsible === 'none') {
180
- return (_jsx("div", { ref: materialRegion.setElement, "data-slot": "sidebar", "data-ui-sidebar-style": resolvedSidebarStyle, "data-material-region-id": materialRegion.regionId, "data-native-material": materialRegion.active ? 'sidebar' : undefined, className: cn(materialRegion.active ? 'bg-transparent' : 'bg-sidebar', 'text-sidebar-foreground w-(--sidebar-width) flex flex-col self-stretch', resolvedVariant === 'floating' &&
181
- 'border-[length:var(--m-ui-sidebar-border-width,0px)] [border-color:var(--m-ui-sidebar-border-color,var(--sidebar-border))]', className), ...props, children: children }));
184
+ return (_jsx("div", { ref: materialRegion.setElement, "data-slot": "sidebar", "data-ui-sidebar-style": resolvedSidebarStyle, "data-material": usesWebMaterial ? material : undefined, "data-material-region-id": materialRegion.regionId, "data-native-material": materialRegion.active ? 'sidebar' : undefined, className: cn(usesWebMaterial
185
+ ? 'moldable-material'
186
+ : materialRegion.active
187
+ ? 'bg-transparent'
188
+ : 'bg-sidebar', 'text-sidebar-foreground w-(--sidebar-width) flex flex-col self-stretch', resolvedVariant === 'floating' &&
189
+ 'overflow-hidden border-[length:var(--m-ui-sidebar-border-width,0px)] [border-color:var(--m-ui-sidebar-border-color,var(--sidebar-border))]', className), ...props, children: children }));
182
190
  }
183
191
  if (isMobile) {
184
192
  return (_jsx(Sheet, { open: openMobile, onOpenChange: setOpenMobile, ...props, children: _jsxs(SheetContent, { "data-sidebar": "sidebar", "data-slot": "sidebar", "data-ui-sidebar-style": resolvedSidebarStyle, "data-mobile": "true", className: "bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden", style: {
@@ -193,14 +201,22 @@ function Sidebar({ side = 'left', variant = 'sidebar', sidebarStyle, collapsible
193
201
  // Adjust the padding for floating and inset variants.
194
202
  resolvedVariant === 'floating' || resolvedVariant === 'inset'
195
203
  ? 'p-[var(--m-ui-sidebar-window-inset,0.5rem)] group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'
196
- : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) [border-color:var(--m-ui-sidebar-divider-color,var(--sidebar-border))] group-data-[side=left]:border-r-[length:var(--m-ui-sidebar-divider-width,1px)] group-data-[side=right]:border-l-[length:var(--m-ui-sidebar-divider-width,1px)]', className), ...props, children: _jsx("div", { "data-sidebar": "sidebar", "data-slot": "sidebar-inner", className: cn(materialRegion.active ? 'bg-transparent' : 'bg-sidebar', 'flex h-full w-full flex-col'), style: resolvedVariant === 'floating'
204
+ : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) [border-color:var(--m-ui-sidebar-divider-color,var(--sidebar-border))] group-data-[side=left]:border-r-[length:var(--m-ui-sidebar-divider-width,1px)] group-data-[side=right]:border-l-[length:var(--m-ui-sidebar-divider-width,1px)]', className), ...props, children: _jsx("div", { "data-sidebar": "sidebar", "data-slot": "sidebar-inner", "data-material": usesWebMaterial ? material : undefined, className: cn(usesWebMaterial
205
+ ? 'moldable-material'
206
+ : materialRegion.active
207
+ ? 'bg-transparent'
208
+ : 'bg-sidebar', 'flex h-full w-full flex-col', resolvedVariant === 'floating' && 'overflow-hidden'), style: resolvedVariant === 'floating'
197
209
  ? {
198
210
  borderRadius: 'var(--m-ui-sidebar-shell-radius, var(--shape-container))',
199
211
  borderStyle: 'solid',
200
212
  borderWidth: 'var(--m-ui-sidebar-border-width, 0px)',
201
213
  borderColor: 'var(--m-ui-sidebar-border-color, var(--sidebar-border))',
202
214
  boxShadow: 'var(--m-ui-sidebar-shadow, var(--material-shadow-sidebar))',
203
- backdropFilter: 'blur(var(--m-ui-sidebar-glass-effect-radius, 0px))',
215
+ ...(usesWebMaterial
216
+ ? {}
217
+ : {
218
+ backdropFilter: 'blur(var(--m-ui-sidebar-glass-effect-radius, 0px))',
219
+ }),
204
220
  }
205
221
  : undefined, children: children }) })] }));
206
222
  }
@@ -230,8 +246,11 @@ function SidebarFooter({ className, ...props }) {
230
246
  function SidebarSeparator({ className, ...props }) {
231
247
  return (_jsx(Separator, { "data-slot": "sidebar-separator", "data-sidebar": "separator", className: cn('bg-sidebar-border mx-2 w-auto', className), ...props }));
232
248
  }
233
- function SidebarContent({ className, ...props }) {
234
- return (_jsx("div", { "data-slot": "sidebar-content", "data-sidebar": "content", className: cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className), ...props }));
249
+ function SidebarContent({ className, edgeFade = false, ...props }) {
250
+ const content = (_jsx("div", { "data-slot": "sidebar-content", "data-sidebar": "content", className: cn('flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden', className), ...props }));
251
+ if (!edgeFade)
252
+ return content;
253
+ return (_jsxs("div", { "data-slot": "sidebar-content-frame", className: "relative flex min-h-0 flex-1 flex-col overflow-hidden", children: [content, _jsx(EdgeFade, { edge: "top", className: "from-sidebar" }), _jsx(EdgeFade, { edge: "bottom", className: "from-sidebar" })] }));
235
254
  }
236
255
  function SidebarGroup({ className, ...props }) {
237
256
  return (_jsx("div", { "data-slot": "sidebar-group", "data-sidebar": "group", className: cn('relative flex w-full min-w-0 flex-col p-2', className), ...props }));
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
  import type { MenuItems } from '../../lib/host-native-menu.js';
3
3
  import { Button } from './button.js';
4
4
  import { type IconButtonProps, type IconButtonSize } from './icon-button.js';
5
+ import { type MaterialVariant } from './material.js';
5
6
  import { Separator } from './separator.js';
6
7
  type ToolbarControlAppearance = 'chrome' | 'quiet';
7
8
  type ToolbarControlSize = 'medium' | 'xl';
@@ -11,8 +12,14 @@ export interface ToolbarButtonProps extends React.ComponentProps<typeof Button>
11
12
  * inside a ToolbarControlGroup, which owns the shared surface.
12
13
  */
13
14
  appearance?: ToolbarControlAppearance;
15
+ /**
16
+ * Adaptive material thickness for standalone chrome. Defaults to `thick`
17
+ * for prominent actions, `regular` for standard actions, and `none` inside
18
+ * a shared control group or when `appearance="quiet"`.
19
+ */
20
+ material?: MaterialVariant | 'none';
14
21
  }
15
- declare function ToolbarButton({ appearance, className, size, variant, ...props }: ToolbarButtonProps): import("react/jsx-runtime").JSX.Element;
22
+ declare function ToolbarButton({ appearance, className, material, size, variant, ...props }: ToolbarButtonProps): import("react/jsx-runtime").JSX.Element;
16
23
  export interface ToolbarIconButtonProps extends Omit<IconButtonProps, 'size'> {
17
24
  appearance?: ToolbarControlAppearance;
18
25
  size?: IconButtonSize;
@@ -38,9 +45,10 @@ declare function ToolbarSidebarToggle({ expanded, hideLabel, onExpandedChange, s
38
45
  export interface ToolbarOverflowMenuProps extends Omit<ToolbarIconButtonProps, 'children' | 'label' | 'onClick'> {
39
46
  items: MenuItems[];
40
47
  label?: string;
48
+ nativeMenu?: boolean;
41
49
  onSelectItem?: (id: string) => void;
42
50
  }
43
- declare function ToolbarOverflowMenu({ items, label, onSelectItem, tooltip, ...props }: ToolbarOverflowMenuProps): import("react/jsx-runtime").JSX.Element;
51
+ declare function ToolbarOverflowMenu({ items, label, nativeMenu, onSelectItem, tooltip, ...props }: ToolbarOverflowMenuProps): import("react/jsx-runtime").JSX.Element;
44
52
  export interface ToolbarTitleFieldProps extends Omit<React.ComponentProps<'input'>, 'size'> {
45
53
  label?: string;
46
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"toolbar-controls.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toolbar-controls.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEjC,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,KAAK,wBAAwB,GAAG,QAAQ,GAAG,OAAO,CAAA;AAClD,KAAK,kBAAkB,GAAG,QAAQ,GAAG,IAAI,CAAA;AAUzC,MAAM,WAAW,kBACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC;IAC3C;;;OAGG;IACH,UAAU,CAAC,EAAE,wBAAwB,CAAA;CACtC;AAED,iBAAS,aAAa,CAAC,EACrB,UAAqB,EACrB,SAAS,EACT,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,kBAAkB,2CAwBpB;AAED,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;IAC3E,UAAU,CAAC,EAAE,wBAAwB,CAAA;IACrC,IAAI,CAAC,EAAE,cAAc,CAAA;CACtB;AAED,iBAAS,iBAAiB,CAAC,EACzB,UAAqB,EACrB,SAAS,EACT,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAgBxB;AAED,MAAM,WAAW,wBAAyB,SAAQ,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;IAC3E,UAAU,CAAC,EAAE,wBAAwB,CAAA;IACrC,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAC1B;AAED,iBAAS,mBAAmB,CAAC,EAC3B,UAAqB,EACrB,SAAS,EACT,IAAW,EACX,GAAG,KAAK,EACT,EAAE,wBAAwB,2CAuB1B;AAED,iBAAS,uBAAuB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,2CAexC;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,OAAO,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,iBAAS,iBAAiB,CAAC,EACzB,KAAc,EACd,OAAc,EACd,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAMxB;AAED,MAAM,WAAW,yBACf,SAAQ,IAAI,CACV,sBAAsB,EACtB,cAAc,GAAG,UAAU,GAAG,OAAO,GAAG,SAAS,CAClD;IACD,QAAQ,EAAE,OAAO,CAAA;IACjB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAA;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,iBAAS,oBAAoB,CAAC,EAC5B,QAAQ,EACR,SAA0B,EAC1B,gBAAgB,EAChB,SAA0B,EAC1B,OAAc,EACd,GAAG,KAAK,EACT,EAAE,yBAAyB,2CAe3B;AAED,MAAM,WAAW,wBACf,SAAQ,IAAI,CAAC,sBAAsB,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS,CAAC;IACtE,KAAK,EAAE,SAAS,EAAE,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,iBAAS,mBAAmB,CAAC,EAC3B,KAAK,EACL,KAAsB,EACtB,YAAY,EACZ,OAAc,EACd,GAAG,KAAK,EACT,EAAE,wBAAwB,2CAU1B;AAED,MAAM,WAAW,sBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,iBAAS,iBAAiB,CAAC,EACzB,YAAY,EAAE,SAAS,EACvB,SAAS,EACT,KAAwB,EACxB,IAAa,EACb,GAAG,KAAK,EACT,EAAE,sBAAsB,2CAaxB;AAED,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,GAClB,CAAA"}
1
+ {"version":3,"file":"toolbar-controls.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toolbar-controls.tsx"],"names":[],"mappings":"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"}