@wix/web5-core 1.63.25 → 1.63.26
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/cjs/components/ui/UserQuery.css +10 -7
- package/dist/cjs/components/ui/UserQuery.js +17 -33
- package/dist/cjs/components/ui/UserQuery.js.map +1 -1
- package/dist/esm/components/ui/UserQuery.css +10 -7
- package/dist/esm/components/ui/UserQuery.js +5 -9
- package/dist/esm/components/ui/UserQuery.js.map +1 -1
- package/dist/types/components/ui/UserQuery.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/components/ui/UserQuery.css +10 -7
|
@@ -130,9 +130,10 @@
|
|
|
130
130
|
* deliberately keeps its own near-black, because that one is a status message
|
|
131
131
|
* rather than a label and should not read as an action.
|
|
132
132
|
*
|
|
133
|
-
*
|
|
134
|
-
* the
|
|
135
|
-
*
|
|
133
|
+
* The buttons are icon-only at every width, so this bubble is the only place
|
|
134
|
+
* the actions are spelled out on a pointer device. Hover and focus-within
|
|
135
|
+
* both, so a keyboard user tabbing through the header gets the same
|
|
136
|
+
* affordance instead of two unexplained icons.
|
|
136
137
|
*/
|
|
137
138
|
.web5-user-query__tooltip {
|
|
138
139
|
position: absolute;
|
|
@@ -161,11 +162,13 @@
|
|
|
161
162
|
}
|
|
162
163
|
|
|
163
164
|
/*
|
|
164
|
-
*
|
|
165
|
-
* permanently in the way.
|
|
166
|
-
* actually names them for anyone who needs
|
|
165
|
+
* Mobile: no hover to open the bubble on, so it would be either permanently
|
|
166
|
+
* invisible or permanently in the way. Nothing is shown there — the buttons
|
|
167
|
+
* carry `aria-label`, which is what actually names them for anyone who needs
|
|
168
|
+
* it. Both queries, because `hover: none` is the precise question and
|
|
169
|
+
* `pointer: coarse` is the one older engines answer.
|
|
167
170
|
*/
|
|
168
|
-
@media (pointer: coarse) {
|
|
171
|
+
@media (hover: none), (pointer: coarse) {
|
|
169
172
|
.web5-user-query__tooltip {
|
|
170
173
|
display: none;
|
|
171
174
|
}
|
|
@@ -378,44 +378,36 @@ const UserQuery = ({
|
|
|
378
378
|
lineNumber: 324,
|
|
379
379
|
columnNumber: 41
|
|
380
380
|
}
|
|
381
|
-
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
382
|
-
className: "hidden sm:inline",
|
|
383
|
-
__self: void 0,
|
|
384
|
-
__source: {
|
|
385
|
-
fileName: _jsxFileName,
|
|
386
|
-
lineNumber: 325,
|
|
387
|
-
columnNumber: 13
|
|
388
|
-
}
|
|
389
|
-
}, isLoading ? 'Sharing…' : isCopied ? copiedLabel : 'Share')), !isCopied && /*#__PURE__*/_react.default.createElement("span", {
|
|
381
|
+
})), shareState === 'idle' && /*#__PURE__*/_react.default.createElement("span", {
|
|
390
382
|
className: "web5-user-query__tooltip",
|
|
391
383
|
role: "tooltip",
|
|
392
384
|
__self: void 0,
|
|
393
385
|
__source: {
|
|
394
386
|
fileName: _jsxFileName,
|
|
395
|
-
lineNumber:
|
|
387
|
+
lineNumber: 333,
|
|
396
388
|
columnNumber: 13
|
|
397
389
|
}
|
|
398
|
-
}, "Share this"),
|
|
399
|
-
className: "web5-user-query__copied-toast
|
|
390
|
+
}, "Share this"), shareState !== 'idle' && /*#__PURE__*/_react.default.createElement("div", {
|
|
391
|
+
className: "web5-user-query__copied-toast absolute top-full right-0 mt-1 flex items-center gap-2 bg-[#2b2b2b] text-white text-[12px] leading-none px-3 py-2 rounded-[8px] whitespace-nowrap",
|
|
400
392
|
__self: void 0,
|
|
401
393
|
__source: {
|
|
402
394
|
fileName: _jsxFileName,
|
|
403
|
-
lineNumber:
|
|
395
|
+
lineNumber: 345,
|
|
404
396
|
columnNumber: 13
|
|
405
397
|
}
|
|
406
|
-
}, /*#__PURE__*/_react.default.createElement(_CheckIcon.CheckIcon, {
|
|
398
|
+
}, isCopied && /*#__PURE__*/_react.default.createElement(_CheckIcon.CheckIcon, {
|
|
407
399
|
__self: void 0,
|
|
408
400
|
__source: {
|
|
409
401
|
fileName: _jsxFileName,
|
|
410
|
-
lineNumber:
|
|
411
|
-
columnNumber:
|
|
402
|
+
lineNumber: 346,
|
|
403
|
+
columnNumber: 28
|
|
412
404
|
}
|
|
413
|
-
}), copiedLabel)), onNewConversation && /*#__PURE__*/_react.default.createElement("div", {
|
|
405
|
+
}), isLoading ? 'Sharing…' : copiedLabel)), onNewConversation && /*#__PURE__*/_react.default.createElement("div", {
|
|
414
406
|
className: "web5-user-query__action group relative",
|
|
415
407
|
__self: void 0,
|
|
416
408
|
__source: {
|
|
417
409
|
fileName: _jsxFileName,
|
|
418
|
-
lineNumber:
|
|
410
|
+
lineNumber: 352,
|
|
419
411
|
columnNumber: 11
|
|
420
412
|
}
|
|
421
413
|
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
@@ -426,31 +418,23 @@ const UserQuery = ({
|
|
|
426
418
|
__self: void 0,
|
|
427
419
|
__source: {
|
|
428
420
|
fileName: _jsxFileName,
|
|
429
|
-
lineNumber:
|
|
421
|
+
lineNumber: 353,
|
|
430
422
|
columnNumber: 13
|
|
431
423
|
}
|
|
432
424
|
}, /*#__PURE__*/_react.default.createElement(_PlusIcon.PlusIcon, {
|
|
433
425
|
__self: void 0,
|
|
434
426
|
__source: {
|
|
435
427
|
fileName: _jsxFileName,
|
|
436
|
-
lineNumber:
|
|
437
|
-
columnNumber: 15
|
|
438
|
-
}
|
|
439
|
-
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
440
|
-
className: "hidden sm:inline",
|
|
441
|
-
__self: void 0,
|
|
442
|
-
__source: {
|
|
443
|
-
fileName: _jsxFileName,
|
|
444
|
-
lineNumber: 356,
|
|
428
|
+
lineNumber: 359,
|
|
445
429
|
columnNumber: 15
|
|
446
430
|
}
|
|
447
|
-
}
|
|
431
|
+
})), /*#__PURE__*/_react.default.createElement("span", {
|
|
448
432
|
className: "web5-user-query__tooltip",
|
|
449
433
|
role: "tooltip",
|
|
450
434
|
__self: void 0,
|
|
451
435
|
__source: {
|
|
452
436
|
fileName: _jsxFileName,
|
|
453
|
-
lineNumber:
|
|
437
|
+
lineNumber: 361,
|
|
454
438
|
columnNumber: 13
|
|
455
439
|
}
|
|
456
440
|
}, newConversationLabel)), onToggleCommentMode && /*#__PURE__*/_react.default.createElement("button", {
|
|
@@ -463,14 +447,14 @@ const UserQuery = ({
|
|
|
463
447
|
__self: void 0,
|
|
464
448
|
__source: {
|
|
465
449
|
fileName: _jsxFileName,
|
|
466
|
-
lineNumber:
|
|
450
|
+
lineNumber: 367,
|
|
467
451
|
columnNumber: 11
|
|
468
452
|
}
|
|
469
453
|
}, /*#__PURE__*/_react.default.createElement(_CommentIcon.CommentIcon, {
|
|
470
454
|
__self: void 0,
|
|
471
455
|
__source: {
|
|
472
456
|
fileName: _jsxFileName,
|
|
473
|
-
lineNumber:
|
|
457
|
+
lineNumber: 379,
|
|
474
458
|
columnNumber: 13
|
|
475
459
|
}
|
|
476
460
|
}), commentCount > 0 && /*#__PURE__*/_react.default.createElement("span", {
|
|
@@ -478,7 +462,7 @@ const UserQuery = ({
|
|
|
478
462
|
__self: void 0,
|
|
479
463
|
__source: {
|
|
480
464
|
fileName: _jsxFileName,
|
|
481
|
-
lineNumber:
|
|
465
|
+
lineNumber: 381,
|
|
482
466
|
columnNumber: 15
|
|
483
467
|
}
|
|
484
468
|
}, commentCount))));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_ShareIcon","_CheckIcon","_PlusIcon","_UndoIcon","_RedoIcon","_CommentIcon","_navigationStack","_jsxFileName","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_LOADING_MESSAGES","headerClassName","UserQuery","query","onNewConversation","onNavigateToTriggerId","predecessorTriggerId","currentTriggerId","onShare","onToggleCommentMode","commentMode","commentCount","loading","newConversationLabel","copiedLabel","copiedDurationMs","productBackContext","onBackToProduct","forwardStack","useMemo","getForwardStack","canGoForward","length","canGoBack","hasNavigation","handleBack","useCallback","pushToForwardStack","handleForward","nextTid","popFromForwardStack","handleNewConversation","clearForwardStack","shareState","setShareState","useState","productImageError","setProductImageError","useEffect","imageUrl","handleShare","urlToCopy","window","location","href","err","console","warn","navigator","clipboard","writeText","catch","setTimeout","cyclingMessages","messages","cycledMessage","setCycledMessage","progressMessage","index","interval","setInterval","clearInterval","isCopied","isLoading","productBadge","title","backUrl","label","canNavigateBack","content","createElement","Fragment","UndoIcon","className","__self","__source","fileName","lineNumber","columnNumber","src","alt","onError","type","onClick","progressText","role","pendingQuery","disabled","RedoIcon","CheckIcon","ShareIcon","PlusIcon","CommentIcon","exports"],"sources":["../../../../src/components/ui/UserQuery.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { ShareIcon } from './icons/ShareIcon';\nimport { CheckIcon } from './icons/CheckIcon';\nimport { PlusIcon } from './icons/PlusIcon';\nimport { UndoIcon } from './icons/UndoIcon';\nimport { RedoIcon } from './icons/RedoIcon';\nimport { CommentIcon } from './icons/CommentIcon';\nimport {\n getForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n clearForwardStack,\n} from '../../utils/navigationStack';\n\ntype ShareState = 'idle' | 'loading' | 'copied';\n\nconst DEFAULT_LOADING_MESSAGES = [\n 'Thinking…',\n 'Recognizing intent…',\n 'Connecting the dots…',\n 'Synthesizing insights…',\n 'Formulating a response…',\n];\n\nconst headerClassName =\n 'web5-user-query sticky top-0 z-10 flex items-center justify-between bg-white/60 backdrop-blur-sm pl-5 pr-[10px] py-[7px] sm:px-[30px] sm:py-[17px]';\n\nexport interface UserQueryLoadingState {\n pendingQuery: string;\n /** Static progress message. If omitted, falls back to cycling through `messages`. */\n progressMessage?: string;\n /** Messages cycled while loading when `progressMessage` is not set. */\n messages?: string[];\n}\n\n/**\n * Product the visitor was redirected from (DL #114). Rendered as a back badge\n * above the query: back arrow + thumbnail + product name. All fields are\n * resolved and validated app-side (allowed-domain `backUrl`, `https:`\n * `imageUrl`) before reaching this presentational component.\n */\nexport interface ProductBackContext {\n /** Product display name. Required — without it the badge does not render. */\n title: string;\n /** Validated product thumbnail URL. Omitted/failed to load → arrow + title only. */\n imageUrl?: string;\n /** Validated product-page URL to return to. Omitted → badge is non-clickable. */\n backUrl?: string;\n /** Accessible label override. Defaults to `Back to ${title}`. */\n label?: string;\n}\n\nexport interface UserQueryProps {\n query: string;\n onNewConversation?: () => void;\n onNavigateToTriggerId?: (triggerId: string) => void;\n predecessorTriggerId?: string;\n currentTriggerId?: string;\n onShare?: (triggerId: string) => Promise<string>;\n /** Optional comment-mode toggle. When provided, render the chat-bubble\n * toggle button next to Share. The button reflects `commentMode` via\n * `is-on` styling and `aria-pressed`. */\n onToggleCommentMode?: () => void;\n commentMode?: boolean;\n /** Total number of comments on this response — shown as a badge next to the\n * toggle when > 0. */\n commentCount?: number;\n loading?: UserQueryLoadingState;\n /** Label for the \"new conversation\" action. Defaults to \"New conversation\". */\n newConversationLabel?: string;\n /** Label shown after the share link is copied. Defaults to \"Link Copied\". */\n copiedLabel?: string;\n /** How long the copied state stays visible, in ms. Defaults to 2000. */\n copiedDurationMs?: number;\n /** When set (visitor arrived from a product page), render a back-to-product\n * badge above the query (DL #114). */\n productBackContext?: ProductBackContext;\n /** Invoked with the validated `backUrl` when the badge is activated. */\n onBackToProduct?: (backUrl: string) => void;\n}\n\nexport const UserQuery: FC<UserQueryProps> = ({\n query,\n onNewConversation,\n onNavigateToTriggerId,\n predecessorTriggerId,\n currentTriggerId,\n onShare,\n onToggleCommentMode,\n commentMode = false,\n commentCount = 0,\n loading,\n newConversationLabel = 'New conversation',\n copiedLabel = 'Link Copied',\n copiedDurationMs = 2000,\n productBackContext,\n onBackToProduct,\n}) => {\n const forwardStack = useMemo(() => getForwardStack(), [currentTriggerId]);\n const canGoForward = forwardStack.length > 0;\n const canGoBack = !!predecessorTriggerId;\n const hasNavigation = canGoBack || canGoForward;\n\n const handleBack = useCallback(() => {\n if (!predecessorTriggerId || !currentTriggerId || !onNavigateToTriggerId) {\n return;\n }\n pushToForwardStack(currentTriggerId);\n onNavigateToTriggerId(predecessorTriggerId);\n }, [predecessorTriggerId, currentTriggerId, onNavigateToTriggerId]);\n\n const handleForward = useCallback(() => {\n if (!onNavigateToTriggerId) {\n return;\n }\n const nextTid = popFromForwardStack();\n if (!nextTid) {\n return;\n }\n onNavigateToTriggerId(nextTid);\n }, [onNavigateToTriggerId]);\n\n const handleNewConversation = useCallback(() => {\n clearForwardStack();\n onNewConversation?.();\n }, [onNewConversation]);\n\n const [shareState, setShareState] = useState<ShareState>('idle');\n\n const [productImageError, setProductImageError] = useState(false);\n useEffect(() => {\n setProductImageError(false);\n }, [productBackContext?.imageUrl]);\n\n const handleShare = useCallback(async () => {\n if (shareState !== 'idle') {\n return;\n }\n setShareState('loading');\n let urlToCopy = window.location.href;\n try {\n if (onShare && currentTriggerId) {\n urlToCopy = await onShare(currentTriggerId);\n }\n } catch (err) {\n console.warn('[share] failed, falling back to current URL:', err);\n }\n navigator.clipboard\n .writeText(urlToCopy)\n .catch((err) => console.warn('[share] clipboard write failed:', err));\n setShareState('copied');\n setTimeout(() => setShareState('idle'), copiedDurationMs);\n }, [shareState, onShare, currentTriggerId, copiedDurationMs]);\n\n const cyclingMessages = useMemo(\n () =>\n loading?.messages && loading.messages.length > 0\n ? loading.messages\n : DEFAULT_LOADING_MESSAGES,\n [loading?.messages],\n );\n const [cycledMessage, setCycledMessage] = useState(cyclingMessages[0]);\n\n useEffect(() => {\n if (!loading || loading.progressMessage) {\n return;\n }\n setCycledMessage(cyclingMessages[0]);\n if (cyclingMessages.length <= 1) {\n return;\n }\n let index = 0;\n const interval = setInterval(() => {\n index = (index + 1) % cyclingMessages.length;\n setCycledMessage(cyclingMessages[index]);\n }, 4000);\n return () => clearInterval(interval);\n }, [loading, cyclingMessages]);\n\n if (!query && !loading) {\n return null;\n }\n\n const isCopied = shareState === 'copied';\n const isLoading = shareState === 'loading';\n\n const productBadge = productBackContext\n ? (() => {\n const { title, imageUrl, backUrl, label } = productBackContext;\n const canNavigateBack = !!backUrl && !!onBackToProduct;\n const content = (\n <>\n <UndoIcon className=\"web5-user-query__product-back-icon\" />\n {imageUrl && !productImageError && (\n <span className=\"web5-user-query__product-back-thumb\">\n <img\n src={imageUrl}\n alt=\"\"\n onError={() => setProductImageError(true)}\n />\n </span>\n )}\n <span className=\"web5-user-query__product-back-title\">{title}</span>\n </>\n );\n return canNavigateBack ? (\n <button\n type=\"button\"\n onClick={() => onBackToProduct?.(backUrl!)}\n aria-label={label ?? `Back to ${title}`}\n className=\"web5-user-query__product-back\"\n >\n {content}\n </button>\n ) : (\n <div className=\"web5-user-query__product-back web5-user-query__product-back--static\">\n {content}\n </div>\n );\n })()\n : null;\n\n if (loading) {\n const progressText = loading.progressMessage ?? cycledMessage;\n return (\n <div\n className={headerClassName}\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n >\n <div className=\"web5-user-query__left flex-1\">\n {productBadge}\n <p\n className=\"text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={`Asking: ${loading.pendingQuery}`}\n >\n <span className=\"text-text-body/70\">Asking: </span>\n {loading.pendingQuery}\n </p>\n </div>\n {progressText && (\n <div className=\"hidden sm:flex items-center gap-2 ml-[10px] shrink-0 min-w-0\">\n <div\n className=\"w-4 h-4 shrink-0 animate-spin inline-block border-[2px] border-current border-t-transparent text-blue-600 dark:text-blue-500 rounded-full\"\n aria-hidden=\"true\"\n />\n <p className=\"text-[13px] leading-5 text-text-body/70 truncate max-w-[240px]\">\n {progressText}\n </p>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={headerClassName}>\n <div className=\"flex items-center gap-[30px] flex-1 min-w-0\">\n <div className=\"web5-user-query__left\">\n {productBadge}\n <p\n className=\"web5-user-query__title text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={query}\n >\n {query}\n </p>\n </div>\n {hasNavigation && (\n <div className=\"flex items-center gap-[9px]\">\n <button\n type=\"button\"\n onClick={handleBack}\n disabled={!canGoBack}\n title=\"Go to previous conversation\"\n aria-label=\"Go to previous conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n onClick={handleForward}\n disabled={!canGoForward}\n title=\"Go to next conversation\"\n aria-label=\"Go to next conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <RedoIcon />\n </button>\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-[10px] ml-[10px] sm:ml-0 shrink-0\">\n {/*\n Keyboard hint. It used to sit inside the prompt field, which was the\n wrong home for it twice over: it competed with the placeholder for the\n same space, and it disappeared exactly when the reader engaged with\n the input — so the shortcut was only ever advertised to someone who\n was not using it. Here it sits with the other page-level affordances\n and stays legible while the reader types.\n\n `aria-hidden` because the shortcut is already announced on the input\n itself via `aria-keyshortcuts`; this is the visual reminder, and\n repeating it to assistive tech would just be noise.\n */}\n <span className=\"web5-prompt-hint\" aria-hidden=\"true\">\n Press <kbd className=\"web5-prompt-hint__key\">/</kbd> to search\n </span>\n {/* Share button — wraps button + tooltips in a relative container */}\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label=\"Share this\"\n onClick={handleShare}\n disabled={isLoading || isCopied}\n className={`web5-user-query__share flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors disabled:cursor-default\n ${\n isCopied\n ? 'is-copied bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n {isCopied ? <CheckIcon /> : <ShareIcon />}\n <span className=\"hidden sm:inline\">\n {isLoading ? 'Sharing…' : isCopied ? copiedLabel : 'Share'}\n </span>\n </button>\n {/*\n Hover tooltip. Suppressed once the link is copied, because the\n copied state is its own message and two overlapping bubbles saying\n different things is worse than none.\n */}\n {!isCopied && (\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n Share this\n </span>\n )}\n {/* Mobile-only tooltip: drops below the button when link is copied */}\n {isCopied && (\n <div className=\"web5-user-query__copied-toast sm:hidden absolute top-full right-0 mt-1 flex items-center gap-2 bg-[#2b2b2b] text-white text-[12px] leading-none px-3 py-2 rounded-[8px] whitespace-nowrap\">\n <CheckIcon />\n {copiedLabel}\n </div>\n )}\n </div>\n {onNewConversation && (\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label={newConversationLabel}\n onClick={handleNewConversation}\n className=\"web5-user-query__new-conversation flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 text-text-body bg-white border-0 cursor-pointer hover:bg-gray-50 transition-colors\"\n >\n <PlusIcon />\n <span className=\"hidden sm:inline\">{newConversationLabel}</span>\n </button>\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n {newConversationLabel}\n </span>\n </div>\n )}\n {onToggleCommentMode && (\n <button\n type=\"button\"\n onClick={onToggleCommentMode}\n aria-pressed={commentMode}\n title=\"Add a comment\"\n aria-label=\"Add a comment\"\n className={`relative flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors ${\n commentMode\n ? 'bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n <CommentIcon />\n {commentCount > 0 && (\n <span\n className={`absolute -top-1 -right-1 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] leading-[18px] text-center font-semibold ${\n commentMode ? 'bg-white text-[#2b2b2b]' : 'bg-[#2b2b2b] text-white'\n }`}\n >\n {commentCount}\n </span>\n )}\n </button>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_ShareIcon","_CheckIcon","_PlusIcon","_UndoIcon","_RedoIcon","_CommentIcon","_navigationStack","_jsxFileName","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","DEFAULT_LOADING_MESSAGES","headerClassName","UserQuery","query","onNewConversation","onNavigateToTriggerId","predecessorTriggerId","currentTriggerId","onShare","onToggleCommentMode","commentMode","commentCount","loading","newConversationLabel","copiedLabel","copiedDurationMs","productBackContext","onBackToProduct","forwardStack","useMemo","getForwardStack","canGoForward","length","canGoBack","hasNavigation","handleBack","useCallback","pushToForwardStack","handleForward","nextTid","popFromForwardStack","handleNewConversation","clearForwardStack","shareState","setShareState","useState","productImageError","setProductImageError","useEffect","imageUrl","handleShare","urlToCopy","window","location","href","err","console","warn","navigator","clipboard","writeText","catch","setTimeout","cyclingMessages","messages","cycledMessage","setCycledMessage","progressMessage","index","interval","setInterval","clearInterval","isCopied","isLoading","productBadge","title","backUrl","label","canNavigateBack","content","createElement","Fragment","UndoIcon","className","__self","__source","fileName","lineNumber","columnNumber","src","alt","onError","type","onClick","progressText","role","pendingQuery","disabled","RedoIcon","CheckIcon","ShareIcon","PlusIcon","CommentIcon","exports"],"sources":["../../../../src/components/ui/UserQuery.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { ShareIcon } from './icons/ShareIcon';\nimport { CheckIcon } from './icons/CheckIcon';\nimport { PlusIcon } from './icons/PlusIcon';\nimport { UndoIcon } from './icons/UndoIcon';\nimport { RedoIcon } from './icons/RedoIcon';\nimport { CommentIcon } from './icons/CommentIcon';\nimport {\n getForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n clearForwardStack,\n} from '../../utils/navigationStack';\n\ntype ShareState = 'idle' | 'loading' | 'copied';\n\nconst DEFAULT_LOADING_MESSAGES = [\n 'Thinking…',\n 'Recognizing intent…',\n 'Connecting the dots…',\n 'Synthesizing insights…',\n 'Formulating a response…',\n];\n\nconst headerClassName =\n 'web5-user-query sticky top-0 z-10 flex items-center justify-between bg-white/60 backdrop-blur-sm pl-5 pr-[10px] py-[7px] sm:px-[30px] sm:py-[17px]';\n\nexport interface UserQueryLoadingState {\n pendingQuery: string;\n /** Static progress message. If omitted, falls back to cycling through `messages`. */\n progressMessage?: string;\n /** Messages cycled while loading when `progressMessage` is not set. */\n messages?: string[];\n}\n\n/**\n * Product the visitor was redirected from (DL #114). Rendered as a back badge\n * above the query: back arrow + thumbnail + product name. All fields are\n * resolved and validated app-side (allowed-domain `backUrl`, `https:`\n * `imageUrl`) before reaching this presentational component.\n */\nexport interface ProductBackContext {\n /** Product display name. Required — without it the badge does not render. */\n title: string;\n /** Validated product thumbnail URL. Omitted/failed to load → arrow + title only. */\n imageUrl?: string;\n /** Validated product-page URL to return to. Omitted → badge is non-clickable. */\n backUrl?: string;\n /** Accessible label override. Defaults to `Back to ${title}`. */\n label?: string;\n}\n\nexport interface UserQueryProps {\n query: string;\n onNewConversation?: () => void;\n onNavigateToTriggerId?: (triggerId: string) => void;\n predecessorTriggerId?: string;\n currentTriggerId?: string;\n onShare?: (triggerId: string) => Promise<string>;\n /** Optional comment-mode toggle. When provided, render the chat-bubble\n * toggle button next to Share. The button reflects `commentMode` via\n * `is-on` styling and `aria-pressed`. */\n onToggleCommentMode?: () => void;\n commentMode?: boolean;\n /** Total number of comments on this response — shown as a badge next to the\n * toggle when > 0. */\n commentCount?: number;\n loading?: UserQueryLoadingState;\n /** Label for the \"new conversation\" action. Defaults to \"New conversation\". */\n newConversationLabel?: string;\n /** Label shown after the share link is copied. Defaults to \"Link Copied\". */\n copiedLabel?: string;\n /** How long the copied state stays visible, in ms. Defaults to 2000. */\n copiedDurationMs?: number;\n /** When set (visitor arrived from a product page), render a back-to-product\n * badge above the query (DL #114). */\n productBackContext?: ProductBackContext;\n /** Invoked with the validated `backUrl` when the badge is activated. */\n onBackToProduct?: (backUrl: string) => void;\n}\n\nexport const UserQuery: FC<UserQueryProps> = ({\n query,\n onNewConversation,\n onNavigateToTriggerId,\n predecessorTriggerId,\n currentTriggerId,\n onShare,\n onToggleCommentMode,\n commentMode = false,\n commentCount = 0,\n loading,\n newConversationLabel = 'New conversation',\n copiedLabel = 'Link Copied',\n copiedDurationMs = 2000,\n productBackContext,\n onBackToProduct,\n}) => {\n const forwardStack = useMemo(() => getForwardStack(), [currentTriggerId]);\n const canGoForward = forwardStack.length > 0;\n const canGoBack = !!predecessorTriggerId;\n const hasNavigation = canGoBack || canGoForward;\n\n const handleBack = useCallback(() => {\n if (!predecessorTriggerId || !currentTriggerId || !onNavigateToTriggerId) {\n return;\n }\n pushToForwardStack(currentTriggerId);\n onNavigateToTriggerId(predecessorTriggerId);\n }, [predecessorTriggerId, currentTriggerId, onNavigateToTriggerId]);\n\n const handleForward = useCallback(() => {\n if (!onNavigateToTriggerId) {\n return;\n }\n const nextTid = popFromForwardStack();\n if (!nextTid) {\n return;\n }\n onNavigateToTriggerId(nextTid);\n }, [onNavigateToTriggerId]);\n\n const handleNewConversation = useCallback(() => {\n clearForwardStack();\n onNewConversation?.();\n }, [onNewConversation]);\n\n const [shareState, setShareState] = useState<ShareState>('idle');\n\n const [productImageError, setProductImageError] = useState(false);\n useEffect(() => {\n setProductImageError(false);\n }, [productBackContext?.imageUrl]);\n\n const handleShare = useCallback(async () => {\n if (shareState !== 'idle') {\n return;\n }\n setShareState('loading');\n let urlToCopy = window.location.href;\n try {\n if (onShare && currentTriggerId) {\n urlToCopy = await onShare(currentTriggerId);\n }\n } catch (err) {\n console.warn('[share] failed, falling back to current URL:', err);\n }\n navigator.clipboard\n .writeText(urlToCopy)\n .catch((err) => console.warn('[share] clipboard write failed:', err));\n setShareState('copied');\n setTimeout(() => setShareState('idle'), copiedDurationMs);\n }, [shareState, onShare, currentTriggerId, copiedDurationMs]);\n\n const cyclingMessages = useMemo(\n () =>\n loading?.messages && loading.messages.length > 0\n ? loading.messages\n : DEFAULT_LOADING_MESSAGES,\n [loading?.messages],\n );\n const [cycledMessage, setCycledMessage] = useState(cyclingMessages[0]);\n\n useEffect(() => {\n if (!loading || loading.progressMessage) {\n return;\n }\n setCycledMessage(cyclingMessages[0]);\n if (cyclingMessages.length <= 1) {\n return;\n }\n let index = 0;\n const interval = setInterval(() => {\n index = (index + 1) % cyclingMessages.length;\n setCycledMessage(cyclingMessages[index]);\n }, 4000);\n return () => clearInterval(interval);\n }, [loading, cyclingMessages]);\n\n if (!query && !loading) {\n return null;\n }\n\n const isCopied = shareState === 'copied';\n const isLoading = shareState === 'loading';\n\n const productBadge = productBackContext\n ? (() => {\n const { title, imageUrl, backUrl, label } = productBackContext;\n const canNavigateBack = !!backUrl && !!onBackToProduct;\n const content = (\n <>\n <UndoIcon className=\"web5-user-query__product-back-icon\" />\n {imageUrl && !productImageError && (\n <span className=\"web5-user-query__product-back-thumb\">\n <img\n src={imageUrl}\n alt=\"\"\n onError={() => setProductImageError(true)}\n />\n </span>\n )}\n <span className=\"web5-user-query__product-back-title\">{title}</span>\n </>\n );\n return canNavigateBack ? (\n <button\n type=\"button\"\n onClick={() => onBackToProduct?.(backUrl!)}\n aria-label={label ?? `Back to ${title}`}\n className=\"web5-user-query__product-back\"\n >\n {content}\n </button>\n ) : (\n <div className=\"web5-user-query__product-back web5-user-query__product-back--static\">\n {content}\n </div>\n );\n })()\n : null;\n\n if (loading) {\n const progressText = loading.progressMessage ?? cycledMessage;\n return (\n <div\n className={headerClassName}\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n >\n <div className=\"web5-user-query__left flex-1\">\n {productBadge}\n <p\n className=\"text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={`Asking: ${loading.pendingQuery}`}\n >\n <span className=\"text-text-body/70\">Asking: </span>\n {loading.pendingQuery}\n </p>\n </div>\n {progressText && (\n <div className=\"hidden sm:flex items-center gap-2 ml-[10px] shrink-0 min-w-0\">\n <div\n className=\"w-4 h-4 shrink-0 animate-spin inline-block border-[2px] border-current border-t-transparent text-blue-600 dark:text-blue-500 rounded-full\"\n aria-hidden=\"true\"\n />\n <p className=\"text-[13px] leading-5 text-text-body/70 truncate max-w-[240px]\">\n {progressText}\n </p>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={headerClassName}>\n <div className=\"flex items-center gap-[30px] flex-1 min-w-0\">\n <div className=\"web5-user-query__left\">\n {productBadge}\n <p\n className=\"web5-user-query__title text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={query}\n >\n {query}\n </p>\n </div>\n {hasNavigation && (\n <div className=\"flex items-center gap-[9px]\">\n <button\n type=\"button\"\n onClick={handleBack}\n disabled={!canGoBack}\n title=\"Go to previous conversation\"\n aria-label=\"Go to previous conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n onClick={handleForward}\n disabled={!canGoForward}\n title=\"Go to next conversation\"\n aria-label=\"Go to next conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <RedoIcon />\n </button>\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-[10px] ml-[10px] sm:ml-0 shrink-0\">\n {/*\n Keyboard hint. It used to sit inside the prompt field, which was the\n wrong home for it twice over: it competed with the placeholder for the\n same space, and it disappeared exactly when the reader engaged with\n the input — so the shortcut was only ever advertised to someone who\n was not using it. Here it sits with the other page-level affordances\n and stays legible while the reader types.\n\n `aria-hidden` because the shortcut is already announced on the input\n itself via `aria-keyshortcuts`; this is the visual reminder, and\n repeating it to assistive tech would just be noise.\n */}\n <span className=\"web5-prompt-hint\" aria-hidden=\"true\">\n Press <kbd className=\"web5-prompt-hint__key\">/</kbd> to search\n </span>\n {/* Share button — wraps button + tooltips in a relative container */}\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label=\"Share this\"\n onClick={handleShare}\n disabled={isLoading || isCopied}\n className={`web5-user-query__share flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors disabled:cursor-default\n ${\n isCopied\n ? 'is-copied bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n {isCopied ? <CheckIcon /> : <ShareIcon />}\n </button>\n {/*\n Hover tooltip — the only place this action is named now that the\n button is icon-only at every width. Shown solely while the share is\n idle: the status bubble below drops into the same slot, and two\n overlapping bubbles saying different things is worse than one.\n */}\n {shareState === 'idle' && (\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n Share this\n </span>\n )}\n {/*\n Status bubble — while the link is being built, and once it is on the\n clipboard. It used to be mobile-only, because the desktop button\n carried \"Sharing…\" / \"Link Copied\" in its own label; with the label\n gone this is the only thing reporting the outcome, so it shows at\n every width.\n */}\n {shareState !== 'idle' && (\n <div className=\"web5-user-query__copied-toast absolute top-full right-0 mt-1 flex items-center gap-2 bg-[#2b2b2b] text-white text-[12px] leading-none px-3 py-2 rounded-[8px] whitespace-nowrap\">\n {isCopied && <CheckIcon />}\n {isLoading ? 'Sharing…' : copiedLabel}\n </div>\n )}\n </div>\n {onNewConversation && (\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label={newConversationLabel}\n onClick={handleNewConversation}\n className=\"web5-user-query__new-conversation flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 text-text-body bg-white border-0 cursor-pointer hover:bg-gray-50 transition-colors\"\n >\n <PlusIcon />\n </button>\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n {newConversationLabel}\n </span>\n </div>\n )}\n {onToggleCommentMode && (\n <button\n type=\"button\"\n onClick={onToggleCommentMode}\n aria-pressed={commentMode}\n title=\"Add a comment\"\n aria-label=\"Add a comment\"\n className={`relative flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors ${\n commentMode\n ? 'bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n <CommentIcon />\n {commentCount > 0 && (\n <span\n className={`absolute -top-1 -right-1 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] leading-[18px] text-center font-semibold ${\n commentMode ? 'bg-white text-[#2b2b2b]' : 'bg-[#2b2b2b] text-white'\n }`}\n >\n {commentCount}\n </span>\n )}\n </button>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AACA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,gBAAA,GAAAP,OAAA;AAKqC,IAAAQ,YAAA;AAAA,SAAAT,wBAAAU,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAZ,uBAAA,YAAAA,CAAAU,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAIrC,MAAMkB,wBAAwB,GAAG,CAC/B,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,CAC1B;AAED,MAAMC,eAAe,GACnB,oJAAoJ;;AAUtJ;AACA;AACA;AACA;AACA;AACA;;AAyCO,MAAMC,SAA6B,GAAGA,CAAC;EAC5CC,KAAK;EACLC,iBAAiB;EACjBC,qBAAqB;EACrBC,oBAAoB;EACpBC,gBAAgB;EAChBC,OAAO;EACPC,mBAAmB;EACnBC,WAAW,GAAG,KAAK;EACnBC,YAAY,GAAG,CAAC;EAChBC,OAAO;EACPC,oBAAoB,GAAG,kBAAkB;EACzCC,WAAW,GAAG,aAAa;EAC3BC,gBAAgB,GAAG,IAAI;EACvBC,kBAAkB;EAClBC;AACF,CAAC,KAAK;EACJ,MAAMC,YAAY,GAAG,IAAAC,cAAO,EAAC,MAAM,IAAAC,gCAAe,EAAC,CAAC,EAAE,CAACb,gBAAgB,CAAC,CAAC;EACzE,MAAMc,YAAY,GAAGH,YAAY,CAACI,MAAM,GAAG,CAAC;EAC5C,MAAMC,SAAS,GAAG,CAAC,CAACjB,oBAAoB;EACxC,MAAMkB,aAAa,GAAGD,SAAS,IAAIF,YAAY;EAE/C,MAAMI,UAAU,GAAG,IAAAC,kBAAW,EAAC,MAAM;IACnC,IAAI,CAACpB,oBAAoB,IAAI,CAACC,gBAAgB,IAAI,CAACF,qBAAqB,EAAE;MACxE;IACF;IACA,IAAAsB,mCAAkB,EAACpB,gBAAgB,CAAC;IACpCF,qBAAqB,CAACC,oBAAoB,CAAC;EAC7C,CAAC,EAAE,CAACA,oBAAoB,EAAEC,gBAAgB,EAAEF,qBAAqB,CAAC,CAAC;EAEnE,MAAMuB,aAAa,GAAG,IAAAF,kBAAW,EAAC,MAAM;IACtC,IAAI,CAACrB,qBAAqB,EAAE;MAC1B;IACF;IACA,MAAMwB,OAAO,GAAG,IAAAC,oCAAmB,EAAC,CAAC;IACrC,IAAI,CAACD,OAAO,EAAE;MACZ;IACF;IACAxB,qBAAqB,CAACwB,OAAO,CAAC;EAChC,CAAC,EAAE,CAACxB,qBAAqB,CAAC,CAAC;EAE3B,MAAM0B,qBAAqB,GAAG,IAAAL,kBAAW,EAAC,MAAM;IAC9C,IAAAM,kCAAiB,EAAC,CAAC;IACnB5B,iBAAiB,YAAjBA,iBAAiB,CAAG,CAAC;EACvB,CAAC,EAAE,CAACA,iBAAiB,CAAC,CAAC;EAEvB,MAAM,CAAC6B,UAAU,EAAEC,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAAa,MAAM,CAAC;EAEhE,MAAM,CAACC,iBAAiB,EAAEC,oBAAoB,CAAC,GAAG,IAAAF,eAAQ,EAAC,KAAK,CAAC;EACjE,IAAAG,gBAAS,EAAC,MAAM;IACdD,oBAAoB,CAAC,KAAK,CAAC;EAC7B,CAAC,EAAE,CAACrB,kBAAkB,oBAAlBA,kBAAkB,CAAEuB,QAAQ,CAAC,CAAC;EAElC,MAAMC,WAAW,GAAG,IAAAd,kBAAW,EAAC,YAAY;IAC1C,IAAIO,UAAU,KAAK,MAAM,EAAE;MACzB;IACF;IACAC,aAAa,CAAC,SAAS,CAAC;IACxB,IAAIO,SAAS,GAAGC,MAAM,CAACC,QAAQ,CAACC,IAAI;IACpC,IAAI;MACF,IAAIpC,OAAO,IAAID,gBAAgB,EAAE;QAC/BkC,SAAS,GAAG,MAAMjC,OAAO,CAACD,gBAAgB,CAAC;MAC7C;IACF,CAAC,CAAC,OAAOsC,GAAG,EAAE;MACZC,OAAO,CAACC,IAAI,CAAC,8CAA8C,EAAEF,GAAG,CAAC;IACnE;IACAG,SAAS,CAACC,SAAS,CAChBC,SAAS,CAACT,SAAS,CAAC,CACpBU,KAAK,CAAEN,GAAG,IAAKC,OAAO,CAACC,IAAI,CAAC,iCAAiC,EAAEF,GAAG,CAAC,CAAC;IACvEX,aAAa,CAAC,QAAQ,CAAC;IACvBkB,UAAU,CAAC,MAAMlB,aAAa,CAAC,MAAM,CAAC,EAAEnB,gBAAgB,CAAC;EAC3D,CAAC,EAAE,CAACkB,UAAU,EAAEzB,OAAO,EAAED,gBAAgB,EAAEQ,gBAAgB,CAAC,CAAC;EAE7D,MAAMsC,eAAe,GAAG,IAAAlC,cAAO,EAC7B,MACEP,OAAO,YAAPA,OAAO,CAAE0C,QAAQ,IAAI1C,OAAO,CAAC0C,QAAQ,CAAChC,MAAM,GAAG,CAAC,GAC5CV,OAAO,CAAC0C,QAAQ,GAChBtD,wBAAwB,EAC9B,CAACY,OAAO,oBAAPA,OAAO,CAAE0C,QAAQ,CACpB,CAAC;EACD,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAG,IAAArB,eAAQ,EAACkB,eAAe,CAAC,CAAC,CAAC,CAAC;EAEtE,IAAAf,gBAAS,EAAC,MAAM;IACd,IAAI,CAAC1B,OAAO,IAAIA,OAAO,CAAC6C,eAAe,EAAE;MACvC;IACF;IACAD,gBAAgB,CAACH,eAAe,CAAC,CAAC,CAAC,CAAC;IACpC,IAAIA,eAAe,CAAC/B,MAAM,IAAI,CAAC,EAAE;MAC/B;IACF;IACA,IAAIoC,KAAK,GAAG,CAAC;IACb,MAAMC,QAAQ,GAAGC,WAAW,CAAC,MAAM;MACjCF,KAAK,GAAG,CAACA,KAAK,GAAG,CAAC,IAAIL,eAAe,CAAC/B,MAAM;MAC5CkC,gBAAgB,CAACH,eAAe,CAACK,KAAK,CAAC,CAAC;IAC1C,CAAC,EAAE,IAAI,CAAC;IACR,OAAO,MAAMG,aAAa,CAACF,QAAQ,CAAC;EACtC,CAAC,EAAE,CAAC/C,OAAO,EAAEyC,eAAe,CAAC,CAAC;EAE9B,IAAI,CAAClD,KAAK,IAAI,CAACS,OAAO,EAAE;IACtB,OAAO,IAAI;EACb;EAEA,MAAMkD,QAAQ,GAAG7B,UAAU,KAAK,QAAQ;EACxC,MAAM8B,SAAS,GAAG9B,UAAU,KAAK,SAAS;EAE1C,MAAM+B,YAAY,GAAGhD,kBAAkB,GACnC,CAAC,MAAM;IACL,MAAM;MAAEiD,KAAK;MAAE1B,QAAQ;MAAE2B,OAAO;MAAEC;IAAM,CAAC,GAAGnD,kBAAkB;IAC9D,MAAMoD,eAAe,GAAG,CAAC,CAACF,OAAO,IAAI,CAAC,CAACjD,eAAe;IACtD,MAAMoD,OAAO,gBACXnG,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAApG,MAAA,CAAAqB,OAAA,CAAAgF,QAAA,qBACErG,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAC9F,SAAA,CAAAgG,QAAQ;MAACC,SAAS,EAAC,oCAAoC;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,CAAE,CAAC,EAC1DvC,QAAQ,IAAI,CAACH,iBAAiB,iBAC7BlE,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MAAMG,SAAS,EAAC,qCAAqC;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,gBACnD5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MACES,GAAG,EAAExC,QAAS;MACdyC,GAAG,EAAC,EAAE;MACNC,OAAO,EAAEA,CAAA,KAAM5C,oBAAoB,CAAC,IAAI,CAAE;MAAAqC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,CAC3C,CACG,CACP,eACD5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MAAMG,SAAS,EAAC,qCAAqC;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,GAAEb,KAAY,CACnE,CACH;IACD,OAAOG,eAAe,gBACpBlG,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MACEY,IAAI,EAAC,QAAQ;MACbC,OAAO,EAAEA,CAAA,KAAMlE,eAAe,oBAAfA,eAAe,CAAGiD,OAAQ,CAAE;MAC3C,cAAYC,KAAK,IAAI,WAAWF,KAAK,EAAG;MACxCQ,SAAS,EAAC,+BAA+B;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,GAExCT,OACK,CAAC,gBAETnG,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MAAKG,SAAS,EAAC,qEAAqE;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,GACjFT,OACE,CACN;EACH,CAAC,EAAE,CAAC,GACJ,IAAI;EAER,IAAIzD,OAAO,EAAE;IACX,MAAMwE,YAAY,GAAGxE,OAAO,CAAC6C,eAAe,IAAIF,aAAa;IAC7D,oBACErF,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MACEG,SAAS,EAAExE,eAAgB;MAC3BoF,IAAI,EAAC,QAAQ;MACb,aAAU,MAAM;MAChB,aAAU,QAAQ;MAAAX,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,gBAElB5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MAAKG,SAAS,EAAC,8BAA8B;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,GAC1Cd,YAAY,eACb9F,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MACEG,SAAS,EAAC,qEAAqE;MAC/ER,KAAK,EAAE,WAAWrD,OAAO,CAAC0E,YAAY,EAAG;MAAAZ,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,gBAEzC5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MAAMG,SAAS,EAAC,mBAAmB;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,GAAC,UAAc,CAAC,EAClDlE,OAAO,CAAC0E,YACR,CACA,CAAC,EACLF,YAAY,iBACXlH,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MAAKG,SAAS,EAAC,8DAA8D;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,gBAC3E5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MACEG,SAAS,EAAC,2IAA2I;MACrJ,eAAY,MAAM;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,CACnB,CAAC,eACF5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;MAAGG,SAAS,EAAC,gEAAgE;MAAAC,MAAA;MAAAC,QAAA;QAAAC,QAAA,EAAAhG,YAAA;QAAAiG,UAAA;QAAAC,YAAA;MAAA;IAAA,GAC1EM,YACA,CACA,CAEJ,CAAC;EAEV;EAEA,oBACElH,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAExE,eAAgB;IAAAyE,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAC9B5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,6CAA6C;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAC1D5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,uBAAuB;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GACnCd,YAAY,eACb9F,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IACEG,SAAS,EAAC,4FAA4F;IACtGR,KAAK,EAAE9D,KAAM;IAAAuE,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GAEZ3E,KACA,CACA,CAAC,EACLqB,aAAa,iBACZtD,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,6BAA6B;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAC1C5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IACEY,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAE1D,UAAW;IACpB8D,QAAQ,EAAE,CAAChE,SAAU;IACrB0C,KAAK,EAAC,6BAA6B;IACnC,cAAW,6BAA6B;IACxCQ,SAAS,EAAC,+KAA+K;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAEzL5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAC9F,SAAA,CAAAgG,QAAQ;IAAAE,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,CAAE,CACL,CAAC,eACT5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IACEY,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAEvD,aAAc;IACvB2D,QAAQ,EAAE,CAAClE,YAAa;IACxB4C,KAAK,EAAC,yBAAyB;IAC/B,cAAW,yBAAyB;IACpCQ,SAAS,EAAC,+KAA+K;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAEzL5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAC7F,SAAA,CAAA+G,QAAQ;IAAAd,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,CAAE,CACL,CACL,CAEJ,CAAC,eACN5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,yDAAyD;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAatE5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAMG,SAAS,EAAC,kBAAkB;IAAC,eAAY,MAAM;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GAAC,QAC9C,eAAA5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,uBAAuB;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GAAC,GAAM,CAAC,cAChD,CAAC,eAEP5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,wCAAwC;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBACrD5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IACEY,IAAI,EAAC,QAAQ;IACb,cAAW,YAAY;IACvBC,OAAO,EAAE3C,WAAY;IACrB+C,QAAQ,EAAExB,SAAS,IAAID,QAAS;IAChCW,SAAS,EAAE;AACvB,gBACgBX,QAAQ,GACJ,mCAAmC,GACnC,0CAA0C,EAC7C;IAAAY,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GAEJhB,QAAQ,gBAAG5F,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAChG,UAAA,CAAAmH,SAAS;IAAAf,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,CAAE,CAAC,gBAAG5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAACjG,UAAA,CAAAqH,SAAS;IAAAhB,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,CAAE,CAClC,CAAC,EAOR7C,UAAU,KAAK,MAAM,iBACpB/D,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAMG,SAAS,EAAC,0BAA0B;IAACY,IAAI,EAAC,SAAS;IAAAX,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GAAC,YAEpD,CACP,EAQA7C,UAAU,KAAK,MAAM,iBACpB/D,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,iLAAiL;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GAC7LhB,QAAQ,iBAAI5F,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAChG,UAAA,CAAAmH,SAAS;IAAAf,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,CAAE,CAAC,EACzBf,SAAS,GAAG,UAAU,GAAGjD,WACvB,CAEJ,CAAC,EACLV,iBAAiB,iBAChBlC,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAKG,SAAS,EAAC,wCAAwC;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBACrD5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IACEY,IAAI,EAAC,QAAQ;IACb,cAAYrE,oBAAqB;IACjCsE,OAAO,EAAEpD,qBAAsB;IAC/B0C,SAAS,EAAC,oNAAoN;IAAAC,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAE9N5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAC/F,SAAA,CAAAoH,QAAQ;IAAAjB,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,CAAE,CACL,CAAC,eACT5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IAAMG,SAAS,EAAC,0BAA0B;IAACY,IAAI,EAAC,SAAS;IAAAX,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GACtDjE,oBACG,CACH,CACN,EACAJ,mBAAmB,iBAClBvC,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IACEY,IAAI,EAAC,QAAQ;IACbC,OAAO,EAAE1E,mBAAoB;IAC7B,gBAAcC,WAAY;IAC1BuD,KAAK,EAAC,eAAe;IACrB,cAAW,eAAe;IAC1BQ,SAAS,EAAE,oJACT/D,WAAW,GACP,yBAAyB,GACzB,0CAA0C,EAC7C;IAAAgE,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,gBAEH5G,MAAA,CAAAqB,OAAA,CAAA+E,aAAA,CAAC5F,YAAA,CAAAkH,WAAW;IAAAlB,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,CAAE,CAAC,EACdnE,YAAY,GAAG,CAAC,iBACfzC,MAAA,CAAAqB,OAAA,CAAA+E,aAAA;IACEG,SAAS,EAAE,yHACT/D,WAAW,GAAG,yBAAyB,GAAG,yBAAyB,EAClE;IAAAgE,MAAA;IAAAC,QAAA;MAAAC,QAAA,EAAAhG,YAAA;MAAAiG,UAAA;MAAAC,YAAA;IAAA;EAAA,GAEFnE,YACG,CAEF,CAEP,CACF,CAAC;AAEV,CAAC;AAACkF,OAAA,CAAA3F,SAAA,GAAAA,SAAA","ignoreList":[]}
|
|
@@ -130,9 +130,10 @@
|
|
|
130
130
|
* deliberately keeps its own near-black, because that one is a status message
|
|
131
131
|
* rather than a label and should not read as an action.
|
|
132
132
|
*
|
|
133
|
-
*
|
|
134
|
-
* the
|
|
135
|
-
*
|
|
133
|
+
* The buttons are icon-only at every width, so this bubble is the only place
|
|
134
|
+
* the actions are spelled out on a pointer device. Hover and focus-within
|
|
135
|
+
* both, so a keyboard user tabbing through the header gets the same
|
|
136
|
+
* affordance instead of two unexplained icons.
|
|
136
137
|
*/
|
|
137
138
|
.web5-user-query__tooltip {
|
|
138
139
|
position: absolute;
|
|
@@ -161,11 +162,13 @@
|
|
|
161
162
|
}
|
|
162
163
|
|
|
163
164
|
/*
|
|
164
|
-
*
|
|
165
|
-
* permanently in the way.
|
|
166
|
-
* actually names them for anyone who needs
|
|
165
|
+
* Mobile: no hover to open the bubble on, so it would be either permanently
|
|
166
|
+
* invisible or permanently in the way. Nothing is shown there — the buttons
|
|
167
|
+
* carry `aria-label`, which is what actually names them for anyone who needs
|
|
168
|
+
* it. Both queries, because `hover: none` is the precise question and
|
|
169
|
+
* `pointer: coarse` is the one older engines answer.
|
|
167
170
|
*/
|
|
168
|
-
@media (pointer: coarse) {
|
|
171
|
+
@media (hover: none), (pointer: coarse) {
|
|
169
172
|
.web5-user-query__tooltip {
|
|
170
173
|
display: none;
|
|
171
174
|
}
|
|
@@ -195,23 +195,19 @@ export const UserQuery = _ref => {
|
|
|
195
195
|
disabled: isLoading || isCopied,
|
|
196
196
|
className: `web5-user-query__share flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors disabled:cursor-default
|
|
197
197
|
${isCopied ? 'is-copied bg-[#2b2b2b] text-white' : 'text-text-body bg-white hover:bg-gray-50'}`
|
|
198
|
-
}, isCopied ? /*#__PURE__*/React.createElement(CheckIcon, null) : /*#__PURE__*/React.createElement(ShareIcon, null), /*#__PURE__*/React.createElement("span", {
|
|
199
|
-
className: "hidden sm:inline"
|
|
200
|
-
}, isLoading ? 'Sharing…' : isCopied ? copiedLabel : 'Share')), !isCopied && /*#__PURE__*/React.createElement("span", {
|
|
198
|
+
}, isCopied ? /*#__PURE__*/React.createElement(CheckIcon, null) : /*#__PURE__*/React.createElement(ShareIcon, null)), shareState === 'idle' && /*#__PURE__*/React.createElement("span", {
|
|
201
199
|
className: "web5-user-query__tooltip",
|
|
202
200
|
role: "tooltip"
|
|
203
|
-
}, "Share this"),
|
|
204
|
-
className: "web5-user-query__copied-toast
|
|
205
|
-
}, /*#__PURE__*/React.createElement(CheckIcon, null), copiedLabel)), onNewConversation && /*#__PURE__*/React.createElement("div", {
|
|
201
|
+
}, "Share this"), shareState !== 'idle' && /*#__PURE__*/React.createElement("div", {
|
|
202
|
+
className: "web5-user-query__copied-toast absolute top-full right-0 mt-1 flex items-center gap-2 bg-[#2b2b2b] text-white text-[12px] leading-none px-3 py-2 rounded-[8px] whitespace-nowrap"
|
|
203
|
+
}, isCopied && /*#__PURE__*/React.createElement(CheckIcon, null), isLoading ? 'Sharing…' : copiedLabel)), onNewConversation && /*#__PURE__*/React.createElement("div", {
|
|
206
204
|
className: "web5-user-query__action group relative"
|
|
207
205
|
}, /*#__PURE__*/React.createElement("button", {
|
|
208
206
|
type: "button",
|
|
209
207
|
"aria-label": newConversationLabel,
|
|
210
208
|
onClick: handleNewConversation,
|
|
211
209
|
className: "web5-user-query__new-conversation flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 text-text-body bg-white border-0 cursor-pointer hover:bg-gray-50 transition-colors"
|
|
212
|
-
}, /*#__PURE__*/React.createElement(PlusIcon, null), /*#__PURE__*/React.createElement("span", {
|
|
213
|
-
className: "hidden sm:inline"
|
|
214
|
-
}, newConversationLabel)), /*#__PURE__*/React.createElement("span", {
|
|
210
|
+
}, /*#__PURE__*/React.createElement(PlusIcon, null)), /*#__PURE__*/React.createElement("span", {
|
|
215
211
|
className: "web5-user-query__tooltip",
|
|
216
212
|
role: "tooltip"
|
|
217
213
|
}, newConversationLabel)), onToggleCommentMode && /*#__PURE__*/React.createElement("button", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useCallback","useEffect","useMemo","useState","ShareIcon","CheckIcon","PlusIcon","UndoIcon","RedoIcon","CommentIcon","getForwardStack","pushToForwardStack","popFromForwardStack","clearForwardStack","DEFAULT_LOADING_MESSAGES","headerClassName","UserQuery","_ref","query","onNewConversation","onNavigateToTriggerId","predecessorTriggerId","currentTriggerId","onShare","onToggleCommentMode","commentMode","commentCount","loading","newConversationLabel","copiedLabel","copiedDurationMs","productBackContext","onBackToProduct","forwardStack","canGoForward","length","canGoBack","hasNavigation","handleBack","handleForward","nextTid","handleNewConversation","shareState","setShareState","productImageError","setProductImageError","imageUrl","handleShare","urlToCopy","window","location","href","err","console","warn","navigator","clipboard","writeText","catch","setTimeout","cyclingMessages","messages","cycledMessage","setCycledMessage","progressMessage","index","interval","setInterval","clearInterval","isCopied","isLoading","productBadge","title","backUrl","label","canNavigateBack","content","createElement","Fragment","className","src","alt","onError","type","onClick","progressText","role","pendingQuery","disabled"],"sources":["../../../../src/components/ui/UserQuery.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { ShareIcon } from './icons/ShareIcon';\nimport { CheckIcon } from './icons/CheckIcon';\nimport { PlusIcon } from './icons/PlusIcon';\nimport { UndoIcon } from './icons/UndoIcon';\nimport { RedoIcon } from './icons/RedoIcon';\nimport { CommentIcon } from './icons/CommentIcon';\nimport {\n getForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n clearForwardStack,\n} from '../../utils/navigationStack';\n\ntype ShareState = 'idle' | 'loading' | 'copied';\n\nconst DEFAULT_LOADING_MESSAGES = [\n 'Thinking…',\n 'Recognizing intent…',\n 'Connecting the dots…',\n 'Synthesizing insights…',\n 'Formulating a response…',\n];\n\nconst headerClassName =\n 'web5-user-query sticky top-0 z-10 flex items-center justify-between bg-white/60 backdrop-blur-sm pl-5 pr-[10px] py-[7px] sm:px-[30px] sm:py-[17px]';\n\nexport interface UserQueryLoadingState {\n pendingQuery: string;\n /** Static progress message. If omitted, falls back to cycling through `messages`. */\n progressMessage?: string;\n /** Messages cycled while loading when `progressMessage` is not set. */\n messages?: string[];\n}\n\n/**\n * Product the visitor was redirected from (DL #114). Rendered as a back badge\n * above the query: back arrow + thumbnail + product name. All fields are\n * resolved and validated app-side (allowed-domain `backUrl`, `https:`\n * `imageUrl`) before reaching this presentational component.\n */\nexport interface ProductBackContext {\n /** Product display name. Required — without it the badge does not render. */\n title: string;\n /** Validated product thumbnail URL. Omitted/failed to load → arrow + title only. */\n imageUrl?: string;\n /** Validated product-page URL to return to. Omitted → badge is non-clickable. */\n backUrl?: string;\n /** Accessible label override. Defaults to `Back to ${title}`. */\n label?: string;\n}\n\nexport interface UserQueryProps {\n query: string;\n onNewConversation?: () => void;\n onNavigateToTriggerId?: (triggerId: string) => void;\n predecessorTriggerId?: string;\n currentTriggerId?: string;\n onShare?: (triggerId: string) => Promise<string>;\n /** Optional comment-mode toggle. When provided, render the chat-bubble\n * toggle button next to Share. The button reflects `commentMode` via\n * `is-on` styling and `aria-pressed`. */\n onToggleCommentMode?: () => void;\n commentMode?: boolean;\n /** Total number of comments on this response — shown as a badge next to the\n * toggle when > 0. */\n commentCount?: number;\n loading?: UserQueryLoadingState;\n /** Label for the \"new conversation\" action. Defaults to \"New conversation\". */\n newConversationLabel?: string;\n /** Label shown after the share link is copied. Defaults to \"Link Copied\". */\n copiedLabel?: string;\n /** How long the copied state stays visible, in ms. Defaults to 2000. */\n copiedDurationMs?: number;\n /** When set (visitor arrived from a product page), render a back-to-product\n * badge above the query (DL #114). */\n productBackContext?: ProductBackContext;\n /** Invoked with the validated `backUrl` when the badge is activated. */\n onBackToProduct?: (backUrl: string) => void;\n}\n\nexport const UserQuery: FC<UserQueryProps> = ({\n query,\n onNewConversation,\n onNavigateToTriggerId,\n predecessorTriggerId,\n currentTriggerId,\n onShare,\n onToggleCommentMode,\n commentMode = false,\n commentCount = 0,\n loading,\n newConversationLabel = 'New conversation',\n copiedLabel = 'Link Copied',\n copiedDurationMs = 2000,\n productBackContext,\n onBackToProduct,\n}) => {\n const forwardStack = useMemo(() => getForwardStack(), [currentTriggerId]);\n const canGoForward = forwardStack.length > 0;\n const canGoBack = !!predecessorTriggerId;\n const hasNavigation = canGoBack || canGoForward;\n\n const handleBack = useCallback(() => {\n if (!predecessorTriggerId || !currentTriggerId || !onNavigateToTriggerId) {\n return;\n }\n pushToForwardStack(currentTriggerId);\n onNavigateToTriggerId(predecessorTriggerId);\n }, [predecessorTriggerId, currentTriggerId, onNavigateToTriggerId]);\n\n const handleForward = useCallback(() => {\n if (!onNavigateToTriggerId) {\n return;\n }\n const nextTid = popFromForwardStack();\n if (!nextTid) {\n return;\n }\n onNavigateToTriggerId(nextTid);\n }, [onNavigateToTriggerId]);\n\n const handleNewConversation = useCallback(() => {\n clearForwardStack();\n onNewConversation?.();\n }, [onNewConversation]);\n\n const [shareState, setShareState] = useState<ShareState>('idle');\n\n const [productImageError, setProductImageError] = useState(false);\n useEffect(() => {\n setProductImageError(false);\n }, [productBackContext?.imageUrl]);\n\n const handleShare = useCallback(async () => {\n if (shareState !== 'idle') {\n return;\n }\n setShareState('loading');\n let urlToCopy = window.location.href;\n try {\n if (onShare && currentTriggerId) {\n urlToCopy = await onShare(currentTriggerId);\n }\n } catch (err) {\n console.warn('[share] failed, falling back to current URL:', err);\n }\n navigator.clipboard\n .writeText(urlToCopy)\n .catch((err) => console.warn('[share] clipboard write failed:', err));\n setShareState('copied');\n setTimeout(() => setShareState('idle'), copiedDurationMs);\n }, [shareState, onShare, currentTriggerId, copiedDurationMs]);\n\n const cyclingMessages = useMemo(\n () =>\n loading?.messages && loading.messages.length > 0\n ? loading.messages\n : DEFAULT_LOADING_MESSAGES,\n [loading?.messages],\n );\n const [cycledMessage, setCycledMessage] = useState(cyclingMessages[0]);\n\n useEffect(() => {\n if (!loading || loading.progressMessage) {\n return;\n }\n setCycledMessage(cyclingMessages[0]);\n if (cyclingMessages.length <= 1) {\n return;\n }\n let index = 0;\n const interval = setInterval(() => {\n index = (index + 1) % cyclingMessages.length;\n setCycledMessage(cyclingMessages[index]);\n }, 4000);\n return () => clearInterval(interval);\n }, [loading, cyclingMessages]);\n\n if (!query && !loading) {\n return null;\n }\n\n const isCopied = shareState === 'copied';\n const isLoading = shareState === 'loading';\n\n const productBadge = productBackContext\n ? (() => {\n const { title, imageUrl, backUrl, label } = productBackContext;\n const canNavigateBack = !!backUrl && !!onBackToProduct;\n const content = (\n <>\n <UndoIcon className=\"web5-user-query__product-back-icon\" />\n {imageUrl && !productImageError && (\n <span className=\"web5-user-query__product-back-thumb\">\n <img\n src={imageUrl}\n alt=\"\"\n onError={() => setProductImageError(true)}\n />\n </span>\n )}\n <span className=\"web5-user-query__product-back-title\">{title}</span>\n </>\n );\n return canNavigateBack ? (\n <button\n type=\"button\"\n onClick={() => onBackToProduct?.(backUrl!)}\n aria-label={label ?? `Back to ${title}`}\n className=\"web5-user-query__product-back\"\n >\n {content}\n </button>\n ) : (\n <div className=\"web5-user-query__product-back web5-user-query__product-back--static\">\n {content}\n </div>\n );\n })()\n : null;\n\n if (loading) {\n const progressText = loading.progressMessage ?? cycledMessage;\n return (\n <div\n className={headerClassName}\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n >\n <div className=\"web5-user-query__left flex-1\">\n {productBadge}\n <p\n className=\"text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={`Asking: ${loading.pendingQuery}`}\n >\n <span className=\"text-text-body/70\">Asking: </span>\n {loading.pendingQuery}\n </p>\n </div>\n {progressText && (\n <div className=\"hidden sm:flex items-center gap-2 ml-[10px] shrink-0 min-w-0\">\n <div\n className=\"w-4 h-4 shrink-0 animate-spin inline-block border-[2px] border-current border-t-transparent text-blue-600 dark:text-blue-500 rounded-full\"\n aria-hidden=\"true\"\n />\n <p className=\"text-[13px] leading-5 text-text-body/70 truncate max-w-[240px]\">\n {progressText}\n </p>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={headerClassName}>\n <div className=\"flex items-center gap-[30px] flex-1 min-w-0\">\n <div className=\"web5-user-query__left\">\n {productBadge}\n <p\n className=\"web5-user-query__title text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={query}\n >\n {query}\n </p>\n </div>\n {hasNavigation && (\n <div className=\"flex items-center gap-[9px]\">\n <button\n type=\"button\"\n onClick={handleBack}\n disabled={!canGoBack}\n title=\"Go to previous conversation\"\n aria-label=\"Go to previous conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n onClick={handleForward}\n disabled={!canGoForward}\n title=\"Go to next conversation\"\n aria-label=\"Go to next conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <RedoIcon />\n </button>\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-[10px] ml-[10px] sm:ml-0 shrink-0\">\n {/*\n Keyboard hint. It used to sit inside the prompt field, which was the\n wrong home for it twice over: it competed with the placeholder for the\n same space, and it disappeared exactly when the reader engaged with\n the input — so the shortcut was only ever advertised to someone who\n was not using it. Here it sits with the other page-level affordances\n and stays legible while the reader types.\n\n `aria-hidden` because the shortcut is already announced on the input\n itself via `aria-keyshortcuts`; this is the visual reminder, and\n repeating it to assistive tech would just be noise.\n */}\n <span className=\"web5-prompt-hint\" aria-hidden=\"true\">\n Press <kbd className=\"web5-prompt-hint__key\">/</kbd> to search\n </span>\n {/* Share button — wraps button + tooltips in a relative container */}\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label=\"Share this\"\n onClick={handleShare}\n disabled={isLoading || isCopied}\n className={`web5-user-query__share flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors disabled:cursor-default\n ${\n isCopied\n ? 'is-copied bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n {isCopied ? <CheckIcon /> : <ShareIcon />}\n <span className=\"hidden sm:inline\">\n {isLoading ? 'Sharing…' : isCopied ? copiedLabel : 'Share'}\n </span>\n </button>\n {/*\n Hover tooltip. Suppressed once the link is copied, because the\n copied state is its own message and two overlapping bubbles saying\n different things is worse than none.\n */}\n {!isCopied && (\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n Share this\n </span>\n )}\n {/* Mobile-only tooltip: drops below the button when link is copied */}\n {isCopied && (\n <div className=\"web5-user-query__copied-toast sm:hidden absolute top-full right-0 mt-1 flex items-center gap-2 bg-[#2b2b2b] text-white text-[12px] leading-none px-3 py-2 rounded-[8px] whitespace-nowrap\">\n <CheckIcon />\n {copiedLabel}\n </div>\n )}\n </div>\n {onNewConversation && (\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label={newConversationLabel}\n onClick={handleNewConversation}\n className=\"web5-user-query__new-conversation flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 text-text-body bg-white border-0 cursor-pointer hover:bg-gray-50 transition-colors\"\n >\n <PlusIcon />\n <span className=\"hidden sm:inline\">{newConversationLabel}</span>\n </button>\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n {newConversationLabel}\n </span>\n </div>\n )}\n {onToggleCommentMode && (\n <button\n type=\"button\"\n onClick={onToggleCommentMode}\n aria-pressed={commentMode}\n title=\"Add a comment\"\n aria-label=\"Add a comment\"\n className={`relative flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors ${\n commentMode\n ? 'bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n <CommentIcon />\n {commentCount > 0 && (\n <span\n className={`absolute -top-1 -right-1 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] leading-[18px] text-center font-semibold ${\n commentMode ? 'bg-white text-[#2b2b2b]' : 'bg-[#2b2b2b] text-white'\n }`}\n >\n {commentCount}\n </span>\n )}\n </button>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","useCallback","useEffect","useMemo","useState","ShareIcon","CheckIcon","PlusIcon","UndoIcon","RedoIcon","CommentIcon","getForwardStack","pushToForwardStack","popFromForwardStack","clearForwardStack","DEFAULT_LOADING_MESSAGES","headerClassName","UserQuery","_ref","query","onNewConversation","onNavigateToTriggerId","predecessorTriggerId","currentTriggerId","onShare","onToggleCommentMode","commentMode","commentCount","loading","newConversationLabel","copiedLabel","copiedDurationMs","productBackContext","onBackToProduct","forwardStack","canGoForward","length","canGoBack","hasNavigation","handleBack","handleForward","nextTid","handleNewConversation","shareState","setShareState","productImageError","setProductImageError","imageUrl","handleShare","urlToCopy","window","location","href","err","console","warn","navigator","clipboard","writeText","catch","setTimeout","cyclingMessages","messages","cycledMessage","setCycledMessage","progressMessage","index","interval","setInterval","clearInterval","isCopied","isLoading","productBadge","title","backUrl","label","canNavigateBack","content","createElement","Fragment","className","src","alt","onError","type","onClick","progressText","role","pendingQuery","disabled"],"sources":["../../../../src/components/ui/UserQuery.tsx"],"sourcesContent":["import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { ShareIcon } from './icons/ShareIcon';\nimport { CheckIcon } from './icons/CheckIcon';\nimport { PlusIcon } from './icons/PlusIcon';\nimport { UndoIcon } from './icons/UndoIcon';\nimport { RedoIcon } from './icons/RedoIcon';\nimport { CommentIcon } from './icons/CommentIcon';\nimport {\n getForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n clearForwardStack,\n} from '../../utils/navigationStack';\n\ntype ShareState = 'idle' | 'loading' | 'copied';\n\nconst DEFAULT_LOADING_MESSAGES = [\n 'Thinking…',\n 'Recognizing intent…',\n 'Connecting the dots…',\n 'Synthesizing insights…',\n 'Formulating a response…',\n];\n\nconst headerClassName =\n 'web5-user-query sticky top-0 z-10 flex items-center justify-between bg-white/60 backdrop-blur-sm pl-5 pr-[10px] py-[7px] sm:px-[30px] sm:py-[17px]';\n\nexport interface UserQueryLoadingState {\n pendingQuery: string;\n /** Static progress message. If omitted, falls back to cycling through `messages`. */\n progressMessage?: string;\n /** Messages cycled while loading when `progressMessage` is not set. */\n messages?: string[];\n}\n\n/**\n * Product the visitor was redirected from (DL #114). Rendered as a back badge\n * above the query: back arrow + thumbnail + product name. All fields are\n * resolved and validated app-side (allowed-domain `backUrl`, `https:`\n * `imageUrl`) before reaching this presentational component.\n */\nexport interface ProductBackContext {\n /** Product display name. Required — without it the badge does not render. */\n title: string;\n /** Validated product thumbnail URL. Omitted/failed to load → arrow + title only. */\n imageUrl?: string;\n /** Validated product-page URL to return to. Omitted → badge is non-clickable. */\n backUrl?: string;\n /** Accessible label override. Defaults to `Back to ${title}`. */\n label?: string;\n}\n\nexport interface UserQueryProps {\n query: string;\n onNewConversation?: () => void;\n onNavigateToTriggerId?: (triggerId: string) => void;\n predecessorTriggerId?: string;\n currentTriggerId?: string;\n onShare?: (triggerId: string) => Promise<string>;\n /** Optional comment-mode toggle. When provided, render the chat-bubble\n * toggle button next to Share. The button reflects `commentMode` via\n * `is-on` styling and `aria-pressed`. */\n onToggleCommentMode?: () => void;\n commentMode?: boolean;\n /** Total number of comments on this response — shown as a badge next to the\n * toggle when > 0. */\n commentCount?: number;\n loading?: UserQueryLoadingState;\n /** Label for the \"new conversation\" action. Defaults to \"New conversation\". */\n newConversationLabel?: string;\n /** Label shown after the share link is copied. Defaults to \"Link Copied\". */\n copiedLabel?: string;\n /** How long the copied state stays visible, in ms. Defaults to 2000. */\n copiedDurationMs?: number;\n /** When set (visitor arrived from a product page), render a back-to-product\n * badge above the query (DL #114). */\n productBackContext?: ProductBackContext;\n /** Invoked with the validated `backUrl` when the badge is activated. */\n onBackToProduct?: (backUrl: string) => void;\n}\n\nexport const UserQuery: FC<UserQueryProps> = ({\n query,\n onNewConversation,\n onNavigateToTriggerId,\n predecessorTriggerId,\n currentTriggerId,\n onShare,\n onToggleCommentMode,\n commentMode = false,\n commentCount = 0,\n loading,\n newConversationLabel = 'New conversation',\n copiedLabel = 'Link Copied',\n copiedDurationMs = 2000,\n productBackContext,\n onBackToProduct,\n}) => {\n const forwardStack = useMemo(() => getForwardStack(), [currentTriggerId]);\n const canGoForward = forwardStack.length > 0;\n const canGoBack = !!predecessorTriggerId;\n const hasNavigation = canGoBack || canGoForward;\n\n const handleBack = useCallback(() => {\n if (!predecessorTriggerId || !currentTriggerId || !onNavigateToTriggerId) {\n return;\n }\n pushToForwardStack(currentTriggerId);\n onNavigateToTriggerId(predecessorTriggerId);\n }, [predecessorTriggerId, currentTriggerId, onNavigateToTriggerId]);\n\n const handleForward = useCallback(() => {\n if (!onNavigateToTriggerId) {\n return;\n }\n const nextTid = popFromForwardStack();\n if (!nextTid) {\n return;\n }\n onNavigateToTriggerId(nextTid);\n }, [onNavigateToTriggerId]);\n\n const handleNewConversation = useCallback(() => {\n clearForwardStack();\n onNewConversation?.();\n }, [onNewConversation]);\n\n const [shareState, setShareState] = useState<ShareState>('idle');\n\n const [productImageError, setProductImageError] = useState(false);\n useEffect(() => {\n setProductImageError(false);\n }, [productBackContext?.imageUrl]);\n\n const handleShare = useCallback(async () => {\n if (shareState !== 'idle') {\n return;\n }\n setShareState('loading');\n let urlToCopy = window.location.href;\n try {\n if (onShare && currentTriggerId) {\n urlToCopy = await onShare(currentTriggerId);\n }\n } catch (err) {\n console.warn('[share] failed, falling back to current URL:', err);\n }\n navigator.clipboard\n .writeText(urlToCopy)\n .catch((err) => console.warn('[share] clipboard write failed:', err));\n setShareState('copied');\n setTimeout(() => setShareState('idle'), copiedDurationMs);\n }, [shareState, onShare, currentTriggerId, copiedDurationMs]);\n\n const cyclingMessages = useMemo(\n () =>\n loading?.messages && loading.messages.length > 0\n ? loading.messages\n : DEFAULT_LOADING_MESSAGES,\n [loading?.messages],\n );\n const [cycledMessage, setCycledMessage] = useState(cyclingMessages[0]);\n\n useEffect(() => {\n if (!loading || loading.progressMessage) {\n return;\n }\n setCycledMessage(cyclingMessages[0]);\n if (cyclingMessages.length <= 1) {\n return;\n }\n let index = 0;\n const interval = setInterval(() => {\n index = (index + 1) % cyclingMessages.length;\n setCycledMessage(cyclingMessages[index]);\n }, 4000);\n return () => clearInterval(interval);\n }, [loading, cyclingMessages]);\n\n if (!query && !loading) {\n return null;\n }\n\n const isCopied = shareState === 'copied';\n const isLoading = shareState === 'loading';\n\n const productBadge = productBackContext\n ? (() => {\n const { title, imageUrl, backUrl, label } = productBackContext;\n const canNavigateBack = !!backUrl && !!onBackToProduct;\n const content = (\n <>\n <UndoIcon className=\"web5-user-query__product-back-icon\" />\n {imageUrl && !productImageError && (\n <span className=\"web5-user-query__product-back-thumb\">\n <img\n src={imageUrl}\n alt=\"\"\n onError={() => setProductImageError(true)}\n />\n </span>\n )}\n <span className=\"web5-user-query__product-back-title\">{title}</span>\n </>\n );\n return canNavigateBack ? (\n <button\n type=\"button\"\n onClick={() => onBackToProduct?.(backUrl!)}\n aria-label={label ?? `Back to ${title}`}\n className=\"web5-user-query__product-back\"\n >\n {content}\n </button>\n ) : (\n <div className=\"web5-user-query__product-back web5-user-query__product-back--static\">\n {content}\n </div>\n );\n })()\n : null;\n\n if (loading) {\n const progressText = loading.progressMessage ?? cycledMessage;\n return (\n <div\n className={headerClassName}\n role=\"status\"\n aria-busy=\"true\"\n aria-live=\"polite\"\n >\n <div className=\"web5-user-query__left flex-1\">\n {productBadge}\n <p\n className=\"text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={`Asking: ${loading.pendingQuery}`}\n >\n <span className=\"text-text-body/70\">Asking: </span>\n {loading.pendingQuery}\n </p>\n </div>\n {progressText && (\n <div className=\"hidden sm:flex items-center gap-2 ml-[10px] shrink-0 min-w-0\">\n <div\n className=\"w-4 h-4 shrink-0 animate-spin inline-block border-[2px] border-current border-t-transparent text-blue-600 dark:text-blue-500 rounded-full\"\n aria-hidden=\"true\"\n />\n <p className=\"text-[13px] leading-5 text-text-body/70 truncate max-w-[240px]\">\n {progressText}\n </p>\n </div>\n )}\n </div>\n );\n }\n\n return (\n <div className={headerClassName}>\n <div className=\"flex items-center gap-[30px] flex-1 min-w-0\">\n <div className=\"web5-user-query__left\">\n {productBadge}\n <p\n className=\"web5-user-query__title text-[14px] leading-5 text-text-body truncate min-w-0 max-w-[700px]\"\n title={query}\n >\n {query}\n </p>\n </div>\n {hasNavigation && (\n <div className=\"flex items-center gap-[9px]\">\n <button\n type=\"button\"\n onClick={handleBack}\n disabled={!canGoBack}\n title=\"Go to previous conversation\"\n aria-label=\"Go to previous conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <UndoIcon />\n </button>\n <button\n type=\"button\"\n onClick={handleForward}\n disabled={!canGoForward}\n title=\"Go to next conversation\"\n aria-label=\"Go to next conversation\"\n className=\"w-6 h-6 flex items-center justify-center text-text-body hover:text-black transition-colors bg-transparent border-0 cursor-pointer disabled:opacity-30 disabled:cursor-default\"\n >\n <RedoIcon />\n </button>\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-[10px] ml-[10px] sm:ml-0 shrink-0\">\n {/*\n Keyboard hint. It used to sit inside the prompt field, which was the\n wrong home for it twice over: it competed with the placeholder for the\n same space, and it disappeared exactly when the reader engaged with\n the input — so the shortcut was only ever advertised to someone who\n was not using it. Here it sits with the other page-level affordances\n and stays legible while the reader types.\n\n `aria-hidden` because the shortcut is already announced on the input\n itself via `aria-keyshortcuts`; this is the visual reminder, and\n repeating it to assistive tech would just be noise.\n */}\n <span className=\"web5-prompt-hint\" aria-hidden=\"true\">\n Press <kbd className=\"web5-prompt-hint__key\">/</kbd> to search\n </span>\n {/* Share button — wraps button + tooltips in a relative container */}\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label=\"Share this\"\n onClick={handleShare}\n disabled={isLoading || isCopied}\n className={`web5-user-query__share flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors disabled:cursor-default\n ${\n isCopied\n ? 'is-copied bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n {isCopied ? <CheckIcon /> : <ShareIcon />}\n </button>\n {/*\n Hover tooltip — the only place this action is named now that the\n button is icon-only at every width. Shown solely while the share is\n idle: the status bubble below drops into the same slot, and two\n overlapping bubbles saying different things is worse than one.\n */}\n {shareState === 'idle' && (\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n Share this\n </span>\n )}\n {/*\n Status bubble — while the link is being built, and once it is on the\n clipboard. It used to be mobile-only, because the desktop button\n carried \"Sharing…\" / \"Link Copied\" in its own label; with the label\n gone this is the only thing reporting the outcome, so it shows at\n every width.\n */}\n {shareState !== 'idle' && (\n <div className=\"web5-user-query__copied-toast absolute top-full right-0 mt-1 flex items-center gap-2 bg-[#2b2b2b] text-white text-[12px] leading-none px-3 py-2 rounded-[8px] whitespace-nowrap\">\n {isCopied && <CheckIcon />}\n {isLoading ? 'Sharing…' : copiedLabel}\n </div>\n )}\n </div>\n {onNewConversation && (\n <div className=\"web5-user-query__action group relative\">\n <button\n type=\"button\"\n aria-label={newConversationLabel}\n onClick={handleNewConversation}\n className=\"web5-user-query__new-conversation flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 text-text-body bg-white border-0 cursor-pointer hover:bg-gray-50 transition-colors\"\n >\n <PlusIcon />\n </button>\n <span className=\"web5-user-query__tooltip\" role=\"tooltip\">\n {newConversationLabel}\n </span>\n </div>\n )}\n {onToggleCommentMode && (\n <button\n type=\"button\"\n onClick={onToggleCommentMode}\n aria-pressed={commentMode}\n title=\"Add a comment\"\n aria-label=\"Add a comment\"\n className={`relative flex items-center gap-2 p-[6px] sm:px-[13px] sm:py-[5px] rounded-[30px] text-[13px] leading-5 border-0 cursor-pointer transition-colors ${\n commentMode\n ? 'bg-[#2b2b2b] text-white'\n : 'text-text-body bg-white hover:bg-gray-50'\n }`}\n >\n <CommentIcon />\n {commentCount > 0 && (\n <span\n className={`absolute -top-1 -right-1 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] leading-[18px] text-center font-semibold ${\n commentMode ? 'bg-white text-[#2b2b2b]' : 'bg-[#2b2b2b] text-white'\n }`}\n >\n {commentCount}\n </span>\n )}\n </button>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserQuery.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/UserQuery.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAA6C,MAAM,OAAO,CAAC;AA2B7E,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD;;8CAE0C;IAC1C,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;2BACuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,+EAA+E;IAC/E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;2CACuC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,wEAAwE;IACxE,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,
|
|
1
|
+
{"version":3,"file":"UserQuery.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/UserQuery.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAA6C,MAAM,OAAO,CAAC;AA2B7E,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,qFAAqF;IACrF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,qBAAqB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD;;8CAE0C;IAC1C,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;2BACuB;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,+EAA+E;IAC/E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;2CACuC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,wEAAwE;IACxE,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAwTxC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/web5-core",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "1.63.
|
|
4
|
+
"version": "1.63.26",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "tsachis",
|
|
7
7
|
"email": "tsachis@wix.com"
|
|
@@ -100,5 +100,5 @@
|
|
|
100
100
|
"wallaby": {
|
|
101
101
|
"autoDetect": true
|
|
102
102
|
},
|
|
103
|
-
"falconPackageHash": "
|
|
103
|
+
"falconPackageHash": "e17a673dfaa85da090c05597beed01db81236d5d7042e8cecd2f01a5"
|
|
104
104
|
}
|
|
@@ -130,9 +130,10 @@
|
|
|
130
130
|
* deliberately keeps its own near-black, because that one is a status message
|
|
131
131
|
* rather than a label and should not read as an action.
|
|
132
132
|
*
|
|
133
|
-
*
|
|
134
|
-
* the
|
|
135
|
-
*
|
|
133
|
+
* The buttons are icon-only at every width, so this bubble is the only place
|
|
134
|
+
* the actions are spelled out on a pointer device. Hover and focus-within
|
|
135
|
+
* both, so a keyboard user tabbing through the header gets the same
|
|
136
|
+
* affordance instead of two unexplained icons.
|
|
136
137
|
*/
|
|
137
138
|
.web5-user-query__tooltip {
|
|
138
139
|
position: absolute;
|
|
@@ -161,11 +162,13 @@
|
|
|
161
162
|
}
|
|
162
163
|
|
|
163
164
|
/*
|
|
164
|
-
*
|
|
165
|
-
* permanently in the way.
|
|
166
|
-
* actually names them for anyone who needs
|
|
165
|
+
* Mobile: no hover to open the bubble on, so it would be either permanently
|
|
166
|
+
* invisible or permanently in the way. Nothing is shown there — the buttons
|
|
167
|
+
* carry `aria-label`, which is what actually names them for anyone who needs
|
|
168
|
+
* it. Both queries, because `hover: none` is the precise question and
|
|
169
|
+
* `pointer: coarse` is the one older engines answer.
|
|
167
170
|
*/
|
|
168
|
-
@media (pointer: coarse) {
|
|
171
|
+
@media (hover: none), (pointer: coarse) {
|
|
169
172
|
.web5-user-query__tooltip {
|
|
170
173
|
display: none;
|
|
171
174
|
}
|