@cellarnode/ui 0.178.1 → 0.180.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.
- package/dist/brand/brand-field-provenance.js +3 -3
- package/dist/brand/brand-field-provenance.js.map +1 -1
- package/dist/brand/brand-generation-context-form.js +2 -2
- package/dist/brand/brand-generation-recovery.js +2 -2
- package/dist/brand/brand-generation-recovery.js.map +1 -1
- package/dist/brand/brand-image-asset-slot-card.js +1 -1
- package/dist/brand/brand-image-chooser.js +1 -1
- package/dist/brand/brand-image-source-picker.js +1 -1
- package/dist/brand/brand-profile-form-lists.js +2 -2
- package/dist/brand/brand-profile-form-people.js +2 -2
- package/dist/brand/brand-profile-review-media.js +1 -1
- package/dist/brand/brand-profile-review-visibility.d.ts.map +1 -1
- package/dist/brand/brand-profile-review-visibility.js +6 -4
- package/dist/brand/brand-profile-review-visibility.js.map +1 -1
- package/dist/brand/brand-profile-workspace-copy.d.ts +14 -0
- package/dist/brand/brand-profile-workspace-copy.d.ts.map +1 -1
- package/dist/brand/brand-profile-workspace-copy.js +4 -0
- package/dist/brand/brand-profile-workspace-copy.js.map +1 -1
- package/dist/brand/brand-profile-workspace-parts.d.ts +22 -2
- package/dist/brand/brand-profile-workspace-parts.d.ts.map +1 -1
- package/dist/brand/brand-profile-workspace-parts.js +6 -7
- package/dist/brand/brand-profile-workspace-parts.js.map +1 -1
- package/dist/brand/brand-profile-workspace.d.ts +5 -1
- package/dist/brand/brand-profile-workspace.d.ts.map +1 -1
- package/dist/brand/brand-profile-workspace.js +8 -3
- package/dist/brand/brand-profile-workspace.js.map +1 -1
- package/dist/brand/brand-provenance-summary.js +1 -1
- package/dist/brand/brand-summary-card.js +1 -1
- package/dist/brand/brand-summary-card.js.map +1 -1
- package/dist/brand/index.d.ts +1 -0
- package/dist/brand/index.d.ts.map +1 -1
- package/dist/brand/index.js +1 -0
- package/dist/brand/index.js.map +1 -1
- package/dist/brand/public-visibility-toggle.d.ts +33 -0
- package/dist/brand/public-visibility-toggle.d.ts.map +1 -0
- package/dist/brand/public-visibility-toggle.js +23 -0
- package/dist/brand/public-visibility-toggle.js.map +1 -0
- package/dist/chat/chat-composer.d.ts +3 -1
- package/dist/chat/chat-composer.d.ts.map +1 -1
- package/dist/chat/chat-composer.js +3 -3
- package/dist/chat/chat-composer.js.map +1 -1
- package/dist/chat/chat-surface.d.ts +23 -2
- package/dist/chat/chat-surface.d.ts.map +1 -1
- package/dist/chat/chat-surface.js +77 -41
- package/dist/chat/chat-surface.js.map +1 -1
- package/dist/chat/index.d.ts +2 -0
- package/dist/chat/index.d.ts.map +1 -1
- package/dist/chat/index.js +1 -0
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/messenger-layout.js +2 -2
- package/dist/chat/messenger-layout.js.map +1 -1
- package/dist/chat/messenger-screen/room-panel.d.ts +24 -0
- package/dist/chat/messenger-screen/room-panel.d.ts.map +1 -1
- package/dist/chat/messenger-screen/room-panel.js +175 -21
- package/dist/chat/messenger-screen/room-panel.js.map +1 -1
- package/dist/chat/messenger-screen/types.d.ts +2 -0
- package/dist/chat/messenger-screen/types.d.ts.map +1 -1
- package/dist/chat/use-stick-to-bottom.d.ts +45 -0
- package/dist/chat/use-stick-to-bottom.d.ts.map +1 -0
- package/dist/chat/use-stick-to-bottom.js +191 -0
- package/dist/chat/use-stick-to-bottom.js.map +1 -0
- package/dist/chat-ably/use-presence.d.ts +13 -0
- package/dist/chat-ably/use-presence.d.ts.map +1 -1
- package/dist/chat-ably/use-presence.js +35 -0
- package/dist/chat-ably/use-presence.js.map +1 -1
- package/dist/components/access-model-select.d.ts.map +1 -1
- package/dist/components/access-model-select.js +2 -1
- package/dist/components/access-model-select.js.map +1 -1
- package/dist/components/accordion.js +1 -1
- package/dist/components/animated-select.js +1 -1
- package/dist/components/animated-select.js.map +1 -1
- package/dist/components/animated-shadcn-select.d.ts +2 -2
- package/dist/components/animated-shadcn-select.d.ts.map +1 -1
- package/dist/components/animated-shadcn-select.js +16 -3
- package/dist/components/animated-shadcn-select.js.map +1 -1
- package/dist/components/avatar-stack.js +3 -3
- package/dist/components/avatar-stack.js.map +1 -1
- package/dist/components/avatar.js +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/bottle-extract-dialog.js +2 -2
- package/dist/components/bottle-extract-dialog.js.map +1 -1
- package/dist/components/bottle-extraction-inline-progress.js +1 -1
- package/dist/components/bottle-extraction-inline-progress.js.map +1 -1
- package/dist/components/card-actions-trigger.js +1 -1
- package/dist/components/card-actions-trigger.js.map +1 -1
- package/dist/components/certification-upload-card.d.ts +23 -2
- package/dist/components/certification-upload-card.d.ts.map +1 -1
- package/dist/components/certification-upload-card.js +103 -8
- package/dist/components/certification-upload-card.js.map +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/closure-select.d.ts.map +1 -1
- package/dist/components/closure-select.js +2 -1
- package/dist/components/closure-select.js.map +1 -1
- package/dist/components/colour-picker-field.js +1 -1
- package/dist/components/colour-picker-field.js.map +1 -1
- package/dist/components/composition-editor.js +1 -1
- package/dist/components/composition-editor.js.map +1 -1
- package/dist/components/confirmation/beverage-comparison-modal.js +1 -1
- package/dist/components/confirmation/beverage-comparison-modal.js.map +1 -1
- package/dist/components/confirmation/confirmation-card.js +2 -2
- package/dist/components/confirmation/confirmation-card.js.map +1 -1
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.js +5 -5
- package/dist/components/confirmation/cross-portfolio-nudge-sheet.js.map +1 -1
- package/dist/components/corner-style-picker.js +1 -1
- package/dist/components/corner-style-picker.js.map +1 -1
- package/dist/components/country-code-multi-select.d.ts.map +1 -1
- package/dist/components/country-code-multi-select.js +2 -1
- package/dist/components/country-code-multi-select.js.map +1 -1
- package/dist/components/country-code-select.d.ts.map +1 -1
- package/dist/components/country-code-select.js +4 -2
- package/dist/components/country-code-select.js.map +1 -1
- package/dist/components/currency-select.d.ts.map +1 -1
- package/dist/components/currency-select.js +2 -1
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/delivery-terms-select.d.ts.map +1 -1
- package/dist/components/delivery-terms-select.js +2 -1
- package/dist/components/delivery-terms-select.js.map +1 -1
- package/dist/components/enterprise-type-select.d.ts.map +1 -1
- package/dist/components/enterprise-type-select.js +2 -1
- package/dist/components/enterprise-type-select.js.map +1 -1
- package/dist/components/inset-drawer.js +1 -1
- package/dist/components/inset-drawer.js.map +1 -1
- package/dist/components/link.d.ts +1 -1
- package/dist/components/link.d.ts.map +1 -1
- package/dist/components/link.js +3 -2
- package/dist/components/link.js.map +1 -1
- package/dist/components/offer-card.js +1 -1
- package/dist/components/offer-card.js.map +1 -1
- package/dist/components/packaging-select.d.ts.map +1 -1
- package/dist/components/packaging-select.js +2 -1
- package/dist/components/packaging-select.js.map +1 -1
- package/dist/components/picker-empty-guidance.js +1 -1
- package/dist/components/picker-empty-guidance.js.map +1 -1
- package/dist/components/preflight-verdict-sheet.js +2 -2
- package/dist/components/preflight-verdict-sheet.js.map +1 -1
- package/dist/components/price-range-picker.js +1 -1
- package/dist/components/price-range-picker.js.map +1 -1
- package/dist/components/procurement-channel-select.d.ts.map +1 -1
- package/dist/components/procurement-channel-select.js +2 -1
- package/dist/components/procurement-channel-select.js.map +1 -1
- package/dist/components/product-card.js +1 -1
- package/dist/components/product-card.js.map +1 -1
- package/dist/components/product-picker-drawer.js +4 -4
- package/dist/components/product-picker-drawer.js.map +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/radio.js.map +1 -1
- package/dist/components/region-select.d.ts.map +1 -1
- package/dist/components/region-select.js +2 -1
- package/dist/components/region-select.js.map +1 -1
- package/dist/components/scroll-area.js +1 -1
- package/dist/components/shadcn-badge.js +2 -2
- package/dist/components/shadcn-badge.js.map +1 -1
- package/dist/components/shadcn-button.d.ts.map +1 -1
- package/dist/components/shadcn-button.js +2 -2
- package/dist/components/shadcn-button.js.map +1 -1
- package/dist/components/shadcn-input.js +1 -1
- package/dist/components/shadcn-input.js.map +1 -1
- package/dist/components/shadcn-select.d.ts +1 -1
- package/dist/components/shadcn-select.d.ts.map +1 -1
- package/dist/components/shadcn-select.js +9 -2
- package/dist/components/shadcn-select.js.map +1 -1
- package/dist/components/shadcn-textarea.js +1 -1
- package/dist/components/shadcn-textarea.js.map +1 -1
- package/dist/components/source-composite.js +1 -1
- package/dist/components/source-composite.js.map +1 -1
- package/dist/components/source-drawer.js +1 -1
- package/dist/components/source-drawer.js.map +1 -1
- package/dist/components/supporting-pane-layout.d.ts +6 -1
- package/dist/components/supporting-pane-layout.d.ts.map +1 -1
- package/dist/components/supporting-pane-layout.js +65 -12
- package/dist/components/supporting-pane-layout.js.map +1 -1
- package/dist/components/switch.d.ts +12 -0
- package/dist/components/switch.d.ts.map +1 -1
- package/dist/components/switch.js +35 -19
- package/dist/components/switch.js.map +1 -1
- package/dist/components/table.js +1 -1
- package/dist/components/table.js.map +1 -1
- package/dist/components/tabs.js +1 -1
- package/dist/components/text.js +1 -1
- package/dist/components/text.js.map +1 -1
- package/dist/components/toast.js +1 -1
- package/dist/components/toast.js.map +1 -1
- package/dist/components/variant-picker-dialog.js +6 -6
- package/dist/components/variant-picker-dialog.js.map +1 -1
- package/dist/components/variant-picker-hero.js +1 -1
- package/dist/components/variant-picker-hero.js.map +1 -1
- package/dist/components/year-picker.js +1 -1
- package/dist/components/year-picker.js.map +1 -1
- package/dist/fic-label/ingredient-input.js +1 -1
- package/dist/fic-label/ingredient-input.js.map +1 -1
- package/dist/globe/globe-view.js +1 -1
- package/dist/globe/globe-view.js.map +1 -1
- package/dist/image-upload/focal-point-picker.js +1 -1
- package/dist/image-upload/focal-point-picker.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/insight-band/next-best-action-card.js +1 -1
- package/dist/insight-band/next-best-action-card.js.map +1 -1
- package/dist/lib/reveal-truncated-select-value.d.ts +8 -0
- package/dist/lib/reveal-truncated-select-value.d.ts.map +1 -0
- package/dist/lib/reveal-truncated-select-value.js +16 -0
- package/dist/lib/reveal-truncated-select-value.js.map +1 -0
- package/dist/marketing/pricing-table.js +1 -1
- package/dist/marketing/qr/qr-customizer-controls.js +1 -1
- package/dist/marketing/qr/qr-customizer-controls.js.map +1 -1
- package/dist/notifications/notification-tray.js +1 -1
- package/dist/notifications/notification-tray.js.map +1 -1
- package/dist/offer/attachments-card.js +1 -1
- package/dist/offer/attachments-card.js.map +1 -1
- package/dist/offer/index.d.ts +1 -1
- package/dist/offer/index.d.ts.map +1 -1
- package/dist/offer/index.js.map +1 -1
- package/dist/offer/negotiation-flow-timeline.js +1 -1
- package/dist/offer/negotiation-flow-timeline.js.map +1 -1
- package/dist/offer/negotiation-labels.d.ts +12 -0
- package/dist/offer/negotiation-labels.d.ts.map +1 -1
- package/dist/offer/negotiation-labels.js +17 -3
- package/dist/offer/negotiation-labels.js.map +1 -1
- package/dist/offer/offer-branch-shared.d.ts +1 -1
- package/dist/offer/offer-branch-shared.js +1 -1
- package/dist/offer/offer-evaluation-sections.js +1 -1
- package/dist/offer/offer-page.d.ts +62 -2
- package/dist/offer/offer-page.d.ts.map +1 -1
- package/dist/offer/offer-page.js +158 -14
- package/dist/offer/offer-page.js.map +1 -1
- package/dist/offer/parties-card.d.ts.map +1 -1
- package/dist/offer/parties-card.js +1 -1
- package/dist/offer/parties-card.js.map +1 -1
- package/dist/offer/reviews-summary.js +1 -1
- package/dist/offer/reviews-summary.js.map +1 -1
- package/dist/offer/sticky-scroll-padding.d.ts +4 -0
- package/dist/offer/sticky-scroll-padding.d.ts.map +1 -0
- package/dist/offer/sticky-scroll-padding.js +54 -0
- package/dist/offer/sticky-scroll-padding.js.map +1 -0
- package/dist/offer/timeline-event.d.ts.map +1 -1
- package/dist/offer/timeline-event.js +5 -3
- package/dist/offer/timeline-event.js.map +1 -1
- package/dist/opportunities/opportunity-detail-header.js +1 -1
- package/dist/opportunities/opportunity-detail-header.js.map +1 -1
- package/dist/opportunities/opportunity-detail-panel.js +1 -1
- package/dist/opportunities/opportunity-detail-panel.js.map +1 -1
- package/dist/opportunities/opportunity-filter-bar.js +1 -1
- package/dist/opportunities/opportunity-filter-bar.js.map +1 -1
- package/dist/opportunities/opportunity-stacked-card.js +2 -2
- package/dist/opportunities/opportunity-stacked-card.js.map +1 -1
- package/dist/opportunities/wizard/allowed-delivery-terms-section.js +1 -1
- package/dist/opportunities/wizard/allowed-delivery-terms-section.js.map +1 -1
- package/dist/opportunities/wizard/opportunity-wizard.js +2 -2
- package/dist/opportunities/wizard/opportunity-wizard.js.map +1 -1
- package/dist/opportunities/wizard/step-opportunities.js +14 -10
- package/dist/opportunities/wizard/step-opportunities.js.map +1 -1
- package/dist/opportunities/wizard/step-pricing-timeline.js +4 -4
- package/dist/opportunities/wizard/step-review.js +1 -1
- package/dist/opportunities/wizard/step-tender-basics.js +2 -2
- package/dist/opportunities/wizard/wizard-stepper.js +1 -1
- package/dist/opportunities/wizard/wizard-task-frame.js +1 -1
- package/dist/org/billing-address-source.js +2 -2
- package/dist/org/public-location-notice.js +2 -2
- package/dist/pdf-tool/live/pdf-label-layer.js +1 -1
- package/dist/pdf-tool/live/pdf-label-layer.js.map +1 -1
- package/dist/portfolio/portfolio-folder-card.js +1 -1
- package/dist/portfolio/portfolio-folder-card.js.map +1 -1
- package/dist/portfolio-import/beverage-comparison-modal.js +5 -5
- package/dist/portfolio-import/beverage-comparison-modal.js.map +1 -1
- package/dist/portfolio-import/bottle-photos-status.js +1 -1
- package/dist/portfolio-import/bottle-photos-status.js.map +1 -1
- package/dist/portfolio-import/import-job-detail-view.js +1 -1
- package/dist/portfolio-import/import-job-detail-view.js.map +1 -1
- package/dist/portfolio-import/product-gallery.js +1 -1
- package/dist/portfolio-import/product-gallery.js.map +1 -1
- package/dist/product-editor/product-editor-surface.js +1 -1
- package/dist/product-editor/product-editor-surface.js.map +1 -1
- package/dist/product-editor/tabs/product-status-tab.js +1 -1
- package/dist/product-editor/tabs/product-status-tab.js.map +1 -1
- package/dist/product-editor/tabs/resources/awards-panel.js +2 -2
- package/dist/product-editor/tabs/resources/awards-panel.js.map +1 -1
- package/dist/profile/business-details.js +1 -1
- package/dist/profile/business-details.js.map +1 -1
- package/dist/profile/product-detail-drawer.js +2 -2
- package/dist/profile/product-detail-drawer.js.map +1 -1
- package/package.json +1 -1
- package/src/theme/tokens.css +7 -1
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
/** Distance from the bottom, in px, still treated as "at the bottom". */
|
|
3
|
+
export const STICK_TO_BOTTOM_THRESHOLD_PX = 64;
|
|
4
|
+
/**
|
|
5
|
+
* A scroll event this soon after a wheel or key event is the user's. Wheel and
|
|
6
|
+
* key input arrive continuously while the user scrolls (including OS wheel
|
|
7
|
+
* momentum), so a short window is enough; longer would let a layout-caused
|
|
8
|
+
* scroll event right after the last input unpin a viewer who has stopped.
|
|
9
|
+
*/
|
|
10
|
+
const USER_INPUT_WINDOW_MS = 300;
|
|
11
|
+
/** Touch fling momentum keeps scrolling after the finger lifts, with no input events. */
|
|
12
|
+
const TOUCH_MOMENTUM_WINDOW_MS = 1000;
|
|
13
|
+
/**
|
|
14
|
+
* Scroll behaviour for a chat log (CEL-2165). Always instant, never smooth, so
|
|
15
|
+
* it is reduced-motion safe by construction.
|
|
16
|
+
*
|
|
17
|
+
* The hook keeps an INTENT ("the viewer wants the newest message") rather than
|
|
18
|
+
* re-deriving it from scroll events. Only a genuine user action clears it: a
|
|
19
|
+
* scroll event that follows a wheel, touch, key or pointer input and ends more
|
|
20
|
+
* than `STICK_TO_BOTTOM_THRESHOLD_PX` from the bottom. Scroll events caused by
|
|
21
|
+
* our own writes or by layout (a pane settling to its final height) never do,
|
|
22
|
+
* so a list revealed while its container is still resizing ends up at the bottom.
|
|
23
|
+
*
|
|
24
|
+
* - Opens at the newest message, again whenever `active` turns true, and when
|
|
25
|
+
* the list is reused for a different thread (neither end id was in the
|
|
26
|
+
* previous list).
|
|
27
|
+
* - Appended messages follow the intent (or the viewer's own send); otherwise
|
|
28
|
+
* `hasNewBelow` turns true instead of moving the viewport.
|
|
29
|
+
* - Container or content height changes keep an intent-holding list at the bottom.
|
|
30
|
+
* - A scroll that settles within the threshold of the bottom re-pins, whatever
|
|
31
|
+
* caused it (a fling that lands at the bottom follows again).
|
|
32
|
+
* - `release()` drops the intent for code that scrolls the list itself (for
|
|
33
|
+
* example jumping to a quoted message); user input does this automatically.
|
|
34
|
+
* - Prepended older messages keep the visible position. The scroller must set
|
|
35
|
+
* `overflow-anchor: none` so browser anchoring does not also compensate.
|
|
36
|
+
*/
|
|
37
|
+
export function useStickToBottom({ scrollerRef, contentRef, ids, lastIsOwn, active = true, hasMessages, }) {
|
|
38
|
+
const wantBottomRef = useRef(true);
|
|
39
|
+
const prevRef = useRef(null);
|
|
40
|
+
const heightRef = useRef(0);
|
|
41
|
+
const lastWrittenRef = useRef(null);
|
|
42
|
+
const userUntilRef = useRef(Number.NEGATIVE_INFINITY);
|
|
43
|
+
const pointerActiveRef = useRef(false);
|
|
44
|
+
const pendingBottomRef = useRef(false);
|
|
45
|
+
const [hasNewBelow, setHasNewBelow] = useState(false);
|
|
46
|
+
const firstId = ids[0];
|
|
47
|
+
const lastId = ids[ids.length - 1];
|
|
48
|
+
const writeBottom = useCallback(() => {
|
|
49
|
+
const el = scrollerRef.current;
|
|
50
|
+
if (!el)
|
|
51
|
+
return;
|
|
52
|
+
el.scrollTop = el.scrollHeight;
|
|
53
|
+
lastWrittenRef.current = el.scrollTop;
|
|
54
|
+
heightRef.current = el.scrollHeight;
|
|
55
|
+
}, [scrollerRef]);
|
|
56
|
+
const scrollToBottom = useCallback(() => {
|
|
57
|
+
if (!scrollerRef.current)
|
|
58
|
+
return;
|
|
59
|
+
wantBottomRef.current = true;
|
|
60
|
+
writeBottom();
|
|
61
|
+
setHasNewBelow(false);
|
|
62
|
+
}, [scrollerRef, writeBottom]);
|
|
63
|
+
// Messages changed.
|
|
64
|
+
useLayoutEffect(() => {
|
|
65
|
+
const el = scrollerRef.current;
|
|
66
|
+
if (!el)
|
|
67
|
+
return;
|
|
68
|
+
const prev = prevRef.current;
|
|
69
|
+
const sameThread = prev !== null &&
|
|
70
|
+
((firstId !== undefined && prev.ids.has(firstId)) ||
|
|
71
|
+
(lastId !== undefined && prev.ids.has(lastId)));
|
|
72
|
+
if (!prev || !sameThread) {
|
|
73
|
+
scrollToBottom();
|
|
74
|
+
}
|
|
75
|
+
else if (prev.lastId !== lastId) {
|
|
76
|
+
if (wantBottomRef.current || lastIsOwn)
|
|
77
|
+
scrollToBottom();
|
|
78
|
+
else
|
|
79
|
+
setHasNewBelow(true);
|
|
80
|
+
}
|
|
81
|
+
else if (prev.firstId !== firstId && !wantBottomRef.current) {
|
|
82
|
+
el.scrollTop += el.scrollHeight - heightRef.current;
|
|
83
|
+
lastWrittenRef.current = el.scrollTop;
|
|
84
|
+
}
|
|
85
|
+
else if (wantBottomRef.current) {
|
|
86
|
+
writeBottom();
|
|
87
|
+
}
|
|
88
|
+
heightRef.current = el.scrollHeight;
|
|
89
|
+
prevRef.current = { ids: new Set(ids), firstId, lastId };
|
|
90
|
+
}, [ids, firstId, lastId, lastIsOwn, hasMessages, scrollerRef, scrollToBottom, writeBottom]);
|
|
91
|
+
// Hidden to visible: jump to the newest message. A hidden pane has no
|
|
92
|
+
// layout, so when there is nothing to scroll yet the ResizeObserver below
|
|
93
|
+
// finishes the job once it is measurable.
|
|
94
|
+
const wasActiveRef = useRef(active);
|
|
95
|
+
useLayoutEffect(() => {
|
|
96
|
+
const became = active && !wasActiveRef.current;
|
|
97
|
+
wasActiveRef.current = active;
|
|
98
|
+
if (!became)
|
|
99
|
+
return;
|
|
100
|
+
wantBottomRef.current = true;
|
|
101
|
+
const el = scrollerRef.current;
|
|
102
|
+
if (el && el.clientHeight > 0) {
|
|
103
|
+
scrollToBottom();
|
|
104
|
+
pendingBottomRef.current = false;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
pendingBottomRef.current = true;
|
|
108
|
+
}
|
|
109
|
+
}, [active, hasMessages, scrollerRef, scrollToBottom]);
|
|
110
|
+
// User input, scroll position and size observation.
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
const el = scrollerRef.current;
|
|
113
|
+
if (!el)
|
|
114
|
+
return;
|
|
115
|
+
const markUser = () => {
|
|
116
|
+
userUntilRef.current = performance.now() + USER_INPUT_WINDOW_MS;
|
|
117
|
+
};
|
|
118
|
+
const markTouch = () => {
|
|
119
|
+
userUntilRef.current = performance.now() + TOUCH_MOMENTUM_WINDOW_MS;
|
|
120
|
+
};
|
|
121
|
+
// Any press inside the scroller (scrollbar, or a child such as a quote
|
|
122
|
+
// button) is user input until the pointer is released, however long a drag lasts.
|
|
123
|
+
const onPointerDown = () => {
|
|
124
|
+
pointerActiveRef.current = true;
|
|
125
|
+
};
|
|
126
|
+
const onPointerEnd = () => {
|
|
127
|
+
if (!pointerActiveRef.current)
|
|
128
|
+
return;
|
|
129
|
+
pointerActiveRef.current = false;
|
|
130
|
+
markUser();
|
|
131
|
+
};
|
|
132
|
+
const onScroll = () => {
|
|
133
|
+
const distance = el.scrollHeight - el.scrollTop - el.clientHeight;
|
|
134
|
+
const programmatic = lastWrittenRef.current === el.scrollTop;
|
|
135
|
+
const user = pointerActiveRef.current || performance.now() < userUntilRef.current;
|
|
136
|
+
if (distance <= STICK_TO_BOTTOM_THRESHOLD_PX) {
|
|
137
|
+
wantBottomRef.current = true;
|
|
138
|
+
setHasNewBelow(false);
|
|
139
|
+
}
|
|
140
|
+
else if (user && !programmatic) {
|
|
141
|
+
wantBottomRef.current = false;
|
|
142
|
+
}
|
|
143
|
+
lastWrittenRef.current = null;
|
|
144
|
+
heightRef.current = el.scrollHeight;
|
|
145
|
+
};
|
|
146
|
+
for (const name of ["wheel", "keydown"]) {
|
|
147
|
+
el.addEventListener(name, markUser, { passive: true });
|
|
148
|
+
}
|
|
149
|
+
for (const name of ["touchstart", "touchmove"]) {
|
|
150
|
+
el.addEventListener(name, markTouch, { passive: true });
|
|
151
|
+
}
|
|
152
|
+
el.addEventListener("pointerdown", onPointerDown, { passive: true });
|
|
153
|
+
window.addEventListener("pointerup", onPointerEnd);
|
|
154
|
+
window.addEventListener("pointercancel", onPointerEnd);
|
|
155
|
+
el.addEventListener("scroll", onScroll, { passive: true });
|
|
156
|
+
let observer;
|
|
157
|
+
if (typeof ResizeObserver !== "undefined") {
|
|
158
|
+
observer = new ResizeObserver(() => {
|
|
159
|
+
if (el.clientHeight === 0)
|
|
160
|
+
return;
|
|
161
|
+
if (pendingBottomRef.current) {
|
|
162
|
+
pendingBottomRef.current = false;
|
|
163
|
+
scrollToBottom();
|
|
164
|
+
}
|
|
165
|
+
else if (wantBottomRef.current) {
|
|
166
|
+
writeBottom();
|
|
167
|
+
}
|
|
168
|
+
heightRef.current = el.scrollHeight;
|
|
169
|
+
});
|
|
170
|
+
observer.observe(el);
|
|
171
|
+
if (contentRef.current)
|
|
172
|
+
observer.observe(contentRef.current);
|
|
173
|
+
}
|
|
174
|
+
return () => {
|
|
175
|
+
for (const name of ["wheel", "keydown"])
|
|
176
|
+
el.removeEventListener(name, markUser);
|
|
177
|
+
for (const name of ["touchstart", "touchmove"])
|
|
178
|
+
el.removeEventListener(name, markTouch);
|
|
179
|
+
el.removeEventListener("pointerdown", onPointerDown);
|
|
180
|
+
window.removeEventListener("pointerup", onPointerEnd);
|
|
181
|
+
window.removeEventListener("pointercancel", onPointerEnd);
|
|
182
|
+
el.removeEventListener("scroll", onScroll);
|
|
183
|
+
observer?.disconnect();
|
|
184
|
+
};
|
|
185
|
+
}, [scrollerRef, contentRef, scrollToBottom, writeBottom, hasMessages]);
|
|
186
|
+
const release = useCallback(() => {
|
|
187
|
+
wantBottomRef.current = false;
|
|
188
|
+
}, []);
|
|
189
|
+
return { hasNewBelow, scrollToBottom, release };
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=use-stick-to-bottom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-stick-to-bottom.js","sourceRoot":"","sources":["../../src/chat/use-stick-to-bottom.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,4 +43,17 @@ export interface UsePresenceResponse {
|
|
|
43
43
|
* @see Spec §4.3, Arch §2.6
|
|
44
44
|
*/
|
|
45
45
|
export declare function usePresence(): UsePresenceResponse;
|
|
46
|
+
/**
|
|
47
|
+
* Like {@link usePresence}, but the local user is in presence ONLY while
|
|
48
|
+
* `enabled` is true AND the room is attached: enters when both hold, leaves when
|
|
49
|
+
* either stops holding or on unmount. For a panel that stays mounted while
|
|
50
|
+
* hidden (an embedded pane) so the counterparty never sees someone present who
|
|
51
|
+
* is not looking. The SDK's own auto-enter cannot do this: it does not re-enter
|
|
52
|
+
* after a leave, so this hook drives enter and leave itself.
|
|
53
|
+
*
|
|
54
|
+
* `presence.enter` throws unless the room is attaching or attached, so the
|
|
55
|
+
* effect is keyed on the room status instead of retrying: a room that attaches
|
|
56
|
+
* late (a re-authorise, a detach and re-attach) re-runs the effect and enters.
|
|
57
|
+
*/
|
|
58
|
+
export declare function useGatedPresence(enabled: boolean): UsePresenceResponse;
|
|
46
59
|
//# sourceMappingURL=use-presence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-presence.d.ts","sourceRoot":"","sources":["../../src/chat-ably/use-presence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-presence.d.ts","sourceRoot":"","sources":["../../src/chat-ably/use-presence.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAI/D;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC;;;;;;;;OAQG;IACH,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;OAIG;IACH,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,IAAI,mBAAmB,CAYjD;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAkBtE"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
// the public surface minimal. Add them here if a future consumer needs
|
|
10
10
|
// them (e.g. live status updates without re-entering).
|
|
11
11
|
import { usePresence as useSdkPresence, usePresenceListener } from "@ably/chat/react";
|
|
12
|
+
import * as React from "react";
|
|
12
13
|
/**
|
|
13
14
|
* `usePresence()` — composes `usePresence` (write) +
|
|
14
15
|
* `usePresenceListener` (read) from `@ably/chat/react`. MUST be called
|
|
@@ -34,4 +35,38 @@ export function usePresence() {
|
|
|
34
35
|
leave,
|
|
35
36
|
};
|
|
36
37
|
}
|
|
38
|
+
/** `RoomStatus.Attached`, compared as a string so this module does not import the enum. */
|
|
39
|
+
const ROOM_ATTACHED = "attached";
|
|
40
|
+
/**
|
|
41
|
+
* Like {@link usePresence}, but the local user is in presence ONLY while
|
|
42
|
+
* `enabled` is true AND the room is attached: enters when both hold, leaves when
|
|
43
|
+
* either stops holding or on unmount. For a panel that stays mounted while
|
|
44
|
+
* hidden (an embedded pane) so the counterparty never sees someone present who
|
|
45
|
+
* is not looking. The SDK's own auto-enter cannot do this: it does not re-enter
|
|
46
|
+
* after a leave, so this hook drives enter and leave itself.
|
|
47
|
+
*
|
|
48
|
+
* `presence.enter` throws unless the room is attaching or attached, so the
|
|
49
|
+
* effect is keyed on the room status instead of retrying: a room that attaches
|
|
50
|
+
* late (a re-authorise, a detach and re-attach) re-runs the effect and enters.
|
|
51
|
+
*/
|
|
52
|
+
export function useGatedPresence(enabled) {
|
|
53
|
+
const { enter, leave, roomStatus } = useSdkPresence({ autoEnterLeave: false });
|
|
54
|
+
const { presenceData } = usePresenceListener();
|
|
55
|
+
const enterRef = React.useRef(enter);
|
|
56
|
+
const leaveRef = React.useRef(leave);
|
|
57
|
+
React.useEffect(() => {
|
|
58
|
+
enterRef.current = enter;
|
|
59
|
+
leaveRef.current = leave;
|
|
60
|
+
});
|
|
61
|
+
const attached = roomStatus === ROOM_ATTACHED;
|
|
62
|
+
React.useEffect(() => {
|
|
63
|
+
if (!enabled || !attached)
|
|
64
|
+
return;
|
|
65
|
+
void enterRef.current().catch(() => undefined);
|
|
66
|
+
return () => {
|
|
67
|
+
void leaveRef.current().catch(() => undefined);
|
|
68
|
+
};
|
|
69
|
+
}, [enabled, attached]);
|
|
70
|
+
return { presentMembers: presenceData, enter, leave };
|
|
71
|
+
}
|
|
37
72
|
//# sourceMappingURL=use-presence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-presence.js","sourceRoot":"","sources":["../../src/chat-ably/use-presence.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,qEAAqE;AACrE,uEAAuE;AACvE,4EAA4E;AAC5E,2EAA2E;AAC3E,uEAAuE;AACvE,uDAAuD;
|
|
1
|
+
{"version":3,"file":"use-presence.js","sourceRoot":"","sources":["../../src/chat-ably/use-presence.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,qEAAqE;AACrE,uEAAuE;AACvE,4EAA4E;AAC5E,2EAA2E;AAC3E,uEAAuE;AACvE,uDAAuD;AAGvD,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiC/B;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW;IACzB,sEAAsE;IACtE,oEAAoE;IACpE,yDAAyD;IACzD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,cAAc,EAAE,CAAC;IAC1C,MAAM,EAAE,YAAY,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAE/C,OAAO;QACL,cAAc,EAAE,YAAY;QAC5B,KAAK;QACL,KAAK;KACN,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,MAAM,aAAa,GAAG,UAAU,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/E,MAAM,EAAE,YAAY,EAAE,GAAG,mBAAmB,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAI,UAAqB,KAAK,aAAa,CAAC;IAC1D,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ;YAAE,OAAO;QAClC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,GAAG,EAAE;YACV,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IACxB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-model-select.d.ts","sourceRoot":"","sources":["../../src/components/access-model-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAE7C;;;;OAIG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAElD;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC,SAAS,CAAC;IAE9D,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oFAAoF;IACpF,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,OAAsC,EACtC,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,QAAgB,EAChB,SAAiB,EACjB,KAAK,EACL,UAAU,EACV,KAAK,EACL,WAAW,EACX,EAAE,EACF,QAAQ,EACR,SAAS,GACV,EAAE,sBAAsB,
|
|
1
|
+
{"version":3,"file":"access-model-select.d.ts","sourceRoot":"","sources":["../../src/components/access-model-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC9B,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,sBAAsB;IACrC,mDAAmD;IACnD,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAE7C;;;;OAIG;IACH,OAAO,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAC;IAElD;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,aAAa,CAAC,WAAW,CAAC,CAAC;IAExC;;;;;;;OAOG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;;;;;;;OASG;IACH,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,KAAK,CAAC,SAAS,CAAC;IAE9D,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oFAAoF;IACpF,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,uEAAuE;IACvE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAOD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,QAAQ,EACR,OAAsC,EACtC,UAAU,EACV,mBAAmB,EACnB,kBAAkB,EAClB,QAAgB,EAChB,SAAiB,EACjB,KAAK,EACL,UAAU,EACV,KAAK,EACL,WAAW,EACX,EAAE,EACF,QAAQ,EACR,SAAS,GACV,EAAE,sBAAsB,2CAqIxB"}
|
|
@@ -67,6 +67,7 @@ export function AccessModelSelect({ value, onChange, options = STATIC_ACCESS_MOD
|
|
|
67
67
|
const computedPlaceholder = isLoading
|
|
68
68
|
? "Loading access models..."
|
|
69
69
|
: (placeholder ?? "Select access model");
|
|
70
|
-
return (_jsxs("div", { className: cn("flex flex-col gap-1.5", className), children: [label && (_jsxs("label", { htmlFor: id, className: cn("text-xs font-semibold text-foreground", hasError && "text-destructive"), children: [label, required && _jsx("span", { className: "ml-0.5 text-destructive", children: "*" })] })), _jsxs(AnimatedShadcnSelect, { value: radixValue, onValueChange: handleRadixValueChange, disabled: isFieldDisabled, children: [_jsx(AnimatedShadcnSelectTrigger, { id: id, "aria-invalid": hasError || undefined, "aria-required": required || undefined, "aria-describedby": describedBy, className: cn("w-full", hasError &&
|
|
70
|
+
return (_jsxs("div", { className: cn("flex flex-col gap-1.5", className), children: [label && (_jsxs("label", { htmlFor: id, className: cn("text-xs font-semibold text-foreground", hasError && "text-destructive"), children: [label, required && _jsx("span", { className: "ml-0.5 text-destructive", children: "*" })] })), _jsxs(AnimatedShadcnSelect, { value: radixValue, onValueChange: handleRadixValueChange, disabled: isFieldDisabled, children: [_jsx(AnimatedShadcnSelectTrigger, { id: id, "aria-invalid": hasError || undefined, "aria-required": required || undefined, "aria-describedby": describedBy, className: cn("w-full", hasError &&
|
|
71
|
+
"border-destructive focus-visible:border-destructive focus-visible:ring-destructive/90"), children: _jsx(AnimatedShadcnSelectValue, { placeholder: computedPlaceholder, children: resolvedEntry ? _jsx("span", { children: resolvedEntry.name }) : undefined }) }), _jsx(AnimatedShadcnSelectContent, { children: visibleOptions.length > 0 ? (_jsx(AnimatedShadcnSelectGroup, { children: visibleOptions.map((entry) => (_jsx(AnimatedShadcnSelectItem, { value: entry.id, children: _jsxs("span", { className: "flex flex-col gap-0.5", children: [_jsx("span", { className: "text-sm", children: entry.name }), entry.description && (_jsx("span", { className: "text-xs text-muted-foreground", children: entry.description }))] }) }, entry.id))) })) : (_jsx("div", { className: "px-2 py-3 text-sm text-muted-foreground", children: "No access models available" })) })] }), hasError && error && (_jsx("p", { id: errorId, className: "text-xs text-destructive", role: "alert", children: error })), !hasError && helperText && (_jsx("p", { id: helperId, className: "text-xs text-muted-foreground", children: helperText })), orphanId !== null && renderOrphanBanner?.(orphanId)] }));
|
|
71
72
|
}
|
|
72
73
|
//# sourceMappingURL=access-model-select.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-model-select.js","sourceRoot":"","sources":["../../src/components/access-model-select.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"access-model-select.js","sourceRoot":"","sources":["../../src/components/access-model-select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ function AccordionItem({ className, ...props }) {
|
|
|
10
10
|
return (_jsx(AccordionPrimitive.Item, { "data-slot": "accordion-item", className: cn("border-b last:border-b-0", className), ...props }));
|
|
11
11
|
}
|
|
12
12
|
function AccordionTrigger({ className, children, ...props }) {
|
|
13
|
-
return (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { "data-slot": "accordion-trigger", className: cn("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-[box-shadow,border-color] outline-hidden hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/
|
|
13
|
+
return (_jsx(AccordionPrimitive.Header, { className: "flex", children: _jsxs(AccordionPrimitive.Trigger, { "data-slot": "accordion-trigger", className: cn("flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-[box-shadow,border-color] outline-hidden hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/70 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", className), ...props, children: [children, _jsx(ChevronDownIcon, { className: "pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-[var(--duration-standard)]" })] }) }));
|
|
14
14
|
}
|
|
15
15
|
function AccordionContent({ className, children, ...props }) {
|
|
16
16
|
return (_jsx(AccordionPrimitive.Content, { "data-slot": "accordion-content", className: "overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down", ...props, children: _jsx("div", { className: cn("pt-0 pb-4", className), children: children }) }));
|
|
@@ -108,7 +108,7 @@ export function AnimatedSelect({ value, onChange, options, placeholder = "Select
|
|
|
108
108
|
onChange(optionValue);
|
|
109
109
|
setOpen(false);
|
|
110
110
|
}, [onChange]);
|
|
111
|
-
return (_jsxs("div", { className: cn("relative", className), ref: containerRef, children: [label && (_jsx("label", { className: "mb-1.5 block text-xs font-semibold text-foreground", children: label })), _jsxs(motion.div, { animate: open ? "open" : "closed", children: [_jsxs("button", { type: "button", onClick: handleToggle, disabled: disabled, className: cn("flex w-full items-center justify-between gap-2 rounded-lg border bg-background px-3 py-2.5 text-left text-sm transition-colors", "border-border hover:border-primary/30 focus:border-
|
|
111
|
+
return (_jsxs("div", { className: cn("relative", className), ref: containerRef, children: [label && (_jsx("label", { className: "mb-1.5 block text-xs font-semibold text-foreground", children: label })), _jsxs(motion.div, { animate: open ? "open" : "closed", children: [_jsxs("button", { type: "button", onClick: handleToggle, disabled: disabled, className: cn("flex w-full items-center justify-between gap-2 rounded-lg border bg-background px-3 py-2.5 text-left text-sm transition-colors", "border-border hover:border-primary/30 focus:border-ring focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring/70", open && "border-primary/30 ring-2 ring-primary/10", disabled && "cursor-not-allowed opacity-50", !selectedOption && "text-muted-foreground"), children: [_jsx("span", { className: cn("truncate", selectedOption ? "text-foreground" : "text-muted-foreground"), children: selectedOption?.label ?? placeholder }), _jsx(motion.span, { variants: chevronVariants, transition: { duration: prefersReducedMotion ? 0 : 0.2 }, className: "shrink-0 text-muted-foreground", children: _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 20 20", fill: "currentColor", className: "size-4", children: _jsx("path", { fillRule: "evenodd", d: "M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z", clipRule: "evenodd" }) }) })] }), _jsx(AnimatePresence, { children: open && (_jsx(motion.ul, { initial: "closed", animate: "open", exit: "closed", variants: wrapperVariants, style: {
|
|
112
112
|
originY: dropDirection === "down" ? "top" : "bottom",
|
|
113
113
|
}, className: cn("absolute z-50 w-full overflow-hidden rounded-xl border border-border/80 bg-background p-1.5 shadow-lg backdrop-blur-xl", "max-h-56 overflow-y-auto", dropDirection === "down" ? "top-full mt-1.5" : "bottom-full mb-1.5"), children: options.map((option) => {
|
|
114
114
|
const isSelected = option.value === value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-select.js","sourceRoot":"","sources":["../../src/components/animated-select.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"animated-select.js","sourceRoot":"","sources":["../../src/components/animated-select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@ import * as React from "react";
|
|
|
2
2
|
import * as SelectPrimitive from "@radix-ui/react-select";
|
|
3
3
|
export declare const AnimatedShadcnSelect: React.FC<SelectPrimitive.SelectProps>;
|
|
4
4
|
export declare const AnimatedShadcnSelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
|
|
5
|
-
export declare
|
|
6
|
-
export declare function AnimatedShadcnSelectTrigger({ className, size, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
|
|
5
|
+
export declare function AnimatedShadcnSelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export declare function AnimatedShadcnSelectTrigger({ className, size, children, onMouseEnter, onFocus, ...props }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
|
|
7
7
|
size?: "sm" | "default";
|
|
8
8
|
}): import("react/jsx-runtime").JSX.Element;
|
|
9
9
|
export declare function AnimatedShadcnSelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-shadcn-select.d.ts","sourceRoot":"","sources":["../../src/components/animated-shadcn-select.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"animated-shadcn-select.d.ts","sourceRoot":"","sources":["../../src/components/animated-shadcn-select.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAiB1D,eAAO,MAAM,oBAAoB,uCAAuB,CAAC;AACzD,eAAO,MAAM,yBAAyB,yGAAwB,CAAC;AAK/D,wBAAgB,yBAAyB,CAAC,EACxC,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,KAAK,CAAC,2CAEpD;AAID,wBAAgB,2BAA2B,CAAC,EAC1C,SAAS,EACT,IAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG;IACxD,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACzB,2CAyBA;AAED,wBAAgB,kCAAkC,CAAC,EACjD,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,cAAc,CAAC,2CAU7D;AAED,wBAAgB,oCAAoC,CAAC,EACnD,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,gBAAgB,CAAC,2CAU/D;AAID,KAAK,uBAAuB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAEpF,MAAM,WAAW,gCAAiC,SAAQ,uBAAuB;IAC/E;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA8ED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,SAAS,EACT,QAAQ,EACR,QAAyB,EACzB,KAAgB,EAChB,UAAiB,EACjB,WAAmC,EACnC,YAAqC,EACrC,GAAG,KAAK,EACT,EAAE,gCAAgC,2CA4DlC;AA2BD,wBAAgB,wBAAwB,CAAC,EACvC,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,2CAqBnD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { revealTruncatedSelectValue } from "../lib/reveal-truncated-select-value.js";
|
|
3
4
|
import * as React from "react";
|
|
4
5
|
import { motion, useReducedMotion } from "motion/react";
|
|
5
6
|
import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
|
|
@@ -11,10 +12,22 @@ import { DROPDOWN_DURATION_CLOSE, DROPDOWN_DURATION_OPEN, DROPDOWN_STAGGER_CLOSE
|
|
|
11
12
|
// <ShadcnSelect>; only the Content wrapper carries the motion layer.
|
|
12
13
|
export const AnimatedShadcnSelect = SelectPrimitive.Root;
|
|
13
14
|
export const AnimatedShadcnSelectGroup = SelectPrimitive.Group;
|
|
14
|
-
|
|
15
|
+
// CEL-2128 — carries `data-slot="select-value"` so the trigger's
|
|
16
|
+
// `*:data-[slot=select-value]:*` rules (truncation, icon alignment) actually
|
|
17
|
+
// match. Without it the value never truncated and a long label (a German
|
|
18
|
+
// closure/region/country name) overflowed the trigger and the card.
|
|
19
|
+
export function AnimatedShadcnSelectValue({ ...props }) {
|
|
20
|
+
return _jsx(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
|
|
21
|
+
}
|
|
15
22
|
// ─── Trigger (mirrors ShadcnSelectTrigger styling 1:1) ─────────────────────
|
|
16
|
-
export function AnimatedShadcnSelectTrigger({ className, size = "default", children, ...props }) {
|
|
17
|
-
return (_jsxs(SelectPrimitive.Trigger, { "data-slot": "animated-select-trigger", "data-size": size, className: cn("flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-hidden focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/
|
|
23
|
+
export function AnimatedShadcnSelectTrigger({ className, size = "default", children, onMouseEnter, onFocus, ...props }) {
|
|
24
|
+
return (_jsxs(SelectPrimitive.Trigger, { "data-slot": "animated-select-trigger", "data-size": size, className: cn("flex w-fit items-center justify-between gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-hidden focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/70 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:focus-visible:border-destructive aria-invalid:focus-visible:ring-destructive/90 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:block *:data-[slot=select-value]:min-w-0 *:data-[slot=select-value]:truncate dark:bg-input/30 dark:hover:bg-input/50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground", className), ...props, onMouseEnter: (e) => {
|
|
25
|
+
revealTruncatedSelectValue(e);
|
|
26
|
+
onMouseEnter?.(e);
|
|
27
|
+
}, onFocus: (e) => {
|
|
28
|
+
revealTruncatedSelectValue(e);
|
|
29
|
+
onFocus?.(e);
|
|
30
|
+
}, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDownIcon, { className: "size-4 opacity-50" }) })] }));
|
|
18
31
|
}
|
|
19
32
|
export function AnimatedShadcnSelectScrollUpButton({ className, ...props }) {
|
|
20
33
|
return (_jsx(SelectPrimitive.ScrollUpButton, { "data-slot": "animated-select-scroll-up-button", className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: _jsx(ChevronUpIcon, { className: "size-4" }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-shadcn-select.js","sourceRoot":"","sources":["../../src/components/animated-shadcn-select.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,4BAA4B,EAC5B,+BAA+B,GAChC,MAAM,8BAA8B,CAAC;AAEtC,8EAA8E;AAC9E,mEAAmE;AACnE,qEAAqE;AAErE,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC,IAAI,CAAC;AACzD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC,KAAK,CAAC;AAC/D,
|
|
1
|
+
{"version":3,"file":"animated-shadcn-select.js","sourceRoot":"","sources":["../../src/components/animated-shadcn-select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/utils.js";
|
|
3
3
|
import { OrgAvatar } from "./org-avatar.js";
|
|
4
|
-
const OVERLAP_PX = { sm: -
|
|
4
|
+
const OVERLAP_PX = { sm: -4, md: -6, lg: -8 };
|
|
5
5
|
const PLUS_SIZE_PX = { sm: 24, md: 32, lg: 40 };
|
|
6
6
|
const PLUS_FONT_PX = { sm: 9, md: 11, lg: 13 };
|
|
7
7
|
export function AvatarStack({ orgs, max = 4, size = "md", className, direction = "row", }) {
|
|
8
8
|
const visible = orgs.slice(0, max);
|
|
9
9
|
const overflow = orgs.length - visible.length;
|
|
10
10
|
const overlap = OVERLAP_PX[size];
|
|
11
|
-
const items = (_jsxs(_Fragment, { children: [visible.map((org, idx) => (_jsx("span", { role: "listitem", className: "relative", style: {
|
|
11
|
+
const items = (_jsxs(_Fragment, { children: [visible.map((org, idx) => (_jsx("span", { role: "listitem", className: "relative", style: { marginInlineStart: idx === 0 ? 0 : overlap, zIndex: visible.length - idx }, children: _jsx(OrgAvatar, { name: org.name, orgId: org.id, logoUrl: org.logoUrl, status: org.status, isOwnOrg: org.isOwnOrg, size: size }) }, org.id))), overflow > 0 && (_jsxs("span", { role: "listitem", className: "relative inline-flex shrink-0 items-center justify-center rounded-full border-2 border-[var(--card)] bg-[color-mix(in_oklab,var(--muted-foreground)_10%,var(--card))] font-display font-bold text-[var(--muted-foreground)] shadow-[0_1px_3px_oklch(0_0_0/0.06)]", style: {
|
|
12
12
|
width: PLUS_SIZE_PX[size],
|
|
13
13
|
height: PLUS_SIZE_PX[size],
|
|
14
14
|
fontSize: PLUS_FONT_PX[size],
|
|
15
|
-
|
|
15
|
+
marginInlineStart: overlap,
|
|
16
16
|
zIndex: 0,
|
|
17
17
|
}, title: `${overflow} more`, children: ["+", overflow] }))] }));
|
|
18
18
|
return (_jsx("div", { className: cn("inline-flex p-[2px]", direction === "row-reverse" && "flex-row-reverse", className), role: "list", "aria-label": `${orgs.length} organizations`, children: items }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar-stack.js","sourceRoot":"","sources":["../../src/components/avatar-stack.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,SAAS,EAA4C,MAAM,cAAc,CAAC;AAoBnF,MAAM,UAAU,GAAkC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"avatar-stack.js","sourceRoot":"","sources":["../../src/components/avatar-stack.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,SAAS,EAA4C,MAAM,cAAc,CAAC;AAoBnF,MAAM,UAAU,GAAkC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7E,MAAM,YAAY,GAAkC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC/E,MAAM,YAAY,GAAkC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE9E,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EACJ,GAAG,GAAG,CAAC,EACP,IAAI,GAAG,IAAI,EACX,SAAS,EACT,SAAS,GAAG,KAAK,GACA;IACjB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9C,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,CACZ,8BACG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CACzB,eAEE,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,UAAU,EACpB,KAAK,EAAE,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,YAEnF,KAAC,SAAS,IACR,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,KAAK,EAAE,GAAG,CAAC,EAAE,EACb,OAAO,EAAE,GAAG,CAAC,OAAO,EACpB,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ,EACtB,IAAI,EAAE,IAAI,GACV,IAZG,GAAG,CAAC,EAAE,CAaN,CACR,CAAC,EACD,QAAQ,GAAG,CAAC,IAAI,CACf,gBACE,IAAI,EAAC,UAAU,EACf,SAAS,EAAC,kQAAkQ,EAC5Q,KAAK,EAAE;oBACL,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC;oBACzB,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;oBAC1B,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC;oBAC5B,iBAAiB,EAAE,OAAO;oBAC1B,MAAM,EAAE,CAAC;iBACV,EACD,KAAK,EAAE,GAAG,QAAQ,OAAO,kBAEvB,QAAQ,IACL,CACR,IACA,CACJ,CAAC;IAEF,OAAO,CACL,cACE,SAAS,EAAE,EAAE,CACX,qBAAqB,EACrB,SAAS,KAAK,aAAa,IAAI,kBAAkB,EACjD,SAAS,CACV,EACD,IAAI,EAAC,MAAM,gBACC,GAAG,IAAI,CAAC,MAAM,gBAAgB,YAEzC,KAAK,GACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -13,7 +13,7 @@ export function Avatar({ src = null, square = false, initials, alt = "", classNa
|
|
|
13
13
|
: "rounded-full *:rounded-full"), children: [initials && (_jsxs("svg", { className: "size-full fill-current p-[5%] text-5xl font-medium uppercase select-none", viewBox: "0 0 100 100", "aria-hidden": alt ? undefined : "true", children: [alt && _jsx("title", { children: alt }), _jsx("text", { x: "50%", y: "50%", alignmentBaseline: "middle", dominantBaseline: "middle", textAnchor: "middle", dy: ".125em", children: initials })] })), src && _jsx("img", { className: "size-full", src: src, alt: alt })] }));
|
|
14
14
|
}
|
|
15
15
|
export function AvatarButton({ src, square = false, initials, alt, className, ref, ...props }) {
|
|
16
|
-
const classes = clsx(className, square ? "rounded-[20%]" : "rounded-full", "relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-
|
|
16
|
+
const classes = clsx(className, square ? "rounded-[20%]" : "rounded-full", "relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-ring");
|
|
17
17
|
return typeof props.href === "string" ? (_jsx(Link, { ...props, className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Avatar, { src: src, square: square, initials: initials, alt: alt }) }) })) : (_jsx(Headless.Button, { ...props, className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Avatar, { src: src, square: square, initials: initials, alt: alt }) }) }));
|
|
18
18
|
}
|
|
19
19
|
//# sourceMappingURL=avatar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAU9B,MAAM,UAAU,MAAM,CAAC,EACrB,GAAG,GAAG,IAAI,EACV,MAAM,GAAG,KAAK,EACd,QAAQ,EACR,GAAG,GAAG,EAAE,EACR,SAAS,EACT,GAAG,KAAK,EAC6C;IACrD,OAAO,CACL,6BACY,QAAQ,KACd,KAAK,EACT,SAAS,EAAE,IAAI,CACb,SAAS;QACT,eAAe;QACf,qFAAqF,EACrF,kEAAkE;QAClE,gBAAgB;QAChB,MAAM;YACJ,CAAC,CAAC,uDAAuD;YACzD,CAAC,CAAC,6BAA6B,CAClC,aAEA,QAAQ,IAAI,CACX,eACE,SAAS,EAAC,0EAA0E,EACpF,OAAO,EAAC,aAAa,iBACR,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,aAEpC,GAAG,IAAI,0BAAQ,GAAG,GAAS,EAC5B,eACE,CAAC,EAAC,KAAK,EACP,CAAC,EAAC,KAAK,EACP,iBAAiB,EAAC,QAAQ,EAC1B,gBAAgB,EAAC,QAAQ,EACzB,UAAU,EAAC,QAAQ,EACnB,EAAE,EAAC,QAAQ,YAEV,QAAQ,GACJ,IACH,CACP,EACA,GAAG,IAAI,cAAK,SAAS,EAAC,WAAW,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAI,IACpD,CACR,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,YAAY,CAAC,EAC3B,GAAG,EACH,MAAM,GAAG,KAAK,EACd,QAAQ,EACR,GAAG,EACH,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACU;IAClB,MAAM,OAAO,GAAG,IAAI,CAClB,SAAS,EACT,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,EACzC,
|
|
1
|
+
{"version":3,"file":"avatar.js","sourceRoot":"","sources":["../../src/components/avatar.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAC;AAC9C,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAU9B,MAAM,UAAU,MAAM,CAAC,EACrB,GAAG,GAAG,IAAI,EACV,MAAM,GAAG,KAAK,EACd,QAAQ,EACR,GAAG,GAAG,EAAE,EACR,SAAS,EACT,GAAG,KAAK,EAC6C;IACrD,OAAO,CACL,6BACY,QAAQ,KACd,KAAK,EACT,SAAS,EAAE,IAAI,CACb,SAAS;QACT,eAAe;QACf,qFAAqF,EACrF,kEAAkE;QAClE,gBAAgB;QAChB,MAAM;YACJ,CAAC,CAAC,uDAAuD;YACzD,CAAC,CAAC,6BAA6B,CAClC,aAEA,QAAQ,IAAI,CACX,eACE,SAAS,EAAC,0EAA0E,EACpF,OAAO,EAAC,aAAa,iBACR,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,aAEpC,GAAG,IAAI,0BAAQ,GAAG,GAAS,EAC5B,eACE,CAAC,EAAC,KAAK,EACP,CAAC,EAAC,KAAK,EACP,iBAAiB,EAAC,QAAQ,EAC1B,gBAAgB,EAAC,QAAQ,EACzB,UAAU,EAAC,QAAQ,EACnB,EAAE,EAAC,QAAQ,YAEV,QAAQ,GACJ,IACH,CACP,EACA,GAAG,IAAI,cAAK,SAAS,EAAC,WAAW,EAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAI,IACpD,CACR,CAAC;AACJ,CAAC;AAcD,MAAM,UAAU,YAAY,CAAC,EAC3B,GAAG,EACH,MAAM,GAAG,KAAK,EACd,QAAQ,EACR,GAAG,EACH,SAAS,EACT,GAAG,EACH,GAAG,KAAK,EACU;IAClB,MAAM,OAAO,GAAG,IAAI,CAClB,SAAS,EACT,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc,EACzC,mIAAmI,CACpI,CAAC;IAEF,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CACtC,KAAC,IAAI,OAAK,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAmC,YAC3E,KAAC,WAAW,cACV,KAAC,MAAM,IAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAI,GACtD,GACT,CACR,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,CAAC,MAAM,OAAK,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,GAAmC,YACtF,KAAC,WAAW,cACV,KAAC,MAAM,IAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAI,GACtD,GACE,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -62,7 +62,7 @@ export function BottleExtractDialog({ open, context, onClose, onSubmit, t, }) {
|
|
|
62
62
|
setState({ kind: "error", message: err.message });
|
|
63
63
|
}
|
|
64
64
|
};
|
|
65
|
-
return (_jsx(Dialog.Root, { open: open, onOpenChange: (nextOpen) => !nextOpen && onClose(), children: _jsxs(Dialog.Portal, { children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-foreground/20 backdrop-blur-xs" }), _jsxs(Dialog.Content, { "aria-labelledby": titleId, className: cn("fixed left-1/2 top-1/2 z-50 w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2", "rounded-2xl border border-border bg-card p-6 shadow-xl"), children: [_jsx(Dialog.Title, { id: titleId, className: "text-base/6 font-semibold text-foreground", children: t("dialog.title") }), _jsxs("form", { onSubmit: handleSubmit, className: "mt-4 flex flex-col gap-4", children: [_jsx(DropZone, { ref: fileInputRef, file: file, onFileChange: handleFileChange, t: t }), _jsxs("fieldset", { className: "flex flex-col gap-2", children: [_jsx("legend", { className: "sr-only", children: "Upload mode" }), _jsxs("label", { className: "flex cursor-pointer items-start gap-3", children: [_jsx("input", { type: "radio", name: "mode", value: "as_is", checked: mode === "as_is", onChange: () => setMode("as_is"), className: "mt-1" }), _jsxs("span", { children: [_jsx("span", { className: "font-medium text-foreground", children: t("dialog.mode_as_is") }), _jsx("span", { className: "block text-sm text-muted-foreground", children: t("dialog.mode_as_is_help", { name: targetName }) })] })] }), _jsxs("label", { className: "flex cursor-pointer items-start gap-3", children: [_jsx("input", { type: "radio", name: "mode", value: "extract", checked: mode === "extract", onChange: () => setMode("extract"), className: "mt-1" }), _jsxs("span", { children: [_jsx("span", { className: "font-medium text-foreground", children: t("dialog.mode_extract") }), _jsx("span", { className: "block text-sm text-muted-foreground", children: t("dialog.mode_extract_help", { name: targetName }) })] })] })] }), mode === "extract" && (_jsxs("label", { className: "flex cursor-pointer items-center gap-2 text-foreground", children: [_jsx("input", { type: "checkbox", checked: makePrimary, onChange: (e) => setMakePrimary(e.target.checked) }), _jsx("span", { children: t("dialog.make_primary") })] })), state.kind === "error" && (_jsx("div", { role: "alert", className: "rounded-lg border border-[var(--tone-danger-border)] bg-[var(--tone-danger-soft)] p-2 text-sm text-[var(--tone-danger-fg)]", children: state.message })), _jsx("div", { "aria-live": "polite", className: "sr-only", children: state.kind === "submitting" ? t("dialog.uploading") : "" }), _jsxs("div", { className: "mt-2 flex justify-end gap-2", children: [_jsx("button", { type: "button", onClick: onClose, className: "rounded-md px-4 py-2 text-foreground hover:bg-muted/50 focus:outline-hidden focus-visible:ring-2 focus-visible:ring-
|
|
65
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: (nextOpen) => !nextOpen && onClose(), children: _jsxs(Dialog.Portal, { children: [_jsx(Dialog.Overlay, { className: "fixed inset-0 z-50 bg-foreground/20 backdrop-blur-xs" }), _jsxs(Dialog.Content, { "aria-labelledby": titleId, className: cn("fixed left-1/2 top-1/2 z-50 w-[calc(100%-2rem)] max-w-lg -translate-x-1/2 -translate-y-1/2", "rounded-2xl border border-border bg-card p-6 shadow-xl"), children: [_jsx(Dialog.Title, { id: titleId, className: "text-base/6 font-semibold text-foreground", children: t("dialog.title") }), _jsxs("form", { onSubmit: handleSubmit, className: "mt-4 flex flex-col gap-4", children: [_jsx(DropZone, { ref: fileInputRef, file: file, onFileChange: handleFileChange, t: t }), _jsxs("fieldset", { className: "flex flex-col gap-2", children: [_jsx("legend", { className: "sr-only", children: "Upload mode" }), _jsxs("label", { className: "flex cursor-pointer items-start gap-3", children: [_jsx("input", { type: "radio", name: "mode", value: "as_is", checked: mode === "as_is", onChange: () => setMode("as_is"), className: "mt-1" }), _jsxs("span", { children: [_jsx("span", { className: "font-medium text-foreground", children: t("dialog.mode_as_is") }), _jsx("span", { className: "block text-sm text-muted-foreground", children: t("dialog.mode_as_is_help", { name: targetName }) })] })] }), _jsxs("label", { className: "flex cursor-pointer items-start gap-3", children: [_jsx("input", { type: "radio", name: "mode", value: "extract", checked: mode === "extract", onChange: () => setMode("extract"), className: "mt-1" }), _jsxs("span", { children: [_jsx("span", { className: "font-medium text-foreground", children: t("dialog.mode_extract") }), _jsx("span", { className: "block text-sm text-muted-foreground", children: t("dialog.mode_extract_help", { name: targetName }) })] })] })] }), mode === "extract" && (_jsxs("label", { className: "flex cursor-pointer items-center gap-2 text-foreground", children: [_jsx("input", { type: "checkbox", checked: makePrimary, onChange: (e) => setMakePrimary(e.target.checked) }), _jsx("span", { children: t("dialog.make_primary") })] })), state.kind === "error" && (_jsx("div", { role: "alert", className: "rounded-lg border border-[var(--tone-danger-border)] bg-[var(--tone-danger-soft)] p-2 text-sm text-[var(--tone-danger-fg)]", children: state.message })), _jsx("div", { "aria-live": "polite", className: "sr-only", children: state.kind === "submitting" ? t("dialog.uploading") : "" }), _jsxs("div", { className: "mt-2 flex justify-end gap-2", children: [_jsx("button", { type: "button", onClick: onClose, className: "rounded-md px-4 py-2 text-foreground hover:bg-muted/50 focus:outline-hidden focus-visible:ring-2 focus-visible:ring-ring/70", children: t("dialog.cancel") }), _jsx("button", { type: "submit", disabled: !file || state.kind === "submitting", className: "rounded-md bg-[var(--tone-success-solid)] px-4 py-2 text-[var(--tone-success-solid-fg)] hover:bg-[var(--tone-success-solid)]/90 focus:outline-hidden focus-visible:ring-2 focus-visible:ring-ring/70 disabled:opacity-50", children: state.kind === "submitting" ? t("dialog.uploading") : t("dialog.submit") })] })] }), _jsx(Dialog.Close, { className: "absolute right-4 top-4 text-muted-foreground hover:text-foreground focus:outline-hidden focus-visible:ring-2 focus-visible:ring-ring/70", "aria-label": "Close", children: "\u00D7" })] })] }) }));
|
|
66
66
|
}
|
|
67
67
|
function DropZone({ ref, file, onFileChange, t, }) {
|
|
68
68
|
const [hover, setHover] = React.useState(false);
|
|
@@ -77,7 +77,7 @@ function DropZone({ ref, file, onFileChange, t, }) {
|
|
|
77
77
|
e.preventDefault();
|
|
78
78
|
setHover(false);
|
|
79
79
|
onFileChange(e.dataTransfer.files);
|
|
80
|
-
}, className: cn("block cursor-pointer rounded-lg border-2 border-dashed p-6 text-center", "focus-within:ring-2 focus-within:ring-
|
|
80
|
+
}, className: cn("block cursor-pointer rounded-lg border-2 border-dashed p-6 text-center", "focus-within:ring-2 focus-within:ring-ring/70", hover
|
|
81
81
|
? "border-[var(--tone-success-border)] bg-[var(--tone-success-soft)]"
|
|
82
82
|
: "border-border bg-muted/20"), children: [_jsx("input", { ref: ref, type: "file", accept: "image/jpeg,image/png", "aria-labelledby": labelId, className: "sr-only", onChange: (e) => onFileChange(e.target.files) }), _jsx("p", { id: labelId, className: "text-sm text-foreground", children: file ? file.name : t("dialog.drop_zone") })] }));
|
|
83
83
|
}
|