@wix/web5-core 1.63.41 → 1.63.43
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/AiDisclosure.js +17 -19
- package/dist/cjs/components/ui/AiDisclosure.js.map +1 -1
- package/dist/cjs/components/ui/SearchSection.js +44 -36
- package/dist/cjs/components/ui/SearchSection.js.map +1 -1
- package/dist/cjs/context/SectionRuntimeContext.js +98 -0
- package/dist/cjs/context/SectionRuntimeContext.js.map +1 -0
- package/dist/cjs/index.js +15 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/lib/assistant.js +58 -0
- package/dist/cjs/lib/assistant.js.map +1 -0
- package/dist/esm/components/ui/AiDisclosure.js +7 -8
- package/dist/esm/components/ui/AiDisclosure.js.map +1 -1
- package/dist/esm/components/ui/SearchSection.js +10 -1
- package/dist/esm/components/ui/SearchSection.js.map +1 -1
- package/dist/esm/context/SectionRuntimeContext.js +74 -0
- package/dist/esm/context/SectionRuntimeContext.js.map +1 -0
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/assistant.js +52 -0
- package/dist/esm/lib/assistant.js.map +1 -0
- package/dist/types/components/ui/AiDisclosure.d.ts +7 -5
- package/dist/types/components/ui/AiDisclosure.d.ts.map +1 -1
- package/dist/types/components/ui/SearchSection.d.ts.map +1 -1
- package/dist/types/context/SectionRuntimeContext.d.ts +50 -0
- package/dist/types/context/SectionRuntimeContext.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/assistant.d.ts +39 -0
- package/dist/types/lib/assistant.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/extends";
|
|
2
2
|
import React, { forwardRef, useEffect, useImperativeHandle, useState, useRef, useCallback, useLayoutEffect } from 'react';
|
|
3
3
|
import { cn } from '../../lib/utils.js';
|
|
4
|
+
import { DEFAULT_PROMPT_PLACEHOLDER, resolveAssistantPlaceholder } from '../../lib/assistant.js';
|
|
4
5
|
import { isWeb5Url } from '../../types/link-types.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Fallback for a bare `<SearchSection />` — the product default with no store
|
|
9
|
+
* name to resolve against, so "Ask AI...". Hosts that know the store (the
|
|
10
|
+
* full-page app, the embed widget) resolve the token themselves and pass the
|
|
11
|
+
* branded string in; this only covers the component used on its own.
|
|
12
|
+
*/
|
|
13
|
+
const UNBRANDED_PLACEHOLDER = resolveAssistantPlaceholder(DEFAULT_PROMPT_PLACEHOLDER);
|
|
5
14
|
const ArrowDownIcon = () => /*#__PURE__*/React.createElement("svg", {
|
|
6
15
|
xmlns: "http://www.w3.org/2000/svg",
|
|
7
16
|
width: "24",
|
|
@@ -65,7 +74,7 @@ const PromptSendIcon = props => /*#__PURE__*/React.createElement("svg", _extends
|
|
|
65
74
|
export const SearchSection = /*#__PURE__*/forwardRef(function SearchSection(_ref, ref) {
|
|
66
75
|
let {
|
|
67
76
|
onSubmit,
|
|
68
|
-
placeholder =
|
|
77
|
+
placeholder = UNBRANDED_PLACEHOLDER,
|
|
69
78
|
submitLabel,
|
|
70
79
|
collapsedLabel,
|
|
71
80
|
onCollapsedChange,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useState","useRef","useCallback","useLayoutEffect","cn","isWeb5Url","ArrowDownIcon","createElement","xmlns","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","MicrophoneIcon","props","_extends","ArrowRightIcon","PromptSendIcon","SearchSection","_ref","ref","onSubmit","placeholder","submitLabel","collapsedLabel","onCollapsedChange","chips","chipDisplayMode","chipPosition","onVoiceInput","progressMessage","className","contextBanner","hasContext","canSubmitEmpty","hasContent","isBottomZoneVisible","onChipClick","onFocusChange","inputValue","setInputValue","isFocused","setIsFocused","hasFocusInside","setHasFocusInside","isMultiline","setIsMultiline","isCollapsed","setIsCollapsed","inputRef","hasExpandedWhileZoneVisibleRef","previouslyFocusedElementRef","showChips","length","effectiveCollapsedLabel","replace","handleSubmit","trimmedValue","trim","element","current","computedStyles","window","getComputedStyle","lineHeight","Number","parseFloat","hasValue","style","nextHeight","Math","min","max","scrollHeight","hasFocusInsideRef","onFocusChangeRef","focusInput","active","document","activeElement","HTMLElement","body","requestAnimationFrame","_inputRef$current","focus","_inputRef$current2","blurInput","_inputRef$current3","blur","handleKeyDown","e","key","_inputRef$current4","preventDefault","prev","shiftKey","handleInputChange","target","value","handleInputFocus","relatedTarget","handleContentFocus","handleContentBlur","next","currentTarget","contains","role","canSubmit","chipsMarkup","map","chip","label","href","onMouseDown","onClick","_inputRef$current5","tabIndex","handleExpandClick","type","onFocus","onBlur","rows","onChange","onKeyDown","undefined","disabled","Fragment"],"sources":["../../../../src/components/ui/SearchSection.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n useRef,\n useCallback,\n useLayoutEffect,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport { isWeb5Url } from '../../types/link-types';\n\nexport interface ScrollChip {\n label: string;\n href: string;\n iconHint?: string;\n}\n\nexport interface SearchSectionProps {\n onSubmit?: (value: string) => void;\n placeholder?: string;\n /**\n * When set, the submit control renders as a labeled CTA button (text +\n * right arrow) instead of the icon-only send button. Used by the empty\n * state (e.g. \"Find Your Pair\").\n */\n submitLabel?: string;\n collapsedLabel?: string;\n onCollapsedChange?: (isCollapsed: boolean) => void;\n chips?: ScrollChip[];\n chipDisplayMode?: 'focus' | 'always';\n chipPosition?: 'top' | 'bottom';\n onVoiceInput?: () => void;\n progressMessage?: string;\n className?: string;\n contextBanner?: React.ReactNode;\n hasContext?: boolean;\n canSubmitEmpty?: boolean;\n hasContent?: boolean;\n isBottomZoneVisible?: boolean;\n onChipClick?: (e: React.MouseEvent<HTMLAnchorElement>, href: string) => void;\n onFocusChange?: (focused: boolean) => void;\n}\n\nexport interface SearchSectionHandle {\n focusInput: () => void;\n blurInput: () => void;\n}\n\nconst ArrowDownIcon: React.FC = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </svg>\n);\n\nconst MicrophoneIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n stroke=\"none\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path\n d=\"M19 10v2a7 7 0 0 1-14 0v-2M12 19v3\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n);\n\nconst ArrowRightIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </svg>\n);\n\nconst PromptSendIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M13.0306 7.53114C12.9609 7.60106 12.8781 7.65654 12.787 7.69439C12.6958 7.73224 12.5981 7.75173 12.4993 7.75173C12.4006 7.75173 12.3029 7.73224 12.2117 7.69439C12.1206 7.65654 12.0378 7.60106 11.9681 7.53114L8.74997 4.31301V13.5005C8.74997 13.6994 8.67095 13.8902 8.5303 14.0308C8.38965 14.1715 8.19888 14.2505 7.99997 14.2505C7.80106 14.2505 7.61029 14.1715 7.46964 14.0308C7.32899 13.8902 7.24997 13.6994 7.24997 13.5005V4.31301L4.0306 7.53114C3.8897 7.67203 3.69861 7.75119 3.49935 7.75119C3.30009 7.75119 3.10899 7.67203 2.9681 7.53114C2.8272 7.39024 2.74805 7.19915 2.74805 6.99989C2.74805 6.80063 2.8272 6.60953 2.9681 6.46864L7.4681 1.96864C7.53778 1.89872 7.62057 1.84324 7.71173 1.80539C7.8029 1.76753 7.90064 1.74805 7.99935 1.74805C8.09806 1.74805 8.1958 1.76753 8.28696 1.80539C8.37813 1.84324 8.46092 1.89872 8.5306 1.96864L13.0306 6.46864C13.1005 6.53832 13.156 6.62111 13.1938 6.71227C13.2317 6.80344 13.2512 6.90118 13.2512 6.99989C13.2512 7.0986 13.2317 7.19634 13.1938 7.2875C13.156 7.37867 13.1005 7.46146 13.0306 7.53114Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const SearchSection = forwardRef<\n SearchSectionHandle,\n SearchSectionProps\n>(function SearchSection(\n {\n onSubmit,\n placeholder = 'Talk to us',\n submitLabel,\n collapsedLabel,\n onCollapsedChange,\n chips = [],\n chipDisplayMode = 'focus',\n chipPosition = 'top',\n onVoiceInput,\n progressMessage,\n className = '',\n contextBanner,\n hasContext,\n canSubmitEmpty = false,\n hasContent = false,\n isBottomZoneVisible = false,\n onChipClick,\n onFocusChange,\n },\n ref,\n) {\n const [inputValue, setInputValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const [hasFocusInside, setHasFocusInside] = useState(false);\n const [isMultiline, setIsMultiline] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(false);\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const hasExpandedWhileZoneVisibleRef = useRef(false);\n const previouslyFocusedElementRef = useRef<HTMLElement | null>(null);\n const showChips =\n chips.length > 0 &&\n !hasContext &&\n (chipDisplayMode === 'always' || hasFocusInside);\n const effectiveCollapsedLabel =\n collapsedLabel ?? placeholder.replace(/\\.\\.\\.$/, '');\n\n const handleSubmit = useCallback(() => {\n const trimmedValue = inputValue.trim();\n if (trimmedValue || canSubmitEmpty) {\n onSubmit?.(trimmedValue);\n setInputValue('');\n }\n }, [canSubmitEmpty, inputValue, onSubmit]);\n\n useLayoutEffect(() => {\n const element = inputRef.current;\n if (!element) {\n return;\n }\n\n const computedStyles = window.getComputedStyle(element);\n const lineHeight = Number.parseFloat(computedStyles.lineHeight) || 32;\n\n const hasValue = inputValue.trim().length > 0;\n element.style.height = 'auto';\n const nextHeight = hasValue\n ? Math.min(Math.max(element.scrollHeight, lineHeight), 175)\n : lineHeight;\n element.style.height = `${nextHeight}px`;\n setIsMultiline(hasValue && nextHeight > lineHeight);\n }, [inputValue]);\n\n useEffect(() => {\n if (progressMessage || !hasContent) {\n setIsCollapsed(false);\n hasExpandedWhileZoneVisibleRef.current = false;\n return;\n }\n\n if (!isBottomZoneVisible) {\n hasExpandedWhileZoneVisibleRef.current = false;\n setIsCollapsed(false);\n return;\n }\n\n if (!hasExpandedWhileZoneVisibleRef.current) {\n setIsCollapsed(true);\n }\n }, [hasContent, isBottomZoneVisible, progressMessage]);\n\n useEffect(() => {\n onCollapsedChange?.(isCollapsed);\n }, [isCollapsed, onCollapsedChange]);\n\n const hasFocusInsideRef = useRef(hasFocusInside);\n hasFocusInsideRef.current = hasFocusInside;\n const onFocusChangeRef = useRef(onFocusChange);\n onFocusChangeRef.current = onFocusChange;\n\n useEffect(() => {\n onFocusChange?.(hasFocusInside);\n }, [hasFocusInside, onFocusChange]);\n\n useEffect(() => {\n return () => {\n if (hasFocusInsideRef.current) {\n onFocusChangeRef.current?.(false);\n }\n };\n }, []);\n\n const focusInput = useCallback(() => {\n const active = document.activeElement;\n if (\n active instanceof HTMLElement &&\n active !== inputRef.current &&\n active !== document.body\n ) {\n previouslyFocusedElementRef.current = active;\n }\n if (isCollapsed) {\n hasExpandedWhileZoneVisibleRef.current = true;\n setIsCollapsed(false);\n window.requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n } else {\n inputRef.current?.focus();\n }\n }, [isCollapsed]);\n\n const blurInput = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focusInput, blurInput }), [\n focusInput,\n blurInput,\n ]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n const prev = previouslyFocusedElementRef.current;\n previouslyFocusedElementRef.current = null;\n inputRef.current?.blur();\n prev?.focus?.();\n return;\n }\n if (\n e.key === 'Enter' &&\n !e.shiftKey &&\n (inputValue.trim() || canSubmitEmpty)\n ) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(true);\n if (\n e.relatedTarget instanceof HTMLElement &&\n e.relatedTarget !== inputRef.current\n ) {\n previouslyFocusedElementRef.current = e.relatedTarget;\n }\n };\n\n const handleContentFocus = () => {\n setHasFocusInside(true);\n };\n\n const handleContentBlur = (e: React.FocusEvent<HTMLDivElement>) => {\n const next = e.relatedTarget as Node | null;\n if (!next || !e.currentTarget.contains(next)) {\n setHasFocusInside(false);\n }\n };\n\n if (progressMessage) {\n return (\n <div\n className={cn('web5-prompt-progress', className)}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n <div className=\"web5-prompt-progress__indicator\" aria-hidden=\"true\">\n <ArrowDownIcon />\n </div>\n <div className=\"web5-prompt-progress__message\">{progressMessage}</div>\n </div>\n );\n }\n\n const canSubmit = inputValue.trim().length > 0 || canSubmitEmpty;\n const chipsMarkup =\n chips.length > 0 ? (\n <div\n className={cn(\n 'web5-prompt-shell__chips',\n chipPosition === 'bottom'\n ? 'web5-prompt-shell__chips--bottom'\n : 'web5-prompt-shell__chips--top',\n showChips\n ? 'web5-prompt-shell__chips--visible'\n : 'web5-prompt-shell__chips--hidden',\n )}\n aria-hidden={isCollapsed || !showChips}\n >\n {chips.map((chip) => (\n <a\n key={chip.label}\n href={isWeb5Url(chip.href) ? '#' : chip.href}\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => {\n e.preventDefault();\n onChipClick?.(e, chip.href);\n setInputValue('');\n inputRef.current?.blur();\n }}\n tabIndex={!isCollapsed && showChips ? 0 : -1}\n // `has-custom-focus` opts out of Wix Thunderbolt's global keyboard focus ring\n // so our inset :focus-visible ring isn't overwritten when embedded in a Wix site.\n className=\"web5-prompt-chip has-custom-focus\"\n >\n {chip.label}\n <PromptSendIcon\n aria-hidden=\"true\"\n className=\"web5-prompt-send-icon\"\n />\n </a>\n ))}\n </div>\n ) : null;\n\n const handleExpandClick = () => {\n focusInput();\n };\n\n\n return (\n <div\n className={cn(\n 'web5-prompt-shell',\n isCollapsed && 'web5-prompt-shell--collapsed',\n // Widens the pill while the field or a chip holds focus. Driven by\n // `hasFocusInside` rather than `isFocused` so clicking a chip (which\n // preventDefaults its mousedown) doesn't collapse the width mid-click.\n hasFocusInside && !isCollapsed && 'web5-prompt-shell--focused',\n className,\n )}\n >\n <div className=\"web5-prompt-shell__stage\">\n <button\n type=\"button\"\n className=\"web5-prompt-shell__collapsed-button has-custom-focus\"\n onClick={handleExpandClick}\n aria-label={effectiveCollapsedLabel}\n aria-hidden={!isCollapsed}\n tabIndex={isCollapsed ? 0 : -1}\n >\n {effectiveCollapsedLabel}\n </button>\n\n <div\n className=\"web5-prompt-shell__content\"\n aria-hidden={isCollapsed}\n onFocus={handleContentFocus}\n onBlur={handleContentBlur}\n >\n {contextBanner}\n <div className=\"web5-prompt-shell__panel\">\n <div\n className={cn(\n 'web5-prompt-shell__stack',\n chipPosition === 'top' && 'web5-prompt-shell__stack--chips-top',\n )}\n >\n <div className=\"web5-prompt-search\" role=\"search\">\n <div className=\"web5-prompt-search__inner\">\n <div\n className={cn(\n 'web5-prompt-field',\n isFocused && 'web5-prompt-field--focused',\n isMultiline && 'web5-prompt-field--multiline',\n )}\n >\n <textarea\n ref={inputRef}\n rows={1}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleInputFocus}\n onBlur={() => setIsFocused(false)}\n placeholder={placeholder}\n aria-label=\"Search or ask a question\"\n aria-keyshortcuts=\"/ Control+K\"\n className=\"web5-prompt-input has-custom-focus placeholder:text-search-input-hint\"\n tabIndex={isCollapsed ? -1 : undefined}\n />\n\n <div className=\"web5-prompt-actions\">\n {onVoiceInput && (\n <button\n type=\"button\"\n onClick={onVoiceInput}\n className=\"web5-prompt-voice\"\n aria-label=\"Voice input\"\n tabIndex={isCollapsed ? -1 : undefined}\n >\n <MicrophoneIcon />\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleSubmit}\n className={cn(\n 'web5-prompt-submit',\n submitLabel && 'web5-prompt-submit--labeled',\n canSubmit && 'web5-prompt-submit--active',\n )}\n aria-label={submitLabel ?? 'Submit'}\n disabled={!canSubmit || isCollapsed}\n tabIndex={isCollapsed ? -1 : undefined}\n >\n {submitLabel ? (\n <>\n <span className=\"web5-prompt-submit__label\">\n {submitLabel}\n </span>\n <ArrowRightIcon\n aria-hidden=\"true\"\n className=\"web5-prompt-send-icon\"\n />\n </>\n ) : (\n <PromptSendIcon\n aria-hidden=\"true\"\n className=\"web5-prompt-send-icon\"\n />\n )}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n {chipsMarkup}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n});\n"],"mappings":";AAAA,OAAOA,KAAK,IACVC,UAAU,EACVC,SAAS,EACTC,mBAAmB,EACnBC,QAAQ,EACRC,MAAM,EACNC,WAAW,EACXC,eAAe,QACV,OAAO;AACd,SAASC,EAAE,QAAQ,iBAAiB;AACpC,SAASC,SAAS,QAAQ,wBAAwB;AAuClD,MAAMC,aAAuB,GAAGA,CAAA,kBAC9BV,KAAA,CAAAW,aAAA;EACEC,KAAK,EAAC,4BAA4B;EAClCC,KAAK,EAAC,IAAI;EACVC,MAAM,EAAC,IAAI;EACXC,OAAO,EAAC,WAAW;EACnBC,IAAI,EAAC,MAAM;EACXC,MAAM,EAAC,cAAc;EACrBC,WAAW,EAAC,GAAG;EACfC,aAAa,EAAC,OAAO;EACrBC,cAAc,EAAC,OAAO;EACtB,eAAY;AAAM,gBAElBpB,KAAA,CAAAW,aAAA;EAAMU,CAAC,EAAC;AAAU,CAAE,CAAC,eACrBrB,KAAA,CAAAW,aAAA;EAAMU,CAAC,EAAC;AAAgB,CAAE,CACvB,CACN;AAED,MAAMC,cAAuD,GAAIC,KAAK,iBACpEvB,KAAA,CAAAW,aAAA,QAAAa,QAAA;EACEZ,KAAK,EAAC,4BAA4B;EAClCC,KAAK,EAAC,IAAI;EACVC,MAAM,EAAC,IAAI;EACXC,OAAO,EAAC,WAAW;EACnBC,IAAI,EAAC,cAAc;EACnBC,MAAM,EAAC,MAAM;EACb,eAAY;AAAM,GACdM,KAAK,gBAETvB,KAAA,CAAAW,aAAA;EAAMU,CAAC,EAAC;AAAsD,CAAE,CAAC,eACjErB,KAAA,CAAAW,aAAA;EACEU,CAAC,EAAC,oCAAoC;EACtCJ,MAAM,EAAC,cAAc;EACrBC,WAAW,EAAC,GAAG;EACfC,aAAa,EAAC,OAAO;EACrBH,IAAI,EAAC;AAAM,CACZ,CACE,CACN;AAED,MAAMS,cAAuD,GAAIF,KAAK,iBACpEvB,KAAA,CAAAW,aAAA,QAAAa,QAAA;EACEZ,KAAK,EAAC,4BAA4B;EAClCC,KAAK,EAAC,IAAI;EACVC,MAAM,EAAC,IAAI;EACXC,OAAO,EAAC,WAAW;EACnBC,IAAI,EAAC,MAAM;EACXC,MAAM,EAAC,cAAc;EACrBC,WAAW,EAAC,GAAG;EACfC,aAAa,EAAC,OAAO;EACrBC,cAAc,EAAC,OAAO;EACtB,eAAY;AAAM,GACdG,KAAK,gBAETvB,KAAA,CAAAW,aAAA;EAAMU,CAAC,EAAC;AAAU,CAAE,CAAC,eACrBrB,KAAA,CAAAW,aAAA;EAAMU,CAAC,EAAC;AAAe,CAAE,CACtB,CACN;AAED,MAAMK,cAAuD,GAAIH,KAAK,iBACpEvB,KAAA,CAAAW,aAAA,QAAAa,QAAA;EACEZ,KAAK,EAAC,4BAA4B;EAClCC,KAAK,EAAC,IAAI;EACVC,MAAM,EAAC,IAAI;EACXC,OAAO,EAAC,WAAW;EACnBC,IAAI,EAAC,MAAM;EACX,eAAY;AAAM,GACdO,KAAK,gBAETvB,KAAA,CAAAW,aAAA;EACEU,CAAC,EAAC,mhCAAmhC;EACrhCL,IAAI,EAAC;AAAc,CACpB,CACE,CACN;AAED,OAAO,MAAMW,aAAa,gBAAG1B,UAAU,CAGrC,SAAS0B,aAAaA,CAAAC,IAAA,EAqBtBC,GAAG,EACH;EAAA,IArBA;IACEC,QAAQ;IACRC,WAAW,GAAG,YAAY;IAC1BC,WAAW;IACXC,cAAc;IACdC,iBAAiB;IACjBC,KAAK,GAAG,EAAE;IACVC,eAAe,GAAG,OAAO;IACzBC,YAAY,GAAG,KAAK;IACpBC,YAAY;IACZC,eAAe;IACfC,SAAS,GAAG,EAAE;IACdC,aAAa;IACbC,UAAU;IACVC,cAAc,GAAG,KAAK;IACtBC,UAAU,GAAG,KAAK;IAClBC,mBAAmB,GAAG,KAAK;IAC3BC,WAAW;IACXC;EACF,CAAC,GAAAnB,IAAA;EAGD,MAAM,CAACoB,UAAU,EAAEC,aAAa,CAAC,GAAG7C,QAAQ,CAAC,EAAE,CAAC;EAChD,MAAM,CAAC8C,SAAS,EAAEC,YAAY,CAAC,GAAG/C,QAAQ,CAAC,KAAK,CAAC;EACjD,MAAM,CAACgD,cAAc,EAAEC,iBAAiB,CAAC,GAAGjD,QAAQ,CAAC,KAAK,CAAC;EAC3D,MAAM,CAACkD,WAAW,EAAEC,cAAc,CAAC,GAAGnD,QAAQ,CAAC,KAAK,CAAC;EACrD,MAAM,CAACoD,WAAW,EAAEC,cAAc,CAAC,GAAGrD,QAAQ,CAAC,KAAK,CAAC;EACrD,MAAMsD,QAAQ,GAAGrD,MAAM,CAAsB,IAAI,CAAC;EAClD,MAAMsD,8BAA8B,GAAGtD,MAAM,CAAC,KAAK,CAAC;EACpD,MAAMuD,2BAA2B,GAAGvD,MAAM,CAAqB,IAAI,CAAC;EACpE,MAAMwD,SAAS,GACb1B,KAAK,CAAC2B,MAAM,GAAG,CAAC,IAChB,CAACpB,UAAU,KACVN,eAAe,KAAK,QAAQ,IAAIgB,cAAc,CAAC;EAClD,MAAMW,uBAAuB,GAC3B9B,cAAc,IAAIF,WAAW,CAACiC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;EAEtD,MAAMC,YAAY,GAAG3D,WAAW,CAAC,MAAM;IACrC,MAAM4D,YAAY,GAAGlB,UAAU,CAACmB,IAAI,CAAC,CAAC;IACtC,IAAID,YAAY,IAAIvB,cAAc,EAAE;MAClCb,QAAQ,YAARA,QAAQ,CAAGoC,YAAY,CAAC;MACxBjB,aAAa,CAAC,EAAE,CAAC;IACnB;EACF,CAAC,EAAE,CAACN,cAAc,EAAEK,UAAU,EAAElB,QAAQ,CAAC,CAAC;EAE1CvB,eAAe,CAAC,MAAM;IACpB,MAAM6D,OAAO,GAAGV,QAAQ,CAACW,OAAO;IAChC,IAAI,CAACD,OAAO,EAAE;MACZ;IACF;IAEA,MAAME,cAAc,GAAGC,MAAM,CAACC,gBAAgB,CAACJ,OAAO,CAAC;IACvD,MAAMK,UAAU,GAAGC,MAAM,CAACC,UAAU,CAACL,cAAc,CAACG,UAAU,CAAC,IAAI,EAAE;IAErE,MAAMG,QAAQ,GAAG5B,UAAU,CAACmB,IAAI,CAAC,CAAC,CAACL,MAAM,GAAG,CAAC;IAC7CM,OAAO,CAACS,KAAK,CAAC/D,MAAM,GAAG,MAAM;IAC7B,MAAMgE,UAAU,GAAGF,QAAQ,GACvBG,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACb,OAAO,CAACc,YAAY,EAAET,UAAU,CAAC,EAAE,GAAG,CAAC,GACzDA,UAAU;IACdL,OAAO,CAACS,KAAK,CAAC/D,MAAM,GAAG,GAAGgE,UAAU,IAAI;IACxCvB,cAAc,CAACqB,QAAQ,IAAIE,UAAU,GAAGL,UAAU,CAAC;EACrD,CAAC,EAAE,CAACzB,UAAU,CAAC,CAAC;EAEhB9C,SAAS,CAAC,MAAM;IACd,IAAIqC,eAAe,IAAI,CAACK,UAAU,EAAE;MAClCa,cAAc,CAAC,KAAK,CAAC;MACrBE,8BAA8B,CAACU,OAAO,GAAG,KAAK;MAC9C;IACF;IAEA,IAAI,CAACxB,mBAAmB,EAAE;MACxBc,8BAA8B,CAACU,OAAO,GAAG,KAAK;MAC9CZ,cAAc,CAAC,KAAK,CAAC;MACrB;IACF;IAEA,IAAI,CAACE,8BAA8B,CAACU,OAAO,EAAE;MAC3CZ,cAAc,CAAC,IAAI,CAAC;IACtB;EACF,CAAC,EAAE,CAACb,UAAU,EAAEC,mBAAmB,EAAEN,eAAe,CAAC,CAAC;EAEtDrC,SAAS,CAAC,MAAM;IACdgC,iBAAiB,YAAjBA,iBAAiB,CAAGsB,WAAW,CAAC;EAClC,CAAC,EAAE,CAACA,WAAW,EAAEtB,iBAAiB,CAAC,CAAC;EAEpC,MAAMiD,iBAAiB,GAAG9E,MAAM,CAAC+C,cAAc,CAAC;EAChD+B,iBAAiB,CAACd,OAAO,GAAGjB,cAAc;EAC1C,MAAMgC,gBAAgB,GAAG/E,MAAM,CAAC0C,aAAa,CAAC;EAC9CqC,gBAAgB,CAACf,OAAO,GAAGtB,aAAa;EAExC7C,SAAS,CAAC,MAAM;IACd6C,aAAa,YAAbA,aAAa,CAAGK,cAAc,CAAC;EACjC,CAAC,EAAE,CAACA,cAAc,EAAEL,aAAa,CAAC,CAAC;EAEnC7C,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACX,IAAIiF,iBAAiB,CAACd,OAAO,EAAE;QAC7Be,gBAAgB,CAACf,OAAO,YAAxBe,gBAAgB,CAACf,OAAO,CAAG,KAAK,CAAC;MACnC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMgB,UAAU,GAAG/E,WAAW,CAAC,MAAM;IACnC,MAAMgF,MAAM,GAAGC,QAAQ,CAACC,aAAa;IACrC,IACEF,MAAM,YAAYG,WAAW,IAC7BH,MAAM,KAAK5B,QAAQ,CAACW,OAAO,IAC3BiB,MAAM,KAAKC,QAAQ,CAACG,IAAI,EACxB;MACA9B,2BAA2B,CAACS,OAAO,GAAGiB,MAAM;IAC9C;IACA,IAAI9B,WAAW,EAAE;MACfG,8BAA8B,CAACU,OAAO,GAAG,IAAI;MAC7CZ,cAAc,CAAC,KAAK,CAAC;MACrBc,MAAM,CAACoB,qBAAqB,CAAC,MAAM;QAAA,IAAAC,iBAAA;QACjC,CAAAA,iBAAA,GAAAlC,QAAQ,CAACW,OAAO,aAAhBuB,iBAAA,CAAkBC,KAAK,CAAC,CAAC;MAC3B,CAAC,CAAC;IACJ,CAAC,MAAM;MAAA,IAAAC,kBAAA;MACL,CAAAA,kBAAA,GAAApC,QAAQ,CAACW,OAAO,aAAhByB,kBAAA,CAAkBD,KAAK,CAAC,CAAC;IAC3B;EACF,CAAC,EAAE,CAACrC,WAAW,CAAC,CAAC;EAEjB,MAAMuC,SAAS,GAAGzF,WAAW,CAAC,MAAM;IAAA,IAAA0F,kBAAA;IAClC,CAAAA,kBAAA,GAAAtC,QAAQ,CAACW,OAAO,aAAhB2B,kBAAA,CAAkBC,IAAI,CAAC,CAAC;EAC1B,CAAC,EAAE,EAAE,CAAC;EAEN9F,mBAAmB,CAAC0B,GAAG,EAAE,OAAO;IAAEwD,UAAU;IAAEU;EAAU,CAAC,CAAC,EAAE,CAC1DV,UAAU,EACVU,SAAS,CACV,CAAC;EAEF,MAAMG,aAAa,GAAIC,CAA2C,IAAK;IACrE,IAAIA,CAAC,CAACC,GAAG,KAAK,QAAQ,EAAE;MAAA,IAAAC,kBAAA;MACtBF,CAAC,CAACG,cAAc,CAAC,CAAC;MAClB,MAAMC,IAAI,GAAG3C,2BAA2B,CAACS,OAAO;MAChDT,2BAA2B,CAACS,OAAO,GAAG,IAAI;MAC1C,CAAAgC,kBAAA,GAAA3C,QAAQ,CAACW,OAAO,aAAhBgC,kBAAA,CAAkBJ,IAAI,CAAC,CAAC;MACxBM,IAAI,YAAJA,IAAI,CAAEV,KAAK,YAAXU,IAAI,CAAEV,KAAK,CAAG,CAAC;MACf;IACF;IACA,IACEM,CAAC,CAACC,GAAG,KAAK,OAAO,IACjB,CAACD,CAAC,CAACK,QAAQ,KACVxD,UAAU,CAACmB,IAAI,CAAC,CAAC,IAAIxB,cAAc,CAAC,EACrC;MACAwD,CAAC,CAACG,cAAc,CAAC,CAAC;MAClBrC,YAAY,CAAC,CAAC;IAChB;EACF,CAAC;EAED,MAAMwC,iBAAiB,GAAIN,CAAyC,IAAK;IACvElD,aAAa,CAACkD,CAAC,CAACO,MAAM,CAACC,KAAK,CAAC;EAC/B,CAAC;EAED,MAAMC,gBAAgB,GAAIT,CAAwC,IAAK;IACrEhD,YAAY,CAAC,IAAI,CAAC;IAClB,IACEgD,CAAC,CAACU,aAAa,YAAYpB,WAAW,IACtCU,CAAC,CAACU,aAAa,KAAKnD,QAAQ,CAACW,OAAO,EACpC;MACAT,2BAA2B,CAACS,OAAO,GAAG8B,CAAC,CAACU,aAAa;IACvD;EACF,CAAC;EAED,MAAMC,kBAAkB,GAAGA,CAAA,KAAM;IAC/BzD,iBAAiB,CAAC,IAAI,CAAC;EACzB,CAAC;EAED,MAAM0D,iBAAiB,GAAIZ,CAAmC,IAAK;IACjE,MAAMa,IAAI,GAAGb,CAAC,CAACU,aAA4B;IAC3C,IAAI,CAACG,IAAI,IAAI,CAACb,CAAC,CAACc,aAAa,CAACC,QAAQ,CAACF,IAAI,CAAC,EAAE;MAC5C3D,iBAAiB,CAAC,KAAK,CAAC;IAC1B;EACF,CAAC;EAED,IAAId,eAAe,EAAE;IACnB,oBACEvC,KAAA,CAAAW,aAAA;MACE6B,SAAS,EAAEhC,EAAE,CAAC,sBAAsB,EAAEgC,SAAS,CAAE;MACjD2E,IAAI,EAAC,QAAQ;MACb,aAAU,QAAQ;MAClB,eAAY;IAAM,gBAElBnH,KAAA,CAAAW,aAAA;MAAK6B,SAAS,EAAC,iCAAiC;MAAC,eAAY;IAAM,gBACjExC,KAAA,CAAAW,aAAA,CAACD,aAAa,MAAE,CACb,CAAC,eACNV,KAAA,CAAAW,aAAA;MAAK6B,SAAS,EAAC;IAA+B,GAAED,eAAqB,CAClE,CAAC;EAEV;EAEA,MAAM6E,SAAS,GAAGpE,UAAU,CAACmB,IAAI,CAAC,CAAC,CAACL,MAAM,GAAG,CAAC,IAAInB,cAAc;EAChE,MAAM0E,WAAW,GACflF,KAAK,CAAC2B,MAAM,GAAG,CAAC,gBACd9D,KAAA,CAAAW,aAAA;IACE6B,SAAS,EAAEhC,EAAE,CACX,0BAA0B,EAC1B6B,YAAY,KAAK,QAAQ,GACrB,kCAAkC,GAClC,+BAA+B,EACnCwB,SAAS,GACL,mCAAmC,GACnC,kCACN,CAAE;IACF,eAAaL,WAAW,IAAI,CAACK;EAAU,GAEtC1B,KAAK,CAACmF,GAAG,CAAEC,IAAI,iBACdvH,KAAA,CAAAW,aAAA;IACEyF,GAAG,EAAEmB,IAAI,CAACC,KAAM;IAChBC,IAAI,EAAEhH,SAAS,CAAC8G,IAAI,CAACE,IAAI,CAAC,GAAG,GAAG,GAAGF,IAAI,CAACE,IAAK;IAC7CC,WAAW,EAAGvB,CAAC,IAAKA,CAAC,CAACG,cAAc,CAAC,CAAE;IACvCqB,OAAO,EAAGxB,CAAC,IAAK;MAAA,IAAAyB,kBAAA;MACdzB,CAAC,CAACG,cAAc,CAAC,CAAC;MAClBxD,WAAW,YAAXA,WAAW,CAAGqD,CAAC,EAAEoB,IAAI,CAACE,IAAI,CAAC;MAC3BxE,aAAa,CAAC,EAAE,CAAC;MACjB,CAAA2E,kBAAA,GAAAlE,QAAQ,CAACW,OAAO,aAAhBuD,kBAAA,CAAkB3B,IAAI,CAAC,CAAC;IAC1B,CAAE;IACF4B,QAAQ,EAAE,CAACrE,WAAW,IAAIK,SAAS,GAAG,CAAC,GAAG,CAAC;IAC3C;IACA;IAAA;IACArB,SAAS,EAAC;EAAmC,GAE5C+E,IAAI,CAACC,KAAK,eACXxH,KAAA,CAAAW,aAAA,CAACe,cAAc;IACb,eAAY,MAAM;IAClBc,SAAS,EAAC;EAAuB,CAClC,CACA,CACJ,CACE,CAAC,GACJ,IAAI;EAEV,MAAMsF,iBAAiB,GAAGA,CAAA,KAAM;IAC9BzC,UAAU,CAAC,CAAC;EACd,CAAC;EAGD,oBACErF,KAAA,CAAAW,aAAA;IACE6B,SAAS,EAAEhC,EAAE,CACX,mBAAmB,EACnBgD,WAAW,IAAI,8BAA8B;IAC7C;IACA;IACA;IACAJ,cAAc,IAAI,CAACI,WAAW,IAAI,4BAA4B,EAC9DhB,SACF;EAAE,gBAEFxC,KAAA,CAAAW,aAAA;IAAK6B,SAAS,EAAC;EAA0B,gBACvCxC,KAAA,CAAAW,aAAA;IACEoH,IAAI,EAAC,QAAQ;IACbvF,SAAS,EAAC,sDAAsD;IAChEmF,OAAO,EAAEG,iBAAkB;IAC3B,cAAY/D,uBAAwB;IACpC,eAAa,CAACP,WAAY;IAC1BqE,QAAQ,EAAErE,WAAW,GAAG,CAAC,GAAG,CAAC;EAAE,GAE9BO,uBACK,CAAC,eAET/D,KAAA,CAAAW,aAAA;IACE6B,SAAS,EAAC,4BAA4B;IACtC,eAAagB,WAAY;IACzBwE,OAAO,EAAElB,kBAAmB;IAC5BmB,MAAM,EAAElB;EAAkB,GAEzBtE,aAAa,eACdzC,KAAA,CAAAW,aAAA;IAAK6B,SAAS,EAAC;EAA0B,gBACvCxC,KAAA,CAAAW,aAAA;IACE6B,SAAS,EAAEhC,EAAE,CACX,0BAA0B,EAC1B6B,YAAY,KAAK,KAAK,IAAI,qCAC5B;EAAE,gBAEFrC,KAAA,CAAAW,aAAA;IAAK6B,SAAS,EAAC,oBAAoB;IAAC2E,IAAI,EAAC;EAAQ,gBAC/CnH,KAAA,CAAAW,aAAA;IAAK6B,SAAS,EAAC;EAA2B,gBACxCxC,KAAA,CAAAW,aAAA;IACE6B,SAAS,EAAEhC,EAAE,CACX,mBAAmB,EACnB0C,SAAS,IAAI,4BAA4B,EACzCI,WAAW,IAAI,8BACjB;EAAE,gBAEFtD,KAAA,CAAAW,aAAA;IACEkB,GAAG,EAAE6B,QAAS;IACdwE,IAAI,EAAE,CAAE;IACRvB,KAAK,EAAE3D,UAAW;IAClBmF,QAAQ,EAAE1B,iBAAkB;IAC5B2B,SAAS,EAAElC,aAAc;IACzB8B,OAAO,EAAEpB,gBAAiB;IAC1BqB,MAAM,EAAEA,CAAA,KAAM9E,YAAY,CAAC,KAAK,CAAE;IAClCpB,WAAW,EAAEA,WAAY;IACzB,cAAW,0BAA0B;IACrC,qBAAkB,aAAa;IAC/BS,SAAS,EAAC,uEAAuE;IACjFqF,QAAQ,EAAErE,WAAW,GAAG,CAAC,CAAC,GAAG6E;EAAU,CACxC,CAAC,eAEFrI,KAAA,CAAAW,aAAA;IAAK6B,SAAS,EAAC;EAAqB,GACjCF,YAAY,iBACXtC,KAAA,CAAAW,aAAA;IACEoH,IAAI,EAAC,QAAQ;IACbJ,OAAO,EAAErF,YAAa;IACtBE,SAAS,EAAC,mBAAmB;IAC7B,cAAW,aAAa;IACxBqF,QAAQ,EAAErE,WAAW,GAAG,CAAC,CAAC,GAAG6E;EAAU,gBAEvCrI,KAAA,CAAAW,aAAA,CAACW,cAAc,MAAE,CACX,CACT,eACDtB,KAAA,CAAAW,aAAA;IACEoH,IAAI,EAAC,QAAQ;IACbJ,OAAO,EAAE1D,YAAa;IACtBzB,SAAS,EAAEhC,EAAE,CACX,oBAAoB,EACpBwB,WAAW,IAAI,6BAA6B,EAC5CoF,SAAS,IAAI,4BACf,CAAE;IACF,cAAYpF,WAAW,IAAI,QAAS;IACpCsG,QAAQ,EAAE,CAAClB,SAAS,IAAI5D,WAAY;IACpCqE,QAAQ,EAAErE,WAAW,GAAG,CAAC,CAAC,GAAG6E;EAAU,GAEtCrG,WAAW,gBACVhC,KAAA,CAAAW,aAAA,CAAAX,KAAA,CAAAuI,QAAA,qBACEvI,KAAA,CAAAW,aAAA;IAAM6B,SAAS,EAAC;EAA2B,GACxCR,WACG,CAAC,eACPhC,KAAA,CAAAW,aAAA,CAACc,cAAc;IACb,eAAY,MAAM;IAClBe,SAAS,EAAC;EAAuB,CAClC,CACD,CAAC,gBAEHxC,KAAA,CAAAW,aAAA,CAACe,cAAc;IACb,eAAY,MAAM;IAClBc,SAAS,EAAC;EAAuB,CAClC,CAEG,CACL,CACF,CACF,CACF,CAAC,EAEL6E,WACE,CACF,CACF,CACF,CACF,CAAC;AAEV,CAAC,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useEffect","useImperativeHandle","useState","useRef","useCallback","useLayoutEffect","cn","DEFAULT_PROMPT_PLACEHOLDER","resolveAssistantPlaceholder","isWeb5Url","UNBRANDED_PLACEHOLDER","ArrowDownIcon","createElement","xmlns","width","height","viewBox","fill","stroke","strokeWidth","strokeLinecap","strokeLinejoin","d","MicrophoneIcon","props","_extends","ArrowRightIcon","PromptSendIcon","SearchSection","_ref","ref","onSubmit","placeholder","submitLabel","collapsedLabel","onCollapsedChange","chips","chipDisplayMode","chipPosition","onVoiceInput","progressMessage","className","contextBanner","hasContext","canSubmitEmpty","hasContent","isBottomZoneVisible","onChipClick","onFocusChange","inputValue","setInputValue","isFocused","setIsFocused","hasFocusInside","setHasFocusInside","isMultiline","setIsMultiline","isCollapsed","setIsCollapsed","inputRef","hasExpandedWhileZoneVisibleRef","previouslyFocusedElementRef","showChips","length","effectiveCollapsedLabel","replace","handleSubmit","trimmedValue","trim","element","current","computedStyles","window","getComputedStyle","lineHeight","Number","parseFloat","hasValue","style","nextHeight","Math","min","max","scrollHeight","hasFocusInsideRef","onFocusChangeRef","focusInput","active","document","activeElement","HTMLElement","body","requestAnimationFrame","_inputRef$current","focus","_inputRef$current2","blurInput","_inputRef$current3","blur","handleKeyDown","e","key","_inputRef$current4","preventDefault","prev","shiftKey","handleInputChange","target","value","handleInputFocus","relatedTarget","handleContentFocus","handleContentBlur","next","currentTarget","contains","role","canSubmit","chipsMarkup","map","chip","label","href","onMouseDown","onClick","_inputRef$current5","tabIndex","handleExpandClick","type","onFocus","onBlur","rows","onChange","onKeyDown","undefined","disabled","Fragment"],"sources":["../../../../src/components/ui/SearchSection.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useState,\n useRef,\n useCallback,\n useLayoutEffect,\n} from 'react';\nimport { cn } from '../../lib/utils';\nimport {\n DEFAULT_PROMPT_PLACEHOLDER,\n resolveAssistantPlaceholder,\n} from '../../lib/assistant';\nimport { isWeb5Url } from '../../types/link-types';\n\n/**\n * Fallback for a bare `<SearchSection />` — the product default with no store\n * name to resolve against, so \"Ask AI...\". Hosts that know the store (the\n * full-page app, the embed widget) resolve the token themselves and pass the\n * branded string in; this only covers the component used on its own.\n */\nconst UNBRANDED_PLACEHOLDER = resolveAssistantPlaceholder(\n DEFAULT_PROMPT_PLACEHOLDER,\n);\n\nexport interface ScrollChip {\n label: string;\n href: string;\n iconHint?: string;\n}\n\nexport interface SearchSectionProps {\n onSubmit?: (value: string) => void;\n placeholder?: string;\n /**\n * When set, the submit control renders as a labeled CTA button (text +\n * right arrow) instead of the icon-only send button. Used by the empty\n * state (e.g. \"Find Your Pair\").\n */\n submitLabel?: string;\n collapsedLabel?: string;\n onCollapsedChange?: (isCollapsed: boolean) => void;\n chips?: ScrollChip[];\n chipDisplayMode?: 'focus' | 'always';\n chipPosition?: 'top' | 'bottom';\n onVoiceInput?: () => void;\n progressMessage?: string;\n className?: string;\n contextBanner?: React.ReactNode;\n hasContext?: boolean;\n canSubmitEmpty?: boolean;\n hasContent?: boolean;\n isBottomZoneVisible?: boolean;\n onChipClick?: (e: React.MouseEvent<HTMLAnchorElement>, href: string) => void;\n onFocusChange?: (focused: boolean) => void;\n}\n\nexport interface SearchSectionHandle {\n focusInput: () => void;\n blurInput: () => void;\n}\n\nconst ArrowDownIcon: React.FC = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M12 5v14\" />\n <path d=\"m19 12-7 7-7-7\" />\n </svg>\n);\n\nconst MicrophoneIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n stroke=\"none\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\" />\n <path\n d=\"M19 10v2a7 7 0 0 1-14 0v-2M12 19v3\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n fill=\"none\"\n />\n </svg>\n);\n\nconst ArrowRightIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n >\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </svg>\n);\n\nconst PromptSendIcon: React.FC<React.SVGProps<SVGSVGElement>> = (props) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n aria-hidden=\"true\"\n {...props}\n >\n <path\n d=\"M13.0306 7.53114C12.9609 7.60106 12.8781 7.65654 12.787 7.69439C12.6958 7.73224 12.5981 7.75173 12.4993 7.75173C12.4006 7.75173 12.3029 7.73224 12.2117 7.69439C12.1206 7.65654 12.0378 7.60106 11.9681 7.53114L8.74997 4.31301V13.5005C8.74997 13.6994 8.67095 13.8902 8.5303 14.0308C8.38965 14.1715 8.19888 14.2505 7.99997 14.2505C7.80106 14.2505 7.61029 14.1715 7.46964 14.0308C7.32899 13.8902 7.24997 13.6994 7.24997 13.5005V4.31301L4.0306 7.53114C3.8897 7.67203 3.69861 7.75119 3.49935 7.75119C3.30009 7.75119 3.10899 7.67203 2.9681 7.53114C2.8272 7.39024 2.74805 7.19915 2.74805 6.99989C2.74805 6.80063 2.8272 6.60953 2.9681 6.46864L7.4681 1.96864C7.53778 1.89872 7.62057 1.84324 7.71173 1.80539C7.8029 1.76753 7.90064 1.74805 7.99935 1.74805C8.09806 1.74805 8.1958 1.76753 8.28696 1.80539C8.37813 1.84324 8.46092 1.89872 8.5306 1.96864L13.0306 6.46864C13.1005 6.53832 13.156 6.62111 13.1938 6.71227C13.2317 6.80344 13.2512 6.90118 13.2512 6.99989C13.2512 7.0986 13.2317 7.19634 13.1938 7.2875C13.156 7.37867 13.1005 7.46146 13.0306 7.53114Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n\nexport const SearchSection = forwardRef<\n SearchSectionHandle,\n SearchSectionProps\n>(function SearchSection(\n {\n onSubmit,\n placeholder = UNBRANDED_PLACEHOLDER,\n submitLabel,\n collapsedLabel,\n onCollapsedChange,\n chips = [],\n chipDisplayMode = 'focus',\n chipPosition = 'top',\n onVoiceInput,\n progressMessage,\n className = '',\n contextBanner,\n hasContext,\n canSubmitEmpty = false,\n hasContent = false,\n isBottomZoneVisible = false,\n onChipClick,\n onFocusChange,\n },\n ref,\n) {\n const [inputValue, setInputValue] = useState('');\n const [isFocused, setIsFocused] = useState(false);\n const [hasFocusInside, setHasFocusInside] = useState(false);\n const [isMultiline, setIsMultiline] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(false);\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const hasExpandedWhileZoneVisibleRef = useRef(false);\n const previouslyFocusedElementRef = useRef<HTMLElement | null>(null);\n const showChips =\n chips.length > 0 &&\n !hasContext &&\n (chipDisplayMode === 'always' || hasFocusInside);\n const effectiveCollapsedLabel =\n collapsedLabel ?? placeholder.replace(/\\.\\.\\.$/, '');\n\n const handleSubmit = useCallback(() => {\n const trimmedValue = inputValue.trim();\n if (trimmedValue || canSubmitEmpty) {\n onSubmit?.(trimmedValue);\n setInputValue('');\n }\n }, [canSubmitEmpty, inputValue, onSubmit]);\n\n useLayoutEffect(() => {\n const element = inputRef.current;\n if (!element) {\n return;\n }\n\n const computedStyles = window.getComputedStyle(element);\n const lineHeight = Number.parseFloat(computedStyles.lineHeight) || 32;\n\n const hasValue = inputValue.trim().length > 0;\n element.style.height = 'auto';\n const nextHeight = hasValue\n ? Math.min(Math.max(element.scrollHeight, lineHeight), 175)\n : lineHeight;\n element.style.height = `${nextHeight}px`;\n setIsMultiline(hasValue && nextHeight > lineHeight);\n }, [inputValue]);\n\n useEffect(() => {\n if (progressMessage || !hasContent) {\n setIsCollapsed(false);\n hasExpandedWhileZoneVisibleRef.current = false;\n return;\n }\n\n if (!isBottomZoneVisible) {\n hasExpandedWhileZoneVisibleRef.current = false;\n setIsCollapsed(false);\n return;\n }\n\n if (!hasExpandedWhileZoneVisibleRef.current) {\n setIsCollapsed(true);\n }\n }, [hasContent, isBottomZoneVisible, progressMessage]);\n\n useEffect(() => {\n onCollapsedChange?.(isCollapsed);\n }, [isCollapsed, onCollapsedChange]);\n\n const hasFocusInsideRef = useRef(hasFocusInside);\n hasFocusInsideRef.current = hasFocusInside;\n const onFocusChangeRef = useRef(onFocusChange);\n onFocusChangeRef.current = onFocusChange;\n\n useEffect(() => {\n onFocusChange?.(hasFocusInside);\n }, [hasFocusInside, onFocusChange]);\n\n useEffect(() => {\n return () => {\n if (hasFocusInsideRef.current) {\n onFocusChangeRef.current?.(false);\n }\n };\n }, []);\n\n const focusInput = useCallback(() => {\n const active = document.activeElement;\n if (\n active instanceof HTMLElement &&\n active !== inputRef.current &&\n active !== document.body\n ) {\n previouslyFocusedElementRef.current = active;\n }\n if (isCollapsed) {\n hasExpandedWhileZoneVisibleRef.current = true;\n setIsCollapsed(false);\n window.requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n } else {\n inputRef.current?.focus();\n }\n }, [isCollapsed]);\n\n const blurInput = useCallback(() => {\n inputRef.current?.blur();\n }, []);\n\n useImperativeHandle(ref, () => ({ focusInput, blurInput }), [\n focusInput,\n blurInput,\n ]);\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === 'Escape') {\n e.preventDefault();\n const prev = previouslyFocusedElementRef.current;\n previouslyFocusedElementRef.current = null;\n inputRef.current?.blur();\n prev?.focus?.();\n return;\n }\n if (\n e.key === 'Enter' &&\n !e.shiftKey &&\n (inputValue.trim() || canSubmitEmpty)\n ) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInputValue(e.target.value);\n };\n\n const handleInputFocus = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n setIsFocused(true);\n if (\n e.relatedTarget instanceof HTMLElement &&\n e.relatedTarget !== inputRef.current\n ) {\n previouslyFocusedElementRef.current = e.relatedTarget;\n }\n };\n\n const handleContentFocus = () => {\n setHasFocusInside(true);\n };\n\n const handleContentBlur = (e: React.FocusEvent<HTMLDivElement>) => {\n const next = e.relatedTarget as Node | null;\n if (!next || !e.currentTarget.contains(next)) {\n setHasFocusInside(false);\n }\n };\n\n if (progressMessage) {\n return (\n <div\n className={cn('web5-prompt-progress', className)}\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n <div className=\"web5-prompt-progress__indicator\" aria-hidden=\"true\">\n <ArrowDownIcon />\n </div>\n <div className=\"web5-prompt-progress__message\">{progressMessage}</div>\n </div>\n );\n }\n\n const canSubmit = inputValue.trim().length > 0 || canSubmitEmpty;\n const chipsMarkup =\n chips.length > 0 ? (\n <div\n className={cn(\n 'web5-prompt-shell__chips',\n chipPosition === 'bottom'\n ? 'web5-prompt-shell__chips--bottom'\n : 'web5-prompt-shell__chips--top',\n showChips\n ? 'web5-prompt-shell__chips--visible'\n : 'web5-prompt-shell__chips--hidden',\n )}\n aria-hidden={isCollapsed || !showChips}\n >\n {chips.map((chip) => (\n <a\n key={chip.label}\n href={isWeb5Url(chip.href) ? '#' : chip.href}\n onMouseDown={(e) => e.preventDefault()}\n onClick={(e) => {\n e.preventDefault();\n onChipClick?.(e, chip.href);\n setInputValue('');\n inputRef.current?.blur();\n }}\n tabIndex={!isCollapsed && showChips ? 0 : -1}\n // `has-custom-focus` opts out of Wix Thunderbolt's global keyboard focus ring\n // so our inset :focus-visible ring isn't overwritten when embedded in a Wix site.\n className=\"web5-prompt-chip has-custom-focus\"\n >\n {chip.label}\n <PromptSendIcon\n aria-hidden=\"true\"\n className=\"web5-prompt-send-icon\"\n />\n </a>\n ))}\n </div>\n ) : null;\n\n const handleExpandClick = () => {\n focusInput();\n };\n\n\n return (\n <div\n className={cn(\n 'web5-prompt-shell',\n isCollapsed && 'web5-prompt-shell--collapsed',\n // Widens the pill while the field or a chip holds focus. Driven by\n // `hasFocusInside` rather than `isFocused` so clicking a chip (which\n // preventDefaults its mousedown) doesn't collapse the width mid-click.\n hasFocusInside && !isCollapsed && 'web5-prompt-shell--focused',\n className,\n )}\n >\n <div className=\"web5-prompt-shell__stage\">\n <button\n type=\"button\"\n className=\"web5-prompt-shell__collapsed-button has-custom-focus\"\n onClick={handleExpandClick}\n aria-label={effectiveCollapsedLabel}\n aria-hidden={!isCollapsed}\n tabIndex={isCollapsed ? 0 : -1}\n >\n {effectiveCollapsedLabel}\n </button>\n\n <div\n className=\"web5-prompt-shell__content\"\n aria-hidden={isCollapsed}\n onFocus={handleContentFocus}\n onBlur={handleContentBlur}\n >\n {contextBanner}\n <div className=\"web5-prompt-shell__panel\">\n <div\n className={cn(\n 'web5-prompt-shell__stack',\n chipPosition === 'top' && 'web5-prompt-shell__stack--chips-top',\n )}\n >\n <div className=\"web5-prompt-search\" role=\"search\">\n <div className=\"web5-prompt-search__inner\">\n <div\n className={cn(\n 'web5-prompt-field',\n isFocused && 'web5-prompt-field--focused',\n isMultiline && 'web5-prompt-field--multiline',\n )}\n >\n <textarea\n ref={inputRef}\n rows={1}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onFocus={handleInputFocus}\n onBlur={() => setIsFocused(false)}\n placeholder={placeholder}\n aria-label=\"Search or ask a question\"\n aria-keyshortcuts=\"/ Control+K\"\n className=\"web5-prompt-input has-custom-focus placeholder:text-search-input-hint\"\n tabIndex={isCollapsed ? -1 : undefined}\n />\n\n <div className=\"web5-prompt-actions\">\n {onVoiceInput && (\n <button\n type=\"button\"\n onClick={onVoiceInput}\n className=\"web5-prompt-voice\"\n aria-label=\"Voice input\"\n tabIndex={isCollapsed ? -1 : undefined}\n >\n <MicrophoneIcon />\n </button>\n )}\n <button\n type=\"button\"\n onClick={handleSubmit}\n className={cn(\n 'web5-prompt-submit',\n submitLabel && 'web5-prompt-submit--labeled',\n canSubmit && 'web5-prompt-submit--active',\n )}\n aria-label={submitLabel ?? 'Submit'}\n disabled={!canSubmit || isCollapsed}\n tabIndex={isCollapsed ? -1 : undefined}\n >\n {submitLabel ? (\n <>\n <span className=\"web5-prompt-submit__label\">\n {submitLabel}\n </span>\n <ArrowRightIcon\n aria-hidden=\"true\"\n className=\"web5-prompt-send-icon\"\n />\n </>\n ) : (\n <PromptSendIcon\n aria-hidden=\"true\"\n className=\"web5-prompt-send-icon\"\n />\n )}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n {chipsMarkup}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The per-section runtime: which section a component is rendering inside, and
|
|
3
|
+
* the `componentOptions` bag its registry entry carried.
|
|
4
|
+
*
|
|
5
|
+
* Core already owns the data half. A registration may declare
|
|
6
|
+
* `options.componentOptions`, and the parser copies the matched entry's bag
|
|
7
|
+
* onto `PageSection.componentOptions`. What was missing was the last hop: a
|
|
8
|
+
* section component only receives what `parse()` produced, so the bag and the
|
|
9
|
+
* host's section id had no way to reach it. Each client bundle closed that gap
|
|
10
|
+
* with its own pair of context providers, exported under the `uiSlots` names
|
|
11
|
+
* the host looked up — three near-identical copies, none of them type-checked
|
|
12
|
+
* against what the host actually passed.
|
|
13
|
+
*
|
|
14
|
+
* Owning it here lets the host mount the providers by direct import, next to
|
|
15
|
+
* `ImageSlotProvider`, so every client gets them without exporting anything.
|
|
16
|
+
* Client bundles externalise core to the host's `Web5Core` global, so a hook
|
|
17
|
+
* called inside a client component reads the very context the host mounted.
|
|
18
|
+
*/
|
|
19
|
+
import React, { createContext, useContext, useMemo } from 'react';
|
|
20
|
+
import { FeatureToggleProvider } from '../featureToggles/FeatureToggleContext.js';
|
|
21
|
+
const SectionOptionsPlanContext = /*#__PURE__*/createContext({});
|
|
22
|
+
const CurrentSectionIdContext = /*#__PURE__*/createContext(null);
|
|
23
|
+
/**
|
|
24
|
+
* Mounted once around the page by the host. Also mounts the feature-toggle
|
|
25
|
+
* reader: the client copies this replaces did so, and a client section that
|
|
26
|
+
* reads a toggle must keep working after it drops its own provider.
|
|
27
|
+
*/
|
|
28
|
+
export const SectionsRuntimeProvider = _ref => {
|
|
29
|
+
let {
|
|
30
|
+
sections,
|
|
31
|
+
featureToggles,
|
|
32
|
+
children
|
|
33
|
+
} = _ref;
|
|
34
|
+
const plan = useMemo(() => sections.reduce((acc, section) => {
|
|
35
|
+
if (section.componentOptions) {
|
|
36
|
+
acc[section.id] = section.componentOptions;
|
|
37
|
+
}
|
|
38
|
+
return acc;
|
|
39
|
+
}, {}), [sections]);
|
|
40
|
+
return /*#__PURE__*/React.createElement(FeatureToggleProvider, {
|
|
41
|
+
featureToggles: featureToggles
|
|
42
|
+
}, /*#__PURE__*/React.createElement(SectionOptionsPlanContext.Provider, {
|
|
43
|
+
value: plan
|
|
44
|
+
}, children));
|
|
45
|
+
};
|
|
46
|
+
/** Mounted once per section by the host's section wrapper. */
|
|
47
|
+
export const SectionRuntimeProvider = _ref2 => {
|
|
48
|
+
let {
|
|
49
|
+
sectionId,
|
|
50
|
+
children
|
|
51
|
+
} = _ref2;
|
|
52
|
+
return /*#__PURE__*/React.createElement(CurrentSectionIdContext.Provider, {
|
|
53
|
+
value: sectionId
|
|
54
|
+
}, children);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The `componentOptions` of the registry entry that produced the enclosing
|
|
59
|
+
* section, or `undefined` outside a section or when the entry declared none.
|
|
60
|
+
*/
|
|
61
|
+
export function useCurrentSectionOptions() {
|
|
62
|
+
const plan = useContext(SectionOptionsPlanContext);
|
|
63
|
+
const sectionId = useContext(CurrentSectionIdContext);
|
|
64
|
+
if (!sectionId) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
return plan[sectionId];
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The host's id for the enclosing section; `null` outside a section. */
|
|
71
|
+
export function useCurrentSectionId() {
|
|
72
|
+
return useContext(CurrentSectionIdContext);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=SectionRuntimeContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","createContext","useContext","useMemo","FeatureToggleProvider","SectionOptionsPlanContext","CurrentSectionIdContext","SectionsRuntimeProvider","_ref","sections","featureToggles","children","plan","reduce","acc","section","componentOptions","id","createElement","Provider","value","SectionRuntimeProvider","_ref2","sectionId","useCurrentSectionOptions","undefined","useCurrentSectionId"],"sources":["../../../src/context/SectionRuntimeContext.tsx"],"sourcesContent":["/**\n * The per-section runtime: which section a component is rendering inside, and\n * the `componentOptions` bag its registry entry carried.\n *\n * Core already owns the data half. A registration may declare\n * `options.componentOptions`, and the parser copies the matched entry's bag\n * onto `PageSection.componentOptions`. What was missing was the last hop: a\n * section component only receives what `parse()` produced, so the bag and the\n * host's section id had no way to reach it. Each client bundle closed that gap\n * with its own pair of context providers, exported under the `uiSlots` names\n * the host looked up — three near-identical copies, none of them type-checked\n * against what the host actually passed.\n *\n * Owning it here lets the host mount the providers by direct import, next to\n * `ImageSlotProvider`, so every client gets them without exporting anything.\n * Client bundles externalise core to the host's `Web5Core` global, so a hook\n * called inside a client component reads the very context the host mounted.\n */\nimport React, {\n createContext,\n useContext,\n useMemo,\n type FC,\n type PropsWithChildren,\n} from 'react';\nimport {\n FeatureToggleProvider,\n type EmbedFeatureToggleResult,\n} from '../featureToggles/FeatureToggleContext';\nimport type { PageSection } from '../types/page-section';\n\nexport interface RuntimeSection {\n id: string;\n sectionType?: string;\n componentOptions?: PageSection['componentOptions'];\n}\n\ntype SectionOptionsPlan = Record<\n string,\n NonNullable<PageSection['componentOptions']>\n>;\n\nconst SectionOptionsPlanContext = createContext<SectionOptionsPlan>({});\nconst CurrentSectionIdContext = createContext<string | null>(null);\n\nexport interface SectionsRuntimeProviderProps {\n /** Every section on the page, in order. */\n sections: RuntimeSection[];\n featureToggles?: Record<string, EmbedFeatureToggleResult>;\n}\n\n/**\n * Mounted once around the page by the host. Also mounts the feature-toggle\n * reader: the client copies this replaces did so, and a client section that\n * reads a toggle must keep working after it drops its own provider.\n */\nexport const SectionsRuntimeProvider: FC<\n PropsWithChildren<SectionsRuntimeProviderProps>\n> = ({ sections, featureToggles, children }) => {\n const plan = useMemo(\n () =>\n sections.reduce<SectionOptionsPlan>((acc, section) => {\n if (section.componentOptions) {\n acc[section.id] = section.componentOptions;\n }\n return acc;\n }, {}),\n [sections],\n );\n\n return (\n <FeatureToggleProvider featureToggles={featureToggles}>\n <SectionOptionsPlanContext.Provider value={plan}>\n {children}\n </SectionOptionsPlanContext.Provider>\n </FeatureToggleProvider>\n );\n};\n\nexport interface SectionRuntimeProviderProps {\n sectionId: string;\n}\n\n/** Mounted once per section by the host's section wrapper. */\nexport const SectionRuntimeProvider: FC<\n PropsWithChildren<SectionRuntimeProviderProps>\n> = ({ sectionId, children }) => (\n <CurrentSectionIdContext.Provider value={sectionId}>\n {children}\n </CurrentSectionIdContext.Provider>\n);\n\n/**\n * The `componentOptions` of the registry entry that produced the enclosing\n * section, or `undefined` outside a section or when the entry declared none.\n */\nexport function useCurrentSectionOptions<\n T = NonNullable<PageSection['componentOptions']>,\n>(): T | undefined {\n const plan = useContext(SectionOptionsPlanContext);\n const sectionId = useContext(CurrentSectionIdContext);\n\n if (!sectionId) {\n return undefined;\n }\n\n return plan[sectionId] as T | undefined;\n}\n\n/** The host's id for the enclosing section; `null` outside a section. */\nexport function useCurrentSectionId(): string | null {\n return useContext(CurrentSectionIdContext);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAK,IACVC,aAAa,EACbC,UAAU,EACVC,OAAO,QAGF,OAAO;AACd,SACEC,qBAAqB,QAEhB,wCAAwC;AAc/C,MAAMC,yBAAyB,gBAAGJ,aAAa,CAAqB,CAAC,CAAC,CAAC;AACvE,MAAMK,uBAAuB,gBAAGL,aAAa,CAAgB,IAAI,CAAC;AAQlE;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMM,uBAEZ,GAAGC,IAAA,IAA4C;EAAA,IAA3C;IAAEC,QAAQ;IAAEC,cAAc;IAAEC;EAAS,CAAC,GAAAH,IAAA;EACzC,MAAMI,IAAI,GAAGT,OAAO,CAClB,MACEM,QAAQ,CAACI,MAAM,CAAqB,CAACC,GAAG,EAAEC,OAAO,KAAK;IACpD,IAAIA,OAAO,CAACC,gBAAgB,EAAE;MAC5BF,GAAG,CAACC,OAAO,CAACE,EAAE,CAAC,GAAGF,OAAO,CAACC,gBAAgB;IAC5C;IACA,OAAOF,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAC,EACR,CAACL,QAAQ,CACX,CAAC;EAED,oBACET,KAAA,CAAAkB,aAAA,CAACd,qBAAqB;IAACM,cAAc,EAAEA;EAAe,gBACpDV,KAAA,CAAAkB,aAAA,CAACb,yBAAyB,CAACc,QAAQ;IAACC,KAAK,EAAER;EAAK,GAC7CD,QACiC,CACf,CAAC;AAE5B,CAAC;AAMD;AACA,OAAO,MAAMU,sBAEZ,GAAGC,KAAA;EAAA,IAAC;IAAEC,SAAS;IAAEZ;EAAS,CAAC,GAAAW,KAAA;EAAA,oBAC1BtB,KAAA,CAAAkB,aAAA,CAACZ,uBAAuB,CAACa,QAAQ;IAACC,KAAK,EAAEG;EAAU,GAChDZ,QAC+B,CAAC;AAAA,CACpC;;AAED;AACA;AACA;AACA;AACA,OAAO,SAASa,wBAAwBA,CAAA,EAErB;EACjB,MAAMZ,IAAI,GAAGV,UAAU,CAACG,yBAAyB,CAAC;EAClD,MAAMkB,SAAS,GAAGrB,UAAU,CAACI,uBAAuB,CAAC;EAErD,IAAI,CAACiB,SAAS,EAAE;IACd,OAAOE,SAAS;EAClB;EAEA,OAAOb,IAAI,CAACW,SAAS,CAAC;AACxB;;AAEA;AACA,OAAO,SAASG,mBAAmBA,CAAA,EAAkB;EACnD,OAAOxB,UAAU,CAACI,uBAAuB,CAAC;AAC5C","ignoreList":[]}
|
package/dist/esm/index.js
CHANGED
|
@@ -73,6 +73,11 @@ export { useResolvedImageSources } from './hooks/useResolvedImageSources.js';
|
|
|
73
73
|
// `useResolvedImageSources` path above, which is kept until its callers move.
|
|
74
74
|
export { useImageSlot } from './hooks/useImageSlot.js';
|
|
75
75
|
export { ImageSlotProvider, useImageSlotCollector } from './context/ImageSlotContext.js';
|
|
76
|
+
// Section runtime: the host mounts these around the page and around each
|
|
77
|
+
// section, so a component can read the id of the section it renders inside
|
|
78
|
+
// and the `componentOptions` its registry entry carried. Client bundles used
|
|
79
|
+
// to ship their own copies as uiSlots; those are superseded by this.
|
|
80
|
+
export { SectionsRuntimeProvider, SectionRuntimeProvider, useCurrentSectionOptions, useCurrentSectionId } from './context/SectionRuntimeContext.js';
|
|
76
81
|
export { composeSemantic } from './image/composeSemantic.js';
|
|
77
82
|
export { useResolveGenericEntityData } from './hooks/useResolveGenericEntityData.js';
|
|
78
83
|
export { useEntityTransforms } from './hooks/useEntityTransforms.js';
|
|
@@ -113,7 +118,8 @@ export { PRODUCT_BACK_SESSION_KEY, writeProductBackHandoff, readProductBackHando
|
|
|
113
118
|
export { PromptEntryEmptyState } from './components/ui/PromptEntryEmptyState.js';
|
|
114
119
|
export { SearchSection } from './components/ui/SearchSection.js';
|
|
115
120
|
export { FeedbackBar } from './components/ui/FeedbackBar.js';
|
|
116
|
-
export { AiDisclosure,
|
|
121
|
+
export { AiDisclosure, DEFAULT_AI_DISCLOSURE_TEXT } from './components/ui/AiDisclosure.js';
|
|
122
|
+
export { ASSISTANT_TOKEN, UNBRANDED_ASSISTANT_NAME, DEFAULT_PROMPT_PLACEHOLDER, assistantName, resolveAssistantPlaceholder } from './lib/assistant.js';
|
|
117
123
|
export { AiIcon } from './components/ui/icons/AiIcon.js';
|
|
118
124
|
export { PoweredByBadge, DEFAULT_POWERED_BY_HREF } from './components/ui/PoweredByBadge.js';
|
|
119
125
|
export { BottomContainer } from './components/ui/BottomContainer.js';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CLIENT_IDS","EXPERIMENT_IDS","createFeatureToggleReader","FeatureToggleProvider","useFeatureToggles","useFeatureToggle","getPartsByType","getPartByRole","getAllByRole","getHeading","getImages","getLinks","extractContent","extractContentMarkdown","deriveRole","DROP_SECTION","DIAGNOSTIC_TYPES","buildImageSearchFilter","ImageSearchFilterToken","backgroundFilter","HeroSectionDefinition","HeroEntitySectionDefinition","KpiSectionDefinition","MetricsSectionDefinition","FeatureCardsSectionDefinition","EntitySectionDefinition","EntityCollectionSectionDefinition","ComparisonSectionDefinition","TextBlockSectionDefinition","CtaBannerSectionDefinition","CalloutSectionDefinition","NextStepsSectionDefinition","FeatureSection9PlusDefinition","ListItemsSectionDefinition","SkipNodesSectionDefinition","HtmlCommentSectionDefinition","SearchSectionDefinition","ErrorSectionDefinition","FallbackSectionDefinition","createSdkRegistry","ComponentRegistry","validatePattern","validatePatternSyntax","validatePatternWithBlocks","convertToBlockElements","convertToBlockElementsWithMapping","Web5UrlType","isWeb5AskUrl","isWeb5EntityUrl","isWeb5ImageUrl","isWeb5IconUrl","isWeb5ActionUrl","isWeb5SearchUrl","isWeb5Url","isNavigableUrl","isValidLinkUrl","isLegacyUrl","parseWeb5Url","isValidWeb5Url","validateLinkUrl","isEntityLink","parseEntityLink","extractProtocol","extractLinkMetadata","findInvalidWeb5Links","hasImage","isHtmlComment","matchMarkdown","matchAllSections","nodesToParts","ComponentDependenciesProvider","useComponentDependencies","UserQueryProvider","useUserQuery","ChipsProvider","useChips","defaultExtractor","enrichEntitiesFromPayload","entityHref","normalizeEntityItem","toCatalogPath","entityPayloadFromItems","mergeEntityData","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","isProductFamilyEntityType","isDocumentFamilyEntityType","PLATFORM_ENTITY_TYPES","resolveEntityTypeConfig","CALLOUT_KINDS","CALLOUT_SEMANTICS","useWeb5Link","useConversation","useDebugImageContext","useResolvedImageSources","useImageSlot","ImageSlotProvider","useImageSlotCollector","composeSemantic","useResolveGenericEntityData","useEntityTransforms","useMarkdownUtils","useResolveShopifyEntityData","useResolveSearchSpringEntityData","fetchProductsByHandles","fetchProductsByHandlesMap","transformSSProductToEntityItemData","addToCart","ShopifyStorefrontClient","resolveShopifyConfig","resolveShopifyEntity","transformShopifyProduct","transformShopifyCollection","transformShopifyArticle","transformShopifyEntityToItemData","PRODUCT_BY_HANDLE_QUERY","COLLECTION_BY_HANDLE_QUERY","ARTICLE_BY_HANDLE_QUERY","cn","normalizeImageUrl","getResizedImageUrl","analyzeBackdrop","computeContentBBox","buildProbeUrl","loadImagePixels","loadBackdropAnalysis","stripMarkdown","rgbToHsl","hslToRgb","ensureMinLightness","toRgb","deriveDarkColor","deriveDarkGradient","deriveLightColor","pushEvent","pushPromptSubmit","pushLinkClick","pushError","pushExit","pushEntityFiltered","hasAnalyticsConsent","UNKNOWN_CONSENT","HOST_CONSENT_GLOBAL","transmit","mayTransmit","unlockOnUserAction","isUserEngaged","mayPersistIdentity","getConsentSnapshot","getGateView","subscribeToConsent","installConsentProvider","getInstalledProviderName","setConsentBufferLimit","getConsentGateStats","resetConsentGateForTests","detectConsentProvider","initConsentGate","CONSENT_OVERRIDE_KEY","CONSENT_OVERRIDE_QUERY_PARAM","getConsentOverride","setConsentOverride","createShopifyConsentProvider","isShopifyHost","createOneTrustConsentProvider","isOneTrustHost","createHostSuppliedConsentProvider","hasHostSuppliedConsent","publishHostConsent","ERROR_MARKDOWN","getErrorTypeFromStatus","createErrorMarkdown","STREAMING_TIMEOUT_MS","DEFAULT_ERROR_TEMPLATES","resolveErrorTemplate","getForwardStack","setForwardStack","clearForwardStack","pushToForwardStack","popFromForwardStack","UserQuery","PRODUCT_BACK_SESSION_KEY","writeProductBackHandoff","readProductBackHandoff","PromptEntryEmptyState","SearchSection","FeedbackBar","AiDisclosure","ASSISTANT_TOKEN","DEFAULT_AI_DISCLOSURE_TEXT","AiIcon","PoweredByBadge","DEFAULT_POWERED_BY_HREF","BottomContainer","MarkdownText","CalloutBlock","OptimizedImage","SectionSkeleton","SmartIcon","Loader","PlacementLoader","UnifiedLink","detectLinkType","LinkType","Table","TableHeader","TableBody","TableFooter","TableHead","TableRow","TableCell","TableCaption","WEB5_USER_QUERY_EVENT","WEB5_ANSWER_UPDATED_EVENT","WEB5_ANSWER_SETTLED_EVENT","WEB5_REDIRECT_EVENT","loadClientBundle","getClientBundleOverride","isTrustedBundleHost","TEMPLATES_CDN_BASE","TEMPLATES_MANIFEST_URL","getTemplateOverride","isTemplatePickerRequested","isValidTemplateId","resolveClientBundleUrl","mergeClientConfig","applyThemeOverrides","THEME_OVERRIDE_TOKENS","THEME_TOKEN_CONTRACT","BRAND_TOKENS","EDITABLE_TOKENS","TOKEN_NAME_PATTERN","bucketOf","hostAliasFor","isThemeDebugEnabled","THEME_DEBUG_KEY","THEME_DEBUG_QUERY_PARAM","hexToHslTriplet","hslTripletToHex","isHslTriplet","PlacementResponseRenderer","PlacementSmoothHeight","buildPlacementDependencies","PlacementPayloadProvider","usePlacementPayload","UnifiedMarkdownParser","parseMarkdownToAst","parseAstToMarkdown","escapeWeb5Links","fixMalformedLinks","trimTrailingWhitespace","normalizeIconUrls","decodeLinkText","preprocessMarkdown","ComponentTracking","findKeywordsInContent","getContextualImageFilename","extractIntentFromMarkdown","getIntentFromMarkdown","createPageSection","generateSectionId","generateId","findImageInNode","findImageInChildren","DiagnosticsCollector","REFRESH_PROMPTS_UNTIL_KEY","REFRESH_PROMPTS_WINDOW_MS","getRefreshPromptsExpiry","shouldRefreshPrompts","enableRefreshPrompts","disableRefreshPrompts","BACKEND_ENVIRONMENT_KEY","BACKEND_ENVIRONMENT_QUERY_PARAM","DEFAULT_BACKEND_ENVIRONMENT","getBackendEnvironment","setBackendEnvironment","usesStagingBackend","isSimulationTraffic","MATCH_DEBUG_KEY","MATCH_DEBUG_QUERY_PARAM","isMatchDebugEnabled","setMatchDebug","resetMatchDebugCache","logMatchDebug","createWixAuthFetch","getOrCreateSessionId","getSessionId","getChatId","startNewChatId","setChatId","resetChatIdForTests","parseMarkdownToComponents","tryParseComponent","mergeSectionsWithStableReferences","WEB5_ROOT_ID","WEB5_ROOT_CLASS","WEB5_SCOPES","WEB5_SCOPE","WEB5_GLOBAL_TOKENS"],"sources":["../../src/index.ts"],"sourcesContent":["// Client IDs and experiment IDs\nexport { CLIENT_IDS, EXPERIMENT_IDS } from './clients';\n\nexport {\n type EmbedFeatureToggleResult,\n type FeatureToggleReader,\n createFeatureToggleReader,\n FeatureToggleProvider,\n useFeatureToggles,\n useFeatureToggle,\n} from './featureToggles/FeatureToggleContext';\n\n// Dev-only chrome injection contract for client packages\nexport type { DevEnvironment } from './client/devEnvironment';\n\n// Part types and helpers\nexport {\n type PartType,\n type Part,\n type HeadingPart,\n type ImagePart,\n type LinkPart,\n type ListPart,\n type ListItemPart,\n type KpiItemPart,\n type CardPart,\n type IconPart,\n type CalloutPart,\n type EntityPart,\n getPartsByType,\n getPartByRole,\n getAllByRole,\n getHeading,\n getImages,\n getLinks,\n extractContent,\n extractContentMarkdown,\n deriveRole,\n} from './parts/parts';\n\n// Component types\nexport type {\n BaseCompProps,\n SlotCompProps,\n SectionCompProps,\n SectionCompPropsWithSlot,\n TextCompProps,\n ButtonCompProps,\n ImageCompProps,\n BadgeCompProps,\n HeroButton,\n KpiItemCompProps,\n FeatureItemCompProps,\n FeatureCardCompProps,\n EntityItemData,\n EntityItem,\n GenericEntityData,\n GenericEntityCompProps,\n ComparisonRow,\n ComparisonColumn,\n AiNarrativeCompProps,\n HeroCompProps,\n HeroEntityCompProps,\n KpiCompProps,\n MetricsCompProps,\n MetricsItemCompProps,\n FeatureCardsCompProps,\n EntityCompProps,\n ComparisonCompProps,\n TextBlockCompProps,\n Component,\n BaseComponent,\n SlotComponent,\n SectionComponent,\n TextComponent,\n ButtonComponent,\n ImageComponent,\n BadgeComponent,\n KpiItemComponent,\n MetricsItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n MetricsSectionComponent,\n FeatureCardsSectionComponent,\n EntitySectionComponent,\n PropsOf,\n SectionFixture,\n CtaBannerCompProps,\n CtaBannerSectionComponent,\n CalloutCompProps,\n CalloutSectionComponent,\n NextStepsCompProps,\n NextStepsSectionComponent,\n FeatureSection9PlusCompProps,\n FeatureSection9PlusSectionComponent,\n ListItemsSectionCompProps,\n ListItemsSectionComponent,\n ErrorCompProps,\n ErrorSectionComponent,\n NullCompProps,\n NullSectionComponent,\n SolutionEntityCompProps,\n SolutionEntitySectionComponent,\n SolutionEntityData,\n BlogEntityCompProps,\n BlogEntitySectionComponent,\n BlogEntityData,\n GeneralTextCompProps,\n GeneralTextSectionComponent,\n PersonalizedNarrativeCompProps,\n PersonalizedNarrativeSectionComponent,\n} from './component/types';\n\n// Section definition\nexport type {\n SectionDefinition,\n ParseContext,\n ContextualImageResult,\n DropSection,\n} from './component/section-definition';\nexport { DROP_SECTION } from './component/section-definition';\n\n// Diagnostic types\nexport { DIAGNOSTIC_TYPES } from './component/diagnosticTypes';\nexport type { DiagnosticType } from './component/diagnosticTypes';\n\n// Image search filters\nexport {\n buildImageSearchFilter,\n type ImageSearchFilterString,\n} from './image/imageSearchFilterTypes';\nexport {\n ImageSearchFilterToken,\n backgroundFilter,\n} from './image/imageSearchFilters';\nexport type {\n ContextualImageAsset,\n ImageSourceInput,\n ResolvedImageSource,\n ResolvedImageSourceKind,\n} from './image/contextualImageTypes';\n\n// Section definition classes + createSdkRegistry\nexport {\n HeroSectionDefinition,\n HeroEntitySectionDefinition,\n KpiSectionDefinition,\n MetricsSectionDefinition,\n FeatureCardsSectionDefinition,\n EntitySectionDefinition,\n EntityCollectionSectionDefinition,\n ComparisonSectionDefinition,\n TextBlockSectionDefinition,\n CtaBannerSectionDefinition,\n CalloutSectionDefinition,\n NextStepsSectionDefinition,\n FeatureSection9PlusDefinition,\n ListItemsSectionDefinition,\n SkipNodesSectionDefinition,\n HtmlCommentSectionDefinition,\n SearchSectionDefinition,\n ErrorSectionDefinition,\n FallbackSectionDefinition,\n createSdkRegistry,\n} from './component/componentDefinitions';\n\n// Registry\nexport { ComponentRegistry } from './registry';\nexport type {\n SlotOptions,\n SectionOptions,\n SectionRegistration,\n SlotNode,\n SlotIntentNode,\n SectionIntentNode,\n SectionNode,\n SlotVariant,\n SectionVariant,\n RegistryCatalog,\n ActionResult,\n ActionHandler,\n} from './registry';\n\n// Pattern validator\nexport {\n validatePattern,\n validatePatternSyntax,\n validatePatternWithBlocks,\n type PatternValidationResult,\n type BlockElement,\n type EnrichedBlockElement,\n type LinkMetadata,\n type LinkAttribute,\n} from './patternValidator';\n\n// Markdown blocks\nexport {\n convertToBlockElements,\n convertToBlockElementsWithMapping,\n type BlockElementsWithMapping,\n} from './markdownBlocks';\n\n// Link types, enum & guards\nexport {\n Web5UrlType,\n type Web5AskUrl,\n type Web5EntityUrl,\n type Web5ImageUrl,\n type Web5IconUrl,\n type Web5ActionUrl,\n type Web5SearchUrl,\n type Web5Url,\n type HttpsUrl,\n type HttpUrl,\n type MailtoUrl,\n type RelativeUrl,\n type NavigableUrl,\n type ValidLinkUrl,\n type AnyKnownUrl,\n type LegacyUrl,\n isWeb5AskUrl,\n isWeb5EntityUrl,\n isWeb5ImageUrl,\n isWeb5IconUrl,\n isWeb5ActionUrl,\n isWeb5SearchUrl,\n isWeb5Url,\n isNavigableUrl,\n isValidLinkUrl,\n isLegacyUrl,\n} from './types/link-types';\n\n// Entity/URL parsing\nexport {\n parseWeb5Url,\n isValidWeb5Url,\n validateLinkUrl,\n type Web5UrlParsed,\n type Web5AskParsed,\n type Web5EntityParsed,\n type Web5ImageParsed,\n type Web5IconParsed,\n type Web5ActionParsed,\n type Web5SearchParsed,\n isEntityLink,\n parseEntityLink,\n extractProtocol,\n extractLinkMetadata,\n} from './utils/entityLinkParser';\n\n// Web5 link validation\nexport {\n findInvalidWeb5Links,\n type InvalidWeb5Link,\n} from './utils/web5LinkValidator';\n\n// Node matchers\nexport { hasImage, isHtmlComment } from './utils/nodeMatchers';\n\n// Match API\nexport {\n matchMarkdown,\n type MarkdownMatchResult,\n matchAllSections,\n type MatchAllSectionsResult,\n nodesToParts,\n} from './match';\n\n// ---------------------------------------------------------------------------\n// DI Infrastructure (moved from @wix/w5-client-circana)\n// ---------------------------------------------------------------------------\n\n// DI context and provider\nexport {\n ComponentDependenciesProvider,\n useComponentDependencies,\n type ComponentDependenciesProviderProps,\n} from './context/ComponentDependenciesContext';\n\n// Raw user query for the current response page\nexport {\n UserQueryProvider,\n useUserQuery,\n type UserQueryProviderProps,\n} from './context/UserQueryContext';\n\n// Chips context (suggestion chips shared between SearchSection and error states)\nexport {\n ChipsProvider,\n useChips,\n type SuggestionChip,\n} from './context/ChipsContext';\n\n// DI types\nexport type {\n ComponentDependencies,\n Web5LinkApi,\n ConversationApi,\n SendMessageTrackingOptions,\n SendMessageOptions,\n ComparisonSubmitPayload,\n ComparisonSelectedProduct,\n ProductComparisonSelectionState,\n ProductComparisonApi,\n EntityTransforms,\n MarkdownUtils,\n ResolveGenericEntityDataOptions,\n} from './types/dependencies';\nexport type {\n ApiPayloadItem,\n EntityTypeConfig,\n EntityConfig,\n EntityExtractionContext,\n} from './types/entity';\nexport {\n defaultExtractor,\n enrichEntitiesFromPayload,\n entityHref,\n normalizeEntityItem,\n toCatalogPath,\n entityPayloadFromItems,\n mergeEntityData,\n fetchEntityListData,\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n getEntityExtractor,\n registerEntityExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n toMatchedOptions,\n formatMoney,\n readCurrencyCode,\n formatPriceField,\n formatProductPriceLabel,\n isProductFamilyEntityType,\n isDocumentFamilyEntityType,\n PLATFORM_ENTITY_TYPES,\n resolveEntityTypeConfig,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n MatchedOption,\n ProductPriceFields,\n} from './entity';\nexport {\n CALLOUT_KINDS,\n CALLOUT_SEMANTICS,\n type CalloutKind,\n type CalloutSemantic,\n type Callout,\n} from './types/callout';\n\n// Wrapper hooks\nexport { useWeb5Link } from './hooks/useWeb5Link';\nexport { useConversation } from './hooks/useConversation';\nexport { useDebugImageContext } from './hooks/useDebugImageContext';\nexport { useResolvedImageSources } from './hooks/useResolvedImageSources';\n\n// Image slots (ADR 0222/0223/0225): a section declares the holes in its layout\n// and a per-section collector resolves them as one set. Replaces the per-image\n// `useResolvedImageSources` path above, which is kept until its callers move.\nexport { useImageSlot } from './hooks/useImageSlot';\nexport type {\n UseImageSlotOptions,\n ResolvedImage,\n} from './hooks/useImageSlot';\nexport {\n ImageSlotProvider,\n useImageSlotCollector,\n} from './context/ImageSlotContext';\nexport type {\n ImageSlotCollector,\n ImageSlotProviderProps,\n} from './context/ImageSlotContext';\nexport { composeSemantic } from './image/composeSemantic';\nexport type { ComposeSemanticInput } from './image/composeSemantic';\nexport type {\n ImageSlotKind,\n ImageMatchQuality,\n ImageKind,\n ImageBackground,\n ImageSlotRequest,\n ImagePalette,\n ImageStatGrid,\n ImageVisualMetadata,\n ResolvedImageSlot,\n ResolveImageSetResponse,\n ResolveImageSetPort,\n SlotState,\n ImageSubject,\n} from './image/imageSlotTypes';\nexport { useResolveGenericEntityData } from './hooks/useResolveGenericEntityData';\nexport { useEntityTransforms } from './hooks/useEntityTransforms';\nexport { useMarkdownUtils } from './hooks/useMarkdownUtils';\nexport { useResolveShopifyEntityData } from './hooks/useResolveShopifyEntityData';\nexport { useResolveSearchSpringEntityData } from './hooks/useResolveSearchSpringEntityData';\n\n// SearchSpring\nexport {\n fetchProductsByHandles,\n fetchProductsByHandlesMap,\n transformSSProductToEntityItemData,\n} from './services/searchspring';\nexport type {\n SearchSpringConfig,\n SSProduct,\n SSSearchResponse,\n SSSizeData,\n} from './services/searchspring';\n\n// Shopify Storefront API\n// Cart actions\nexport { addToCart } from './services/cart';\n\nexport {\n ShopifyStorefrontClient,\n resolveShopifyConfig,\n resolveShopifyEntity,\n transformShopifyProduct,\n transformShopifyCollection,\n transformShopifyArticle,\n transformShopifyEntityToItemData,\n PRODUCT_BY_HANDLE_QUERY,\n COLLECTION_BY_HANDLE_QUERY,\n ARTICLE_BY_HANDLE_QUERY,\n} from './services/shopify';\nexport type {\n ShopifyStorefrontConfig,\n ShopifyProduct,\n ShopifyCollection,\n ShopifyArticle,\n ShopifyImage,\n ShopifyMoneyV2,\n} from './services/shopify';\n\n// Utilities\nexport { cn } from './lib/utils';\nexport { normalizeImageUrl, getResizedImageUrl } from './utils/image-utils';\nexport {\n analyzeBackdrop,\n computeContentBBox,\n buildProbeUrl,\n loadImagePixels,\n loadBackdropAnalysis,\n type BackdropAnalysis,\n type ContentBBox,\n type ImagePixels,\n} from './utils/imageBackdrop';\nexport { stripMarkdown } from './component/componentDefinitions/parse-utils';\n\n// Color utilities\nexport {\n type RGB,\n rgbToHsl,\n hslToRgb,\n ensureMinLightness,\n toRgb,\n deriveDarkColor,\n deriveDarkGradient,\n deriveLightColor,\n} from './color/colorUtils';\n\n// Analytics\nexport {\n pushEvent,\n pushPromptSubmit,\n pushLinkClick,\n pushError,\n pushExit,\n pushEntityFiltered,\n hasAnalyticsConsent,\n type EntityFilteredReason,\n} from './utils/analyticsEvents';\n\n// Consent gate (DL #218)\nexport {\n type ConsentState,\n type ConsentPurpose,\n type GatedPurpose,\n type ConsentSnapshot,\n type ConsentProvider,\n type GateView,\n type HostConsentInput,\n UNKNOWN_CONSENT,\n HOST_CONSENT_GLOBAL,\n transmit,\n mayTransmit,\n unlockOnUserAction,\n isUserEngaged,\n mayPersistIdentity,\n getConsentSnapshot,\n getGateView,\n subscribeToConsent,\n installConsentProvider,\n getInstalledProviderName,\n setConsentBufferLimit,\n getConsentGateStats,\n resetConsentGateForTests,\n detectConsentProvider,\n initConsentGate,\n CONSENT_OVERRIDE_KEY,\n CONSENT_OVERRIDE_QUERY_PARAM,\n getConsentOverride,\n setConsentOverride,\n createShopifyConsentProvider,\n isShopifyHost,\n createOneTrustConsentProvider,\n isOneTrustHost,\n createHostSuppliedConsentProvider,\n hasHostSuppliedConsent,\n publishHostConsent,\n} from './privacy';\n\n// Error handling types and utilities\nexport {\n type ConversationErrorType,\n ERROR_MARKDOWN,\n getErrorTypeFromStatus,\n createErrorMarkdown,\n STREAMING_TIMEOUT_MS,\n type ErrorActionType,\n type ErrorIconType,\n type ErrorTemplateButton,\n type ErrorTemplate,\n type ErrorTemplateOverrides,\n DEFAULT_ERROR_TEMPLATES,\n resolveErrorTemplate,\n} from './errors';\n\n// Navigation utilities\nexport {\n getForwardStack,\n setForwardStack,\n clearForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n} from './utils/navigationStack';\n\n// UI components\nexport {\n UserQuery,\n type UserQueryProps,\n type ProductBackContext,\n} from './components/ui/UserQuery';\nexport {\n PRODUCT_BACK_SESSION_KEY,\n writeProductBackHandoff,\n readProductBackHandoff,\n type ProductBackHandoff,\n} from './utils/productBackHandoff';\nexport {\n PromptEntryEmptyState,\n type PromptEntryEmptyStateProps,\n} from './components/ui/PromptEntryEmptyState';\nexport {\n SearchSection,\n type SearchSectionProps,\n type SearchSectionHandle,\n type ScrollChip,\n} from './components/ui/SearchSection';\nexport {\n FeedbackBar,\n type FeedbackBarProps,\n type FeedbackCategoryOption,\n type FeedbackSentiment,\n type FeedbackSubmitInput,\n} from './components/ui/FeedbackBar';\nexport {\n AiDisclosure,\n ASSISTANT_TOKEN,\n DEFAULT_AI_DISCLOSURE_TEXT,\n type AiDisclosureProps,\n} from './components/ui/AiDisclosure';\nexport { AiIcon } from './components/ui/icons/AiIcon';\nexport {\n PoweredByBadge,\n DEFAULT_POWERED_BY_HREF,\n type PoweredByBadgeProps,\n} from './components/ui/PoweredByBadge';\nexport {\n BottomContainer,\n type BottomContainerProps,\n} from './components/ui/BottomContainer';\nexport { MarkdownText } from './components/ui/MarkdownText';\nexport {\n CalloutBlock,\n type CalloutBlockProps,\n} from './components/ui/CalloutBlock';\nexport {\n OptimizedImage,\n type OptimizedImageProps,\n} from './components/ui/OptimizedImage';\nexport {\n SectionSkeleton,\n type SectionSkeletonProps,\n} from './components/ui/SectionSkeleton';\nexport { SmartIcon, type SmartIconProps } from './components/ui/SmartIcon';\nexport { Loader, type LoaderProps } from './components/ui/Loader';\nexport {\n PlacementLoader,\n type PlacementLoaderProps,\n} from './components/ui/PlacementLoader';\nexport {\n UnifiedLink,\n detectLinkType,\n type UnifiedLinkProps,\n LinkType,\n type LinkVariant,\n} from './components/ui/UnifiedLink';\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from './components/ui/table';\n\n// Placement (DL #088, DL #102 behavior declarations)\nexport type {\n PlacementBehaviorConfig,\n PlacementConfig,\n PlacementPrompts,\n} from './types/placement';\n\n// Cross-bundle user-query broadcast event (DL #097 D2)\nexport {\n WEB5_USER_QUERY_EVENT,\n type Web5UserQueryEventDetail,\n type Web5UserQueryEvent,\n} from './types/userQueryEvent';\n\n// Cross-bundle answer-updated broadcast event (B2B-4121)\nexport {\n WEB5_ANSWER_UPDATED_EVENT,\n type Web5AnswerUpdatedEventDetail,\n type Web5AnswerUpdatedEvent,\n} from './types/answerUpdatedEvent';\nexport {\n WEB5_ANSWER_SETTLED_EVENT,\n type Web5AnswerSettledStatus,\n type Web5AnswerSettledEventDetail,\n type Web5AnswerSettledEvent,\n} from './types/answerSettledEvent';\n\n// Cross-bundle redirect broadcast event (DL #098 D3)\nexport {\n WEB5_REDIRECT_EVENT,\n type Web5RedirectEventDetail,\n type Web5RedirectEvent,\n type Web5RedirectReason,\n} from './types/redirectEvent';\n// `placementFilter` was removed — hero/next-steps exclusion is the prompt's job\n// and placement-specific designs belong as `{ placement: true }` registry\n// variants (resolved automatically via `resolveSection(type, { placement: true })`).\n\n// Client bundle loader (DL #088 D3.3)\nexport { loadClientBundle } from './client/loadClientBundle';\n\n// `?clientBundleUrl=` dev override — shared by `web50-server-ui` and\n// `embed-placement` so the trusted-host gate can't drift between them.\nexport {\n getClientBundleOverride,\n isTrustedBundleHost,\n} from './client/clientBundleOverride';\n\n// Client-UMD URL resolution (DL #094 per-msid, DL #129 per-template) and the\n// universal bundle←backend config merge (DL #129 Q3/Q7) — shared by\n// `web50-server-ui` and `embed-placement`, the two client-bundle load sites.\nexport {\n TEMPLATES_CDN_BASE,\n TEMPLATES_MANIFEST_URL,\n getTemplateOverride,\n isTemplatePickerRequested,\n isValidTemplateId,\n resolveClientBundleUrl,\n} from './client/clientBundleUrl';\nexport {\n mergeClientConfig,\n type DeepPartial,\n} from './client/mergeClientConfig';\nexport {\n applyThemeOverrides,\n THEME_OVERRIDE_TOKENS,\n type ThemeOverrideKey,\n type ThemeOverrides,\n} from './client/applyThemeOverrides';\nexport {\n THEME_TOKEN_CONTRACT,\n BRAND_TOKENS,\n EDITABLE_TOKENS,\n TOKEN_NAME_PATTERN,\n bucketOf,\n hostAliasFor,\n type TokenBucket,\n type TokenContractEntry,\n type TokenType,\n} from './theme/tokenContract';\nexport {\n isThemeDebugEnabled,\n THEME_DEBUG_KEY,\n THEME_DEBUG_QUERY_PARAM,\n type AppliedToken,\n type ThemeOverrideSource,\n} from './client/themeDebug';\nexport {\n hexToHslTriplet,\n hslTripletToHex,\n isHslTriplet,\n} from './theme/colorFormat';\n\n// Placement renderer + DI helper (DL #088 D3.2, D3.4)\nexport {\n PlacementResponseRenderer,\n PlacementSmoothHeight,\n type PlacementResponseRendererProps,\n type PlacementSection,\n type PlacementVariant,\n} from './components/placement/PlacementResponseRenderer';\nexport {\n buildPlacementDependencies,\n type BuildPlacementDependenciesOptions,\n} from './components/placement/buildPlacementDependencies';\nexport {\n PlacementPayloadProvider,\n usePlacementPayload,\n type PlacementPayloadContextValue,\n} from './components/placement/PlacementPayloadContext';\n\n// Markdown parsing utilities — lifted from web50-server-ui (DL #088 B9.1)\nexport {\n UnifiedMarkdownParser,\n parseMarkdownToAst,\n parseAstToMarkdown,\n} from './utils/unifiedMarkdownParser';\nexport {\n escapeWeb5Links,\n fixMalformedLinks,\n trimTrailingWhitespace,\n normalizeIconUrls,\n decodeLinkText,\n preprocessMarkdown,\n type PreprocessorDiagnostic,\n type PreprocessResult,\n} from './utils/markdownPreprocessor';\nexport {\n ComponentTracking,\n type ComponentNodeRange,\n} from './utils/componentTracking';\nexport {\n findKeywordsInContent,\n getContextualImageFilename,\n} from './utils/contentKeywordMatcher';\nexport {\n extractIntentFromMarkdown,\n getIntentFromMarkdown,\n type IntentInfo,\n type IntentExtractionOptions,\n type ResponseState,\n} from './utils/intentExtractor';\nexport type { PageSection } from './types/page-section';\nexport {\n createPageSection,\n generateSectionId,\n generateId,\n findImageInNode,\n findImageInChildren,\n type Product,\n type ComparisonProduct,\n type ProductComparisonSectionProps,\n} from './utils/propsExtractor';\nexport {\n DiagnosticsCollector,\n type DiagnosticEntry,\n} from './utils/diagnosticsCollector';\nexport {\n REFRESH_PROMPTS_UNTIL_KEY,\n REFRESH_PROMPTS_WINDOW_MS,\n getRefreshPromptsExpiry,\n shouldRefreshPrompts,\n enableRefreshPrompts,\n disableRefreshPrompts,\n} from './utils/refreshPrompts';\nexport {\n type BackendEnvironment,\n BACKEND_ENVIRONMENT_KEY,\n BACKEND_ENVIRONMENT_QUERY_PARAM,\n DEFAULT_BACKEND_ENVIRONMENT,\n getBackendEnvironment,\n setBackendEnvironment,\n usesStagingBackend,\n} from './utils/backendEnvironment';\nexport { isSimulationTraffic } from './utils/simulation';\nexport {\n MATCH_DEBUG_KEY,\n MATCH_DEBUG_QUERY_PARAM,\n isMatchDebugEnabled,\n setMatchDebug,\n resetMatchDebugCache,\n logMatchDebug,\n} from './utils/matchDebug';\nexport { createWixAuthFetch } from './client/wixAuthFetch';\nexport {\n getOrCreateSessionId,\n getSessionId,\n getChatId,\n startNewChatId,\n setChatId,\n resetChatIdForTests,\n} from './utils/sessionManager';\n\n// Component parser orchestrator — lifted from web50-server-ui (DL #088 B9.5)\nexport {\n parseMarkdownToComponents,\n tryParseComponent,\n mergeSectionsWithStableReferences,\n type ParseMarkdownOptions,\n type ParseMarkdownResult,\n type ComponentMatch,\n type ParserContext,\n} from './component/componentParser';\nexport type {\n ParserClientConfig,\n EnrichEntityProps,\n} from './component/parser-types';\n\n// Host-mount scope contract — shared by web50-server-ui (which stamps the\n// class and mounts), embed-placement (which mounts the same bundle elsewhere),\n// and the client CDN build (which compiles every selector against it).\nexport {\n WEB5_ROOT_ID,\n WEB5_ROOT_CLASS,\n WEB5_SCOPES,\n WEB5_SCOPE,\n WEB5_GLOBAL_TOKENS,\n type HostFitConfig,\n} from './hostScope';\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["CLIENT_IDS","EXPERIMENT_IDS","createFeatureToggleReader","FeatureToggleProvider","useFeatureToggles","useFeatureToggle","getPartsByType","getPartByRole","getAllByRole","getHeading","getImages","getLinks","extractContent","extractContentMarkdown","deriveRole","DROP_SECTION","DIAGNOSTIC_TYPES","buildImageSearchFilter","ImageSearchFilterToken","backgroundFilter","HeroSectionDefinition","HeroEntitySectionDefinition","KpiSectionDefinition","MetricsSectionDefinition","FeatureCardsSectionDefinition","EntitySectionDefinition","EntityCollectionSectionDefinition","ComparisonSectionDefinition","TextBlockSectionDefinition","CtaBannerSectionDefinition","CalloutSectionDefinition","NextStepsSectionDefinition","FeatureSection9PlusDefinition","ListItemsSectionDefinition","SkipNodesSectionDefinition","HtmlCommentSectionDefinition","SearchSectionDefinition","ErrorSectionDefinition","FallbackSectionDefinition","createSdkRegistry","ComponentRegistry","validatePattern","validatePatternSyntax","validatePatternWithBlocks","convertToBlockElements","convertToBlockElementsWithMapping","Web5UrlType","isWeb5AskUrl","isWeb5EntityUrl","isWeb5ImageUrl","isWeb5IconUrl","isWeb5ActionUrl","isWeb5SearchUrl","isWeb5Url","isNavigableUrl","isValidLinkUrl","isLegacyUrl","parseWeb5Url","isValidWeb5Url","validateLinkUrl","isEntityLink","parseEntityLink","extractProtocol","extractLinkMetadata","findInvalidWeb5Links","hasImage","isHtmlComment","matchMarkdown","matchAllSections","nodesToParts","ComponentDependenciesProvider","useComponentDependencies","UserQueryProvider","useUserQuery","ChipsProvider","useChips","defaultExtractor","enrichEntitiesFromPayload","entityHref","normalizeEntityItem","toCatalogPath","entityPayloadFromItems","mergeEntityData","fetchEntityListData","listEntityItems","LIST_ITEMS_ENDPOINT","getEntityExtractor","registerEntityExtractor","transformToSolutionEntityData","transformToBlogPostEntityData","transformToGenericEntityData","toMatchedOptions","formatMoney","readCurrencyCode","formatPriceField","formatProductPriceLabel","isProductFamilyEntityType","isDocumentFamilyEntityType","PLATFORM_ENTITY_TYPES","resolveEntityTypeConfig","CALLOUT_KINDS","CALLOUT_SEMANTICS","useWeb5Link","useConversation","useDebugImageContext","useResolvedImageSources","useImageSlot","ImageSlotProvider","useImageSlotCollector","SectionsRuntimeProvider","SectionRuntimeProvider","useCurrentSectionOptions","useCurrentSectionId","composeSemantic","useResolveGenericEntityData","useEntityTransforms","useMarkdownUtils","useResolveShopifyEntityData","useResolveSearchSpringEntityData","fetchProductsByHandles","fetchProductsByHandlesMap","transformSSProductToEntityItemData","addToCart","ShopifyStorefrontClient","resolveShopifyConfig","resolveShopifyEntity","transformShopifyProduct","transformShopifyCollection","transformShopifyArticle","transformShopifyEntityToItemData","PRODUCT_BY_HANDLE_QUERY","COLLECTION_BY_HANDLE_QUERY","ARTICLE_BY_HANDLE_QUERY","cn","normalizeImageUrl","getResizedImageUrl","analyzeBackdrop","computeContentBBox","buildProbeUrl","loadImagePixels","loadBackdropAnalysis","stripMarkdown","rgbToHsl","hslToRgb","ensureMinLightness","toRgb","deriveDarkColor","deriveDarkGradient","deriveLightColor","pushEvent","pushPromptSubmit","pushLinkClick","pushError","pushExit","pushEntityFiltered","hasAnalyticsConsent","UNKNOWN_CONSENT","HOST_CONSENT_GLOBAL","transmit","mayTransmit","unlockOnUserAction","isUserEngaged","mayPersistIdentity","getConsentSnapshot","getGateView","subscribeToConsent","installConsentProvider","getInstalledProviderName","setConsentBufferLimit","getConsentGateStats","resetConsentGateForTests","detectConsentProvider","initConsentGate","CONSENT_OVERRIDE_KEY","CONSENT_OVERRIDE_QUERY_PARAM","getConsentOverride","setConsentOverride","createShopifyConsentProvider","isShopifyHost","createOneTrustConsentProvider","isOneTrustHost","createHostSuppliedConsentProvider","hasHostSuppliedConsent","publishHostConsent","ERROR_MARKDOWN","getErrorTypeFromStatus","createErrorMarkdown","STREAMING_TIMEOUT_MS","DEFAULT_ERROR_TEMPLATES","resolveErrorTemplate","getForwardStack","setForwardStack","clearForwardStack","pushToForwardStack","popFromForwardStack","UserQuery","PRODUCT_BACK_SESSION_KEY","writeProductBackHandoff","readProductBackHandoff","PromptEntryEmptyState","SearchSection","FeedbackBar","AiDisclosure","DEFAULT_AI_DISCLOSURE_TEXT","ASSISTANT_TOKEN","UNBRANDED_ASSISTANT_NAME","DEFAULT_PROMPT_PLACEHOLDER","assistantName","resolveAssistantPlaceholder","AiIcon","PoweredByBadge","DEFAULT_POWERED_BY_HREF","BottomContainer","MarkdownText","CalloutBlock","OptimizedImage","SectionSkeleton","SmartIcon","Loader","PlacementLoader","UnifiedLink","detectLinkType","LinkType","Table","TableHeader","TableBody","TableFooter","TableHead","TableRow","TableCell","TableCaption","WEB5_USER_QUERY_EVENT","WEB5_ANSWER_UPDATED_EVENT","WEB5_ANSWER_SETTLED_EVENT","WEB5_REDIRECT_EVENT","loadClientBundle","getClientBundleOverride","isTrustedBundleHost","TEMPLATES_CDN_BASE","TEMPLATES_MANIFEST_URL","getTemplateOverride","isTemplatePickerRequested","isValidTemplateId","resolveClientBundleUrl","mergeClientConfig","applyThemeOverrides","THEME_OVERRIDE_TOKENS","THEME_TOKEN_CONTRACT","BRAND_TOKENS","EDITABLE_TOKENS","TOKEN_NAME_PATTERN","bucketOf","hostAliasFor","isThemeDebugEnabled","THEME_DEBUG_KEY","THEME_DEBUG_QUERY_PARAM","hexToHslTriplet","hslTripletToHex","isHslTriplet","PlacementResponseRenderer","PlacementSmoothHeight","buildPlacementDependencies","PlacementPayloadProvider","usePlacementPayload","UnifiedMarkdownParser","parseMarkdownToAst","parseAstToMarkdown","escapeWeb5Links","fixMalformedLinks","trimTrailingWhitespace","normalizeIconUrls","decodeLinkText","preprocessMarkdown","ComponentTracking","findKeywordsInContent","getContextualImageFilename","extractIntentFromMarkdown","getIntentFromMarkdown","createPageSection","generateSectionId","generateId","findImageInNode","findImageInChildren","DiagnosticsCollector","REFRESH_PROMPTS_UNTIL_KEY","REFRESH_PROMPTS_WINDOW_MS","getRefreshPromptsExpiry","shouldRefreshPrompts","enableRefreshPrompts","disableRefreshPrompts","BACKEND_ENVIRONMENT_KEY","BACKEND_ENVIRONMENT_QUERY_PARAM","DEFAULT_BACKEND_ENVIRONMENT","getBackendEnvironment","setBackendEnvironment","usesStagingBackend","isSimulationTraffic","MATCH_DEBUG_KEY","MATCH_DEBUG_QUERY_PARAM","isMatchDebugEnabled","setMatchDebug","resetMatchDebugCache","logMatchDebug","createWixAuthFetch","getOrCreateSessionId","getSessionId","getChatId","startNewChatId","setChatId","resetChatIdForTests","parseMarkdownToComponents","tryParseComponent","mergeSectionsWithStableReferences","WEB5_ROOT_ID","WEB5_ROOT_CLASS","WEB5_SCOPES","WEB5_SCOPE","WEB5_GLOBAL_TOKENS"],"sources":["../../src/index.ts"],"sourcesContent":["// Client IDs and experiment IDs\nexport { CLIENT_IDS, EXPERIMENT_IDS } from './clients';\n\nexport {\n type EmbedFeatureToggleResult,\n type FeatureToggleReader,\n createFeatureToggleReader,\n FeatureToggleProvider,\n useFeatureToggles,\n useFeatureToggle,\n} from './featureToggles/FeatureToggleContext';\n\n// Dev-only chrome injection contract for client packages\nexport type { DevEnvironment } from './client/devEnvironment';\n\n// Part types and helpers\nexport {\n type PartType,\n type Part,\n type HeadingPart,\n type ImagePart,\n type LinkPart,\n type ListPart,\n type ListItemPart,\n type KpiItemPart,\n type CardPart,\n type IconPart,\n type CalloutPart,\n type EntityPart,\n getPartsByType,\n getPartByRole,\n getAllByRole,\n getHeading,\n getImages,\n getLinks,\n extractContent,\n extractContentMarkdown,\n deriveRole,\n} from './parts/parts';\n\n// Component types\nexport type {\n BaseCompProps,\n SlotCompProps,\n SectionCompProps,\n SectionCompPropsWithSlot,\n TextCompProps,\n ButtonCompProps,\n ImageCompProps,\n BadgeCompProps,\n HeroButton,\n KpiItemCompProps,\n FeatureItemCompProps,\n FeatureCardCompProps,\n EntityItemData,\n EntityItem,\n GenericEntityData,\n GenericEntityCompProps,\n ComparisonRow,\n ComparisonColumn,\n AiNarrativeCompProps,\n HeroCompProps,\n HeroEntityCompProps,\n KpiCompProps,\n MetricsCompProps,\n MetricsItemCompProps,\n FeatureCardsCompProps,\n EntityCompProps,\n ComparisonCompProps,\n TextBlockCompProps,\n Component,\n BaseComponent,\n SlotComponent,\n SectionComponent,\n TextComponent,\n ButtonComponent,\n ImageComponent,\n BadgeComponent,\n KpiItemComponent,\n MetricsItemComponent,\n FeatureItemComponent,\n FeatureCardComponent,\n GenericEntityComponent,\n AiNarrativeComponent,\n ComparisonSectionComponent,\n TextBlockSectionComponent,\n HeroSectionComponent,\n HeroEntitySectionComponent,\n KpiSectionComponent,\n MetricsSectionComponent,\n FeatureCardsSectionComponent,\n EntitySectionComponent,\n PropsOf,\n SectionFixture,\n CtaBannerCompProps,\n CtaBannerSectionComponent,\n CalloutCompProps,\n CalloutSectionComponent,\n NextStepsCompProps,\n NextStepsSectionComponent,\n FeatureSection9PlusCompProps,\n FeatureSection9PlusSectionComponent,\n ListItemsSectionCompProps,\n ListItemsSectionComponent,\n ErrorCompProps,\n ErrorSectionComponent,\n NullCompProps,\n NullSectionComponent,\n SolutionEntityCompProps,\n SolutionEntitySectionComponent,\n SolutionEntityData,\n BlogEntityCompProps,\n BlogEntitySectionComponent,\n BlogEntityData,\n GeneralTextCompProps,\n GeneralTextSectionComponent,\n PersonalizedNarrativeCompProps,\n PersonalizedNarrativeSectionComponent,\n} from './component/types';\n\n// Section definition\nexport type {\n SectionDefinition,\n ParseContext,\n ContextualImageResult,\n DropSection,\n} from './component/section-definition';\nexport { DROP_SECTION } from './component/section-definition';\n\n// Diagnostic types\nexport { DIAGNOSTIC_TYPES } from './component/diagnosticTypes';\nexport type { DiagnosticType } from './component/diagnosticTypes';\n\n// Image search filters\nexport {\n buildImageSearchFilter,\n type ImageSearchFilterString,\n} from './image/imageSearchFilterTypes';\nexport {\n ImageSearchFilterToken,\n backgroundFilter,\n} from './image/imageSearchFilters';\nexport type {\n ContextualImageAsset,\n ImageSourceInput,\n ResolvedImageSource,\n ResolvedImageSourceKind,\n} from './image/contextualImageTypes';\n\n// Section definition classes + createSdkRegistry\nexport {\n HeroSectionDefinition,\n HeroEntitySectionDefinition,\n KpiSectionDefinition,\n MetricsSectionDefinition,\n FeatureCardsSectionDefinition,\n EntitySectionDefinition,\n EntityCollectionSectionDefinition,\n ComparisonSectionDefinition,\n TextBlockSectionDefinition,\n CtaBannerSectionDefinition,\n CalloutSectionDefinition,\n NextStepsSectionDefinition,\n FeatureSection9PlusDefinition,\n ListItemsSectionDefinition,\n SkipNodesSectionDefinition,\n HtmlCommentSectionDefinition,\n SearchSectionDefinition,\n ErrorSectionDefinition,\n FallbackSectionDefinition,\n createSdkRegistry,\n} from './component/componentDefinitions';\n\n// Registry\nexport { ComponentRegistry } from './registry';\nexport type {\n SlotOptions,\n SectionOptions,\n SectionRegistration,\n SlotNode,\n SlotIntentNode,\n SectionIntentNode,\n SectionNode,\n SlotVariant,\n SectionVariant,\n RegistryCatalog,\n ActionResult,\n ActionHandler,\n} from './registry';\n\n// Pattern validator\nexport {\n validatePattern,\n validatePatternSyntax,\n validatePatternWithBlocks,\n type PatternValidationResult,\n type BlockElement,\n type EnrichedBlockElement,\n type LinkMetadata,\n type LinkAttribute,\n} from './patternValidator';\n\n// Markdown blocks\nexport {\n convertToBlockElements,\n convertToBlockElementsWithMapping,\n type BlockElementsWithMapping,\n} from './markdownBlocks';\n\n// Link types, enum & guards\nexport {\n Web5UrlType,\n type Web5AskUrl,\n type Web5EntityUrl,\n type Web5ImageUrl,\n type Web5IconUrl,\n type Web5ActionUrl,\n type Web5SearchUrl,\n type Web5Url,\n type HttpsUrl,\n type HttpUrl,\n type MailtoUrl,\n type RelativeUrl,\n type NavigableUrl,\n type ValidLinkUrl,\n type AnyKnownUrl,\n type LegacyUrl,\n isWeb5AskUrl,\n isWeb5EntityUrl,\n isWeb5ImageUrl,\n isWeb5IconUrl,\n isWeb5ActionUrl,\n isWeb5SearchUrl,\n isWeb5Url,\n isNavigableUrl,\n isValidLinkUrl,\n isLegacyUrl,\n} from './types/link-types';\n\n// Entity/URL parsing\nexport {\n parseWeb5Url,\n isValidWeb5Url,\n validateLinkUrl,\n type Web5UrlParsed,\n type Web5AskParsed,\n type Web5EntityParsed,\n type Web5ImageParsed,\n type Web5IconParsed,\n type Web5ActionParsed,\n type Web5SearchParsed,\n isEntityLink,\n parseEntityLink,\n extractProtocol,\n extractLinkMetadata,\n} from './utils/entityLinkParser';\n\n// Web5 link validation\nexport {\n findInvalidWeb5Links,\n type InvalidWeb5Link,\n} from './utils/web5LinkValidator';\n\n// Node matchers\nexport { hasImage, isHtmlComment } from './utils/nodeMatchers';\n\n// Match API\nexport {\n matchMarkdown,\n type MarkdownMatchResult,\n matchAllSections,\n type MatchAllSectionsResult,\n nodesToParts,\n} from './match';\n\n// ---------------------------------------------------------------------------\n// DI Infrastructure (moved from @wix/w5-client-circana)\n// ---------------------------------------------------------------------------\n\n// DI context and provider\nexport {\n ComponentDependenciesProvider,\n useComponentDependencies,\n type ComponentDependenciesProviderProps,\n} from './context/ComponentDependenciesContext';\n\n// Raw user query for the current response page\nexport {\n UserQueryProvider,\n useUserQuery,\n type UserQueryProviderProps,\n} from './context/UserQueryContext';\n\n// Chips context (suggestion chips shared between SearchSection and error states)\nexport {\n ChipsProvider,\n useChips,\n type SuggestionChip,\n} from './context/ChipsContext';\n\n// DI types\nexport type {\n ComponentDependencies,\n Web5LinkApi,\n ConversationApi,\n SendMessageTrackingOptions,\n SendMessageOptions,\n ComparisonSubmitPayload,\n ComparisonSelectedProduct,\n ProductComparisonSelectionState,\n ProductComparisonApi,\n EntityTransforms,\n MarkdownUtils,\n ResolveGenericEntityDataOptions,\n} from './types/dependencies';\nexport type {\n ApiPayloadItem,\n EntityTypeConfig,\n EntityConfig,\n EntityExtractionContext,\n} from './types/entity';\nexport {\n defaultExtractor,\n enrichEntitiesFromPayload,\n entityHref,\n normalizeEntityItem,\n toCatalogPath,\n entityPayloadFromItems,\n mergeEntityData,\n fetchEntityListData,\n listEntityItems,\n LIST_ITEMS_ENDPOINT,\n getEntityExtractor,\n registerEntityExtractor,\n transformToSolutionEntityData,\n transformToBlogPostEntityData,\n transformToGenericEntityData,\n toMatchedOptions,\n formatMoney,\n readCurrencyCode,\n formatPriceField,\n formatProductPriceLabel,\n isProductFamilyEntityType,\n isDocumentFamilyEntityType,\n PLATFORM_ENTITY_TYPES,\n resolveEntityTypeConfig,\n} from './entity';\nexport type {\n EntityExtractor,\n FetchEntityListDataOptions,\n ListEntityItemsOptions,\n MatchedOption,\n ProductPriceFields,\n} from './entity';\nexport {\n CALLOUT_KINDS,\n CALLOUT_SEMANTICS,\n type CalloutKind,\n type CalloutSemantic,\n type Callout,\n} from './types/callout';\n\n// Wrapper hooks\nexport { useWeb5Link } from './hooks/useWeb5Link';\nexport { useConversation } from './hooks/useConversation';\nexport { useDebugImageContext } from './hooks/useDebugImageContext';\nexport { useResolvedImageSources } from './hooks/useResolvedImageSources';\n\n// Image slots (ADR 0222/0223/0225): a section declares the holes in its layout\n// and a per-section collector resolves them as one set. Replaces the per-image\n// `useResolvedImageSources` path above, which is kept until its callers move.\nexport { useImageSlot } from './hooks/useImageSlot';\nexport type {\n UseImageSlotOptions,\n ResolvedImage,\n} from './hooks/useImageSlot';\nexport {\n ImageSlotProvider,\n useImageSlotCollector,\n} from './context/ImageSlotContext';\nexport type {\n ImageSlotCollector,\n ImageSlotProviderProps,\n} from './context/ImageSlotContext';\n\n// Section runtime: the host mounts these around the page and around each\n// section, so a component can read the id of the section it renders inside\n// and the `componentOptions` its registry entry carried. Client bundles used\n// to ship their own copies as uiSlots; those are superseded by this.\nexport {\n SectionsRuntimeProvider,\n SectionRuntimeProvider,\n useCurrentSectionOptions,\n useCurrentSectionId,\n} from './context/SectionRuntimeContext';\nexport type {\n RuntimeSection,\n SectionsRuntimeProviderProps,\n SectionRuntimeProviderProps,\n} from './context/SectionRuntimeContext';\nexport { composeSemantic } from './image/composeSemantic';\nexport type { ComposeSemanticInput } from './image/composeSemantic';\nexport type {\n ImageSlotKind,\n ImageMatchQuality,\n ImageKind,\n ImageBackground,\n ImageSlotRequest,\n ImagePalette,\n ImageStatGrid,\n ImageVisualMetadata,\n ResolvedImageSlot,\n ResolveImageSetResponse,\n ResolveImageSetPort,\n SlotState,\n ImageSubject,\n} from './image/imageSlotTypes';\nexport { useResolveGenericEntityData } from './hooks/useResolveGenericEntityData';\nexport { useEntityTransforms } from './hooks/useEntityTransforms';\nexport { useMarkdownUtils } from './hooks/useMarkdownUtils';\nexport { useResolveShopifyEntityData } from './hooks/useResolveShopifyEntityData';\nexport { useResolveSearchSpringEntityData } from './hooks/useResolveSearchSpringEntityData';\n\n// SearchSpring\nexport {\n fetchProductsByHandles,\n fetchProductsByHandlesMap,\n transformSSProductToEntityItemData,\n} from './services/searchspring';\nexport type {\n SearchSpringConfig,\n SSProduct,\n SSSearchResponse,\n SSSizeData,\n} from './services/searchspring';\n\n// Shopify Storefront API\n// Cart actions\nexport { addToCart } from './services/cart';\n\nexport {\n ShopifyStorefrontClient,\n resolveShopifyConfig,\n resolveShopifyEntity,\n transformShopifyProduct,\n transformShopifyCollection,\n transformShopifyArticle,\n transformShopifyEntityToItemData,\n PRODUCT_BY_HANDLE_QUERY,\n COLLECTION_BY_HANDLE_QUERY,\n ARTICLE_BY_HANDLE_QUERY,\n} from './services/shopify';\nexport type {\n ShopifyStorefrontConfig,\n ShopifyProduct,\n ShopifyCollection,\n ShopifyArticle,\n ShopifyImage,\n ShopifyMoneyV2,\n} from './services/shopify';\n\n// Utilities\nexport { cn } from './lib/utils';\nexport { normalizeImageUrl, getResizedImageUrl } from './utils/image-utils';\nexport {\n analyzeBackdrop,\n computeContentBBox,\n buildProbeUrl,\n loadImagePixels,\n loadBackdropAnalysis,\n type BackdropAnalysis,\n type ContentBBox,\n type ImagePixels,\n} from './utils/imageBackdrop';\nexport { stripMarkdown } from './component/componentDefinitions/parse-utils';\n\n// Color utilities\nexport {\n type RGB,\n rgbToHsl,\n hslToRgb,\n ensureMinLightness,\n toRgb,\n deriveDarkColor,\n deriveDarkGradient,\n deriveLightColor,\n} from './color/colorUtils';\n\n// Analytics\nexport {\n pushEvent,\n pushPromptSubmit,\n pushLinkClick,\n pushError,\n pushExit,\n pushEntityFiltered,\n hasAnalyticsConsent,\n type EntityFilteredReason,\n} from './utils/analyticsEvents';\n\n// Consent gate (DL #218)\nexport {\n type ConsentState,\n type ConsentPurpose,\n type GatedPurpose,\n type ConsentSnapshot,\n type ConsentProvider,\n type GateView,\n type HostConsentInput,\n UNKNOWN_CONSENT,\n HOST_CONSENT_GLOBAL,\n transmit,\n mayTransmit,\n unlockOnUserAction,\n isUserEngaged,\n mayPersistIdentity,\n getConsentSnapshot,\n getGateView,\n subscribeToConsent,\n installConsentProvider,\n getInstalledProviderName,\n setConsentBufferLimit,\n getConsentGateStats,\n resetConsentGateForTests,\n detectConsentProvider,\n initConsentGate,\n CONSENT_OVERRIDE_KEY,\n CONSENT_OVERRIDE_QUERY_PARAM,\n getConsentOverride,\n setConsentOverride,\n createShopifyConsentProvider,\n isShopifyHost,\n createOneTrustConsentProvider,\n isOneTrustHost,\n createHostSuppliedConsentProvider,\n hasHostSuppliedConsent,\n publishHostConsent,\n} from './privacy';\n\n// Error handling types and utilities\nexport {\n type ConversationErrorType,\n ERROR_MARKDOWN,\n getErrorTypeFromStatus,\n createErrorMarkdown,\n STREAMING_TIMEOUT_MS,\n type ErrorActionType,\n type ErrorIconType,\n type ErrorTemplateButton,\n type ErrorTemplate,\n type ErrorTemplateOverrides,\n DEFAULT_ERROR_TEMPLATES,\n resolveErrorTemplate,\n} from './errors';\n\n// Navigation utilities\nexport {\n getForwardStack,\n setForwardStack,\n clearForwardStack,\n pushToForwardStack,\n popFromForwardStack,\n} from './utils/navigationStack';\n\n// UI components\nexport {\n UserQuery,\n type UserQueryProps,\n type ProductBackContext,\n} from './components/ui/UserQuery';\nexport {\n PRODUCT_BACK_SESSION_KEY,\n writeProductBackHandoff,\n readProductBackHandoff,\n type ProductBackHandoff,\n} from './utils/productBackHandoff';\nexport {\n PromptEntryEmptyState,\n type PromptEntryEmptyStateProps,\n} from './components/ui/PromptEntryEmptyState';\nexport {\n SearchSection,\n type SearchSectionProps,\n type SearchSectionHandle,\n type ScrollChip,\n} from './components/ui/SearchSection';\nexport {\n FeedbackBar,\n type FeedbackBarProps,\n type FeedbackCategoryOption,\n type FeedbackSentiment,\n type FeedbackSubmitInput,\n} from './components/ui/FeedbackBar';\nexport {\n AiDisclosure,\n DEFAULT_AI_DISCLOSURE_TEXT,\n type AiDisclosureProps,\n} from './components/ui/AiDisclosure';\nexport {\n ASSISTANT_TOKEN,\n UNBRANDED_ASSISTANT_NAME,\n DEFAULT_PROMPT_PLACEHOLDER,\n assistantName,\n resolveAssistantPlaceholder,\n} from './lib/assistant';\nexport { AiIcon } from './components/ui/icons/AiIcon';\nexport {\n PoweredByBadge,\n DEFAULT_POWERED_BY_HREF,\n type PoweredByBadgeProps,\n} from './components/ui/PoweredByBadge';\nexport {\n BottomContainer,\n type BottomContainerProps,\n} from './components/ui/BottomContainer';\nexport { MarkdownText } from './components/ui/MarkdownText';\nexport {\n CalloutBlock,\n type CalloutBlockProps,\n} from './components/ui/CalloutBlock';\nexport {\n OptimizedImage,\n type OptimizedImageProps,\n} from './components/ui/OptimizedImage';\nexport {\n SectionSkeleton,\n type SectionSkeletonProps,\n} from './components/ui/SectionSkeleton';\nexport { SmartIcon, type SmartIconProps } from './components/ui/SmartIcon';\nexport { Loader, type LoaderProps } from './components/ui/Loader';\nexport {\n PlacementLoader,\n type PlacementLoaderProps,\n} from './components/ui/PlacementLoader';\nexport {\n UnifiedLink,\n detectLinkType,\n type UnifiedLinkProps,\n LinkType,\n type LinkVariant,\n} from './components/ui/UnifiedLink';\nexport {\n Table,\n TableHeader,\n TableBody,\n TableFooter,\n TableHead,\n TableRow,\n TableCell,\n TableCaption,\n} from './components/ui/table';\n\n// Placement (DL #088, DL #102 behavior declarations)\nexport type {\n PlacementBehaviorConfig,\n PlacementConfig,\n PlacementPrompts,\n} from './types/placement';\n\n// Cross-bundle user-query broadcast event (DL #097 D2)\nexport {\n WEB5_USER_QUERY_EVENT,\n type Web5UserQueryEventDetail,\n type Web5UserQueryEvent,\n} from './types/userQueryEvent';\n\n// Cross-bundle answer-updated broadcast event (B2B-4121)\nexport {\n WEB5_ANSWER_UPDATED_EVENT,\n type Web5AnswerUpdatedEventDetail,\n type Web5AnswerUpdatedEvent,\n} from './types/answerUpdatedEvent';\nexport {\n WEB5_ANSWER_SETTLED_EVENT,\n type Web5AnswerSettledStatus,\n type Web5AnswerSettledEventDetail,\n type Web5AnswerSettledEvent,\n} from './types/answerSettledEvent';\n\n// Cross-bundle redirect broadcast event (DL #098 D3)\nexport {\n WEB5_REDIRECT_EVENT,\n type Web5RedirectEventDetail,\n type Web5RedirectEvent,\n type Web5RedirectReason,\n} from './types/redirectEvent';\n// `placementFilter` was removed — hero/next-steps exclusion is the prompt's job\n// and placement-specific designs belong as `{ placement: true }` registry\n// variants (resolved automatically via `resolveSection(type, { placement: true })`).\n\n// Client bundle loader (DL #088 D3.3)\nexport { loadClientBundle } from './client/loadClientBundle';\n\n// `?clientBundleUrl=` dev override — shared by `web50-server-ui` and\n// `embed-placement` so the trusted-host gate can't drift between them.\nexport {\n getClientBundleOverride,\n isTrustedBundleHost,\n} from './client/clientBundleOverride';\n\n// Client-UMD URL resolution (DL #094 per-msid, DL #129 per-template) and the\n// universal bundle←backend config merge (DL #129 Q3/Q7) — shared by\n// `web50-server-ui` and `embed-placement`, the two client-bundle load sites.\nexport {\n TEMPLATES_CDN_BASE,\n TEMPLATES_MANIFEST_URL,\n getTemplateOverride,\n isTemplatePickerRequested,\n isValidTemplateId,\n resolveClientBundleUrl,\n} from './client/clientBundleUrl';\nexport {\n mergeClientConfig,\n type DeepPartial,\n} from './client/mergeClientConfig';\nexport {\n applyThemeOverrides,\n THEME_OVERRIDE_TOKENS,\n type ThemeOverrideKey,\n type ThemeOverrides,\n} from './client/applyThemeOverrides';\nexport {\n THEME_TOKEN_CONTRACT,\n BRAND_TOKENS,\n EDITABLE_TOKENS,\n TOKEN_NAME_PATTERN,\n bucketOf,\n hostAliasFor,\n type TokenBucket,\n type TokenContractEntry,\n type TokenType,\n} from './theme/tokenContract';\nexport {\n isThemeDebugEnabled,\n THEME_DEBUG_KEY,\n THEME_DEBUG_QUERY_PARAM,\n type AppliedToken,\n type ThemeOverrideSource,\n} from './client/themeDebug';\nexport {\n hexToHslTriplet,\n hslTripletToHex,\n isHslTriplet,\n} from './theme/colorFormat';\n\n// Placement renderer + DI helper (DL #088 D3.2, D3.4)\nexport {\n PlacementResponseRenderer,\n PlacementSmoothHeight,\n type PlacementResponseRendererProps,\n type PlacementSection,\n type PlacementVariant,\n} from './components/placement/PlacementResponseRenderer';\nexport {\n buildPlacementDependencies,\n type BuildPlacementDependenciesOptions,\n} from './components/placement/buildPlacementDependencies';\nexport {\n PlacementPayloadProvider,\n usePlacementPayload,\n type PlacementPayloadContextValue,\n} from './components/placement/PlacementPayloadContext';\n\n// Markdown parsing utilities — lifted from web50-server-ui (DL #088 B9.1)\nexport {\n UnifiedMarkdownParser,\n parseMarkdownToAst,\n parseAstToMarkdown,\n} from './utils/unifiedMarkdownParser';\nexport {\n escapeWeb5Links,\n fixMalformedLinks,\n trimTrailingWhitespace,\n normalizeIconUrls,\n decodeLinkText,\n preprocessMarkdown,\n type PreprocessorDiagnostic,\n type PreprocessResult,\n} from './utils/markdownPreprocessor';\nexport {\n ComponentTracking,\n type ComponentNodeRange,\n} from './utils/componentTracking';\nexport {\n findKeywordsInContent,\n getContextualImageFilename,\n} from './utils/contentKeywordMatcher';\nexport {\n extractIntentFromMarkdown,\n getIntentFromMarkdown,\n type IntentInfo,\n type IntentExtractionOptions,\n type ResponseState,\n} from './utils/intentExtractor';\nexport type { PageSection } from './types/page-section';\nexport {\n createPageSection,\n generateSectionId,\n generateId,\n findImageInNode,\n findImageInChildren,\n type Product,\n type ComparisonProduct,\n type ProductComparisonSectionProps,\n} from './utils/propsExtractor';\nexport {\n DiagnosticsCollector,\n type DiagnosticEntry,\n} from './utils/diagnosticsCollector';\nexport {\n REFRESH_PROMPTS_UNTIL_KEY,\n REFRESH_PROMPTS_WINDOW_MS,\n getRefreshPromptsExpiry,\n shouldRefreshPrompts,\n enableRefreshPrompts,\n disableRefreshPrompts,\n} from './utils/refreshPrompts';\nexport {\n type BackendEnvironment,\n BACKEND_ENVIRONMENT_KEY,\n BACKEND_ENVIRONMENT_QUERY_PARAM,\n DEFAULT_BACKEND_ENVIRONMENT,\n getBackendEnvironment,\n setBackendEnvironment,\n usesStagingBackend,\n} from './utils/backendEnvironment';\nexport { isSimulationTraffic } from './utils/simulation';\nexport {\n MATCH_DEBUG_KEY,\n MATCH_DEBUG_QUERY_PARAM,\n isMatchDebugEnabled,\n setMatchDebug,\n resetMatchDebugCache,\n logMatchDebug,\n} from './utils/matchDebug';\nexport { createWixAuthFetch } from './client/wixAuthFetch';\nexport {\n getOrCreateSessionId,\n getSessionId,\n getChatId,\n startNewChatId,\n setChatId,\n resetChatIdForTests,\n} from './utils/sessionManager';\n\n// Component parser orchestrator — lifted from web50-server-ui (DL #088 B9.5)\nexport {\n parseMarkdownToComponents,\n tryParseComponent,\n mergeSectionsWithStableReferences,\n type ParseMarkdownOptions,\n type ParseMarkdownResult,\n type ComponentMatch,\n type ParserContext,\n} from './component/componentParser';\nexport type {\n ParserClientConfig,\n EnrichEntityProps,\n} from './component/parser-types';\n\n// Host-mount scope contract — shared by web50-server-ui (which stamps the\n// class and mounts), embed-placement (which mounts the same bundle elsewhere),\n// and the client CDN build (which compiles every selector against it).\nexport {\n WEB5_ROOT_ID,\n WEB5_ROOT_CLASS,\n WEB5_SCOPES,\n WEB5_SCOPE,\n WEB5_GLOBAL_TOKENS,\n type HostFitConfig,\n} from './hostScope';\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the assistant is called, and the `{assistant}` token every surface
|
|
3
|
+
* substitutes it into.
|
|
4
|
+
*
|
|
5
|
+
* One rule, in core, because the name shows up on surfaces that do not share a
|
|
6
|
+
* runtime and must not drift apart: the AI disclosure over a generated answer
|
|
7
|
+
* (`AiDisclosure`, B2B-4488), the hero eyebrow and empty-state lockup in a
|
|
8
|
+
* client bundle, the full-page prompt input (web50-server-ui), and the
|
|
9
|
+
* floating embed widget (vanilla TS in a shadow root). A client that reworded
|
|
10
|
+
* the copy in its overlay still gets the same name in it.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/** Placeholder inside a copy string that the assistant's name is substituted into. */
|
|
14
|
+
export const ASSISTANT_TOKEN = '{assistant}';
|
|
15
|
+
|
|
16
|
+
/** Used when the host publishes no store name — still reads correctly ("Ask AI…"). */
|
|
17
|
+
export const UNBRANDED_ASSISTANT_NAME = 'AI';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The product default for a prompt input's placeholder.
|
|
21
|
+
*
|
|
22
|
+
* Carries the token rather than a resolved name so the copy can live in
|
|
23
|
+
* configuration: a client rewords it in their overlay and the name still
|
|
24
|
+
* resolves. Hosts must run it through {@link resolveAssistantPlaceholder}
|
|
25
|
+
* before rendering, or a shopper sees the raw token.
|
|
26
|
+
*/
|
|
27
|
+
export const DEFAULT_PROMPT_PLACEHOLDER = `Ask ${ASSISTANT_TOKEN}...`;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* What the assistant is called: the store's name plus "AI" — "Smallflower AI".
|
|
31
|
+
*
|
|
32
|
+
* A host that publishes no name gets the unbranded "AI", which still reads
|
|
33
|
+
* correctly in every caller.
|
|
34
|
+
*/
|
|
35
|
+
export function assistantName(siteName) {
|
|
36
|
+
const trimmed = (siteName ?? '').trim();
|
|
37
|
+
return trimmed ? `${trimmed} ${UNBRANDED_ASSISTANT_NAME}` : UNBRANDED_ASSISTANT_NAME;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Substitute `{assistant}` in a copy string with the assistant's name.
|
|
42
|
+
*
|
|
43
|
+
* A string with no token is returned untouched — by reference — so a client
|
|
44
|
+
* that hardcodes its own wording keeps it and callers can compare identity.
|
|
45
|
+
*/
|
|
46
|
+
export function resolveAssistantPlaceholder(placeholder, siteName) {
|
|
47
|
+
if (!placeholder.includes(ASSISTANT_TOKEN)) {
|
|
48
|
+
return placeholder;
|
|
49
|
+
}
|
|
50
|
+
return placeholder.split(ASSISTANT_TOKEN).join(assistantName(siteName));
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=assistant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ASSISTANT_TOKEN","UNBRANDED_ASSISTANT_NAME","DEFAULT_PROMPT_PLACEHOLDER","assistantName","siteName","trimmed","trim","resolveAssistantPlaceholder","placeholder","includes","split","join"],"sources":["../../../src/lib/assistant.ts"],"sourcesContent":["/**\n * What the assistant is called, and the `{assistant}` token every surface\n * substitutes it into.\n *\n * One rule, in core, because the name shows up on surfaces that do not share a\n * runtime and must not drift apart: the AI disclosure over a generated answer\n * (`AiDisclosure`, B2B-4488), the hero eyebrow and empty-state lockup in a\n * client bundle, the full-page prompt input (web50-server-ui), and the\n * floating embed widget (vanilla TS in a shadow root). A client that reworded\n * the copy in its overlay still gets the same name in it.\n */\n\n/** Placeholder inside a copy string that the assistant's name is substituted into. */\nexport const ASSISTANT_TOKEN = '{assistant}';\n\n/** Used when the host publishes no store name — still reads correctly (\"Ask AI…\"). */\nexport const UNBRANDED_ASSISTANT_NAME = 'AI';\n\n/**\n * The product default for a prompt input's placeholder.\n *\n * Carries the token rather than a resolved name so the copy can live in\n * configuration: a client rewords it in their overlay and the name still\n * resolves. Hosts must run it through {@link resolveAssistantPlaceholder}\n * before rendering, or a shopper sees the raw token.\n */\nexport const DEFAULT_PROMPT_PLACEHOLDER = `Ask ${ASSISTANT_TOKEN}...`;\n\n/**\n * What the assistant is called: the store's name plus \"AI\" — \"Smallflower AI\".\n *\n * A host that publishes no name gets the unbranded \"AI\", which still reads\n * correctly in every caller.\n */\nexport function assistantName(siteName?: string): string {\n const trimmed = (siteName ?? '').trim();\n return trimmed\n ? `${trimmed} ${UNBRANDED_ASSISTANT_NAME}`\n : UNBRANDED_ASSISTANT_NAME;\n}\n\n/**\n * Substitute `{assistant}` in a copy string with the assistant's name.\n *\n * A string with no token is returned untouched — by reference — so a client\n * that hardcodes its own wording keeps it and callers can compare identity.\n */\nexport function resolveAssistantPlaceholder(\n placeholder: string,\n siteName?: string,\n): string {\n if (!placeholder.includes(ASSISTANT_TOKEN)) {\n return placeholder;\n }\n return placeholder.split(ASSISTANT_TOKEN).join(assistantName(siteName));\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO,MAAMA,eAAe,GAAG,aAAa;;AAE5C;AACA,OAAO,MAAMC,wBAAwB,GAAG,IAAI;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,0BAA0B,GAAG,OAAOF,eAAe,KAAK;;AAErE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,aAAaA,CAACC,QAAiB,EAAU;EACvD,MAAMC,OAAO,GAAG,CAACD,QAAQ,IAAI,EAAE,EAAEE,IAAI,CAAC,CAAC;EACvC,OAAOD,OAAO,GACV,GAAGA,OAAO,IAAIJ,wBAAwB,EAAE,GACxCA,wBAAwB;AAC9B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASM,2BAA2BA,CACzCC,WAAmB,EACnBJ,QAAiB,EACT;EACR,IAAI,CAACI,WAAW,CAACC,QAAQ,CAACT,eAAe,CAAC,EAAE;IAC1C,OAAOQ,WAAW;EACpB;EACA,OAAOA,WAAW,CAACE,KAAK,CAACV,eAAe,CAAC,CAACW,IAAI,CAACR,aAAa,CAACC,QAAQ,CAAC,CAAC;AACzE","ignoreList":[]}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { FC, ReactNode } from 'react';
|
|
2
|
+
import { ASSISTANT_TOKEN } from '../../lib/assistant';
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
+
* Re-exported for the callers that already import the token from here.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
-
* ("Ask {assistant}…"), so a store rename
|
|
7
|
-
* translator can put the name wherever the target
|
|
6
|
+
* It lives in `lib/assistant` alongside the name it stands for: the same token
|
|
7
|
+
* the prompt-input placeholder uses ("Ask {assistant}…"), so a store rename
|
|
8
|
+
* moves both together and a translator can put the name wherever the target
|
|
9
|
+
* language needs it.
|
|
8
10
|
*/
|
|
9
|
-
export
|
|
11
|
+
export { ASSISTANT_TOKEN };
|
|
10
12
|
/**
|
|
11
13
|
* The disclosure a shopper must see. Wording is fixed here rather than in each
|
|
12
14
|
* client bundle: it is what tells the shopper they are reading machine-written
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AiDisclosure.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/AiDisclosure.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAY,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AiDisclosure.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/AiDisclosure.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAE,EAAE,EAAY,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAE,eAAe,EAA4B,MAAM,qBAAqB,CAAC;AAGhF;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,QAAsE,CAAC;AAE9G,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,iGAAiG;IACjG,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,EAAE,EAAE,CAAC,iBAAiB,CAoC9C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchSection.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/SearchSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SearchSection.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/SearchSection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAQN,MAAM,OAAO,CAAC;AAkBf,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IACrC,YAAY,CAAC,EAAE,KAAK,GAAG,QAAQ,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AA8ED,eAAO,MAAM,aAAa,gGAoWxB,CAAC"}
|