@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.
- package/dist/components/app-error-boundary.d.ts +1 -1
- package/dist/components/chat/chat-image-lightbox.d.ts +8 -0
- package/dist/components/chat/chat-image-lightbox.d.ts.map +1 -1
- package/dist/components/chat/chat-image-lightbox.js +24 -2
- package/dist/components/chat/chat-input.d.ts +3 -2
- package/dist/components/chat/chat-input.d.ts.map +1 -1
- package/dist/components/chat/chat-input.js +3 -3
- package/dist/components/chat/chat-message.d.ts.map +1 -1
- package/dist/components/chat/chat-message.js +3 -1
- package/dist/components/chat/chat-panel.d.ts +3 -1
- package/dist/components/chat/chat-panel.d.ts.map +1 -1
- package/dist/components/chat/chat-panel.js +53 -39
- package/dist/components/chat/conversation-history.d.ts +4 -2
- package/dist/components/chat/conversation-history.d.ts.map +1 -1
- package/dist/components/chat/conversation-history.js +20 -15
- package/dist/components/ui/alert.d.ts +1 -1
- package/dist/components/ui/button.d.ts +2 -2
- package/dist/components/ui/button.js +1 -1
- package/dist/components/ui/context-menu.d.ts.map +1 -1
- package/dist/components/ui/context-menu.js +1 -0
- package/dist/components/ui/date-field.d.ts +1 -1
- package/dist/components/ui/dropdown-menu.d.ts +1 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu.js +3 -2
- package/dist/components/ui/material.d.ts +1 -1
- package/dist/components/ui/material.d.ts.map +1 -1
- package/dist/components/ui/menu-items.d.ts +2 -1
- package/dist/components/ui/menu-items.d.ts.map +1 -1
- package/dist/components/ui/menu-items.js +3 -2
- package/dist/components/ui/message-scroller-controller.d.ts +15 -17
- package/dist/components/ui/message-scroller-controller.d.ts.map +1 -1
- package/dist/components/ui/message-scroller-controller.js +106 -91
- package/dist/components/ui/message-scroller-primitive.d.ts +2 -0
- package/dist/components/ui/message-scroller-primitive.d.ts.map +1 -1
- package/dist/components/ui/message-scroller-primitive.js +2 -0
- package/dist/components/ui/message-scroller.d.ts.map +1 -1
- package/dist/components/ui/message-scroller.js +2 -2
- package/dist/components/ui/number-input.d.ts +1 -1
- package/dist/components/ui/popover.js +1 -1
- package/dist/components/ui/search-field.d.ts +1 -1
- package/dist/components/ui/sidebar.d.ts +6 -2
- package/dist/components/ui/sidebar.d.ts.map +1 -1
- package/dist/components/ui/sidebar.js +26 -7
- package/dist/components/ui/toolbar-controls.d.ts +10 -2
- package/dist/components/ui/toolbar-controls.d.ts.map +1 -1
- package/dist/components/ui/toolbar-controls.js +25 -7
- package/package.json +1 -1
- package/src/components/ui/button.md +3 -2
- package/src/components/ui/dropdown-menu.md +16 -14
- package/src/components/ui/menu-items.md +2 -0
- package/src/components/ui/message-scroller.md +6 -3
- package/src/components/ui/sidebar.md +11 -5
- package/src/components/ui/toolbar-controls.md +11 -7
- package/src/styles/index.css +132 -1
- package/src/tokens/moldable/brand.css +124 -7
- 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
|
-
|
|
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
|
-
|
|
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
|
|
300
|
-
*
|
|
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
|
|
374
|
+
const previousItems = this.previousItems;
|
|
339
375
|
const previousCount = this.previousItemCount;
|
|
340
|
-
this.
|
|
376
|
+
this.previousItems = children;
|
|
341
377
|
this.previousItemCount = children.length;
|
|
342
|
-
this.
|
|
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
|
|
358
|
-
|
|
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.
|
|
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
|
-
|
|
628
|
+
restorePendingHistoryLoad(preferAnchor) {
|
|
587
629
|
const viewport = this.viewport;
|
|
588
|
-
|
|
589
|
-
|
|
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
|
|
594
|
-
const rect =
|
|
652
|
+
for (const element of this.itemChildren()) {
|
|
653
|
+
const rect = element.getBoundingClientRect();
|
|
595
654
|
if (rect.bottom > viewportRect.top && rect.top < viewportRect.bottom) {
|
|
596
|
-
|
|
597
|
-
element
|
|
655
|
+
return {
|
|
656
|
+
element,
|
|
598
657
|
top: rect.top - viewportRect.top,
|
|
599
658
|
};
|
|
600
|
-
return;
|
|
601
659
|
}
|
|
602
660
|
}
|
|
603
|
-
|
|
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,
|
|
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-
|
|
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
|
|
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?: "
|
|
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?: "
|
|
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'>
|
|
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;
|
|
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(
|
|
181
|
-
'
|
|
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",
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
|
1
|
+
{"version":3,"file":"toolbar-controls.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toolbar-controls.tsx"],"names":[],"mappings":"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"}
|