@kelet-ai/feedback-ui 0.6.0 → 0.7.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"feedback-ui.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/contexts/kelet.tsx","../src/components/vote-feedback.tsx","../node_modules/deep-diff/index.js","../node_modules/fastest-levenshtein/esm/mod.js","../node_modules/fast-levenshtein/levenshtein.js","../node_modules/diff/libesm/diff/base.js","../node_modules/diff/libesm/diff/line.js","../node_modules/diff/libesm/patch/create.js","../src/hooks/feedback-state/diff-utils.ts","../src/hooks/feedback-state/use-state-change-tracking.ts","../src/hooks/feedback-state/use-feedback-state.ts","../src/lib/otel-trace.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React, { createContext, useContext } from 'react';\nimport type { FeedbackData } from '@/types';\n\ninterface KeletContextValue {\n api_key: string;\n project: string;\n feedback: (data: FeedbackData) => Promise<void>;\n}\n\ninterface KeletProviderProps {\n apiKey?: string;\n project: string;\n}\n\ninterface FeedbackRequest {\n tx_id: string;\n source: 'IMPLICIT' | 'EXPLICIT';\n trigger_name?: string;\n vote: 'upvote' | 'downvote';\n explanation?: string;\n selection?: string;\n correction?: string;\n}\n\n// Create the context\nexport const KeletContext = createContext<KeletContextValue | null>(null);\n\nconst KeletBaseUrl = 'https://api.kelet.ai/api';\n\n// Custom hook to use the Kelet context\n// noinspection JSUnusedGlobalSymbols\nexport const useKelet = (): KeletContextValue => {\n const context = useContext(KeletContext);\n if (!context) {\n throw new Error('useKelet must be used within a KeletProvider');\n }\n return context;\n};\n\nexport const useDefaultFeedbackHandler = (): ((\n data: FeedbackData\n) => Promise<void>) => {\n const context = useContext(KeletContext);\n if (!context) {\n return async () => {};\n } else {\n return context.feedback;\n }\n};\n\n// The KeletProvider component\nexport const KeletProvider: React.FC<\n React.PropsWithChildren<KeletProviderProps>\n> = ({ apiKey, project, children }) => {\n // Get the parent context (if any)\n const parentContext = useContext(KeletContext);\n\n // Determine the API key to use\n const resolvedApiKey = apiKey || parentContext?.api_key;\n\n if (!resolvedApiKey) {\n throw new Error(\n 'apiKey is required either directly or from a parent KeletProvider'\n );\n }\n\n const feedback = async (data: FeedbackData) => {\n const url = `${KeletBaseUrl}/projects/${project}/feedback`;\n const req: FeedbackRequest = {\n tx_id: data.tx_id,\n source: data.source || 'EXPLICIT',\n vote: data.vote,\n explanation: data.explanation,\n correction: data.correction,\n selection: data.selection,\n // Include trigger_name if needed in the future\n };\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${resolvedApiKey}`,\n },\n body: JSON.stringify(req),\n });\n if (!response.ok) {\n throw new Error(`Failed to submit feedback: ${response.statusText}`);\n }\n };\n\n const value: KeletContextValue = {\n api_key: resolvedApiKey,\n project,\n feedback,\n };\n\n return (\n <KeletContext.Provider value={value}>{children}</KeletContext.Provider>\n );\n};\n","import {\n cloneElement,\n createContext,\n isValidElement,\n type KeyboardEvent,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type {\n DownvoteButtonProps,\n FeedbackData,\n PopoverProps,\n SubmitButtonProps,\n TextareaProps,\n UpvoteButtonProps,\n VoteFeedbackRootProps,\n} from '@/types';\nimport { useDefaultFeedbackHandler } from '@/contexts/kelet';\n\n// Utility function to merge props with a child element (asChild pattern)\nconst mergeProps = (\n slotProps: Record<string, any>,\n childProps: Record<string, any>\n) => {\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: any[]) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue]\n .filter(Boolean)\n .join(' ');\n } else {\n overrideProps[propName] =\n childPropValue !== undefined ? childPropValue : slotPropValue;\n }\n }\n\n return { ...slotProps, ...overrideProps };\n};\n\n// Context for the VoteFeedback component\ninterface VoteFeedbackContextValue {\n onFeedback?: (data: FeedbackData) => void | Promise<void>;\n showPopover: boolean;\n setShowPopover: (show: boolean) => void;\n feedbackText: string;\n setFeedbackText: (text: string) => void;\n isSubmitting: boolean;\n setIsSubmitting: (submitting: boolean) => void;\n vote: 'upvote' | 'downvote' | null;\n handleUpvote: () => void;\n handleDownvote: () => void;\n handleTextareaChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleSubmit: () => void;\n handleKeyDown: (e: React.KeyboardEvent) => void;\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n popoverId: string;\n triggerId: string;\n tx_id: string;\n extra_metadata?: Record<string, any>;\n trigger_name?: string;\n}\n\nconst VoteFeedbackContext = createContext<VoteFeedbackContextValue | null>(\n null\n);\n\nconst useVoteFeedbackContext = () => {\n const context = useContext(VoteFeedbackContext);\n if (!context) {\n throw new Error(\n 'VoteFeedback components must be used within VoteFeedback.Root'\n );\n }\n return context;\n};\n\n// Root component that provides context\nconst VoteFeedbackRoot = ({\n children,\n onFeedback,\n defaultText = '',\n tx_id: txIdProp,\n extra_metadata,\n trigger_name,\n}: VoteFeedbackRootProps) => {\n // Resolve tx_id (support both string and function)\n const tx_id = typeof txIdProp === 'function' ? txIdProp() : txIdProp;\n const [showPopover, setShowPopover] = useState(false);\n const [feedbackText, setFeedbackText] = useState(defaultText);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [vote, setVote] = useState<'upvote' | 'downvote' | null>(null);\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const popoverId = useId();\n const triggerId = useId();\n\n // Use default handler if no custom handler is provided\n const defaultHandler = useDefaultFeedbackHandler();\n const handler = onFeedback || defaultHandler;\n\n // Reset component state when tx_id changes\n useEffect(() => {\n setShowPopover(false);\n setFeedbackText(defaultText);\n setIsSubmitting(false);\n setVote(null);\n\n // Return focus to trigger button for accessibility\n setTimeout(() => triggerRef.current?.focus(), 0);\n }, [tx_id, defaultText]);\n\n const handleUpvote = useCallback(async () => {\n setVote('upvote');\n const data: FeedbackData = {\n tx_id,\n vote: 'upvote',\n ...(extra_metadata && { extra_metadata }),\n ...(trigger_name && { trigger_name }),\n };\n\n try {\n setIsSubmitting(true);\n await handler(data);\n } finally {\n setIsSubmitting(false);\n }\n }, [handler, tx_id, extra_metadata, trigger_name]);\n\n const handleDownvote = useCallback(async () => {\n setVote('downvote');\n // First: Send feedback immediately (without explanation)\n if (handler) {\n const data: FeedbackData = {\n tx_id,\n vote: 'downvote',\n ...(extra_metadata && { extra_metadata }),\n ...(trigger_name && { trigger_name }),\n };\n\n try {\n setIsSubmitting(true);\n await handler(data);\n } finally {\n setIsSubmitting(false);\n }\n }\n\n // Second: Show popover for detailed feedback\n setShowPopover(true);\n // Autofocus textarea when popover opens and announce to screen readers\n setTimeout(() => {\n textareaRef.current?.focus();\n // Announce to screen readers\n const announcement = document.createElement('div');\n announcement.setAttribute('aria-live', 'polite');\n announcement.setAttribute('aria-atomic', 'true');\n announcement.className = 'sr-only';\n announcement.textContent =\n 'Feedback dialog opened. You can provide additional details about your downvote.';\n document.body.appendChild(announcement);\n setTimeout(() => document.body.removeChild(announcement), 1000);\n }, 0);\n }, [handler, tx_id, extra_metadata, trigger_name]);\n\n const handleTextareaChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setFeedbackText(e.target.value);\n },\n []\n );\n\n const handleSubmit = useCallback(async () => {\n const hasText = feedbackText.trim().length > 0;\n\n if (hasText) {\n // Submit with explanation\n const data: FeedbackData = {\n tx_id,\n vote: 'downvote',\n explanation: feedbackText,\n ...(extra_metadata && { extra_metadata }),\n ...(trigger_name && { trigger_name }),\n };\n\n try {\n setIsSubmitting(true);\n await handler(data);\n } finally {\n setIsSubmitting(false);\n }\n }\n\n // Always close popover and reset, whether text was provided or not\n setShowPopover(false);\n setFeedbackText(defaultText);\n // Return focus to trigger button and announce to screen readers\n triggerRef.current?.focus();\n\n // Announce completion to screen readers\n if (hasText) {\n const announcement = document.createElement('div');\n announcement.setAttribute('aria-live', 'polite');\n announcement.className = 'sr-only';\n announcement.textContent = 'Feedback submitted successfully.';\n document.body.appendChild(announcement);\n setTimeout(() => document.body.removeChild(announcement), 1000);\n }\n }, [handler, feedbackText, defaultText, tx_id, extra_metadata, trigger_name]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setShowPopover(false);\n setFeedbackText(defaultText);\n triggerRef.current?.focus();\n } else if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleSubmit().then(_ => {});\n } else if (e.key === 'Tab' && showPopover) {\n // Basic focus trapping - keep focus within popover\n const popoverElement = document.getElementById(popoverId);\n if (popoverElement) {\n const focusableElements = popoverElement.querySelectorAll(\n 'button, textarea, input, select, a[href], [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement;\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n }\n },\n [handleSubmit, showPopover, popoverId, defaultText]\n );\n\n const contextValue: VoteFeedbackContextValue = {\n onFeedback: handler,\n showPopover,\n setShowPopover,\n feedbackText,\n setFeedbackText,\n isSubmitting,\n setIsSubmitting,\n vote,\n handleUpvote,\n handleDownvote,\n handleTextareaChange,\n handleSubmit,\n handleKeyDown,\n textareaRef,\n triggerRef,\n popoverId,\n triggerId,\n tx_id,\n extra_metadata,\n trigger_name,\n };\n\n return (\n <VoteFeedbackContext.Provider value={contextValue}>\n {children}\n </VoteFeedbackContext.Provider>\n );\n};\n\n// Upvote button component\nconst UpvoteButton = ({\n asChild,\n children,\n onClick,\n ...props\n}: UpvoteButtonProps) => {\n const { handleUpvote, isSubmitting, vote } = useVoteFeedbackContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n handleUpvote();\n onClick?.(e);\n },\n [handleUpvote, onClick]\n );\n\n const slotProps = {\n ...props,\n onClick: handleClick,\n disabled: isSubmitting || props.disabled,\n 'aria-label': props['aria-label'] || 'Upvote feedback',\n type: 'button' as const,\n };\n\n const isSelected = vote === 'upvote';\n\n if (asChild) {\n const child =\n typeof children === 'function' ? children({ isSelected }) : children;\n if (isValidElement(child)) {\n return cloneElement(\n child,\n mergeProps(slotProps, child.props as Record<string, any>)\n );\n }\n }\n\n return (\n <button {...slotProps}>\n {typeof children === 'function' ? children({ isSelected }) : children}\n </button>\n );\n};\n\n// Downvote button component\nconst DownvoteButton = ({\n asChild,\n children,\n onClick,\n ...props\n}: DownvoteButtonProps) => {\n const {\n handleDownvote,\n showPopover,\n isSubmitting,\n popoverId,\n triggerId,\n triggerRef,\n vote,\n } = useVoteFeedbackContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n handleDownvote();\n onClick?.(e);\n },\n [handleDownvote, onClick]\n );\n\n const slotProps = {\n ...props,\n ref: triggerRef,\n onClick: handleClick,\n disabled: isSubmitting || props.disabled,\n 'aria-label': props['aria-label'] || 'Downvote feedback',\n 'aria-expanded': showPopover,\n 'aria-controls': popoverId,\n id: triggerId,\n type: 'button' as const,\n };\n\n const isSelected = vote === 'downvote';\n\n if (asChild) {\n const child =\n typeof children === 'function' ? children({ isSelected }) : children;\n if (isValidElement(child)) {\n return cloneElement(child, mergeProps(slotProps, child.props as any));\n } else if (child) {\n return child;\n }\n }\n\n return (\n <button {...slotProps}>\n {typeof children === 'function' ? children({ isSelected }) : children}\n </button>\n );\n};\n\n// Popover container component\nconst Popover = ({ asChild, children, ...props }: PopoverProps) => {\n const { showPopover, handleKeyDown, popoverId, triggerId } =\n useVoteFeedbackContext();\n\n if (!showPopover) {\n return null;\n }\n\n const slotProps = {\n ...props,\n role: 'dialog' as const,\n 'aria-labelledby': triggerId,\n 'aria-modal': true,\n 'aria-describedby': `${popoverId}-description`,\n id: popoverId,\n onKeyDown: handleKeyDown,\n tabIndex: -1,\n };\n\n if (asChild && isValidElement(children)) {\n return (\n <>\n {cloneElement(\n children,\n mergeProps(slotProps, children.props as Record<string, any>)\n )}\n <div id={`${popoverId}-description`} className=\"sr-only\">\n Provide additional feedback for your downvote\n </div>\n </>\n );\n }\n\n return (\n <div {...slotProps}>\n <div id={`${popoverId}-description`} className=\"sr-only\">\n Provide additional feedback for your downvote\n </div>\n {children}\n </div>\n );\n};\n\n// Textarea component\nconst Textarea = ({ asChild, value, onChange, ...props }: TextareaProps) => {\n const {\n feedbackText,\n handleTextareaChange,\n textareaRef,\n handleKeyDown,\n popoverId,\n } = useVoteFeedbackContext();\n\n const slotProps = {\n ...props,\n ref: textareaRef,\n value: value !== undefined ? value : feedbackText,\n onChange: onChange || handleTextareaChange,\n onKeyDown: handleKeyDown,\n placeholder: props.placeholder || 'What did we miss?',\n 'aria-label': props['aria-label'] || 'Additional feedback',\n 'aria-describedby': `${popoverId}-help`,\n rows: props.rows || 3,\n };\n\n if (asChild && isValidElement(props.children)) {\n return cloneElement(\n props.children,\n mergeProps(slotProps, props.children.props as Record<string, any>)\n );\n }\n\n return <textarea {...slotProps} />;\n};\n\n// Submit button component\nconst SubmitButton = ({\n asChild,\n children,\n onClick,\n ...props\n}: SubmitButtonProps) => {\n const { handleSubmit, isSubmitting, feedbackText } = useVoteFeedbackContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n handleSubmit();\n onClick?.(e);\n },\n [handleSubmit, onClick]\n );\n\n const hasText = feedbackText.trim().length > 0;\n const buttonText = hasText ? 'Submit feedback' : 'Close without feedback';\n\n const slotProps = {\n ...props,\n onClick: handleClick,\n disabled: isSubmitting || props.disabled,\n type: 'button' as const,\n 'aria-label': props['aria-label'] || buttonText,\n 'aria-describedby': hasText ? undefined : 'submit-help',\n };\n\n if (asChild && isValidElement(children)) {\n return (\n <>\n {cloneElement(\n children,\n mergeProps(slotProps, children.props as Record<string, any>)\n )}\n {!hasText && (\n <span id=\"submit-help\" className=\"sr-only\">\n This will close the dialog without submitting feedback\n </span>\n )}\n </>\n );\n }\n\n return (\n <button {...slotProps}>\n {children}\n {!hasText && (\n <span id=\"submit-help\" className=\"sr-only\">\n This will close the dialog without submitting feedback\n </span>\n )}\n </button>\n );\n};\n\n// Export compound component\nexport const VoteFeedback = {\n Root: VoteFeedbackRoot,\n UpvoteButton,\n DownvoteButton,\n Popover,\n Textarea,\n SubmitButton,\n};\n\n// Default export\n// noinspection JSUnusedGlobalSymbols\nexport { VoteFeedback as default };\n",";(function(root, factory) { // eslint-disable-line no-extra-semi\n var deepDiff = factory(root);\n // eslint-disable-next-line no-undef\n if (typeof define === 'function' && define.amd) {\n // AMD\n define('DeepDiff', function() { // eslint-disable-line no-undef\n return deepDiff;\n });\n } else if (typeof exports === 'object' || typeof navigator === 'object' && navigator.product.match(/ReactNative/i)) {\n // Node.js or ReactNative\n module.exports = deepDiff;\n } else {\n // Browser globals\n var _deepdiff = root.DeepDiff;\n deepDiff.noConflict = function() {\n if (root.DeepDiff === deepDiff) {\n root.DeepDiff = _deepdiff;\n }\n return deepDiff;\n };\n root.DeepDiff = deepDiff;\n }\n}(this, function(root) {\n var validKinds = ['N', 'E', 'A', 'D'];\n\n // nodejs compatible on server side and in the browser.\n function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n }\n\n function Diff(kind, path) {\n Object.defineProperty(this, 'kind', {\n value: kind,\n enumerable: true\n });\n if (path && path.length) {\n Object.defineProperty(this, 'path', {\n value: path,\n enumerable: true\n });\n }\n }\n\n function DiffEdit(path, origin, value) {\n DiffEdit.super_.call(this, 'E', path);\n Object.defineProperty(this, 'lhs', {\n value: origin,\n enumerable: true\n });\n Object.defineProperty(this, 'rhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffEdit, Diff);\n\n function DiffNew(path, value) {\n DiffNew.super_.call(this, 'N', path);\n Object.defineProperty(this, 'rhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffNew, Diff);\n\n function DiffDeleted(path, value) {\n DiffDeleted.super_.call(this, 'D', path);\n Object.defineProperty(this, 'lhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffDeleted, Diff);\n\n function DiffArray(path, index, item) {\n DiffArray.super_.call(this, 'A', path);\n Object.defineProperty(this, 'index', {\n value: index,\n enumerable: true\n });\n Object.defineProperty(this, 'item', {\n value: item,\n enumerable: true\n });\n }\n inherits(DiffArray, Diff);\n\n function arrayRemove(arr, from, to) {\n var rest = arr.slice((to || from) + 1 || arr.length);\n arr.length = from < 0 ? arr.length + from : from;\n arr.push.apply(arr, rest);\n return arr;\n }\n\n function realTypeOf(subject) {\n var type = typeof subject;\n if (type !== 'object') {\n return type;\n }\n\n if (subject === Math) {\n return 'math';\n } else if (subject === null) {\n return 'null';\n } else if (Array.isArray(subject)) {\n return 'array';\n } else if (Object.prototype.toString.call(subject) === '[object Date]') {\n return 'date';\n } else if (typeof subject.toString === 'function' && /^\\/.*\\//.test(subject.toString())) {\n return 'regexp';\n }\n return 'object';\n }\n\n // http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n function hashThisString(string) {\n var hash = 0;\n if (string.length === 0) { return hash; }\n for (var i = 0; i < string.length; i++) {\n var char = string.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n }\n\n // Gets a hash of the given object in an array order-independent fashion\n // also object key order independent (easier since they can be alphabetized)\n function getOrderIndependentHash(object) {\n var accum = 0;\n var type = realTypeOf(object);\n\n if (type === 'array') {\n object.forEach(function (item) {\n // Addition is commutative so this is order indep\n accum += getOrderIndependentHash(item);\n });\n\n var arrayString = '[type: array, hash: ' + accum + ']';\n return accum + hashThisString(arrayString);\n }\n\n if (type === 'object') {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n var keyValueString = '[ type: object, key: ' + key + ', value hash: ' + getOrderIndependentHash(object[key]) + ']';\n accum += hashThisString(keyValueString);\n }\n }\n\n return accum;\n }\n\n // Non object, non array...should be good?\n var stringToHash = '[ type: ' + type + ' ; value: ' + object + ']';\n return accum + hashThisString(stringToHash);\n }\n\n function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndependent) {\n changes = changes || [];\n path = path || [];\n stack = stack || [];\n var currentPath = path.slice(0);\n if (typeof key !== 'undefined' && key !== null) {\n if (prefilter) {\n if (typeof (prefilter) === 'function' && prefilter(currentPath, key)) {\n return;\n } else if (typeof (prefilter) === 'object') {\n if (prefilter.prefilter && prefilter.prefilter(currentPath, key)) {\n return;\n }\n if (prefilter.normalize) {\n var alt = prefilter.normalize(currentPath, key, lhs, rhs);\n if (alt) {\n lhs = alt[0];\n rhs = alt[1];\n }\n }\n }\n }\n currentPath.push(key);\n }\n\n // Use string comparison for regexes\n if (realTypeOf(lhs) === 'regexp' && realTypeOf(rhs) === 'regexp') {\n lhs = lhs.toString();\n rhs = rhs.toString();\n }\n\n var ltype = typeof lhs;\n var rtype = typeof rhs;\n var i, j, k, other;\n\n var ldefined = ltype !== 'undefined' ||\n (stack && (stack.length > 0) && stack[stack.length - 1].lhs &&\n Object.getOwnPropertyDescriptor(stack[stack.length - 1].lhs, key));\n var rdefined = rtype !== 'undefined' ||\n (stack && (stack.length > 0) && stack[stack.length - 1].rhs &&\n Object.getOwnPropertyDescriptor(stack[stack.length - 1].rhs, key));\n\n if (!ldefined && rdefined) {\n changes.push(new DiffNew(currentPath, rhs));\n } else if (!rdefined && ldefined) {\n changes.push(new DiffDeleted(currentPath, lhs));\n } else if (realTypeOf(lhs) !== realTypeOf(rhs)) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n } else if (realTypeOf(lhs) === 'date' && (lhs - rhs) !== 0) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n } else if (ltype === 'object' && lhs !== null && rhs !== null) {\n for (i = stack.length - 1; i > -1; --i) {\n if (stack[i].lhs === lhs) {\n other = true;\n break;\n }\n }\n if (!other) {\n stack.push({ lhs: lhs, rhs: rhs });\n if (Array.isArray(lhs)) {\n // If order doesn't matter, we need to sort our arrays\n if (orderIndependent) {\n lhs.sort(function (a, b) {\n return getOrderIndependentHash(a) - getOrderIndependentHash(b);\n });\n\n rhs.sort(function (a, b) {\n return getOrderIndependentHash(a) - getOrderIndependentHash(b);\n });\n }\n i = rhs.length - 1;\n j = lhs.length - 1;\n while (i > j) {\n changes.push(new DiffArray(currentPath, i, new DiffNew(undefined, rhs[i--])));\n }\n while (j > i) {\n changes.push(new DiffArray(currentPath, j, new DiffDeleted(undefined, lhs[j--])));\n }\n for (; i >= 0; --i) {\n deepDiff(lhs[i], rhs[i], changes, prefilter, currentPath, i, stack, orderIndependent);\n }\n } else {\n var akeys = Object.keys(lhs);\n var pkeys = Object.keys(rhs);\n for (i = 0; i < akeys.length; ++i) {\n k = akeys[i];\n other = pkeys.indexOf(k);\n if (other >= 0) {\n deepDiff(lhs[k], rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);\n pkeys[other] = null;\n } else {\n deepDiff(lhs[k], undefined, changes, prefilter, currentPath, k, stack, orderIndependent);\n }\n }\n for (i = 0; i < pkeys.length; ++i) {\n k = pkeys[i];\n if (k) {\n deepDiff(undefined, rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);\n }\n }\n }\n stack.length = stack.length - 1;\n } else if (lhs !== rhs) {\n // lhs is contains a cycle at this element and it differs from rhs\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n }\n } else if (lhs !== rhs) {\n if (!(ltype === 'number' && isNaN(lhs) && isNaN(rhs))) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n }\n }\n }\n\n function observableDiff(lhs, rhs, observer, prefilter, orderIndependent) {\n var changes = [];\n deepDiff(lhs, rhs, changes, prefilter, null, null, null, orderIndependent);\n if (observer) {\n for (var i = 0; i < changes.length; ++i) {\n observer(changes[i]);\n }\n }\n return changes;\n }\n\n function orderIndependentDeepDiff(lhs, rhs, changes, prefilter, path, key, stack) {\n return deepDiff(lhs, rhs, changes, prefilter, path, key, stack, true);\n }\n\n function accumulateDiff(lhs, rhs, prefilter, accum) {\n var observer = (accum) ?\n function (difference) {\n if (difference) {\n accum.push(difference);\n }\n } : undefined;\n var changes = observableDiff(lhs, rhs, observer, prefilter);\n return (accum) ? accum : (changes.length) ? changes : undefined;\n }\n\n function accumulateOrderIndependentDiff(lhs, rhs, prefilter, accum) {\n var observer = (accum) ?\n function (difference) {\n if (difference) {\n accum.push(difference);\n }\n } : undefined;\n var changes = observableDiff(lhs, rhs, observer, prefilter, true);\n return (accum) ? accum : (changes.length) ? changes : undefined;\n }\n\n function applyArrayChange(arr, index, change) {\n if (change.path && change.path.length) {\n var it = arr[index],\n i, u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n applyArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n delete it[change.path[i]];\n break;\n case 'E':\n case 'N':\n it[change.path[i]] = change.rhs;\n break;\n }\n } else {\n switch (change.kind) {\n case 'A':\n applyArrayChange(arr[index], change.index, change.item);\n break;\n case 'D':\n arr = arrayRemove(arr, index);\n break;\n case 'E':\n case 'N':\n arr[index] = change.rhs;\n break;\n }\n }\n return arr;\n }\n\n function applyChange(target, source, change) {\n if (typeof change === 'undefined' && source && ~validKinds.indexOf(source.kind)) {\n change = source;\n }\n if (target && change && change.kind) {\n var it = target,\n i = -1,\n last = change.path ? change.path.length - 1 : 0;\n while (++i < last) {\n if (typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = (typeof change.path[i + 1] !== 'undefined' && typeof change.path[i + 1] === 'number') ? [] : {};\n }\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n if (change.path && typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = [];\n }\n applyArrayChange(change.path ? it[change.path[i]] : it, change.index, change.item);\n break;\n case 'D':\n delete it[change.path[i]];\n break;\n case 'E':\n case 'N':\n it[change.path[i]] = change.rhs;\n break;\n }\n }\n }\n\n function revertArrayChange(arr, index, change) {\n if (change.path && change.path.length) {\n // the structure of the object at the index has changed...\n var it = arr[index],\n i, u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n revertArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n it[change.path[i]] = change.lhs;\n break;\n case 'E':\n it[change.path[i]] = change.lhs;\n break;\n case 'N':\n delete it[change.path[i]];\n break;\n }\n } else {\n // the array item is different...\n switch (change.kind) {\n case 'A':\n revertArrayChange(arr[index], change.index, change.item);\n break;\n case 'D':\n arr[index] = change.lhs;\n break;\n case 'E':\n arr[index] = change.lhs;\n break;\n case 'N':\n arr = arrayRemove(arr, index);\n break;\n }\n }\n return arr;\n }\n\n function revertChange(target, source, change) {\n if (target && source && change && change.kind) {\n var it = target,\n i, u;\n u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n if (typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = {};\n }\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n // Array was modified...\n // it will be an array...\n revertArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n // Item was deleted...\n it[change.path[i]] = change.lhs;\n break;\n case 'E':\n // Item was edited...\n it[change.path[i]] = change.lhs;\n break;\n case 'N':\n // Item is new...\n delete it[change.path[i]];\n break;\n }\n }\n }\n\n function applyDiff(target, source, filter) {\n if (target && source) {\n var onChange = function (change) {\n if (!filter || filter(target, source, change)) {\n applyChange(target, source, change);\n }\n };\n observableDiff(target, source, onChange);\n }\n }\n\n Object.defineProperties(accumulateDiff, {\n\n diff: {\n value: accumulateDiff,\n enumerable: true\n },\n orderIndependentDiff: {\n value: accumulateOrderIndependentDiff,\n enumerable: true\n },\n observableDiff: {\n value: observableDiff,\n enumerable: true\n },\n orderIndependentObservableDiff: {\n value: orderIndependentDeepDiff,\n enumerable: true\n },\n orderIndepHash: {\n value: getOrderIndependentHash,\n enumerable: true\n },\n applyDiff: {\n value: applyDiff,\n enumerable: true\n },\n applyChange: {\n value: applyChange,\n enumerable: true\n },\n revertChange: {\n value: revertChange,\n enumerable: true\n },\n isConflict: {\n value: function () {\n return typeof $conflict !== 'undefined';\n },\n enumerable: true\n }\n });\n\n // hackish...\n accumulateDiff.DeepDiff = accumulateDiff;\n // ...but works with:\n // import DeepDiff from 'deep-diff'\n // import { DeepDiff } from 'deep-diff'\n // const DeepDiff = require('deep-diff');\n // const { DeepDiff } = require('deep-diff');\n\n if (root) {\n root.DeepDiff = accumulateDiff;\n }\n\n return accumulateDiff;\n}));\n","const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","(function() {\n 'use strict';\n \n var collator;\n try {\n collator = (typeof Intl !== \"undefined\" && typeof Intl.Collator !== \"undefined\") ? Intl.Collator(\"generic\", { sensitivity: \"base\" }) : null;\n } catch (err){\n console.log(\"Collator could not be initialized and wouldn't be used\");\n }\n\n var levenshtein = require('fastest-levenshtein');\n\n // arrays to re-use\n var prevRow = [],\n str2Char = [];\n \n /**\n * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.\n */\n var Levenshtein = {\n /**\n * Calculate levenshtein distance of the two strings.\n *\n * @param str1 String the first string.\n * @param str2 String the second string.\n * @param [options] Additional options.\n * @param [options.useCollator] Use `Intl.Collator` for locale-sensitive string comparison.\n * @return Integer the levenshtein distance (0 and above).\n */\n get: function(str1, str2, options) {\n var useCollator = (options && collator && options.useCollator);\n \n if (useCollator) {\n var str1Len = str1.length,\n str2Len = str2.length;\n \n // base cases\n if (str1Len === 0) return str2Len;\n if (str2Len === 0) return str1Len;\n\n // two rows\n var curCol, nextCol, i, j, tmp;\n\n // initialise previous row\n for (i=0; i<str2Len; ++i) {\n prevRow[i] = i;\n str2Char[i] = str2.charCodeAt(i);\n }\n prevRow[str2Len] = str2Len;\n\n var strCmp;\n // calculate current row distance from previous row using collator\n for (i = 0; i < str1Len; ++i) {\n nextCol = i + 1;\n\n for (j = 0; j < str2Len; ++j) {\n curCol = nextCol;\n\n // substution\n strCmp = 0 === collator.compare(str1.charAt(i), String.fromCharCode(str2Char[j]));\n\n nextCol = prevRow[j] + (strCmp ? 0 : 1);\n\n // insertion\n tmp = curCol + 1;\n if (nextCol > tmp) {\n nextCol = tmp;\n }\n // deletion\n tmp = prevRow[j + 1] + 1;\n if (nextCol > tmp) {\n nextCol = tmp;\n }\n\n // copy current col value into previous (in preparation for next iteration)\n prevRow[j] = curCol;\n }\n\n // copy last col value into previous (in preparation for next iteration)\n prevRow[j] = nextCol;\n }\n return nextCol;\n }\n return levenshtein.distance(str1, str2);\n }\n\n };\n\n // amd\n if (typeof define !== \"undefined\" && define !== null && define.amd) {\n define(function() {\n return Levenshtein;\n });\n }\n // commonjs\n else if (typeof module !== \"undefined\" && module !== null && typeof exports !== \"undefined\" && module.exports === exports) {\n module.exports = Levenshtein;\n }\n // web worker\n else if (typeof self !== \"undefined\" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {\n self.Levenshtein = Levenshtein;\n }\n // browser main thread\n else if (typeof window !== \"undefined\" && window !== null) {\n window.Levenshtein = Levenshtein;\n }\n}());\n","export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n","import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n","import { diffLines } from '../diff/line.js';\nexport function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n let optionsObj;\n if (!options) {\n optionsObj = {};\n }\n else if (typeof options === 'function') {\n optionsObj = { callback: options };\n }\n else {\n optionsObj = options;\n }\n if (typeof optionsObj.context === 'undefined') {\n optionsObj.context = 4;\n }\n // We copy this into its own variable to placate TypeScript, which thinks\n // optionsObj.context might be undefined in the callbacks below.\n const context = optionsObj.context;\n // @ts-expect-error (runtime check for something that is correctly a static type error)\n if (optionsObj.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!optionsObj.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, optionsObj));\n }\n else {\n const { callback } = optionsObj;\n diffLines(oldStr, newStr, Object.assign(Object.assign({}, optionsObj), { callback: (diff) => {\n const patch = diffLinesResultToPatch(diff);\n // TypeScript is unhappy without the cast because it does not understand that `patch` may\n // be undefined here only if `callback` is StructuredPatchCallbackAbortable:\n callback(patch);\n } }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n if (!diff) {\n return;\n }\n diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier\n function contextLines(lines) {\n return lines.map(function (entry) { return ' ' + entry; });\n }\n const hunks = [];\n let oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1;\n for (let i = 0; i < diff.length; i++) {\n const current = diff[i], lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n // If we have previous context, start with that\n if (!oldRangeStart) {\n const prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = context > 0 ? contextLines(prev.lines.slice(-context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n // Output our changes\n for (const line of lines) {\n curRange.push((current.added ? '+' : '-') + line);\n }\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n }\n else {\n oldLine += lines.length;\n }\n }\n else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= context * 2 && i < diff.length - 2) {\n // Overlapping\n for (const line of contextLines(lines)) {\n curRange.push(line);\n }\n }\n else {\n // end the range and output\n const contextSize = Math.min(lines.length, context);\n for (const line of contextLines(lines.slice(0, contextSize))) {\n curRange.push(line);\n }\n const hunk = {\n oldStart: oldRangeStart,\n oldLines: (oldLine - oldRangeStart + contextSize),\n newStart: newRangeStart,\n newLines: (newLine - newRangeStart + contextSize),\n lines: curRange\n };\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n }\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (const hunk of hunks) {\n for (let i = 0; i < hunk.lines.length; i++) {\n if (hunk.lines[i].endsWith('\\n')) {\n hunk.lines[i] = hunk.lines[i].slice(0, -1);\n }\n else {\n hunk.lines.splice(i + 1, 0, '\\\');\n i++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName, newFileName: newFileName,\n oldHeader: oldHeader, newHeader: newHeader,\n hunks: hunks\n };\n }\n}\n/**\n * creates a unified diff patch.\n * @param patch either a single structured patch object (as returned by `structuredPatch`) or an array of them (as returned by `parsePatch`)\n */\nexport function formatPatch(patch) {\n if (Array.isArray(patch)) {\n return patch.map(formatPatch).join('\\n');\n }\n const ret = [];\n if (patch.oldFileName == patch.newFileName) {\n ret.push('Index: ' + patch.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + patch.oldFileName + (typeof patch.oldHeader === 'undefined' ? '' : '\\t' + patch.oldHeader));\n ret.push('+++ ' + patch.newFileName + (typeof patch.newHeader === 'undefined' ? '' : '\\t' + patch.newHeader));\n for (let i = 0; i < patch.hunks.length; i++) {\n const hunk = patch.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines\n + ' +' + hunk.newStart + ',' + hunk.newLines\n + ' @@');\n for (const line of hunk.lines) {\n ret.push(line);\n }\n }\n return ret.join('\\n') + '\\n';\n}\nexport function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (typeof options === 'function') {\n options = { callback: options };\n }\n if (!(options === null || options === void 0 ? void 0 : options.callback)) {\n const patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n }\n else {\n const { callback } = options;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, Object.assign(Object.assign({}, options), { callback: patchObj => {\n if (!patchObj) {\n callback(undefined);\n }\n else {\n callback(formatPatch(patchObj));\n }\n } }));\n }\n}\nexport function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n const hasTrailingNl = text.endsWith('\\n');\n const result = text.split('\\n').map(line => line + '\\n');\n if (hasTrailingNl) {\n result.pop();\n }\n else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n","import { diff } from 'deep-diff';\nimport levenshtein from 'fast-levenshtein';\nimport { createTwoFilesPatch } from 'diff';\n\nexport type DiffType = 'git' | 'object' | 'json';\n\n/**\n * Format the diff between two values based on the specified format\n */\nexport function formatDiff<T>(\n oldValue: T,\n newValue: T,\n diffType: DiffType = 'git',\n context = 3\n): string {\n switch (diffType) {\n case 'git':\n return formatGitDiff(oldValue, newValue, context);\n case 'object':\n return formatObjectDiff(oldValue, newValue);\n case 'json':\n return formatJsonDiff(oldValue, newValue);\n default:\n return formatGitDiff(oldValue, newValue, context);\n }\n}\n\n/**\n * Format the diff between two values as a git-like diff with unified format\n * @param oldValue The old value\n * @param newValue The new value\n * @param context The number of lines of unchanged context to include (default: 3)\n * @returns A string containing the git-like diff in unified format\n */\nfunction formatGitDiff<T>(oldValue: T, newValue: T, context = 3): string {\n // Pretty-print both objects as JSON\n const oldStr = stringify(oldValue);\n const newStr = stringify(newValue);\n\n // Generate unified patch with empty filenames\n const patch = createTwoFilesPatch(\n /* oldFilename */ '',\n /* newFilename */ '',\n oldStr,\n newStr,\n /* oldHeader */ '',\n /* newHeader */ '',\n { context }\n );\n\n // Strip out the first two lines (\"--- \" and \"+++ \")\n return patch.split('\\n').slice(2).join('\\n');\n}\n\n/**\n * Format the diff between two values as an object diff\n */\nfunction formatObjectDiff<T>(oldValue: T, newValue: T): string {\n const differences = diff(oldValue, newValue) || [];\n return JSON.stringify(differences, null, 2);\n}\n\n/**\n * Format the diff between two values as a JSON diff\n */\nfunction formatJsonDiff<T>(oldValue: T, newValue: T): string {\n return JSON.stringify(\n {\n before: oldValue,\n after: newValue,\n },\n null,\n 2\n );\n}\n\n/**\n * Calculate the difference percentage between two values\n */\nexport function calculateDiffPercentage<T>(oldValue: T, newValue: T): number {\n if (typeof oldValue === 'string' && typeof newValue === 'string') {\n return calculateStringDiffPercentage(oldValue, newValue);\n } else if (typeof oldValue === 'number' && typeof newValue === 'number') {\n return calculateNumberDiffPercentage(oldValue, newValue);\n } else {\n return calculateObjectDiffPercentage(oldValue, newValue);\n }\n}\n\n/**\n * Calculate the difference percentage between two strings using Levenshtein distance\n */\nfunction calculateStringDiffPercentage(oldStr: string, newStr: string): number {\n if (oldStr === newStr) return 0;\n if (oldStr.length === 0) return 1;\n if (newStr.length === 0) return 1;\n\n const distance = levenshtein.get(oldStr, newStr);\n const maxLength = Math.max(oldStr.length, newStr.length);\n\n return distance / maxLength;\n}\n\n/**\n * Calculate the difference percentage between two numbers\n */\nfunction calculateNumberDiffPercentage(oldNum: number, newNum: number): number {\n if (oldNum === newNum) return 0;\n if (oldNum === 0) return 1; // To avoid division by zero\n\n const change = Math.abs(newNum - oldNum);\n const base = Math.max(Math.abs(oldNum), Math.abs(newNum));\n\n // Normalize to ensure we don't exceed 1.0\n return Math.min(change / base, 1);\n}\n\n/**\n * Calculate the difference percentage between two objects\n */\nfunction calculateObjectDiffPercentage<T>(oldObj: T, newObj: T): number {\n // If they're the same reference or deeply equal, no difference\n if (oldObj === newObj) return 0;\n\n // Get differences using deep-diff\n const differences = diff(oldObj, newObj) || [];\n if (differences.length === 0) return 0;\n\n // Count total properties and changed properties for a more accurate percentage\n const oldProps = countObjectProperties(oldObj);\n const newProps = countObjectProperties(newObj);\n const totalProps = Math.max(oldProps, newProps);\n\n if (totalProps === 0) return 0;\n\n // For each difference, calculate its weight\n let changeWeight = 0;\n for (const difference of differences) {\n switch (difference.kind) {\n case 'N': // New property\n changeWeight += 1;\n break;\n case 'D': // Deleted property\n changeWeight += 1;\n break;\n case 'E': // Edit property\n if (\n typeof difference.lhs === 'string' &&\n typeof difference.rhs === 'string'\n ) {\n // For string changes, use Levenshtein distance ratio\n const stringChangeRatio = calculateStringDiffPercentage(\n difference.lhs,\n difference.rhs\n );\n changeWeight += stringChangeRatio;\n } else if (\n typeof difference.lhs === 'number' &&\n typeof difference.rhs === 'number'\n ) {\n // For number changes, use number diff ratio\n const numberChangeRatio = calculateNumberDiffPercentage(\n difference.lhs,\n difference.rhs\n );\n changeWeight += numberChangeRatio;\n } else {\n // For other types, consider it a full change\n changeWeight += 1;\n }\n break;\n case 'A': // Array change\n changeWeight += 0.5; // Array changes are weighted less than full property changes\n break;\n }\n }\n\n // Return the ratio of changed properties to total properties\n return Math.min(changeWeight / totalProps, 1);\n}\n\n/**\n * Count the number of properties in an object recursively\n */\nfunction countObjectProperties(obj: any): number {\n if (obj === null || obj === undefined) return 0;\n if (typeof obj !== 'object') return 1;\n if (Array.isArray(obj)) return obj.length;\n\n let count = 0;\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n count += 1;\n }\n }\n return count;\n}\n\n/**\n * Safely convert a value to a string representation\n */\nfunction stringify(value: any): string {\n try {\n return JSON.stringify(\n value,\n (_key, val) => {\n // Handle circular references and special values\n if (typeof val === 'function') return '[Function]';\n if (val === undefined) return '[undefined]';\n if (val === Infinity) return '[Infinity]';\n if (Number.isNaN(val)) return '[NaN]';\n return val;\n },\n 2\n );\n } catch (_) {\n return String(value);\n }\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport { useDefaultFeedbackHandler } from '@/contexts/kelet';\nimport { calculateDiffPercentage, formatDiff } from './diff-utils';\nimport type { FeedbackStateOptions } from './types';\n\n/**\n * Internal utility hook that handles state change tracking and feedback sending.\n * This contains all the shared logic between useFeedbackState and useFeedbackReducer.\n *\n * @param currentState The current state to track changes for\n * @param tx_id A unique transaction ID for the state (string or function that derives from state)\n * @param options Optional configuration options\n * @returns Object with notifyChange function to notify of impending state changes\n */\nexport function useStateChangeTracking<T>(\n currentState: T,\n tx_id: string | ((state: T) => string),\n options?: FeedbackStateOptions<T>\n) {\n // Get the feedback handler (custom or default from Kelet context)\n const defaultFeedbackHandler = useDefaultFeedbackHandler();\n const feedbackHandler = options?.onFeedback || defaultFeedbackHandler;\n\n // Determine defaults from options\n const debounceMs = options?.debounceMs ?? 1500;\n const diffType = options?.diffType ?? 'git';\n const compareWith = options?.compareWith;\n const defaultTriggerName =\n options?.default_trigger_name ?? 'auto_state_change';\n\n // Keep track of previous state for comparison\n const prevStateRef = useRef<T>(currentState);\n\n // Track the state when changes started (for debouncing)\n const changeStartStateRef = useRef<T>(currentState);\n\n // Track if this is the first render\n const isFirstRenderRef = useRef<boolean>(true);\n\n // Store timeout ID for debounce cleanup\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Store the trigger name for the current change sequence\n const currentTriggerNameRef = useRef<string | undefined>(undefined);\n\n // Helper function to send feedback\n const sendFeedback = useCallback(\n (startState: T, endState: T, triggerName: string) => {\n const diffPercentage = calculateDiffPercentage(startState, endState);\n const diffString = formatDiff(startState, endState, diffType);\n\n let vote: 'upvote' | 'downvote';\n if (options?.vote) {\n if (typeof options.vote === 'function') {\n vote = options.vote(startState, endState, diffPercentage);\n } else {\n vote = options.vote;\n }\n } else {\n vote = diffPercentage > 0.5 ? 'downvote' : 'upvote';\n }\n\n const idString = typeof tx_id === 'function' ? tx_id(endState) : tx_id;\n\n feedbackHandler({\n tx_id: idString,\n vote,\n explanation: `State change with diff percentage: ${(diffPercentage * 100).toFixed(1)}%`,\n correction: diffString,\n source: 'IMPLICIT',\n extra_metadata: options?.metadata,\n trigger_name: triggerName,\n });\n },\n [options, tx_id, diffType, feedbackHandler]\n );\n\n // Function to notify of impending state changes with trigger name support\n const notifyChange = useCallback(\n (trigger_name?: string) => {\n const newTriggerName = trigger_name || defaultTriggerName;\n\n // If trigger name changed and we have a running timer, immediately flush the previous sequence\n if (\n timeoutRef.current &&\n currentTriggerNameRef.current &&\n currentTriggerNameRef.current !== newTriggerName\n ) {\n // Clear the existing timeout\n clearTimeout(timeoutRef.current);\n\n // Immediately send feedback for the previous trigger sequence\n const startState = changeStartStateRef.current;\n const currentStateBeforeChange = currentState; // Current state before this new change\n\n sendFeedback(\n startState,\n currentStateBeforeChange,\n currentTriggerNameRef.current\n );\n\n // Reset for the new trigger sequence\n timeoutRef.current = null;\n }\n\n // Store the new trigger name for this change\n currentTriggerNameRef.current = newTriggerName;\n },\n [currentState, defaultTriggerName, sendFeedback]\n );\n\n // Effect to compare state changes and send feedback\n useEffect(() => {\n // Skip the initial render\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n prevStateRef.current = currentState;\n changeStartStateRef.current = currentState;\n return;\n }\n\n // Check if state actually changed\n const prevState = prevStateRef.current;\n const isEqual = compareWith\n ? compareWith(prevState, currentState)\n : JSON.stringify(prevState) === JSON.stringify(currentState);\n\n if (!isEqual) {\n // If no timer is running, this is the start of a change sequence\n if (!timeoutRef.current) {\n changeStartStateRef.current = prevState;\n }\n\n // Clear previous timeout if it exists (extends the debounce timer)\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Update the current state reference immediately\n prevStateRef.current = currentState;\n\n // Set new timeout to debounce feedback\n timeoutRef.current = setTimeout(() => {\n // Compare from when changes started to final state\n const startState = changeStartStateRef.current;\n const finalState = currentState;\n\n // Send feedback using the helper\n sendFeedback(\n startState,\n finalState,\n currentTriggerNameRef.current || defaultTriggerName\n );\n\n // Reset for next change sequence\n changeStartStateRef.current = finalState;\n timeoutRef.current = null;\n }, debounceMs);\n }\n\n // Cleanup function\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [\n currentState,\n tx_id,\n options,\n feedbackHandler,\n diffType,\n debounceMs,\n compareWith,\n defaultTriggerName,\n sendFeedback,\n ]);\n\n return {\n notifyChange,\n };\n}\n","import { useCallback, useState } from 'react';\nimport { useStateChangeTracking } from './use-state-change-tracking';\nimport type { FeedbackStateReturn, FeedbackStateOptions } from './types';\n\n/**\n * A drop-in replacement for React's useState that tracks changes to state over time\n * and automatically sends these changes as implicit feedback through the Kelet system.\n *\n * @param initialState The initial state value\n * @param tx_id A unique transaction ID for the state (string or function that derives from state)\n * @param options Optional configuration options\n * @returns A tuple of [state, setState] just like React's useState\n *\n * @example\n * // Basic usage with required tx_id\n * const [count, setCount] = useFeedbackState(0, 'counter');\n *\n * // Using with static tx_id and options\n * const [preferences, setPreferences] = useFeedbackState(\n * {theme: 'light', notifications: true},\n * 'user-preferences',\n * {\n * debounceMs: 1000,\n * diffType: 'object'\n * }\n * );\n *\n * // With dynamic tx_id derived from state\n * const [items, setItems] = useFeedbackState(\n * [1, 2, 3],\n * (items) => `items-${items.length}`\n * );\n */\nexport function useFeedbackState<T>(\n initialState: T,\n tx_id: string | ((state: T) => string),\n options?: FeedbackStateOptions<T>\n): FeedbackStateReturn<T> {\n // Use React's native useState for state management\n const [state, setStateInternal] = useState<T>(initialState);\n\n // Use the shared state change tracking logic\n const { notifyChange } = useStateChangeTracking(state, tx_id, options);\n\n // Wrap setState to track changes with trigger_name support\n const setState: FeedbackStateReturn<T>[1] = useCallback(\n (value, trigger_name) => {\n // Notify about the impending state change with trigger name\n notifyChange(trigger_name);\n\n // Update state using React's native setState\n setStateInternal(prevState => {\n // Handle functional updates\n const newState =\n typeof value === 'function'\n ? (value as (prevState: T) => T)(prevState)\n : value;\n\n return newState;\n });\n },\n [notifyChange]\n );\n\n return [state, setState];\n}\n","// Internal function for loading OpenTelemetry API - can be mocked in tests\nlet _loadOtelApi = (): { trace: any; context: any } => {\n try {\n // Dynamic import - this will throw if @opentelemetry/api is not installed\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require('@opentelemetry/api');\n } catch {\n throw new Error(\n 'OpenTelemetry is not available. Install @opentelemetry/api to use trace ID extraction.'\n );\n }\n};\n\n// Test helper to mock the OTEL API loader\nexport function _setOtelApiLoader(loader: () => { trace: any; context: any }) {\n _loadOtelApi = loader;\n}\n\n/**\n * Extracts the current OpenTelemetry trace ID from the active span context.\n *\n * @throws Error if OpenTelemetry is not available or no trace is currently active\n * @returns The trace ID string from the active OTEL span\n *\n * @example\n * ```typescript\n * import { getOtelTraceId } from '@kelet-ai/feedback-ui';\n *\n * // Use as function with VoteFeedback component\n * <VoteFeedback.Root tx_id={getOtelTraceId} onFeedback={handleFeedback}>\n * <VoteFeedback.UpvoteButton>👍</VoteFeedback.UpvoteButton>\n * <VoteFeedback.DownvoteButton>👎</VoteFeedback.DownvoteButton>\n * </VoteFeedback.Root>\n * ```\n */\nexport function getOtelTraceId(): string {\n const { trace, context } = _loadOtelApi();\n\n try {\n // Method 1: Get span context directly from active context\n const spanContext = trace.getSpanContext(context.active());\n if (spanContext?.traceId) {\n return spanContext.traceId;\n }\n\n // Method 2: Get from active span\n const activeSpan = trace.getSpan(context.active());\n if (activeSpan) {\n const spanCtx = activeSpan.spanContext();\n if (spanCtx.traceId) {\n return spanCtx.traceId;\n }\n }\n } catch (error) {\n throw new Error(\n `Failed to extract OpenTelemetry trace ID: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n\n // No trace ID available\n throw new Error(\n 'OpenTelemetry trace ID not available. Ensure XHR/Fetch instrumentation is active and a request is in progress.'\n );\n}\n"],"names":["self","require$$0","jsxRuntimeModule","require$$1","jsx","jsxs","Fragment","deepDiff","this","Diff","mv","pv","start","vlen","levenshtein","value","diff","distance"],"mappings":"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","x_google_ignoreList":[0,1,2,5,6,7,8,9,10]}
1
+ {"version":3,"file":"feedback-ui.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/contexts/kelet.tsx","../src/components/vote-feedback.tsx","../node_modules/deep-diff/index.js","../node_modules/fastest-levenshtein/esm/mod.js","../node_modules/fast-levenshtein/levenshtein.js","../node_modules/diff/libesm/diff/base.js","../node_modules/diff/libesm/diff/line.js","../node_modules/diff/libesm/patch/create.js","../src/hooks/feedback-state/diff-utils.ts","../src/hooks/feedback-state/use-state-change-tracking.ts","../src/hooks/feedback-state/use-feedback-state.ts","../src/lib/otel-trace.ts"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import React, { createContext, useContext } from 'react';\nimport type { FeedbackData } from '@/types';\n\ninterface KeletContextValue {\n api_key: string;\n project: string;\n feedback: (data: FeedbackData) => Promise<void>;\n}\n\ninterface KeletProviderProps {\n apiKey?: string;\n project: string;\n baseUrl?: string;\n}\n\ninterface FeedbackRequest {\n tx_id: string;\n source: 'IMPLICIT' | 'EXPLICIT';\n trigger_name?: string;\n vote: 'upvote' | 'downvote';\n explanation?: string;\n selection?: string;\n correction?: string;\n}\n\n// Create the context\nexport const KeletContext = createContext<KeletContextValue | null>(null);\n\nconst DefaultKeletBaseUrl = 'https://api.kelet.ai/api';\n\n// Custom hook to use the Kelet context\n// noinspection JSUnusedGlobalSymbols\nexport const useKelet = (): KeletContextValue => {\n const context = useContext(KeletContext);\n if (!context) {\n throw new Error('useKelet must be used within a KeletProvider');\n }\n return context;\n};\n\nexport const useDefaultFeedbackHandler = (): ((\n data: FeedbackData\n) => Promise<void>) => {\n const context = useContext(KeletContext);\n if (!context) {\n console.warn(\n 'No FeedbackHandler found: defaultFeedbackHandler is not ' +\n \"possible since there's no KeletProvider wrapping this \" +\n 'call, and handler not provided'\n );\n return async () => {};\n } else {\n return context.feedback;\n }\n};\n\n// The KeletProvider component\nexport const KeletProvider: React.FC<\n React.PropsWithChildren<KeletProviderProps>\n> = ({ apiKey, project, baseUrl, children }) => {\n // Get the parent context (if any)\n const parentContext = useContext(KeletContext);\n\n // Determine the API key to use\n const resolvedApiKey = apiKey || parentContext?.api_key;\n\n if (!resolvedApiKey) {\n throw new Error(\n 'apiKey is required either directly or from a parent KeletProvider'\n );\n }\n\n const feedback = async (data: FeedbackData) => {\n const resolvedBaseUrl = baseUrl || DefaultKeletBaseUrl;\n const url = `${resolvedBaseUrl}/projects/${project}/feedback`;\n const req: FeedbackRequest = {\n tx_id: data.tx_id,\n source: data.source || 'EXPLICIT',\n vote: data.vote,\n explanation: data.explanation,\n correction: data.correction,\n selection: data.selection,\n // Include trigger_name if needed in the future\n };\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${resolvedApiKey}`,\n },\n body: JSON.stringify(req),\n });\n if (!response.ok) {\n throw new Error(`Failed to submit feedback: ${response.statusText}`);\n }\n };\n\n const value: KeletContextValue = {\n api_key: resolvedApiKey,\n project,\n feedback,\n };\n\n return (\n <KeletContext.Provider value={value}>{children}</KeletContext.Provider>\n );\n};\n","import {\n cloneElement,\n createContext,\n isValidElement,\n type KeyboardEvent,\n useCallback,\n useContext,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport type {\n DownvoteButtonProps,\n FeedbackData,\n PopoverProps,\n SubmitButtonProps,\n TextareaProps,\n UpvoteButtonProps,\n VoteFeedbackRootProps,\n} from '@/types';\nimport { useDefaultFeedbackHandler } from '@/contexts/kelet';\n\n// Utility function to merge props with a child element (asChild pattern)\nconst mergeProps = (\n slotProps: Record<string, any>,\n childProps: Record<string, any>\n) => {\n const overrideProps = { ...childProps };\n\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args: any[]) => {\n childPropValue(...args);\n slotPropValue(...args);\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === 'style') {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === 'className') {\n overrideProps[propName] = [slotPropValue, childPropValue]\n .filter(Boolean)\n .join(' ');\n } else {\n overrideProps[propName] =\n childPropValue !== undefined ? childPropValue : slotPropValue;\n }\n }\n\n return { ...slotProps, ...overrideProps };\n};\n\n// Context for the VoteFeedback component\ninterface VoteFeedbackContextValue {\n onFeedback?: (data: FeedbackData) => void | Promise<void>;\n showPopover: boolean;\n setShowPopover: (show: boolean) => void;\n feedbackText: string;\n setFeedbackText: (text: string) => void;\n isSubmitting: boolean;\n setIsSubmitting: (submitting: boolean) => void;\n vote: 'upvote' | 'downvote' | null;\n handleUpvote: () => void;\n handleDownvote: () => void;\n handleTextareaChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleSubmit: () => void;\n handleKeyDown: (e: React.KeyboardEvent) => void;\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n popoverId: string;\n triggerId: string;\n tx_id: string;\n extra_metadata?: Record<string, any>;\n trigger_name?: string;\n}\n\nconst VoteFeedbackContext = createContext<VoteFeedbackContextValue | null>(\n null\n);\n\nconst useVoteFeedbackContext = () => {\n const context = useContext(VoteFeedbackContext);\n if (!context) {\n throw new Error(\n 'VoteFeedback components must be used within VoteFeedback.Root'\n );\n }\n return context;\n};\n\n// Root component that provides context\nconst VoteFeedbackRoot = ({\n children,\n onFeedback,\n defaultText = '',\n tx_id: txIdProp,\n extra_metadata,\n trigger_name,\n}: VoteFeedbackRootProps) => {\n // Resolve tx_id (support both string and function)\n const tx_id = typeof txIdProp === 'function' ? txIdProp() : txIdProp;\n const [showPopover, setShowPopover] = useState(false);\n const [feedbackText, setFeedbackText] = useState(defaultText);\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [vote, setVote] = useState<'upvote' | 'downvote' | null>(null);\n\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const popoverId = useId();\n const triggerId = useId();\n\n // Use default handler if no custom handler is provided\n const defaultHandler = useDefaultFeedbackHandler();\n const handler = onFeedback || defaultHandler;\n\n // Reset component state when tx_id changes\n useEffect(() => {\n setShowPopover(false);\n setFeedbackText(defaultText);\n setIsSubmitting(false);\n setVote(null);\n\n // Return focus to trigger button for accessibility\n setTimeout(() => triggerRef.current?.focus(), 0);\n }, [tx_id, defaultText]);\n\n const handleUpvote = useCallback(async () => {\n setVote('upvote');\n const data: FeedbackData = {\n tx_id,\n vote: 'upvote',\n ...(extra_metadata && { extra_metadata }),\n ...(trigger_name && { trigger_name }),\n };\n\n try {\n setIsSubmitting(true);\n await handler(data);\n } finally {\n setIsSubmitting(false);\n }\n }, [handler, tx_id, extra_metadata, trigger_name]);\n\n const handleDownvote = useCallback(async () => {\n setVote('downvote');\n // First: Send feedback immediately (without explanation)\n if (handler) {\n const data: FeedbackData = {\n tx_id,\n vote: 'downvote',\n ...(extra_metadata && { extra_metadata }),\n ...(trigger_name && { trigger_name }),\n };\n\n try {\n setIsSubmitting(true);\n await handler(data);\n } finally {\n setIsSubmitting(false);\n }\n }\n\n // Second: Show popover for detailed feedback\n setShowPopover(true);\n // Autofocus textarea when popover opens and announce to screen readers\n setTimeout(() => {\n textareaRef.current?.focus();\n // Announce to screen readers\n const announcement = document.createElement('div');\n announcement.setAttribute('aria-live', 'polite');\n announcement.setAttribute('aria-atomic', 'true');\n announcement.className = 'sr-only';\n announcement.textContent =\n 'Feedback dialog opened. You can provide additional details about your downvote.';\n document.body.appendChild(announcement);\n setTimeout(() => document.body.removeChild(announcement), 1000);\n }, 0);\n }, [handler, tx_id, extra_metadata, trigger_name]);\n\n const handleTextareaChange = useCallback(\n (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setFeedbackText(e.target.value);\n },\n []\n );\n\n const handleSubmit = useCallback(async () => {\n const hasText = feedbackText.trim().length > 0;\n\n if (hasText) {\n // Submit with explanation\n const data: FeedbackData = {\n tx_id,\n vote: 'downvote',\n explanation: feedbackText,\n ...(extra_metadata && { extra_metadata }),\n ...(trigger_name && { trigger_name }),\n };\n\n try {\n setIsSubmitting(true);\n await handler(data);\n } finally {\n setIsSubmitting(false);\n }\n }\n\n // Always close popover and reset, whether text was provided or not\n setShowPopover(false);\n setFeedbackText(defaultText);\n // Return focus to trigger button and announce to screen readers\n triggerRef.current?.focus();\n\n // Announce completion to screen readers\n if (hasText) {\n const announcement = document.createElement('div');\n announcement.setAttribute('aria-live', 'polite');\n announcement.className = 'sr-only';\n announcement.textContent = 'Feedback submitted successfully.';\n document.body.appendChild(announcement);\n setTimeout(() => document.body.removeChild(announcement), 1000);\n }\n }, [handler, feedbackText, defaultText, tx_id, extra_metadata, trigger_name]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n setShowPopover(false);\n setFeedbackText(defaultText);\n triggerRef.current?.focus();\n } else if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n e.preventDefault();\n handleSubmit().then(_ => {});\n } else if (e.key === 'Tab' && showPopover) {\n // Basic focus trapping - keep focus within popover\n const popoverElement = document.getElementById(popoverId);\n if (popoverElement) {\n const focusableElements = popoverElement.querySelectorAll(\n 'button, textarea, input, select, a[href], [tabindex]:not([tabindex=\"-1\"])'\n );\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[\n focusableElements.length - 1\n ] as HTMLElement;\n\n if (e.shiftKey && document.activeElement === firstElement) {\n e.preventDefault();\n lastElement?.focus();\n } else if (!e.shiftKey && document.activeElement === lastElement) {\n e.preventDefault();\n firstElement?.focus();\n }\n }\n }\n },\n [handleSubmit, showPopover, popoverId, defaultText]\n );\n\n const contextValue: VoteFeedbackContextValue = {\n onFeedback: handler,\n showPopover,\n setShowPopover,\n feedbackText,\n setFeedbackText,\n isSubmitting,\n setIsSubmitting,\n vote,\n handleUpvote,\n handleDownvote,\n handleTextareaChange,\n handleSubmit,\n handleKeyDown,\n textareaRef,\n triggerRef,\n popoverId,\n triggerId,\n tx_id,\n extra_metadata,\n trigger_name,\n };\n\n return (\n <VoteFeedbackContext.Provider value={contextValue}>\n {children}\n </VoteFeedbackContext.Provider>\n );\n};\n\n// Upvote button component\nconst UpvoteButton = ({\n asChild,\n children,\n onClick,\n ...props\n}: UpvoteButtonProps) => {\n const { handleUpvote, isSubmitting, vote } = useVoteFeedbackContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n handleUpvote();\n onClick?.(e);\n },\n [handleUpvote, onClick]\n );\n\n const slotProps = {\n ...props,\n onClick: handleClick,\n disabled: isSubmitting || props.disabled,\n 'aria-label': props['aria-label'] || 'Upvote feedback',\n type: 'button' as const,\n };\n\n const isSelected = vote === 'upvote';\n\n if (asChild) {\n const child =\n typeof children === 'function' ? children({ isSelected }) : children;\n if (isValidElement(child)) {\n return cloneElement(\n child,\n mergeProps(slotProps, child.props as Record<string, any>)\n );\n }\n }\n\n return (\n <button {...slotProps}>\n {typeof children === 'function' ? children({ isSelected }) : children}\n </button>\n );\n};\n\n// Downvote button component\nconst DownvoteButton = ({\n asChild,\n children,\n onClick,\n ...props\n}: DownvoteButtonProps) => {\n const {\n handleDownvote,\n showPopover,\n isSubmitting,\n popoverId,\n triggerId,\n triggerRef,\n vote,\n } = useVoteFeedbackContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n handleDownvote();\n onClick?.(e);\n },\n [handleDownvote, onClick]\n );\n\n const slotProps = {\n ...props,\n ref: triggerRef,\n onClick: handleClick,\n disabled: isSubmitting || props.disabled,\n 'aria-label': props['aria-label'] || 'Downvote feedback',\n 'aria-expanded': showPopover,\n 'aria-controls': popoverId,\n id: triggerId,\n type: 'button' as const,\n };\n\n const isSelected = vote === 'downvote';\n\n if (asChild) {\n const child =\n typeof children === 'function' ? children({ isSelected }) : children;\n if (isValidElement(child)) {\n return cloneElement(child, mergeProps(slotProps, child.props as any));\n } else if (child) {\n return child;\n }\n }\n\n return (\n <button {...slotProps}>\n {typeof children === 'function' ? children({ isSelected }) : children}\n </button>\n );\n};\n\n// Popover container component\nconst Popover = ({ asChild, children, ...props }: PopoverProps) => {\n const { showPopover, handleKeyDown, popoverId, triggerId } =\n useVoteFeedbackContext();\n\n if (!showPopover) {\n return null;\n }\n\n const slotProps = {\n ...props,\n role: 'dialog' as const,\n 'aria-labelledby': triggerId,\n 'aria-modal': true,\n 'aria-describedby': `${popoverId}-description`,\n id: popoverId,\n onKeyDown: handleKeyDown,\n tabIndex: -1,\n };\n\n if (asChild && isValidElement(children)) {\n return (\n <>\n {cloneElement(\n children,\n mergeProps(slotProps, children.props as Record<string, any>)\n )}\n <div id={`${popoverId}-description`} className=\"sr-only\">\n Provide additional feedback for your downvote\n </div>\n </>\n );\n }\n\n return (\n <div {...slotProps}>\n <div id={`${popoverId}-description`} className=\"sr-only\">\n Provide additional feedback for your downvote\n </div>\n {children}\n </div>\n );\n};\n\n// Textarea component\nconst Textarea = ({ asChild, value, onChange, ...props }: TextareaProps) => {\n const {\n feedbackText,\n handleTextareaChange,\n textareaRef,\n handleKeyDown,\n popoverId,\n } = useVoteFeedbackContext();\n\n const slotProps = {\n ...props,\n ref: textareaRef,\n value: value !== undefined ? value : feedbackText,\n onChange: onChange || handleTextareaChange,\n onKeyDown: handleKeyDown,\n placeholder: props.placeholder || 'What did we miss?',\n 'aria-label': props['aria-label'] || 'Additional feedback',\n 'aria-describedby': `${popoverId}-help`,\n rows: props.rows || 3,\n };\n\n if (asChild && isValidElement(props.children)) {\n return cloneElement(\n props.children,\n mergeProps(slotProps, props.children.props as Record<string, any>)\n );\n }\n\n return <textarea {...slotProps} />;\n};\n\n// Submit button component\nconst SubmitButton = ({\n asChild,\n children,\n onClick,\n ...props\n}: SubmitButtonProps) => {\n const { handleSubmit, isSubmitting, feedbackText } = useVoteFeedbackContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n handleSubmit();\n onClick?.(e);\n },\n [handleSubmit, onClick]\n );\n\n const hasText = feedbackText.trim().length > 0;\n const buttonText = hasText ? 'Submit feedback' : 'Close without feedback';\n\n const slotProps = {\n ...props,\n onClick: handleClick,\n disabled: isSubmitting || props.disabled,\n type: 'button' as const,\n 'aria-label': props['aria-label'] || buttonText,\n 'aria-describedby': hasText ? undefined : 'submit-help',\n };\n\n if (asChild && isValidElement(children)) {\n return (\n <>\n {cloneElement(\n children,\n mergeProps(slotProps, children.props as Record<string, any>)\n )}\n {!hasText && (\n <span id=\"submit-help\" className=\"sr-only\">\n This will close the dialog without submitting feedback\n </span>\n )}\n </>\n );\n }\n\n return (\n <button {...slotProps}>\n {children}\n {!hasText && (\n <span id=\"submit-help\" className=\"sr-only\">\n This will close the dialog without submitting feedback\n </span>\n )}\n </button>\n );\n};\n\n// Export compound component\nexport const VoteFeedback = {\n Root: VoteFeedbackRoot,\n UpvoteButton,\n DownvoteButton,\n Popover,\n Textarea,\n SubmitButton,\n};\n\n// Default export\n// noinspection JSUnusedGlobalSymbols\nexport { VoteFeedback as default };\n",";(function(root, factory) { // eslint-disable-line no-extra-semi\n var deepDiff = factory(root);\n // eslint-disable-next-line no-undef\n if (typeof define === 'function' && define.amd) {\n // AMD\n define('DeepDiff', function() { // eslint-disable-line no-undef\n return deepDiff;\n });\n } else if (typeof exports === 'object' || typeof navigator === 'object' && navigator.product.match(/ReactNative/i)) {\n // Node.js or ReactNative\n module.exports = deepDiff;\n } else {\n // Browser globals\n var _deepdiff = root.DeepDiff;\n deepDiff.noConflict = function() {\n if (root.DeepDiff === deepDiff) {\n root.DeepDiff = _deepdiff;\n }\n return deepDiff;\n };\n root.DeepDiff = deepDiff;\n }\n}(this, function(root) {\n var validKinds = ['N', 'E', 'A', 'D'];\n\n // nodejs compatible on server side and in the browser.\n function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n }\n\n function Diff(kind, path) {\n Object.defineProperty(this, 'kind', {\n value: kind,\n enumerable: true\n });\n if (path && path.length) {\n Object.defineProperty(this, 'path', {\n value: path,\n enumerable: true\n });\n }\n }\n\n function DiffEdit(path, origin, value) {\n DiffEdit.super_.call(this, 'E', path);\n Object.defineProperty(this, 'lhs', {\n value: origin,\n enumerable: true\n });\n Object.defineProperty(this, 'rhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffEdit, Diff);\n\n function DiffNew(path, value) {\n DiffNew.super_.call(this, 'N', path);\n Object.defineProperty(this, 'rhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffNew, Diff);\n\n function DiffDeleted(path, value) {\n DiffDeleted.super_.call(this, 'D', path);\n Object.defineProperty(this, 'lhs', {\n value: value,\n enumerable: true\n });\n }\n inherits(DiffDeleted, Diff);\n\n function DiffArray(path, index, item) {\n DiffArray.super_.call(this, 'A', path);\n Object.defineProperty(this, 'index', {\n value: index,\n enumerable: true\n });\n Object.defineProperty(this, 'item', {\n value: item,\n enumerable: true\n });\n }\n inherits(DiffArray, Diff);\n\n function arrayRemove(arr, from, to) {\n var rest = arr.slice((to || from) + 1 || arr.length);\n arr.length = from < 0 ? arr.length + from : from;\n arr.push.apply(arr, rest);\n return arr;\n }\n\n function realTypeOf(subject) {\n var type = typeof subject;\n if (type !== 'object') {\n return type;\n }\n\n if (subject === Math) {\n return 'math';\n } else if (subject === null) {\n return 'null';\n } else if (Array.isArray(subject)) {\n return 'array';\n } else if (Object.prototype.toString.call(subject) === '[object Date]') {\n return 'date';\n } else if (typeof subject.toString === 'function' && /^\\/.*\\//.test(subject.toString())) {\n return 'regexp';\n }\n return 'object';\n }\n\n // http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\n function hashThisString(string) {\n var hash = 0;\n if (string.length === 0) { return hash; }\n for (var i = 0; i < string.length; i++) {\n var char = string.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n }\n\n // Gets a hash of the given object in an array order-independent fashion\n // also object key order independent (easier since they can be alphabetized)\n function getOrderIndependentHash(object) {\n var accum = 0;\n var type = realTypeOf(object);\n\n if (type === 'array') {\n object.forEach(function (item) {\n // Addition is commutative so this is order indep\n accum += getOrderIndependentHash(item);\n });\n\n var arrayString = '[type: array, hash: ' + accum + ']';\n return accum + hashThisString(arrayString);\n }\n\n if (type === 'object') {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n var keyValueString = '[ type: object, key: ' + key + ', value hash: ' + getOrderIndependentHash(object[key]) + ']';\n accum += hashThisString(keyValueString);\n }\n }\n\n return accum;\n }\n\n // Non object, non array...should be good?\n var stringToHash = '[ type: ' + type + ' ; value: ' + object + ']';\n return accum + hashThisString(stringToHash);\n }\n\n function deepDiff(lhs, rhs, changes, prefilter, path, key, stack, orderIndependent) {\n changes = changes || [];\n path = path || [];\n stack = stack || [];\n var currentPath = path.slice(0);\n if (typeof key !== 'undefined' && key !== null) {\n if (prefilter) {\n if (typeof (prefilter) === 'function' && prefilter(currentPath, key)) {\n return;\n } else if (typeof (prefilter) === 'object') {\n if (prefilter.prefilter && prefilter.prefilter(currentPath, key)) {\n return;\n }\n if (prefilter.normalize) {\n var alt = prefilter.normalize(currentPath, key, lhs, rhs);\n if (alt) {\n lhs = alt[0];\n rhs = alt[1];\n }\n }\n }\n }\n currentPath.push(key);\n }\n\n // Use string comparison for regexes\n if (realTypeOf(lhs) === 'regexp' && realTypeOf(rhs) === 'regexp') {\n lhs = lhs.toString();\n rhs = rhs.toString();\n }\n\n var ltype = typeof lhs;\n var rtype = typeof rhs;\n var i, j, k, other;\n\n var ldefined = ltype !== 'undefined' ||\n (stack && (stack.length > 0) && stack[stack.length - 1].lhs &&\n Object.getOwnPropertyDescriptor(stack[stack.length - 1].lhs, key));\n var rdefined = rtype !== 'undefined' ||\n (stack && (stack.length > 0) && stack[stack.length - 1].rhs &&\n Object.getOwnPropertyDescriptor(stack[stack.length - 1].rhs, key));\n\n if (!ldefined && rdefined) {\n changes.push(new DiffNew(currentPath, rhs));\n } else if (!rdefined && ldefined) {\n changes.push(new DiffDeleted(currentPath, lhs));\n } else if (realTypeOf(lhs) !== realTypeOf(rhs)) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n } else if (realTypeOf(lhs) === 'date' && (lhs - rhs) !== 0) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n } else if (ltype === 'object' && lhs !== null && rhs !== null) {\n for (i = stack.length - 1; i > -1; --i) {\n if (stack[i].lhs === lhs) {\n other = true;\n break;\n }\n }\n if (!other) {\n stack.push({ lhs: lhs, rhs: rhs });\n if (Array.isArray(lhs)) {\n // If order doesn't matter, we need to sort our arrays\n if (orderIndependent) {\n lhs.sort(function (a, b) {\n return getOrderIndependentHash(a) - getOrderIndependentHash(b);\n });\n\n rhs.sort(function (a, b) {\n return getOrderIndependentHash(a) - getOrderIndependentHash(b);\n });\n }\n i = rhs.length - 1;\n j = lhs.length - 1;\n while (i > j) {\n changes.push(new DiffArray(currentPath, i, new DiffNew(undefined, rhs[i--])));\n }\n while (j > i) {\n changes.push(new DiffArray(currentPath, j, new DiffDeleted(undefined, lhs[j--])));\n }\n for (; i >= 0; --i) {\n deepDiff(lhs[i], rhs[i], changes, prefilter, currentPath, i, stack, orderIndependent);\n }\n } else {\n var akeys = Object.keys(lhs);\n var pkeys = Object.keys(rhs);\n for (i = 0; i < akeys.length; ++i) {\n k = akeys[i];\n other = pkeys.indexOf(k);\n if (other >= 0) {\n deepDiff(lhs[k], rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);\n pkeys[other] = null;\n } else {\n deepDiff(lhs[k], undefined, changes, prefilter, currentPath, k, stack, orderIndependent);\n }\n }\n for (i = 0; i < pkeys.length; ++i) {\n k = pkeys[i];\n if (k) {\n deepDiff(undefined, rhs[k], changes, prefilter, currentPath, k, stack, orderIndependent);\n }\n }\n }\n stack.length = stack.length - 1;\n } else if (lhs !== rhs) {\n // lhs is contains a cycle at this element and it differs from rhs\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n }\n } else if (lhs !== rhs) {\n if (!(ltype === 'number' && isNaN(lhs) && isNaN(rhs))) {\n changes.push(new DiffEdit(currentPath, lhs, rhs));\n }\n }\n }\n\n function observableDiff(lhs, rhs, observer, prefilter, orderIndependent) {\n var changes = [];\n deepDiff(lhs, rhs, changes, prefilter, null, null, null, orderIndependent);\n if (observer) {\n for (var i = 0; i < changes.length; ++i) {\n observer(changes[i]);\n }\n }\n return changes;\n }\n\n function orderIndependentDeepDiff(lhs, rhs, changes, prefilter, path, key, stack) {\n return deepDiff(lhs, rhs, changes, prefilter, path, key, stack, true);\n }\n\n function accumulateDiff(lhs, rhs, prefilter, accum) {\n var observer = (accum) ?\n function (difference) {\n if (difference) {\n accum.push(difference);\n }\n } : undefined;\n var changes = observableDiff(lhs, rhs, observer, prefilter);\n return (accum) ? accum : (changes.length) ? changes : undefined;\n }\n\n function accumulateOrderIndependentDiff(lhs, rhs, prefilter, accum) {\n var observer = (accum) ?\n function (difference) {\n if (difference) {\n accum.push(difference);\n }\n } : undefined;\n var changes = observableDiff(lhs, rhs, observer, prefilter, true);\n return (accum) ? accum : (changes.length) ? changes : undefined;\n }\n\n function applyArrayChange(arr, index, change) {\n if (change.path && change.path.length) {\n var it = arr[index],\n i, u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n applyArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n delete it[change.path[i]];\n break;\n case 'E':\n case 'N':\n it[change.path[i]] = change.rhs;\n break;\n }\n } else {\n switch (change.kind) {\n case 'A':\n applyArrayChange(arr[index], change.index, change.item);\n break;\n case 'D':\n arr = arrayRemove(arr, index);\n break;\n case 'E':\n case 'N':\n arr[index] = change.rhs;\n break;\n }\n }\n return arr;\n }\n\n function applyChange(target, source, change) {\n if (typeof change === 'undefined' && source && ~validKinds.indexOf(source.kind)) {\n change = source;\n }\n if (target && change && change.kind) {\n var it = target,\n i = -1,\n last = change.path ? change.path.length - 1 : 0;\n while (++i < last) {\n if (typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = (typeof change.path[i + 1] !== 'undefined' && typeof change.path[i + 1] === 'number') ? [] : {};\n }\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n if (change.path && typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = [];\n }\n applyArrayChange(change.path ? it[change.path[i]] : it, change.index, change.item);\n break;\n case 'D':\n delete it[change.path[i]];\n break;\n case 'E':\n case 'N':\n it[change.path[i]] = change.rhs;\n break;\n }\n }\n }\n\n function revertArrayChange(arr, index, change) {\n if (change.path && change.path.length) {\n // the structure of the object at the index has changed...\n var it = arr[index],\n i, u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n revertArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n it[change.path[i]] = change.lhs;\n break;\n case 'E':\n it[change.path[i]] = change.lhs;\n break;\n case 'N':\n delete it[change.path[i]];\n break;\n }\n } else {\n // the array item is different...\n switch (change.kind) {\n case 'A':\n revertArrayChange(arr[index], change.index, change.item);\n break;\n case 'D':\n arr[index] = change.lhs;\n break;\n case 'E':\n arr[index] = change.lhs;\n break;\n case 'N':\n arr = arrayRemove(arr, index);\n break;\n }\n }\n return arr;\n }\n\n function revertChange(target, source, change) {\n if (target && source && change && change.kind) {\n var it = target,\n i, u;\n u = change.path.length - 1;\n for (i = 0; i < u; i++) {\n if (typeof it[change.path[i]] === 'undefined') {\n it[change.path[i]] = {};\n }\n it = it[change.path[i]];\n }\n switch (change.kind) {\n case 'A':\n // Array was modified...\n // it will be an array...\n revertArrayChange(it[change.path[i]], change.index, change.item);\n break;\n case 'D':\n // Item was deleted...\n it[change.path[i]] = change.lhs;\n break;\n case 'E':\n // Item was edited...\n it[change.path[i]] = change.lhs;\n break;\n case 'N':\n // Item is new...\n delete it[change.path[i]];\n break;\n }\n }\n }\n\n function applyDiff(target, source, filter) {\n if (target && source) {\n var onChange = function (change) {\n if (!filter || filter(target, source, change)) {\n applyChange(target, source, change);\n }\n };\n observableDiff(target, source, onChange);\n }\n }\n\n Object.defineProperties(accumulateDiff, {\n\n diff: {\n value: accumulateDiff,\n enumerable: true\n },\n orderIndependentDiff: {\n value: accumulateOrderIndependentDiff,\n enumerable: true\n },\n observableDiff: {\n value: observableDiff,\n enumerable: true\n },\n orderIndependentObservableDiff: {\n value: orderIndependentDeepDiff,\n enumerable: true\n },\n orderIndepHash: {\n value: getOrderIndependentHash,\n enumerable: true\n },\n applyDiff: {\n value: applyDiff,\n enumerable: true\n },\n applyChange: {\n value: applyChange,\n enumerable: true\n },\n revertChange: {\n value: revertChange,\n enumerable: true\n },\n isConflict: {\n value: function () {\n return typeof $conflict !== 'undefined';\n },\n enumerable: true\n }\n });\n\n // hackish...\n accumulateDiff.DeepDiff = accumulateDiff;\n // ...but works with:\n // import DeepDiff from 'deep-diff'\n // import { DeepDiff } from 'deep-diff'\n // const DeepDiff = require('deep-diff');\n // const { DeepDiff } = require('deep-diff');\n\n if (root) {\n root.DeepDiff = accumulateDiff;\n }\n\n return accumulateDiff;\n}));\n","const peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\nconst myers_x = (b, a) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const vlen = Math.min(32, m - start) + start;\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n let score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < vlen; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\nconst distance = (a, b) => {\n if (a.length < b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (b.length === 0) {\n return a.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\nexport { closest, distance };\n","(function() {\n 'use strict';\n \n var collator;\n try {\n collator = (typeof Intl !== \"undefined\" && typeof Intl.Collator !== \"undefined\") ? Intl.Collator(\"generic\", { sensitivity: \"base\" }) : null;\n } catch (err){\n console.log(\"Collator could not be initialized and wouldn't be used\");\n }\n\n var levenshtein = require('fastest-levenshtein');\n\n // arrays to re-use\n var prevRow = [],\n str2Char = [];\n \n /**\n * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.\n */\n var Levenshtein = {\n /**\n * Calculate levenshtein distance of the two strings.\n *\n * @param str1 String the first string.\n * @param str2 String the second string.\n * @param [options] Additional options.\n * @param [options.useCollator] Use `Intl.Collator` for locale-sensitive string comparison.\n * @return Integer the levenshtein distance (0 and above).\n */\n get: function(str1, str2, options) {\n var useCollator = (options && collator && options.useCollator);\n \n if (useCollator) {\n var str1Len = str1.length,\n str2Len = str2.length;\n \n // base cases\n if (str1Len === 0) return str2Len;\n if (str2Len === 0) return str1Len;\n\n // two rows\n var curCol, nextCol, i, j, tmp;\n\n // initialise previous row\n for (i=0; i<str2Len; ++i) {\n prevRow[i] = i;\n str2Char[i] = str2.charCodeAt(i);\n }\n prevRow[str2Len] = str2Len;\n\n var strCmp;\n // calculate current row distance from previous row using collator\n for (i = 0; i < str1Len; ++i) {\n nextCol = i + 1;\n\n for (j = 0; j < str2Len; ++j) {\n curCol = nextCol;\n\n // substution\n strCmp = 0 === collator.compare(str1.charAt(i), String.fromCharCode(str2Char[j]));\n\n nextCol = prevRow[j] + (strCmp ? 0 : 1);\n\n // insertion\n tmp = curCol + 1;\n if (nextCol > tmp) {\n nextCol = tmp;\n }\n // deletion\n tmp = prevRow[j + 1] + 1;\n if (nextCol > tmp) {\n nextCol = tmp;\n }\n\n // copy current col value into previous (in preparation for next iteration)\n prevRow[j] = curCol;\n }\n\n // copy last col value into previous (in preparation for next iteration)\n prevRow[j] = nextCol;\n }\n return nextCol;\n }\n return levenshtein.distance(str1, str2);\n }\n\n };\n\n // amd\n if (typeof define !== \"undefined\" && define !== null && define.amd) {\n define(function() {\n return Levenshtein;\n });\n }\n // commonjs\n else if (typeof module !== \"undefined\" && module !== null && typeof exports !== \"undefined\" && module.exports === exports) {\n module.exports = Levenshtein;\n }\n // web worker\n else if (typeof self !== \"undefined\" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {\n self.Levenshtein = Levenshtein;\n }\n // browser main thread\n else if (typeof window !== \"undefined\" && window !== null) {\n window.Levenshtein = Levenshtein;\n }\n}());\n","export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n","import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n","import { diffLines } from '../diff/line.js';\nexport function structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n let optionsObj;\n if (!options) {\n optionsObj = {};\n }\n else if (typeof options === 'function') {\n optionsObj = { callback: options };\n }\n else {\n optionsObj = options;\n }\n if (typeof optionsObj.context === 'undefined') {\n optionsObj.context = 4;\n }\n // We copy this into its own variable to placate TypeScript, which thinks\n // optionsObj.context might be undefined in the callbacks below.\n const context = optionsObj.context;\n // @ts-expect-error (runtime check for something that is correctly a static type error)\n if (optionsObj.newlineIsToken) {\n throw new Error('newlineIsToken may not be used with patch-generation functions, only with diffing functions');\n }\n if (!optionsObj.callback) {\n return diffLinesResultToPatch(diffLines(oldStr, newStr, optionsObj));\n }\n else {\n const { callback } = optionsObj;\n diffLines(oldStr, newStr, Object.assign(Object.assign({}, optionsObj), { callback: (diff) => {\n const patch = diffLinesResultToPatch(diff);\n // TypeScript is unhappy without the cast because it does not understand that `patch` may\n // be undefined here only if `callback` is StructuredPatchCallbackAbortable:\n callback(patch);\n } }));\n }\n function diffLinesResultToPatch(diff) {\n // STEP 1: Build up the patch with no \"\\" lines and with the arrays\n // of lines containing trailing newline characters. We'll tidy up later...\n if (!diff) {\n return;\n }\n diff.push({ value: '', lines: [] }); // Append an empty value to make cleanup easier\n function contextLines(lines) {\n return lines.map(function (entry) { return ' ' + entry; });\n }\n const hunks = [];\n let oldRangeStart = 0, newRangeStart = 0, curRange = [], oldLine = 1, newLine = 1;\n for (let i = 0; i < diff.length; i++) {\n const current = diff[i], lines = current.lines || splitLines(current.value);\n current.lines = lines;\n if (current.added || current.removed) {\n // If we have previous context, start with that\n if (!oldRangeStart) {\n const prev = diff[i - 1];\n oldRangeStart = oldLine;\n newRangeStart = newLine;\n if (prev) {\n curRange = context > 0 ? contextLines(prev.lines.slice(-context)) : [];\n oldRangeStart -= curRange.length;\n newRangeStart -= curRange.length;\n }\n }\n // Output our changes\n for (const line of lines) {\n curRange.push((current.added ? '+' : '-') + line);\n }\n // Track the updated file position\n if (current.added) {\n newLine += lines.length;\n }\n else {\n oldLine += lines.length;\n }\n }\n else {\n // Identical context lines. Track line changes\n if (oldRangeStart) {\n // Close out any changes that have been output (or join overlapping)\n if (lines.length <= context * 2 && i < diff.length - 2) {\n // Overlapping\n for (const line of contextLines(lines)) {\n curRange.push(line);\n }\n }\n else {\n // end the range and output\n const contextSize = Math.min(lines.length, context);\n for (const line of contextLines(lines.slice(0, contextSize))) {\n curRange.push(line);\n }\n const hunk = {\n oldStart: oldRangeStart,\n oldLines: (oldLine - oldRangeStart + contextSize),\n newStart: newRangeStart,\n newLines: (newLine - newRangeStart + contextSize),\n lines: curRange\n };\n hunks.push(hunk);\n oldRangeStart = 0;\n newRangeStart = 0;\n curRange = [];\n }\n }\n oldLine += lines.length;\n newLine += lines.length;\n }\n }\n // Step 2: eliminate the trailing `\\n` from each line of each hunk, and, where needed, add\n // \"\\".\n for (const hunk of hunks) {\n for (let i = 0; i < hunk.lines.length; i++) {\n if (hunk.lines[i].endsWith('\\n')) {\n hunk.lines[i] = hunk.lines[i].slice(0, -1);\n }\n else {\n hunk.lines.splice(i + 1, 0, '\\\');\n i++; // Skip the line we just added, then continue iterating\n }\n }\n }\n return {\n oldFileName: oldFileName, newFileName: newFileName,\n oldHeader: oldHeader, newHeader: newHeader,\n hunks: hunks\n };\n }\n}\n/**\n * creates a unified diff patch.\n * @param patch either a single structured patch object (as returned by `structuredPatch`) or an array of them (as returned by `parsePatch`)\n */\nexport function formatPatch(patch) {\n if (Array.isArray(patch)) {\n return patch.map(formatPatch).join('\\n');\n }\n const ret = [];\n if (patch.oldFileName == patch.newFileName) {\n ret.push('Index: ' + patch.oldFileName);\n }\n ret.push('===================================================================');\n ret.push('--- ' + patch.oldFileName + (typeof patch.oldHeader === 'undefined' ? '' : '\\t' + patch.oldHeader));\n ret.push('+++ ' + patch.newFileName + (typeof patch.newHeader === 'undefined' ? '' : '\\t' + patch.newHeader));\n for (let i = 0; i < patch.hunks.length; i++) {\n const hunk = patch.hunks[i];\n // Unified Diff Format quirk: If the chunk size is 0,\n // the first number is one lower than one would expect.\n // https://www.artima.com/weblogs/viewpost.jsp?thread=164293\n if (hunk.oldLines === 0) {\n hunk.oldStart -= 1;\n }\n if (hunk.newLines === 0) {\n hunk.newStart -= 1;\n }\n ret.push('@@ -' + hunk.oldStart + ',' + hunk.oldLines\n + ' +' + hunk.newStart + ',' + hunk.newLines\n + ' @@');\n for (const line of hunk.lines) {\n ret.push(line);\n }\n }\n return ret.join('\\n') + '\\n';\n}\nexport function createTwoFilesPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options) {\n if (typeof options === 'function') {\n options = { callback: options };\n }\n if (!(options === null || options === void 0 ? void 0 : options.callback)) {\n const patchObj = structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, options);\n if (!patchObj) {\n return;\n }\n return formatPatch(patchObj);\n }\n else {\n const { callback } = options;\n structuredPatch(oldFileName, newFileName, oldStr, newStr, oldHeader, newHeader, Object.assign(Object.assign({}, options), { callback: patchObj => {\n if (!patchObj) {\n callback(undefined);\n }\n else {\n callback(formatPatch(patchObj));\n }\n } }));\n }\n}\nexport function createPatch(fileName, oldStr, newStr, oldHeader, newHeader, options) {\n return createTwoFilesPatch(fileName, fileName, oldStr, newStr, oldHeader, newHeader, options);\n}\n/**\n * Split `text` into an array of lines, including the trailing newline character (where present)\n */\nfunction splitLines(text) {\n const hasTrailingNl = text.endsWith('\\n');\n const result = text.split('\\n').map(line => line + '\\n');\n if (hasTrailingNl) {\n result.pop();\n }\n else {\n result.push(result.pop().slice(0, -1));\n }\n return result;\n}\n","import { diff } from 'deep-diff';\nimport levenshtein from 'fast-levenshtein';\nimport { createTwoFilesPatch } from 'diff';\n\nexport type DiffType = 'git' | 'object' | 'json';\n\n/**\n * Format the diff between two values based on the specified format\n */\nexport function formatDiff<T>(\n oldValue: T,\n newValue: T,\n diffType: DiffType = 'git',\n context = 3\n): string {\n switch (diffType) {\n case 'git':\n return formatGitDiff(oldValue, newValue, context);\n case 'object':\n return formatObjectDiff(oldValue, newValue);\n case 'json':\n return formatJsonDiff(oldValue, newValue);\n default:\n return formatGitDiff(oldValue, newValue, context);\n }\n}\n\n/**\n * Format the diff between two values as a git-like diff with unified format\n * @param oldValue The old value\n * @param newValue The new value\n * @param context The number of lines of unchanged context to include (default: 3)\n * @returns A string containing the git-like diff in unified format\n */\nfunction formatGitDiff<T>(oldValue: T, newValue: T, context = 3): string {\n // Pretty-print both objects as JSON\n const oldStr = stringify(oldValue);\n const newStr = stringify(newValue);\n\n // Generate unified patch with empty filenames\n const patch = createTwoFilesPatch(\n /* oldFilename */ '',\n /* newFilename */ '',\n oldStr,\n newStr,\n /* oldHeader */ '',\n /* newHeader */ '',\n { context }\n );\n\n // Strip out the first two lines (\"--- \" and \"+++ \")\n return patch.split('\\n').slice(2).join('\\n');\n}\n\n/**\n * Format the diff between two values as an object diff\n */\nfunction formatObjectDiff<T>(oldValue: T, newValue: T): string {\n const differences = diff(oldValue, newValue) || [];\n return JSON.stringify(differences, null, 2);\n}\n\n/**\n * Format the diff between two values as a JSON diff\n */\nfunction formatJsonDiff<T>(oldValue: T, newValue: T): string {\n return JSON.stringify(\n {\n before: oldValue,\n after: newValue,\n },\n null,\n 2\n );\n}\n\n/**\n * Calculate the difference percentage between two values\n */\nexport function calculateDiffPercentage<T>(oldValue: T, newValue: T): number {\n if (typeof oldValue === 'string' && typeof newValue === 'string') {\n return calculateStringDiffPercentage(oldValue, newValue);\n } else if (typeof oldValue === 'number' && typeof newValue === 'number') {\n return calculateNumberDiffPercentage(oldValue, newValue);\n } else {\n return calculateObjectDiffPercentage(oldValue, newValue);\n }\n}\n\n/**\n * Calculate the difference percentage between two strings using Levenshtein distance\n */\nfunction calculateStringDiffPercentage(oldStr: string, newStr: string): number {\n if (oldStr === newStr) return 0;\n if (oldStr.length === 0) return 1;\n if (newStr.length === 0) return 1;\n\n const distance = levenshtein.get(oldStr, newStr);\n const maxLength = Math.max(oldStr.length, newStr.length);\n\n return distance / maxLength;\n}\n\n/**\n * Calculate the difference percentage between two numbers\n */\nfunction calculateNumberDiffPercentage(oldNum: number, newNum: number): number {\n if (oldNum === newNum) return 0;\n if (oldNum === 0) return 1; // To avoid division by zero\n\n const change = Math.abs(newNum - oldNum);\n const base = Math.max(Math.abs(oldNum), Math.abs(newNum));\n\n // Normalize to ensure we don't exceed 1.0\n return Math.min(change / base, 1);\n}\n\n/**\n * Calculate the difference percentage between two objects\n */\nfunction calculateObjectDiffPercentage<T>(oldObj: T, newObj: T): number {\n // If they're the same reference or deeply equal, no difference\n if (oldObj === newObj) return 0;\n\n // Get differences using deep-diff\n const differences = diff(oldObj, newObj) || [];\n if (differences.length === 0) return 0;\n\n // Count total properties and changed properties for a more accurate percentage\n const oldProps = countObjectProperties(oldObj);\n const newProps = countObjectProperties(newObj);\n const totalProps = Math.max(oldProps, newProps);\n\n if (totalProps === 0) return 0;\n\n // For each difference, calculate its weight\n let changeWeight = 0;\n for (const difference of differences) {\n switch (difference.kind) {\n case 'N': // New property\n changeWeight += 1;\n break;\n case 'D': // Deleted property\n changeWeight += 1;\n break;\n case 'E': // Edit property\n if (\n typeof difference.lhs === 'string' &&\n typeof difference.rhs === 'string'\n ) {\n // For string changes, use Levenshtein distance ratio\n const stringChangeRatio = calculateStringDiffPercentage(\n difference.lhs,\n difference.rhs\n );\n changeWeight += stringChangeRatio;\n } else if (\n typeof difference.lhs === 'number' &&\n typeof difference.rhs === 'number'\n ) {\n // For number changes, use number diff ratio\n const numberChangeRatio = calculateNumberDiffPercentage(\n difference.lhs,\n difference.rhs\n );\n changeWeight += numberChangeRatio;\n } else {\n // For other types, consider it a full change\n changeWeight += 1;\n }\n break;\n case 'A': // Array change\n changeWeight += 0.5; // Array changes are weighted less than full property changes\n break;\n }\n }\n\n // Return the ratio of changed properties to total properties\n return Math.min(changeWeight / totalProps, 1);\n}\n\n/**\n * Count the number of properties in an object recursively\n */\nfunction countObjectProperties(obj: any): number {\n if (obj === null || obj === undefined) return 0;\n if (typeof obj !== 'object') return 1;\n if (Array.isArray(obj)) return obj.length;\n\n let count = 0;\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n count += 1;\n }\n }\n return count;\n}\n\n/**\n * Safely convert a value to a string representation\n */\nfunction stringify(value: any): string {\n try {\n return JSON.stringify(\n value,\n (_key, val) => {\n // Handle circular references and special values\n if (typeof val === 'function') return '[Function]';\n if (val === undefined) return '[undefined]';\n if (val === Infinity) return '[Infinity]';\n if (Number.isNaN(val)) return '[NaN]';\n return val;\n },\n 2\n );\n } catch (_) {\n return String(value);\n }\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport { useDefaultFeedbackHandler } from '@/contexts/kelet';\nimport { calculateDiffPercentage, formatDiff } from './diff-utils';\nimport type { FeedbackStateOptions } from './types';\n\n/**\n * Internal utility hook that handles state change tracking and feedback sending.\n * This contains all the shared logic between useFeedbackState and useFeedbackReducer.\n *\n * @param currentState The current state to track changes for\n * @param tx_id A unique transaction ID for the state (string or function that derives from state)\n * @param options Optional configuration options\n * @returns Object with notifyChange function to notify of impending state changes\n */\nexport function useStateChangeTracking<T>(\n currentState: T,\n tx_id: string | ((state: T) => string),\n options?: FeedbackStateOptions<T>\n) {\n // Get the feedback handler (custom or default from Kelet context)\n const defaultFeedbackHandler = useDefaultFeedbackHandler();\n const feedbackHandler = options?.onFeedback || defaultFeedbackHandler;\n\n // Determine defaults from options\n const debounceMs = options?.debounceMs ?? 1500;\n const diffType = options?.diffType ?? 'git';\n const compareWith = options?.compareWith;\n const defaultTriggerName =\n options?.default_trigger_name ?? 'auto_state_change';\n const ignoreInitialNullish = options?.ignoreInitialNullish ?? true;\n\n // Keep track of previous state for comparison\n const prevStateRef = useRef<T>(currentState);\n\n // Track the state when changes started (for debouncing)\n const changeStartStateRef = useRef<T>(currentState);\n\n // Track if this is the first render\n const isFirstRenderRef = useRef<boolean>(true);\n\n // Track the initial state to detect nullish→value transitions\n const initialStateRef = useRef<T>(currentState);\n\n // Track if we've had any non-nullish state yet\n const hasHadNonNullishStateRef = useRef<boolean>(\n currentState != null // != null catches both null and undefined\n );\n\n // Store timeout ID for debounce cleanup\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Store the trigger name for the current change sequence\n const currentTriggerNameRef = useRef<string | undefined>(undefined);\n\n // Helper function to send feedback\n const sendFeedback = useCallback(\n (startState: T, endState: T, triggerName: string) => {\n const diffPercentage = calculateDiffPercentage(startState, endState);\n const diffString = formatDiff(startState, endState, diffType);\n\n let vote: 'upvote' | 'downvote';\n if (options?.vote) {\n if (typeof options.vote === 'function') {\n vote = options.vote(startState, endState, diffPercentage);\n } else {\n vote = options.vote;\n }\n } else {\n vote = diffPercentage > 0.5 ? 'downvote' : 'upvote';\n }\n\n const idString = typeof tx_id === 'function' ? tx_id(endState) : tx_id;\n\n feedbackHandler({\n tx_id: idString,\n vote,\n explanation: `State change with diff percentage: ${(diffPercentage * 100).toFixed(1)}%`,\n correction: diffString,\n source: 'IMPLICIT',\n extra_metadata: options?.metadata,\n trigger_name: triggerName,\n });\n },\n [options, tx_id, diffType, feedbackHandler]\n );\n\n // Function to notify of impending state changes with trigger name support\n const notifyChange = useCallback(\n (trigger_name?: string) => {\n const newTriggerName = trigger_name || defaultTriggerName;\n\n // If trigger name changed and we have a running timer, immediately flush the previous sequence\n if (\n timeoutRef.current &&\n currentTriggerNameRef.current &&\n currentTriggerNameRef.current !== newTriggerName\n ) {\n // Clear the existing timeout\n clearTimeout(timeoutRef.current);\n\n // Immediately send feedback for the previous trigger sequence\n const startState = changeStartStateRef.current;\n const currentStateBeforeChange = currentState; // Current state before this new change\n\n sendFeedback(\n startState,\n currentStateBeforeChange,\n currentTriggerNameRef.current\n );\n\n // Reset for the new trigger sequence\n timeoutRef.current = null;\n }\n\n // Store the new trigger name for this change\n currentTriggerNameRef.current = newTriggerName;\n },\n [currentState, defaultTriggerName, sendFeedback]\n );\n\n // Effect to compare state changes and send feedback\n useEffect(() => {\n // Skip the initial render\n if (isFirstRenderRef.current) {\n isFirstRenderRef.current = false;\n prevStateRef.current = currentState;\n changeStartStateRef.current = currentState;\n return;\n }\n\n // Check if state actually changed\n const prevState = prevStateRef.current;\n const isEqual = compareWith\n ? compareWith(prevState, currentState)\n : JSON.stringify(prevState) === JSON.stringify(currentState);\n\n if (!isEqual) {\n // Check if we should ignore this change due to initial nullish transition\n const shouldIgnoreChange =\n ignoreInitialNullish &&\n initialStateRef.current == null && // Initial state was nullish\n !hasHadNonNullishStateRef.current && // We haven't had non-nullish state before\n currentState != null; // Current state is non-nullish\n\n // Update hasHadNonNullishStateRef if current state is non-nullish\n if (currentState != null) {\n hasHadNonNullishStateRef.current = true;\n }\n\n if (shouldIgnoreChange) {\n // Update refs but don't send feedback for this transition\n prevStateRef.current = currentState;\n changeStartStateRef.current = currentState;\n return;\n }\n\n // If no timer is running, this is the start of a change sequence\n if (!timeoutRef.current) {\n changeStartStateRef.current = prevState;\n }\n\n // Clear previous timeout if it exists (extends the debounce timer)\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n // Update the current state reference immediately\n prevStateRef.current = currentState;\n\n // Set new timeout to debounce feedback\n timeoutRef.current = setTimeout(() => {\n // Compare from when changes started to final state\n const startState = changeStartStateRef.current;\n const finalState = currentState;\n\n // Send feedback using the helper\n sendFeedback(\n startState,\n finalState,\n currentTriggerNameRef.current || defaultTriggerName\n );\n\n // Reset for next change sequence\n changeStartStateRef.current = finalState;\n timeoutRef.current = null;\n }, debounceMs);\n }\n\n // Cleanup function\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, [\n currentState,\n tx_id,\n options,\n feedbackHandler,\n diffType,\n debounceMs,\n compareWith,\n defaultTriggerName,\n ignoreInitialNullish,\n sendFeedback,\n ]);\n\n return {\n notifyChange,\n };\n}\n","import { useCallback, useState } from 'react';\nimport { useStateChangeTracking } from './use-state-change-tracking';\nimport type { FeedbackStateReturn, FeedbackStateOptions } from './types';\n\n/**\n * A drop-in replacement for React's useState that tracks changes to state over time\n * and automatically sends these changes as implicit feedback through the Kelet system.\n *\n * @param initialState The initial state value\n * @param tx_id A unique transaction ID for the state (string or function that derives from state)\n * @param options Optional configuration options\n * @returns A tuple of [state, setState] just like React's useState\n *\n * @example\n * // Basic usage with required tx_id\n * const [count, setCount] = useFeedbackState(0, 'counter');\n *\n * // Using with static tx_id and options\n * const [preferences, setPreferences] = useFeedbackState(\n * {theme: 'light', notifications: true},\n * 'user-preferences',\n * {\n * debounceMs: 1000,\n * diffType: 'object'\n * }\n * );\n *\n * // With dynamic tx_id derived from state\n * const [items, setItems] = useFeedbackState(\n * [1, 2, 3],\n * (items) => `items-${items.length}`\n * );\n */\nexport function useFeedbackState<T>(\n initialState: T,\n tx_id: string | ((state: T) => string),\n options?: FeedbackStateOptions<T>\n): FeedbackStateReturn<T> {\n // Use React's native useState for state management\n const [state, setStateInternal] = useState<T>(initialState);\n\n // Use the shared state change tracking logic\n const { notifyChange } = useStateChangeTracking(state, tx_id, options);\n\n // Wrap setState to track changes with trigger_name support\n const setState: FeedbackStateReturn<T>[1] = useCallback(\n (value, trigger_name) => {\n // Notify about the impending state change with trigger name\n notifyChange(trigger_name);\n\n // Update state using React's native setState\n setStateInternal(prevState => {\n // Handle functional updates\n const newState =\n typeof value === 'function'\n ? (value as (prevState: T) => T)(prevState)\n : value;\n\n return newState;\n });\n },\n [notifyChange]\n );\n\n return [state, setState];\n}\n","// Internal function for loading OpenTelemetry API - can be mocked in tests\nlet _loadOtelApi = (): { trace: any; context: any } => {\n try {\n // Dynamic import - this will throw if @opentelemetry/api is not installed\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require('@opentelemetry/api');\n } catch {\n throw new Error(\n 'OpenTelemetry is not available. Install @opentelemetry/api to use trace ID extraction.'\n );\n }\n};\n\n// Test helper to mock the OTEL API loader\nexport function _setOtelApiLoader(loader: () => { trace: any; context: any }) {\n _loadOtelApi = loader;\n}\n\n/**\n * Extracts the current OpenTelemetry trace ID from the active span context.\n *\n * @throws Error if OpenTelemetry is not available or no trace is currently active\n * @returns The trace ID string from the active OTEL span\n *\n * @example\n * ```typescript\n * import { getOtelTraceId } from '@kelet-ai/feedback-ui';\n *\n * // Use as function with VoteFeedback component\n * <VoteFeedback.Root tx_id={getOtelTraceId} onFeedback={handleFeedback}>\n * <VoteFeedback.UpvoteButton>👍</VoteFeedback.UpvoteButton>\n * <VoteFeedback.DownvoteButton>👎</VoteFeedback.DownvoteButton>\n * </VoteFeedback.Root>\n * ```\n */\nexport function getOtelTraceId(): string {\n const { trace, context } = _loadOtelApi();\n\n try {\n // Method 1: Get span context directly from active context\n const spanContext = trace.getSpanContext(context.active());\n if (spanContext?.traceId) {\n return spanContext.traceId;\n }\n\n // Method 2: Get from active span\n const activeSpan = trace.getSpan(context.active());\n if (activeSpan) {\n const spanCtx = activeSpan.spanContext();\n if (spanCtx.traceId) {\n return spanCtx.traceId;\n }\n }\n } catch (error) {\n throw new Error(\n `Failed to extract OpenTelemetry trace ID: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n\n // No trace ID available\n throw new Error(\n 'OpenTelemetry trace ID not available. Ensure XHR/Fetch instrumentation is active and a request is in progress.'\n );\n}\n"],"names":["self","require$$0","jsxRuntimeModule","require$$1","jsx","jsxs","Fragment","deepDiff","this","Diff","mv","pv","start","vlen","levenshtein","value","diff","distance"],"mappings":"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","x_google_ignoreList":[0,1,2,5,6,7,8,9,10]}