@syntrologie/runtime-sdk 2.2.0-canary.8 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/dist/actions/types.d.ts +7 -0
- package/dist/antiFlicker.d.ts +2 -0
- package/dist/apps/builtinRuntimeModules.generated.d.ts +20 -0
- package/dist/{chunk-MEBUEMEZ.js → chunk-V4MDQX67.js} +2868 -1417
- package/dist/chunk-V4MDQX67.js.map +7 -0
- package/dist/configFetcher.d.ts +3 -1
- package/dist/context/ContextManager.d.ts +4 -0
- package/dist/diagnostics/service-worker-check.d.ts +23 -0
- package/dist/editorLoader.d.ts +8 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.js +1563 -12
- package/dist/index.js.map +4 -4
- package/dist/integrations/gtm-bridge.d.ts +36 -0
- package/dist/navigation/NavigationMonitor.d.ts +45 -0
- package/dist/overlays/runtime/utils/AnchorWatcher.d.ts +22 -0
- package/dist/overlays/types.d.ts +2 -0
- package/dist/react.js +1 -1
- package/dist/runtime.d.ts +3 -0
- package/dist/smart-canvas.esm.js +62 -36
- package/dist/smart-canvas.esm.js.map +4 -4
- package/dist/smart-canvas.js +15828 -23049
- package/dist/smart-canvas.js.map +4 -4
- package/dist/smart-canvas.min.js +62 -36
- package/dist/smart-canvas.min.js.map +4 -4
- package/dist/telemetry/adapters/posthog.d.ts +19 -0
- package/dist/telemetry/consent.d.ts +62 -0
- package/dist/version.d.ts +1 -1
- package/dist/widgets/WidgetRegistry.d.ts +10 -0
- package/package.json +13 -4
- package/schema/canvas-config.schema.json +124 -22
- package/scripts/syntroReactPlugin.mjs +113 -0
- package/dist/adaptives/adaptive-chatbot/index.js +0 -9
- package/dist/adaptives/adaptive-chatbot/index.js.map +0 -7
- package/dist/adaptives/adaptive-content/index.js +0 -22
- package/dist/adaptives/adaptive-content/index.js.map +0 -7
- package/dist/adaptives/adaptive-faq/index.js +0 -28
- package/dist/adaptives/adaptive-faq/index.js.map +0 -7
- package/dist/adaptives/adaptive-gamification/index.js +0 -2
- package/dist/adaptives/adaptive-gamification/index.js.map +0 -7
- package/dist/adaptives/adaptive-nav/index.js +0 -27
- package/dist/adaptives/adaptive-nav/index.js.map +0 -7
- package/dist/adaptives/adaptive-overlays/index.js +0 -94
- package/dist/adaptives/adaptive-overlays/index.js.map +0 -7
- package/dist/chunk-MEBUEMEZ.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../shared-editor-ui/dist/cn.js", "syntro-react:react/jsx-runtime", "syntro-react:react", "syntro-react:react-dom", "../../../../../node_modules/css-selector-generator/src/types.ts", "../../../../../node_modules/css-selector-generator/src/utilities-messages.ts", "../../../../../node_modules/css-selector-generator/src/utilities-options.ts", "../../../../../node_modules/css-selector-generator/src/utilities-data.ts", "../../../../../node_modules/css-selector-generator/src/constants.ts", "../../../../../node_modules/css-selector-generator/src/selector-attribute.ts", "../../../../../node_modules/css-selector-generator/src/utilities-selectors.ts", "../../../../shared-editor-ui/dist/components/EditorBody.js", "../../../../shared-editor-ui/dist/components/EditorFooter.js", "../../../../shared-editor-ui/dist/components/EditorHeader.js", "../../../../shared-editor-ui/dist/components/EditorInput.js", "../../../../shared-editor-ui/dist/components/EditorLayout.js", "../../../../shared-editor-ui/dist/components/EditorTextarea.js", "../../../../adaptives/adaptive-chatbot/src/editor.tsx", "../../../../design-system/dist/tokens/colors.js", "syntro-react:react-dom/client", "../../../../adaptives/adaptive-chatbot/src/actionParser.ts", "../../../../adaptives/adaptive-chatbot/src/apiClient.ts", "../../../../adaptives/adaptive-chatbot/src/useChat.ts", "../../../../adaptives/adaptive-chatbot/src/ChatAssistant.tsx", "../../../../adaptives/adaptive-chatbot/src/runtime.ts", "../../../../adaptives/adaptive-chatbot/src/cdn.ts"],
|
|
4
|
-
"sourcesContent": ["export function cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\n", "\n function _R() {\n return (typeof SynOS !== 'undefined' && SynOS.React) || {};\n }\n function _jsx(type, props, key) {\n var R = _R();\n var p = props || {};\n var c = p.children;\n delete p.children;\n if (key !== undefined) p.key = key;\n return Array.isArray(c)\n ? R.createElement.apply(null, [type, p].concat(c))\n : c !== undefined\n ? R.createElement(type, p, c)\n : R.createElement(type, p);\n }\n export var jsx = _jsx;\n export var jsxs = _jsx;\n export var Fragment = _R().Fragment;\n ", "\n function _R() {\n return (typeof SynOS !== 'undefined' && SynOS.React) || {};\n }\n\n // Default export \u2014 lazy proxy for React.* access\n export default new Proxy({}, { get: function(_, k) { return _R()[k]; } });\n\n // Hooks \u2014 lazy function wrappers (resolve at call time)\n export function useState() { return _R().useState.apply(null, arguments); }\n export function useEffect() { return _R().useEffect.apply(null, arguments); }\n export function useMemo() { return _R().useMemo.apply(null, arguments); }\n export function useCallback() { return _R().useCallback.apply(null, arguments); }\n export function useRef() { return _R().useRef.apply(null, arguments); }\n export function useContext() { return _R().useContext.apply(null, arguments); }\n export function useReducer() { return _R().useReducer.apply(null, arguments); }\n export function useLayoutEffect() { return _R().useLayoutEffect.apply(null, arguments); }\n export function useId() { return _R().useId.apply(null, arguments); }\n\n // Creation APIs \u2014 lazy function wrappers\n export function createElement() { return _R().createElement.apply(null, arguments); }\n export function createContext() { return _R().createContext.apply(null, arguments); }\n export function forwardRef() { return _R().forwardRef.apply(null, arguments); }\n export function memo() { return _R().memo.apply(null, arguments); }\n export function lazy() { return _R().lazy.apply(null, arguments); }\n export function isValidElement() { return _R().isValidElement.apply(null, arguments); }\n export function cloneElement() { return _R().cloneElement.apply(null, arguments); }\n\n // Component types \u2014 resolved at module eval (runtime loads first)\n var _r = _R();\n export var Fragment = _r.Fragment;\n export var Suspense = _r.Suspense;\n export var Children = _r.Children;\n export var Component = _r.Component;\n export var PureComponent = _r.PureComponent;\n ", "\n function _RD() {\n return (typeof SynOS !== 'undefined' && SynOS.ReactDOM) || {};\n }\n export default new Proxy({}, { get: function(_, k) { return _RD()[k]; } });\n export function createRoot() { return _RD().createRoot.apply(null, arguments); }\n export function hydrateRoot() { return _RD().hydrateRoot.apply(null, arguments); }\n export function createPortal() { return _RD().createPortal.apply(null, arguments); }\n export function flushSync() { return _RD().flushSync.apply(null, arguments); }\n ", "declare const opaqueId: unique symbol;\n\ndeclare interface Tagged<Token> {\n readonly [opaqueId]: Token;\n}\n\nexport type Opaque<Type, Token = unknown> = Type & Tagged<Token>;\n\nexport type ObjectValues<T> = T[keyof T];\n\n// TODO rename to \"CssSelector\"\nexport type CssSelectorGenerated = Opaque<string, \"CssSelector\">;\n\nexport const OPERATOR = {\n NONE: \"\",\n DESCENDANT: \" \",\n CHILD: \" > \",\n} as const;\n\nexport type OperatorValue = ObjectValues<typeof OPERATOR>;\n\nexport interface ElementSelectorData {\n value: CssSelectorGenerated;\n include: boolean;\n}\n\nexport interface ElementData {\n element: Element;\n operator: OperatorValue;\n selectors: Partial<Record<CssSelectorType, ElementSelectorData[]>>;\n}\n\nexport type CssSelector = string;\nexport type CssSelectors = CssSelector[];\n\ntype CssSelectorMatchFn = (input: string) => boolean;\nexport type CssSelectorMatch = RegExp | string | CssSelectorMatchFn;\n\nexport const CSS_SELECTOR_TYPE = {\n id: \"id\",\n class: \"class\",\n tag: \"tag\",\n attribute: \"attribute\",\n nthchild: \"nthchild\",\n nthoftype: \"nthoftype\",\n} as const;\n\nexport type CssSelectorType = ObjectValues<typeof CSS_SELECTOR_TYPE>;\nexport type CssSelectorTypes = CssSelectorType[];\n\nexport type CssSelectorsByType = Partial<Record<CssSelectorType, CssSelectors>>;\n\nexport type CssSelectorData = Partial<\n Record<CssSelectorType, string[] | string[][]>\n>;\n\nexport type CssSelectorGeneratorOptionsInput = Partial<{\n // List of selector types to use. They will be prioritised by their order.\n selectors: CssSelectorTypes;\n // List of selectors that should be prioritised.\n whitelist: CssSelectorMatch[];\n // List of selectors that should be ignored.\n blacklist: CssSelectorMatch[];\n // Root element inside which the selector will be generated. If not set, the document root will be used.\n root: ParentNode | null;\n // If set to `true`, the generator will test combinations of selectors of single type (e.g. multiple class selectors).\n combineWithinSelector: boolean;\n // If set to `true`, the generator will try to test combinations of selectors of different types (e.g. tag + class name).\n combineBetweenSelectors: boolean;\n // If set to `true`, all generated selectors will include the TAG part. Even if tag selector type is not included in `selectors` option.\n includeTag: boolean;\n // Maximum number of combinations of a selector type. This is handy for performance reasons, e.g. when elements have too many classnames.\n maxCombinations: number;\n // Maximum number of selector candidates to be tested for each element. This is handy for performance reasons, e.g. when elements can produce large number of combinations of various types of selectors.\n maxCandidates: number;\n // Experimental. If set to `true` and the \"root\" option is set, the fallback selectors will use \":scope\" pseudo-class to make the selectors shorter and simpler.\n useScope: boolean;\n // Limits the number of results (selectors) to be generated.\n maxResults: number;\n}>;\n\nexport type CssSelectorGeneratorOptions = Required<\n Omit<CssSelectorGeneratorOptionsInput, \"selectors\"> & {\n selectors: CssSelectorTypes;\n }\n>;\n\nexport interface IdentifiableParent {\n foundElements: Element[];\n selector: CssSelector;\n}\n\nexport type PatternMatcher = (input: string) => boolean;\n", "const libraryName = \"CssSelectorGenerator\";\n\n/**\n * Convenient wrapper for `console.warn` using consistent formatting.\n */\nexport function showWarning(id = \"unknown problem\", ...args: unknown[]): void {\n // eslint-disable-next-line no-console\n console.warn(`${libraryName}: ${id}`, ...args);\n}\n", "import {\n CSS_SELECTOR_TYPE,\n CssSelectorGeneratorOptions,\n CssSelectorMatch,\n CssSelectorTypes,\n} from \"./types.js\";\nimport { getRootNode } from \"./utilities-dom.js\";\nimport { isEnumValue } from \"./utilities-typescript.js\";\nimport { showWarning } from \"./utilities-messages.js\";\n\nexport const DEFAULT_OPTIONS = {\n selectors: [\n CSS_SELECTOR_TYPE.id,\n CSS_SELECTOR_TYPE.class,\n CSS_SELECTOR_TYPE.tag,\n CSS_SELECTOR_TYPE.attribute,\n ] as CssSelectorTypes,\n // if set to true, always include tag name\n includeTag: false,\n whitelist: [] as CssSelectorMatch[],\n blacklist: [] as CssSelectorMatch[],\n combineWithinSelector: true,\n combineBetweenSelectors: true,\n root: null,\n maxCombinations: Number.POSITIVE_INFINITY,\n maxCandidates: Number.POSITIVE_INFINITY,\n useScope: false,\n} as CssSelectorGeneratorOptions;\n\n/**\n * Makes sure returned value is a list containing only valid selector types.\n * @param input\n */\nexport function sanitizeSelectorTypes(input: unknown): CssSelectorTypes {\n if (!Array.isArray(input)) {\n return [];\n }\n return input.filter((item) => isEnumValue(CSS_SELECTOR_TYPE, item));\n}\n\n/**\n * Checks whether provided value is of type RegExp.\n */\nexport function isRegExp(input: unknown): input is RegExp {\n return input instanceof RegExp;\n}\n\n/**\n * Checks whether provided value is usable in whitelist or blacklist.\n * @param input\n */\nexport function isCssSelectorMatch(input: unknown): input is CssSelectorMatch {\n return [\"string\", \"function\"].includes(typeof input) || isRegExp(input);\n}\n\n/**\n * Converts input to a list of valid values for whitelist or blacklist.\n */\nexport function sanitizeCssSelectorMatchList(\n input: unknown,\n): CssSelectorMatch[] {\n if (!Array.isArray(input)) {\n return [];\n }\n return input.filter(isCssSelectorMatch);\n}\n\n/**\n * Checks whether provided value is valid Node.\n */\nexport function isNode(input: unknown): input is Node {\n return input instanceof Node;\n}\n\n/**\n * Checks whether provided value is valid ParentNode.\n */\nexport function isParentNode(input: unknown): input is ParentNode {\n const validParentNodeTypes: number[] = [\n Node.DOCUMENT_NODE,\n Node.DOCUMENT_FRAGMENT_NODE, // this includes Shadow DOM root\n Node.ELEMENT_NODE,\n ];\n\n return isNode(input) && validParentNodeTypes.includes(input.nodeType);\n}\n\n/**\n * Makes sure that the root node in options is valid.\n */\nexport function sanitizeRoot(input: unknown, element: Element): ParentNode {\n if (isParentNode(input)) {\n if (!input.contains(element)) {\n showWarning(\n \"element root mismatch\",\n \"Provided root does not contain the element. This will most likely result in producing a fallback selector using element's real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will not work as intended.\",\n );\n }\n return input;\n }\n\n const rootNode = element.getRootNode({ composed: false });\n if (isParentNode(rootNode)) {\n if (rootNode !== document) {\n showWarning(\n \"shadow root inferred\",\n \"You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended.\",\n );\n }\n return rootNode;\n }\n\n return getRootNode(element);\n}\n\n/**\n * Makes sure that the output is a number, usable as `maxResults` option in\n * powerset generator.\n */\nexport function sanitizeMaxNumber(input?: unknown): number {\n return typeof input === \"number\" ? input : Number.POSITIVE_INFINITY;\n}\n\n/**\n * Makes sure the options object contains all required keys.\n */\nexport function sanitizeOptions(\n element: Element,\n custom_options = {},\n): CssSelectorGeneratorOptions {\n const options = {\n ...DEFAULT_OPTIONS,\n ...custom_options,\n };\n\n return {\n selectors: sanitizeSelectorTypes(options.selectors),\n whitelist: sanitizeCssSelectorMatchList(options.whitelist),\n blacklist: sanitizeCssSelectorMatchList(options.blacklist),\n root: sanitizeRoot(options.root, element),\n combineWithinSelector: !!options.combineWithinSelector,\n combineBetweenSelectors: !!options.combineBetweenSelectors,\n includeTag: !!options.includeTag,\n maxCombinations: sanitizeMaxNumber(options.maxCombinations),\n maxCandidates: sanitizeMaxNumber(options.maxCandidates),\n useScope: !!options.useScope,\n maxResults: sanitizeMaxNumber(options.maxResults),\n };\n}\n", "import { CssSelectorMatch, PatternMatcher } from \"./types.js\";\nimport { isRegExp } from \"./utilities-options.js\";\nimport { showWarning } from \"./utilities-messages.js\";\n\n/**\n * Creates array containing only items included in all input arrays.\n */\nexport function getIntersection<T>(items: T[][] = []): T[] {\n const [firstItem = [], ...otherItems] = items;\n if (otherItems.length === 0) {\n return firstItem;\n }\n return otherItems.reduce((accumulator, currentValue) => {\n return accumulator.filter((item) => currentValue.includes(item));\n }, firstItem);\n}\n\n/**\n * Converts array of arrays into a flat array.\n */\nexport function flattenArray<T>(input: T[][]): T[] {\n return ([] as T[]).concat(...input);\n}\n\n/**\n * Convert string that can contain wildcards (asterisks) to RegExp source.\n */\nexport function wildcardToRegExp(input: string): string {\n return (\n input\n // convert all special characters used by RegExp, except an asterisk\n .replace(/[|\\\\{}()[\\]^$+?.]/g, \"\\\\$&\")\n // convert asterisk to pattern that matches anything\n .replace(/\\*/g, \".+\")\n );\n}\n\n/**\n * Creates function that will test list of provided matchers against input.\n * Used for white/blacklist functionality.\n */\nexport function createPatternMatcher(list: CssSelectorMatch[]): PatternMatcher {\n const matchFunctions = list.map((item) => {\n if (isRegExp(item)) {\n return (input: string) => item.test(input);\n }\n\n if (typeof item === \"function\") {\n return (input: string) => {\n const result = item(input);\n if (typeof result !== \"boolean\") {\n showWarning(\n \"pattern matcher function invalid\",\n \"Provided pattern matching function does not return boolean. It's result will be ignored.\",\n item,\n );\n return false;\n }\n return result;\n };\n }\n\n if (typeof item === \"string\") {\n const re = new RegExp(\"^\" + wildcardToRegExp(item) + \"$\");\n return (input: string) => re.test(input);\n }\n\n showWarning(\n \"pattern matcher invalid\",\n \"Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.\",\n item,\n );\n return () => false;\n });\n\n return (input: string) =>\n matchFunctions.some((matchFunction) => matchFunction(input));\n}\n", "import { CSS_SELECTOR_TYPE } from \"./types.js\";\n\nexport const SELECTOR_SEPARATOR = \", \";\n\n// RegExp that will match invalid patterns that can be used in ID attribute.\nexport const INVALID_ID_RE = new RegExp(\n [\n \"^$\", // empty or not set\n \"\\\\s\", // contains whitespace\n ].join(\"|\"),\n);\n\n// RegExp that will match invalid patterns that can be used in class attribute.\nexport const INVALID_CLASS_RE = new RegExp(\n [\n \"^$\", // empty or not set\n ].join(\"|\"),\n);\n\n// Order in which a combined selector is constructed.\nexport const SELECTOR_PATTERN = [\n CSS_SELECTOR_TYPE.nthoftype,\n CSS_SELECTOR_TYPE.tag,\n CSS_SELECTOR_TYPE.id,\n CSS_SELECTOR_TYPE.class,\n CSS_SELECTOR_TYPE.attribute,\n CSS_SELECTOR_TYPE.nthchild,\n];\n", "import { sanitizeSelectorItem } from \"./utilities-selectors.js\";\nimport { createPatternMatcher, getIntersection } from \"./utilities-data.js\";\nimport { CssSelectorGenerated } from \"./types.js\";\n\ninterface AttributeData {\n name: string;\n value: string;\n}\n\n// List of attributes to be ignored. These are handled by different selector types.\nexport const attributeBlacklistMatch = createPatternMatcher([\n \"class\",\n \"id\",\n // Angular attributes\n \"ng-*\",\n]);\n\n/**\n * Get simplified attribute selector for an element.\n */\nexport function attributeNodeToSimplifiedSelector({\n name,\n}: AttributeData): CssSelectorGenerated {\n return `[${name}]` as CssSelectorGenerated;\n}\n\n/**\n * Get attribute selector for an element.\n */\nexport function attributeNodeToSelector({\n name,\n value,\n}: AttributeData): CssSelectorGenerated {\n return `[${name}='${value}']` as CssSelectorGenerated;\n}\n\n/**\n * Checks whether an attribute should be used as a selector.\n */\nexport function isValidAttributeNode(\n { nodeName, nodeValue }: Node,\n element: Element,\n): boolean {\n // form input value should not be used as a selector\n const tagName = element.tagName.toLowerCase();\n if ([\"input\", \"option\"].includes(tagName) && nodeName === \"value\") {\n return false;\n }\n\n // ignore Base64-encoded strings as 'src' attribute values (e.g. in tags like img, audio, video, iframe, object, embed).\n if (nodeName === \"src\" && nodeValue?.startsWith(\"data:\")) {\n return false;\n }\n\n return !attributeBlacklistMatch(nodeName);\n}\n\n/**\n * Sanitize all attribute data. We want to do it once, before we start to generate simplified/full selectors from the same data.\n */\nfunction sanitizeAttributeData({ nodeName, nodeValue }: Node): AttributeData {\n return {\n name: sanitizeSelectorItem(nodeName),\n value: sanitizeSelectorItem(nodeValue ?? undefined),\n };\n}\n\n/**\n * Get attribute selectors for an element.\n */\nexport function getElementAttributeSelectors(\n element: Element,\n): CssSelectorGenerated[] {\n const validAttributes = Array.from(element.attributes)\n .filter((attributeNode) => isValidAttributeNode(attributeNode, element))\n .map(sanitizeAttributeData);\n return [\n ...validAttributes.map(attributeNodeToSimplifiedSelector),\n ...validAttributes.map(attributeNodeToSelector),\n ];\n}\n\n/**\n * Get attribute selectors matching all elements.\n */\nexport function getAttributeSelectors(\n elements: Element[],\n): CssSelectorGenerated[] {\n const elementSelectors = elements.map(getElementAttributeSelectors);\n return getIntersection(elementSelectors);\n}\n", "import { SELECTOR_PATTERN } from \"./constants.js\";\nimport {\n getAttributeSelectors,\n getElementAttributeSelectors,\n} from \"./selector-attribute.js\";\nimport {\n getClassSelectors,\n getElementClassSelectors,\n} from \"./selector-class.js\";\nimport { getElementIdSelectors, getIdSelector } from \"./selector-id.js\";\nimport {\n getElementNthChildSelector,\n getNthChildSelector,\n} from \"./selector-nth-child.js\";\nimport {\n getElementNthOfTypeSelector,\n getNthOfTypeSelector,\n} from \"./selector-nth-of-type.js\";\nimport { getElementTagSelectors, getTagSelector } from \"./selector-tag.js\";\nimport { createPatternMatcher } from \"./utilities-data.js\";\nimport { getParents, testSelector } from \"./utilities-dom.js\";\nimport {\n CSS_SELECTOR_TYPE,\n CssSelector,\n CssSelectorData,\n CssSelectorGenerated,\n CssSelectorGeneratorOptions,\n CssSelectorType,\n CssSelectorTypes,\n IdentifiableParent,\n OPERATOR,\n PatternMatcher,\n} from \"./types.js\";\nimport { isElement } from \"./utilities-iselement.js\";\nimport { getPowerSet, powerSetGenerator } from \"./utilities-powerset.js\";\nimport { cartesianProductGenerator } from \"./utilities-cartesian.js\";\n\nexport const ESCAPED_COLON = \":\".charCodeAt(0).toString(16).toUpperCase();\n\n// Square brackets need to be escaped, but eslint has a problem with that.\n/* eslint-disable-next-line no-useless-escape */\nexport const SPECIAL_CHARACTERS_RE = /[ !\"#$%&'()\\[\\]{|}<>*+,./;=?@^`~\\\\]/;\n\n/**\n * Escapes special characters used by CSS selector items.\n */\nexport function sanitizeSelectorItem(input = \"\"): string {\n // This should not be necessary, but just to be sure, let's keep the legacy sanitizer in place, for backwards compatibility.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return CSS ? CSS.escape(input) : legacySanitizeSelectorItem(input);\n}\n\n/**\n * Legacy version of escaping utility, originally used for IE11-. Should\n * probably be replaced by a polyfill:\n * https://github.com/mathiasbynens/CSS.escape\n */\nexport function legacySanitizeSelectorItem(input = \"\"): string {\n return input\n .split(\"\")\n .map((character) => {\n if (character === \":\") {\n return `\\\\${ESCAPED_COLON} `;\n }\n if (SPECIAL_CHARACTERS_RE.test(character)) {\n return `\\\\${character}`;\n }\n\n // needed for backwards compatibility\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return escape(character).replace(/%/g, \"\\\\\");\n })\n .join(\"\");\n}\n\nexport const SELECTOR_TYPE_GETTERS: Record<\n CssSelectorType,\n (elements: Element[]) => CssSelector[]\n> = {\n tag: getTagSelector,\n id: getIdSelector,\n class: getClassSelectors,\n attribute: getAttributeSelectors,\n nthchild: getNthChildSelector,\n nthoftype: getNthOfTypeSelector,\n} as const;\n\nexport const ELEMENT_SELECTOR_TYPE_GETTERS: Record<\n CssSelectorType,\n (element: Element) => CssSelectorGenerated[]\n> = {\n tag: getElementTagSelectors,\n id: getElementIdSelectors,\n class: getElementClassSelectors,\n attribute: getElementAttributeSelectors,\n nthchild: getElementNthChildSelector,\n nthoftype: getElementNthOfTypeSelector,\n} as const;\n\n/**\n * Creates selector of given type for single element.\n */\nexport function getElementSelectorsByType(\n element: Element,\n selectorType: CssSelectorType,\n): CssSelectorGenerated[] {\n return ELEMENT_SELECTOR_TYPE_GETTERS[selectorType](element);\n}\n\n/**\n * Returns list of selectors of given type for the element.\n */\nexport function getSelectorsByType(\n elements: Element[],\n selector_type: CssSelectorType,\n): CssSelector[] {\n const getter = SELECTOR_TYPE_GETTERS[selector_type];\n return getter(elements);\n}\n\n/**\n * Remove blacklisted selectors from list.\n */\nexport function filterSelectors(\n list: CssSelector[] = [],\n matchBlacklist: PatternMatcher,\n matchWhitelist: PatternMatcher,\n): CssSelector[] {\n return list.filter((item) => matchWhitelist(item) || !matchBlacklist(item));\n}\n\n/**\n * Prioritise whitelisted selectors in list.\n */\nexport function orderSelectors(\n list: CssSelector[] = [],\n matchWhitelist: PatternMatcher,\n): CssSelector[] {\n return list.sort((a, b) => {\n const a_is_whitelisted = matchWhitelist(a);\n const b_is_whitelisted = matchWhitelist(b);\n if (a_is_whitelisted && !b_is_whitelisted) {\n return -1;\n }\n if (!a_is_whitelisted && b_is_whitelisted) {\n return 1;\n }\n return 0;\n });\n}\n\n/**\n * Yields list of unique selectors applicable to given element.\n */\nexport function* allSelectorsGenerator(\n elements: Element[],\n options: CssSelectorGeneratorOptions,\n): IterableIterator<CssSelector> {\n const yieldedSelectors = new Set<string>();\n const selectors_list = getSelectorsList(elements, options);\n for (const selector of selectorTypeCombinationsGenerator(\n selectors_list,\n options,\n )) {\n if (!yieldedSelectors.has(selector)) {\n yieldedSelectors.add(selector);\n yield selector;\n }\n }\n}\n\n/**\n * Creates object containing all selector types and their potential values.\n */\nexport function getSelectorsList(\n elements: Element[],\n options: CssSelectorGeneratorOptions,\n): CssSelectorData {\n const { blacklist, whitelist, combineWithinSelector, maxCombinations } =\n options;\n\n const matchBlacklist = createPatternMatcher(blacklist);\n const matchWhitelist = createPatternMatcher(whitelist);\n\n const reducer = (data: CssSelectorData, selector_type: CssSelectorType) => {\n const selectors_by_type = getSelectorsByType(elements, selector_type);\n const filtered_selectors = filterSelectors(\n selectors_by_type,\n matchBlacklist,\n matchWhitelist,\n );\n const found_selectors = orderSelectors(filtered_selectors, matchWhitelist);\n\n // Use Array.from with a length limit to avoid materializing huge power sets\n // This provides lazy evaluation while respecting maxCombinations\n data[selector_type] = combineWithinSelector\n ? Array.from(\n powerSetGenerator(found_selectors, { maxResults: maxCombinations }),\n )\n : found_selectors.map((item) => [item]);\n\n return data;\n };\n\n return getSelectorsToGet(options).reduce(reducer, {});\n}\n\n/**\n * Creates list of selector types that we will need to generate the selector.\n */\nexport function getSelectorsToGet(\n options: CssSelectorGeneratorOptions,\n): CssSelectorTypes {\n const { selectors, includeTag } = options;\n\n const selectors_to_get = [...selectors];\n if (includeTag && !selectors_to_get.includes(\"tag\")) {\n selectors_to_get.push(\"tag\");\n }\n return selectors_to_get;\n}\n\n/**\n * Adds \"tag\" to a list, if it does not contain it. Used to modify selectors\n * list when includeTag option is enabled to make sure all results contain the\n * TAG part.\n */\nfunction addTagTypeIfNeeded(list: CssSelectorTypes): CssSelectorTypes {\n return list.includes(CSS_SELECTOR_TYPE.tag) ||\n list.includes(CSS_SELECTOR_TYPE.nthoftype)\n ? [...list]\n : [...list, CSS_SELECTOR_TYPE.tag];\n}\n\n/**\n * Generates list of possible selector type combinations.\n */\nexport function combineSelectorTypes(\n options: CssSelectorGeneratorOptions,\n): CssSelectorTypes[] {\n const { selectors, combineBetweenSelectors, includeTag, maxCandidates } =\n options;\n\n const combinations = combineBetweenSelectors\n ? getPowerSet(selectors, { maxResults: maxCandidates })\n : selectors.map((item) => [item]);\n\n return includeTag ? combinations.map(addTagTypeIfNeeded) : combinations;\n}\n\n/**\n * Generates list of combined CSS selectors.\n */\nexport function* selectorTypeCombinationsGenerator(\n selectors_list: CssSelectorData,\n options: CssSelectorGeneratorOptions,\n): IterableIterator<CssSelector> {\n for (const item of combineSelectorTypes(options)) {\n yield* constructedSelectorsGenerator(item, selectors_list);\n }\n}\n\n/**\n * Generates all variations of possible selectors from provided data.\n */\nexport function* constructedSelectorsGenerator(\n selector_types: CssSelectorTypes,\n selectors_by_type: CssSelectorData,\n): IterableIterator<CssSelector> {\n const data: CssSelectorData = {};\n\n for (const selector_type of selector_types) {\n const selector_variants = selectors_by_type[selector_type];\n if (selector_variants && selector_variants.length > 0) {\n data[selector_type] = selector_variants;\n }\n }\n\n for (const combination of cartesianProductGenerator<string | string[]>(\n data,\n )) {\n yield constructSelector(combination);\n }\n}\n\n/**\n * Creates selector for given selector type. Combines several parts if needed.\n */\nexport function constructSelectorType(\n selector_type: CssSelectorType,\n selectors_data: CssSelectorData,\n): CssSelector {\n return selectors_data[selector_type]\n ? selectors_data[selector_type].join(\"\")\n : \"\";\n}\n\n/**\n * Converts selector data object to a selector.\n */\nexport function constructSelector(\n selectorData: CssSelectorData = {},\n): CssSelector {\n const pattern = [...SELECTOR_PATTERN];\n // selector \"nthoftype\" already contains \"tag\"\n if (\n selectorData[CSS_SELECTOR_TYPE.tag] &&\n selectorData[CSS_SELECTOR_TYPE.nthoftype]\n ) {\n pattern.splice(pattern.indexOf(CSS_SELECTOR_TYPE.tag), 1);\n }\n\n return pattern\n .map((type) => constructSelectorType(type, selectorData))\n .join(\"\");\n}\n\n/**\n * Generates combinations of child and descendant selectors within root\n * selector.\n */\nfunction generateCandidateCombinations(\n selectors: CssSelector[],\n rootSelector: CssSelector,\n): CssSelector[] {\n return [\n ...selectors.map(\n (selector) => rootSelector + OPERATOR.DESCENDANT + selector,\n ),\n ...selectors.map((selector) => rootSelector + OPERATOR.CHILD + selector),\n ];\n}\n\n/**\n * Generates a list of selector candidates that can potentially match target\n * element.\n */\nfunction* candidatesGenerator(\n selectors: IterableIterator<CssSelector>,\n rootSelector: CssSelector,\n): IterableIterator<CssSelector> {\n if (rootSelector === \"\") {\n yield* selectors;\n } else {\n for (const selector of selectors) {\n yield* generateCandidateCombinations([selector], rootSelector);\n }\n }\n}\n\n/**\n * Tries to find unique CSS selectors for element within given parent.\n */\nexport function* selectorWithinRootGenerator(\n elements: Element[],\n root: ParentNode,\n rootSelector: CssSelector = \"\",\n options: CssSelectorGeneratorOptions,\n): IterableIterator<CssSelector, undefined> {\n const elementSelectorsIterator = allSelectorsGenerator(elements, options);\n for (const candidateSelector of candidatesGenerator(\n elementSelectorsIterator,\n rootSelector,\n )) {\n if (testSelector(elements, candidateSelector, root)) {\n yield candidateSelector;\n }\n }\n // TODO remove the `undefined` return value when the main function is rewritten to use the generator directly\n return;\n}\n/**\n * Climbs through parents of the element and finds the ones that are identifiable by unique CSS selector.\n */\nexport function* closestIdentifiableParentGenerator(\n elements: Element[],\n root: ParentNode,\n rootSelector: CssSelector = \"\",\n options: CssSelectorGeneratorOptions,\n): IterableIterator<IdentifiableParent> {\n if (elements.length === 0) {\n return null;\n }\n\n const candidatesList = [\n elements.length > 1 ? elements : [],\n ...getParents(elements, root).map((element) => [element]),\n ];\n\n for (const currentElements of candidatesList) {\n for (const selectorWithinRoot of selectorWithinRootGenerator(\n currentElements,\n root,\n rootSelector,\n options,\n )) {\n yield {\n foundElements: currentElements,\n selector: selectorWithinRoot,\n };\n }\n }\n}\n\ninterface SelectorGeneratorProps {\n elements: Element[];\n root: ParentNode;\n rootSelector: CssSelector;\n options: CssSelectorGeneratorOptions;\n}\n\n/**\n * Recursively travels through parents, finds the ones that are identifiable and then tries to find a unique selector within that context.\n */\nexport function* selectorGenerator({\n elements,\n root,\n rootSelector = \"\",\n options,\n}: SelectorGeneratorProps): IterableIterator<CssSelector> {\n let currentRoot = root;\n let partialSelector = rootSelector;\n let shouldContinue = true;\n\n while (shouldContinue) {\n let foundAny = false;\n\n for (const item of closestIdentifiableParentGenerator(\n elements,\n currentRoot,\n partialSelector,\n options,\n )) {\n const { foundElements, selector } = item;\n foundAny = true;\n\n if (testSelector(elements, selector, root)) {\n yield selector;\n } else {\n // First non-matching selector - use its parent for next iteration\n currentRoot = foundElements[0];\n partialSelector = selector;\n break; // Try from this parent in next iteration\n }\n }\n\n if (!foundAny) {\n shouldContinue = false;\n }\n }\n}\n\n/**\n * Converts input into list of elements, removing duplicates and non-elements.\n */\nexport function sanitizeSelectorNeedle(needle: unknown): Element[] {\n if (needle instanceof NodeList || needle instanceof HTMLCollection) {\n needle = Array.from(needle);\n }\n const elements = (Array.isArray(needle) ? needle : [needle]).filter(\n isElement,\n );\n return [...new Set(elements)];\n}\n", "import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function EditorBody({ children }) {\n return _jsx(\"div\", { className: \"se-flex-1 se-overflow-auto se-p-6\", children: children });\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function EditorFooter({ onSave, onPublish }) {\n return (_jsxs(\"div\", { className: \"se-py-3 se-px-4 se-border-t se-border-border-primary se-flex se-gap-2\", children: [_jsx(\"button\", { onClick: onSave, className: \"se-flex-1 se-h-10 se-px-4 se-py-2 se-rounded-md se-bg-btn-neutral se-text-btn-neutral-text se-border se-border-btn-neutral-border hover:se-text-btn-neutral-text-hover se-text-sm se-font-medium se-cursor-pointer se-inline-flex se-items-center se-justify-center focus-visible:se-shadow-focus-primary focus-visible:se-outline-none\", children: \"Save Draft\" }), _jsx(\"button\", { onClick: onPublish, className: \"se-flex-1 se-h-10 se-px-4 se-py-2 se-rounded-md se-border-none se-bg-btn-primary se-text-btn-primary-text hover:se-bg-btn-primary-hover se-text-sm se-font-medium se-cursor-pointer se-inline-flex se-items-center se-justify-center focus-visible:se-shadow-focus-primary focus-visible:se-outline-none\", children: \"Publish\" })] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport function EditorHeader({ title, subtitle }) {\n return (_jsxs(\"div\", { className: \"se-px-4 se-pt-3 se-pb-2\", children: [_jsx(\"h2\", { className: \"se-m-0 se-text-base se-font-semibold se-text-text-primary\", children: title }), subtitle && (_jsx(\"p\", { className: \"se-mt-0.5 se-mb-0 se-text-xs se-text-text-secondary\", children: subtitle }))] }));\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { cn } from '../cn';\nexport function EditorInput({ label, className, ...props }) {\n return (_jsxs(\"div\", { children: [label && (_jsx(\"label\", { className: \"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block\", children: label })), _jsx(\"input\", { ...props, className: cn('se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-font-[inherit] se-mb-2 se-box-border', 'placeholder:se-text-input-field-text-placeholder', 'focus:se-border-input-field-border-selected focus:se-outline-none focus:se-shadow-focus-primary', 'disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50', className) })] }));\n}\n", "import { jsx as _jsx } from \"react/jsx-runtime\";\nexport function EditorLayout({ children }) {\n return _jsx(\"div\", { className: \"se-flex se-flex-col se-h-full se-font-sans\", children: children });\n}\n", "import { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nimport { useEffect, useRef } from 'react';\nimport { cn } from '../cn';\nexport function EditorTextarea({ label, className, value, ...props }) {\n const ref = useRef(null);\n // Auto-resize to fit content\n useEffect(() => {\n const el = ref.current;\n if (!el)\n return;\n el.style.height = 'auto';\n el.style.height = `${el.scrollHeight}px`;\n }, [value]);\n return (_jsxs(\"div\", { children: [label && (_jsx(\"label\", { className: \"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block\", children: label })), _jsx(\"textarea\", { ref: ref, value: value, ...props, className: cn('se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-font-[inherit] se-mb-2 se-resize-y se-min-h-[60px] se-max-h-[50vh] se-overflow-y-auto se-box-border', 'placeholder:se-text-input-field-text-placeholder', 'focus:se-border-input-field-border-selected focus:se-outline-none focus:se-shadow-focus-primary', 'disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50', className) })] }));\n}\n", "/**\n * Adaptive Chatbot - Editor Component\n *\n * Visual editor panel for configuring chatbot tile props.\n */\n\nimport {\n EditorBody,\n EditorFooter,\n EditorHeader,\n EditorInput,\n EditorLayout,\n EditorTextarea,\n} from '@syntrologie/shared-editor-ui';\nimport type React from 'react';\nimport { useEffect, useRef } from 'react';\n\nimport type { ChatbotConfig, EditorPanelProps } from './types';\n\n// ============================================================================\n// ChatbotEditor Component\n// ============================================================================\n\nexport function ChatbotEditor({ config, onChange, editor }: EditorPanelProps) {\n const typedConfig = config as unknown as Partial<ChatbotConfig>;\n\n // Consume initial navigation payload on mount (chatbot is form-based, no sub-items)\n const initialConsumed = useRef(false);\n useEffect(() => {\n if (!initialConsumed.current && (editor.initialEditKey != null || editor.initialCreate)) {\n initialConsumed.current = true;\n editor.clearInitialState?.();\n }\n }, [editor]);\n\n const handleChange = (field: string, value: string | number) => {\n onChange({ ...config, [field]: value });\n editor.setDirty(true);\n };\n\n return (\n <EditorLayout>\n <EditorHeader\n title=\"Chat Assistant\"\n subtitle=\"Configure AI chat assistant\"\n onBack={() => editor.navigateHome()}\n />\n\n <EditorBody>\n {/* API Configuration */}\n <div className=\"se-mb-6\">\n <div className=\"se-text-xs se-font-semibold se-text-slate-grey-8 se-uppercase se-tracking-wide se-mb-3\">\n API Configuration\n </div>\n\n <EditorInput\n label=\"Backend URL\"\n type=\"text\"\n value={typedConfig.backendUrl || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleChange('backendUrl', e.target.value)\n }\n placeholder=\"/api/chat/message\"\n />\n\n <EditorInput\n label=\"MLflow Run ID (optional)\"\n type=\"text\"\n value={typedConfig.mlflowRunId || ''}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleChange('mlflowRunId', e.target.value)\n }\n placeholder=\"e.g., abc123\"\n />\n </div>\n\n {/* Chat Settings */}\n <div className=\"se-mb-6\">\n <div className=\"se-text-xs se-font-semibold se-text-slate-grey-8 se-uppercase se-tracking-wide se-mb-3\">\n Chat Settings\n </div>\n\n <EditorTextarea\n label=\"Greeting Message\"\n value={typedConfig.greeting || ''}\n onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) =>\n handleChange('greeting', e.target.value)\n }\n placeholder=\"Hi! How can I help?\"\n />\n\n <EditorInput\n label=\"Max History (messages sent to backend)\"\n type=\"number\"\n value={typedConfig.maxHistory || 20}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) =>\n handleChange('maxHistory', parseInt(e.target.value, 10))\n }\n min={1}\n max={100}\n />\n </div>\n </EditorBody>\n\n <EditorFooter onSave={() => editor.save()} onPublish={() => editor.publish()} />\n </EditorLayout>\n );\n}\n\n/**\n * Editor panel configuration for the app registry.\n */\nexport const editorPanel = {\n title: 'Chat Assistant',\n icon: '\\u{1F4AC}',\n description: 'AI chat assistant with action execution',\n};\n\nexport default ChatbotEditor;\n", "/**\n * Syntro Design System - Color Tokens\n *\n * This file contains all color tokens from the Figma design system.\n * Colors are organized by scale and semantic meaning.\n *\n * @see https://www.figma.com/design/U0Ol5vM7FQvgPfIgCAgxgb/Design-System\n */\n// ============================================================================\n// BASE COLORS\n// ============================================================================\nexport const base = {\n white: '#ffffff',\n black: '#000000',\n};\n// ============================================================================\n// BRAND COLORS\n// ============================================================================\nexport const brand = {\n 0: '#2c0b0a',\n 1: '#5b1715',\n 2: '#89221f',\n 3: '#b72e2a',\n 4: '#d44844',\n 5: '#dd6d69',\n 6: '#e5918f',\n 7: '#eeb6b4',\n 8: '#f6dada',\n 9: '#faebea',\n};\n// ============================================================================\n// NEUTRAL COLORS\n// ============================================================================\nexport const slateGrey = {\n 0: '#07080a',\n 1: '#0f1318',\n 2: '#0e1114',\n 3: '#1c222a',\n 4: '#2b333f',\n 5: '#394454',\n 6: '#475569',\n 7: '#677384',\n 8: '#87919f',\n 9: '#a8afba',\n 10: '#cbd0d7',\n 11: '#e8eaee',\n 12: '#f6f7f9',\n};\n// ============================================================================\n// SEMANTIC COLOR SCALES\n// ============================================================================\nexport const green = {\n 0: '#07230a',\n 1: '#0e4514',\n 2: '#16681e',\n 3: '#1d8a28',\n 4: '#24ad32',\n 5: '#4fbd5a',\n 6: '#7acd82',\n 7: '#a5deab',\n 8: '#d0eed3',\n 9: '#e5f6e7',\n};\nexport const yellow = {\n 0: '#301f09',\n 1: '#5f3e12',\n 2: '#8f5e1b',\n 3: '#be7d24',\n 4: '#ee9c2d',\n 5: '#f1b057',\n 6: '#f5c481',\n 7: '#f8d7ab',\n 8: '#fcebd5',\n 9: '#fdf5ea',\n};\nexport const red = {\n 0: '#330707',\n 1: '#660f0e',\n 2: '#991616',\n 3: '#cc1e1d',\n 4: '#ff2524',\n 5: '#ff5150',\n 6: '#ff7c7c',\n 7: '#ffa8a7',\n 8: '#ffd3d3',\n 9: '#ffe9e9',\n};\nexport const blue = {\n 0: '#051533',\n 1: '#0a2a66',\n 2: '#0f3f98',\n 3: '#1454cb',\n 4: '#1969fe',\n 5: '#4787fe',\n 6: '#75a5fe',\n 7: '#a3c3ff',\n 8: '#d1e1ff',\n 9: '#e8f0ff',\n};\nexport const orange = {\n 0: '#662500',\n 1: '#993d00',\n 2: '#cc5800',\n 3: '#ff7700',\n 4: '#fea85d',\n 5: '#fec58f',\n 6: '#ffd6ae',\n 7: '#fee6cd',\n 8: '#fff1e1',\n 9: '#fff8f0',\n};\nexport const purple = {\n 0: '#151229',\n 1: '#2a2452',\n 2: '#40357c',\n 3: '#5547a5',\n 4: '#6a59ce',\n 5: '#887ad8',\n 6: '#a69be2',\n 7: '#c3bdeb',\n 8: '#e1def5',\n 9: '#f0eefa',\n};\nexport const pink = {\n 0: '#37091f',\n 1: '#69123c',\n 2: '#9b1c58',\n 3: '#cd2575',\n 4: '#ff2e92',\n 5: '#ff58a8',\n 6: '#ff82be',\n 7: '#ffabd3',\n 8: '#ffd5e9',\n 9: '#ffeaf4',\n};\n// ============================================================================\n// LEGACY COLORS (Being phased out)\n// ============================================================================\nexport const legacy = {\n aqua: {\n 0: '#0c5f8d',\n 1: '#146b99',\n 2: '#1d78a6',\n 3: '#2e89b6',\n 4: '#4a9fc4',\n 5: '#6bb4d1',\n 6: '#93cce0',\n 7: '#bddff0',\n 8: '#dceef8',\n 9: '#f2f8fc',\n },\n violet: {\n 0: '#6927da',\n 1: '#7839ee',\n 2: '#875bf7',\n 3: '#a48afb',\n 4: '#c3b4fd',\n 5: '#ddd6fe',\n 6: '#ece9fe',\n 7: '#f5f3ff',\n 8: '#fbfaff',\n },\n fuchsia: {\n 0: '#9f1ab1',\n 1: '#ba24d5',\n 2: '#d444f1',\n 3: '#e478fa',\n 4: '#eeaafd',\n 5: '#f6d0fe',\n 6: '#fbe8ff',\n 7: '#fdf4ff',\n 8: '#fefaff',\n },\n pink: {\n 0: '#a10f5f',\n 1: '#dd2590',\n 2: '#ee46bc',\n 3: '#f670c7',\n 4: '#faa7e0',\n 5: '#fcceee',\n 6: '#fce7f6',\n 7: '#fdf2fa',\n 8: '#fef6fb',\n },\n};\n// ============================================================================\n// TEXT TOKENS\n// ============================================================================\nexport const text = {\n primary: slateGrey[10],\n secondary: slateGrey[9],\n tertiary: slateGrey[8],\n};\n// ============================================================================\n// BACKGROUND TOKENS\n// ============================================================================\nexport const background = {\n primary: slateGrey[2],\n secondary: slateGrey[0],\n};\n// ============================================================================\n// BORDER TOKENS\n// ============================================================================\nexport const border = {\n primary: slateGrey[4],\n secondary: slateGrey[3],\n};\n// ============================================================================\n// BUTTON TOKENS\n// ============================================================================\nexport const button = {\n primary: {\n text: base.white,\n icon: base.white,\n border: brand[3],\n backgroundDefault: brand[3],\n backgroundHover: brand[2],\n },\n neutral: {\n text: slateGrey[10],\n textHover: base.white,\n icon: slateGrey[10],\n iconHover: base.white,\n border: slateGrey[4],\n background: slateGrey[2],\n },\n link: {\n text: base.white,\n icon: base.white,\n hover: brand[5],\n },\n error: {\n text: red[5],\n hover: red[6],\n },\n success: {\n text: green[5],\n hover: green[6],\n },\n};\n// ============================================================================\n// BADGE TOKENS\n// ============================================================================\nexport const badge = {\n slateGrey: {\n content: slateGrey[10],\n pillOutline: slateGrey[10],\n borderPrimary: slateGrey[5],\n borderSecondary: slateGrey[5],\n background: slateGrey[3],\n },\n brand: {\n content: brand[9],\n pillOutline: brand[9],\n borderPrimary: brand[6],\n borderSecondary: brand[6],\n background: brand[0],\n },\n red: {\n content: red[8],\n pillOutline: red[4],\n borderPrimary: red[2],\n borderSecondary: red[2],\n background: red[0],\n },\n yellow: {\n content: yellow[8],\n pillOutline: yellow[4],\n borderPrimary: yellow[2],\n borderSecondary: yellow[2],\n background: yellow[0],\n },\n green: {\n content: green[8],\n pillOutline: green[4],\n borderPrimary: green[2],\n borderSecondary: green[2],\n background: green[0],\n },\n purple: {\n content: purple[8],\n pillOutline: purple[4],\n borderPrimary: purple[2],\n borderSecondary: purple[2],\n background: purple[0],\n },\n blue: {\n content: blue[8],\n pillOutline: blue[4],\n borderPrimary: blue[2],\n borderSecondary: blue[2],\n background: blue[0],\n },\n orange: {\n content: orange[8],\n pillOutline: orange[4],\n borderPrimary: orange[2],\n borderSecondary: orange[2],\n background: orange[0],\n },\n pink: {\n content: pink[8],\n pillOutline: pink[4],\n borderPrimary: pink[2],\n borderSecondary: pink[2],\n background: pink[0],\n },\n};\n// ============================================================================\n// BADGE BANNER TOKENS\n// ============================================================================\nexport const badgeBanner = {\n green: {\n content: green[8],\n border: green[2],\n background: green[0],\n },\n yellow: {\n content: yellow[8],\n border: yellow[2],\n background: yellow[0],\n },\n red: {\n content: red[8],\n border: red[2],\n background: red[0],\n },\n};\n// ============================================================================\n// ALERT TOKENS\n// ============================================================================\nexport const alert = {\n green: {\n content: green[1],\n background: green[9],\n },\n yellow: {\n content: yellow[1],\n background: yellow[9],\n },\n red: {\n content: red[1],\n background: red[9],\n },\n};\n// ============================================================================\n// TAG TOKENS\n// ============================================================================\nexport const tag = {\n content: slateGrey[10],\n border: slateGrey[4],\n background: '#1c2124',\n};\n// ============================================================================\n// MENU TOKENS\n// ============================================================================\nexport const menu = {\n backgroundDefault: slateGrey[2],\n backgroundHover: slateGrey[1],\n selected: slateGrey[3],\n};\n// ============================================================================\n// INPUT/DROPDOWN TOKENS\n// ============================================================================\nexport const inputDropdown = {\n background: slateGrey[2],\n icon: slateGrey[10],\n borderDefault: slateGrey[4],\n borderSelected: brand[3],\n textLabel: slateGrey[9],\n textPlaceholder: slateGrey[8],\n textHint: slateGrey[8],\n};\nexport const inputField = {\n backgroundDefault: slateGrey[2],\n backgroundDisabled: slateGrey[0],\n textLabel: slateGrey[9],\n textPlaceholder: slateGrey[8],\n textHint: slateGrey[8],\n textError: red[5],\n iconDefault: slateGrey[9],\n iconPlaceholder: slateGrey[10],\n iconError: red[5],\n borderDefault: slateGrey[4],\n borderSelected: brand[3],\n borderError: red[5],\n};\n// ============================================================================\n// TOGGLE TOKENS\n// ============================================================================\nexport const toggle = {\n handleDefault: base.white,\n handleDisabled: slateGrey[10],\n off: {\n backgroundDefault: slateGrey[4],\n backgroundHover: slateGrey[5],\n backgroundDisabled: slateGrey[4],\n },\n on: {\n backgroundDefault: green[3],\n backgroundHover: green[2],\n backgroundDisabled: slateGrey[4],\n },\n};\n// ============================================================================\n// CHECKBOX TOKENS\n// ============================================================================\nexport const checkbox = {\n off: {\n backgroundDefault: '#00000000',\n backgroundHover: slateGrey[5],\n backgroundDisabled: slateGrey[2],\n border: slateGrey[6],\n },\n on: {\n backgroundDefault: green[0],\n backgroundHover: green[1],\n backgroundDisabled: slateGrey[2],\n border: green[3],\n },\n};\n// ============================================================================\n// AVATAR TOKENS\n// ============================================================================\nexport const avatar = {\n content: slateGrey[10],\n background: slateGrey[4],\n};\n// ============================================================================\n// PROGRESS BAR & SLIDER TOKENS\n// ============================================================================\nexport const progressBarSlider = {\n background: slateGrey[4],\n active: green[3],\n};\n// ============================================================================\n// CARD TOKENS\n// ============================================================================\nexport const card = {\n background: slateGrey[1],\n content: slateGrey[9],\n border: slateGrey[4],\n};\n// ============================================================================\n// SIDEBAR TOKENS\n// ============================================================================\nexport const sidebar = {\n backgroundDefault: slateGrey[1],\n backgroundHover: slateGrey[3],\n backgroundActive: slateGrey[4],\n border: slateGrey[4],\n contentPrimary: slateGrey[10],\n contentSecondary: slateGrey[9],\n contentTertiary: slateGrey[8],\n};\n// ============================================================================\n// MODAL TOKENS\n// ============================================================================\nexport const modal = {\n background: slateGrey[1],\n content: slateGrey[9],\n border: slateGrey[4],\n};\n// ============================================================================\n// TAB TOKENS\n// ============================================================================\nexport const tab = {\n activeBackground: slateGrey[3],\n activeContent: brand[5],\n inactiveContent: slateGrey[9],\n border: slateGrey[4],\n};\n// ============================================================================\n// TABLE TOKENS\n// ============================================================================\nexport const table = {\n header: {\n textDefault: slateGrey[9],\n textHover: slateGrey[8],\n backgroundDefault: slateGrey[1],\n },\n border: slateGrey[4],\n cell: {\n textPrimary: slateGrey[10],\n textSecondary: slateGrey[9],\n backgroundDefault: slateGrey[2],\n backgroundHover: slateGrey[1],\n },\n};\n// ============================================================================\n// BREADCRUMBS TOKENS\n// ============================================================================\nexport const breadcrumbs = {\n textPrimaryDefault: slateGrey[10],\n textPrimaryHover: slateGrey[10],\n textSecondaryDefault: slateGrey[8],\n textSecondaryHover: slateGrey[9],\n iconPrimary: slateGrey[10],\n iconSecondary: slateGrey[8],\n};\n// ============================================================================\n// LOADING INDICATOR TOKENS\n// ============================================================================\nexport const loadingIndicator = {\n background: green[1],\n active: green[5],\n};\n// ============================================================================\n// DATE PICKER TOKENS\n// ============================================================================\nexport const datePicker = {\n textDefault: slateGrey[10],\n textSelected: base.white,\n textDisabled: slateGrey[7],\n backgroundDefault: slateGrey[2],\n backgroundMiddle: slateGrey[3],\n backgroundSelected: brand[3],\n border: slateGrey[4],\n};\n// ============================================================================\n// MISC TOKENS\n// ============================================================================\nexport const scroll = slateGrey[9];\n// ============================================================================\n// EXPORTS\n// ============================================================================\nexport const colors = {\n base,\n brand,\n slateGrey,\n green,\n yellow,\n red,\n blue,\n orange,\n purple,\n pink,\n legacy,\n text,\n background,\n border,\n button,\n badge,\n badgeBanner,\n alert,\n tag,\n menu,\n inputDropdown,\n inputField,\n toggle,\n checkbox,\n avatar,\n progressBarSlider,\n card,\n sidebar,\n modal,\n tab,\n table,\n breadcrumbs,\n loadingIndicator,\n datePicker,\n scroll,\n};\nexport default colors;\n", "\n function _RD() {\n return (typeof SynOS !== 'undefined' && SynOS.ReactDOM) || {};\n }\n export default new Proxy({}, { get: function(_, k) { return _RD()[k]; } });\n export function createRoot() { return _RD().createRoot.apply(null, arguments); }\n export function hydrateRoot() { return _RD().hydrateRoot.apply(null, arguments); }\n export function createPortal() { return _RD().createPortal.apply(null, arguments); }\n export function flushSync() { return _RD().flushSync.apply(null, arguments); }\n ", "/**\n * Adaptive Chatbot - Action Parser\n *\n * Extracts JSON action blocks from LLM markdown responses.\n * Actions are identified by having a `kind` field in a ```json code fence.\n */\n\nimport type { ActionBlock, ParsedResponse } from './types';\n\nconst JSON_FENCE_RE = /```json\\s*\\n([\\s\\S]*?)```/g;\n\n/**\n * Parse an LLM response, extracting action blocks from JSON code fences.\n *\n * - Blocks with a `kind` field are treated as actions and removed from display text.\n * - Blocks without `kind` or with invalid JSON are left in the display text.\n */\nexport function parseActions(input: string): ParsedResponse {\n const actions: ActionBlock[] = [];\n let displayText = input;\n\n // Collect matches in reverse order so we can splice display text without index shifting\n const matches: Array<{ fullMatch: string; json: string; index: number }> = [];\n let match: RegExpExecArray | null;\n\n // Reset regex state\n JSON_FENCE_RE.lastIndex = 0;\n while ((match = JSON_FENCE_RE.exec(input)) !== null) {\n matches.push({\n fullMatch: match[0],\n json: match[1],\n index: match.index,\n });\n }\n\n // Process in reverse to preserve indices when removing from displayText\n for (let i = matches.length - 1; i >= 0; i--) {\n const { fullMatch, json } = matches[i];\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch {\n // Malformed JSON \u2014 leave in display text\n continue;\n }\n\n if (\n typeof parsed === 'object' &&\n parsed !== null &&\n 'kind' in parsed &&\n typeof (parsed as Record<string, unknown>).kind === 'string'\n ) {\n actions.unshift(parsed as ActionBlock);\n // Remove the action block from display text\n displayText = displayText.replace(fullMatch, '');\n }\n }\n\n // Clean up extra blank lines left from removed blocks\n displayText = displayText.replace(/\\n{3,}/g, '\\n\\n').trim();\n\n return { displayText, actions };\n}\n", "/**\n * Adaptive Chatbot - API Client\n *\n * Auth-aware fetch client that reads Stytch JWT from cookies\n * and workspace ID from localStorage.\n */\n\nimport type { ChatApiRequest, ChatApiResponse } from './types';\n\nexport class AuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'AuthError';\n }\n}\n\n/**\n * Read auth credentials from browser cookie and localStorage.\n * Throws AuthError if credentials are missing.\n */\nexport function getAuthHeaders(): { Authorization: string; 'X-Workspace-Id': string } {\n const cookieMatch = document.cookie.match(/stytch_session_jwt=([^;]*)/);\n if (!cookieMatch || !cookieMatch[1]) {\n throw new AuthError('No authentication token found');\n }\n\n const workspaceId = localStorage.getItem('syntrologie_workspace_id');\n if (!workspaceId) {\n throw new AuthError('No workspace ID found');\n }\n\n return {\n Authorization: `Bearer ${cookieMatch[1]}`,\n 'X-Workspace-Id': workspaceId,\n };\n}\n\n/**\n * Send a chat message to the backend.\n */\nexport async function sendMessage(url: string, request: ChatApiRequest): Promise<ChatApiResponse> {\n const authHeaders = getAuthHeaders();\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...authHeaders,\n },\n body: JSON.stringify(request),\n });\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new AuthError('Session expired or unauthorized');\n }\n throw new Error(`Chat request failed: ${response.status} ${response.statusText}`);\n }\n\n return response.json();\n}\n", "/**\n * Adaptive Chatbot - useChat Hook\n *\n * React hook managing chat message state, API communication,\n * history management, and action execution via the runtime ActionEngine.\n */\n\nimport { useCallback, useRef, useState } from 'react';\n\nimport { parseActions } from './actionParser';\nimport { sendMessage } from './apiClient';\nimport type { BatchActionHandle, ChatbotWidgetRuntime, ChatMessage } from './types';\n\nexport interface UseChatOptions {\n backendUrl: string;\n tileId: string;\n runtime: ChatbotWidgetRuntime;\n greeting?: string;\n maxHistory?: number;\n mlflowRunId?: string;\n config?: Record<string, unknown>;\n}\n\nexport interface UseChatReturn {\n messages: ChatMessage[];\n isLoading: boolean;\n error: string | null;\n sendMessage: (text: string) => Promise<void>;\n clearMessages: () => void;\n}\n\nlet nextId = 0;\nfunction generateId(): string {\n return `msg-${Date.now()}-${++nextId}`;\n}\n\nexport function useChat(options: UseChatOptions): UseChatReturn {\n const { backendUrl, tileId, runtime, greeting, maxHistory = 20, mlflowRunId, config } = options;\n\n const [messages, setMessages] = useState<ChatMessage[]>(() => {\n if (greeting) {\n return [\n {\n id: generateId(),\n role: 'assistant' as const,\n text: greeting,\n timestamp: Date.now(),\n },\n ];\n }\n return [];\n });\n\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const batchHandleRef = useRef<BatchActionHandle | null>(null);\n\n const send = useCallback(\n async (text: string) => {\n const trimmed = text.trim();\n if (!trimmed) return;\n\n setError(null);\n\n const userMessage: ChatMessage = {\n id: generateId(),\n role: 'user',\n text: trimmed,\n timestamp: Date.now(),\n };\n\n setMessages((prev) => [...prev, userMessage]);\n setIsLoading(true);\n\n try {\n // Build history from current messages + new user message\n const currentMessages = [...messages, userMessage];\n const historySlice = currentMessages.slice(-maxHistory).map((m) => ({\n role: m.role,\n content: m.text,\n }));\n\n const response = await sendMessage(backendUrl, {\n message: trimmed,\n history: historySlice,\n mlflow_run_id: mlflowRunId,\n current_config: config,\n });\n\n // Parse actions from the LLM response\n const { displayText, actions } = parseActions(response.response);\n\n const assistantMessage: ChatMessage = {\n id: generateId(),\n role: 'assistant',\n text: displayText,\n timestamp: Date.now(),\n };\n\n setMessages((prev) => [...prev, assistantMessage]);\n\n // Execute actions if present\n if (actions.length > 0) {\n // Revert previous batch\n if (batchHandleRef.current?.isApplied()) {\n await batchHandleRef.current.revertAll();\n }\n\n batchHandleRef.current = await runtime.actions.applyBatch(actions);\n\n runtime.events.publish('chatbot.actions_applied', {\n count: actions.length,\n kinds: actions.map((a) => a.kind),\n tileId,\n });\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : 'An unexpected error occurred';\n setError(message);\n } finally {\n setIsLoading(false);\n }\n },\n [backendUrl, messages, maxHistory, mlflowRunId, config, runtime, tileId]\n );\n\n const clearMessages = useCallback(() => {\n setMessages([]);\n setError(null);\n // Revert any active actions\n if (batchHandleRef.current?.isApplied()) {\n batchHandleRef.current.revertAll();\n batchHandleRef.current = null;\n }\n sessionStorage.removeItem(`syntro:chatbot:history:${tileId}`);\n }, [tileId]);\n\n return {\n messages,\n isLoading,\n error,\n sendMessage: send,\n clearMessages,\n };\n}\n", "/**\n * Adaptive Chatbot - ChatAssistant Component\n *\n * Main React component for the AI chat assistant widget.\n * Renders a message list with auto-scroll, loading indicator, and input form.\n */\n\nimport { base, purple, red, slateGrey } from '@syntro/design-system/tokens';\nimport React, { useEffect, useRef } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport type { ChatbotConfig, ChatbotWidgetRuntime, ChatMessage } from './types';\nimport { useChat } from './useChat';\n\n// ============================================================================\n// Styles\n// ============================================================================\n\nconst styles = {\n container: {\n display: 'flex',\n flexDirection: 'column' as const,\n height: '100%',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n fontSize: '14px',\n },\n messageList: {\n flex: 1,\n overflowY: 'auto' as const,\n padding: '12px',\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '8px',\n },\n messageBubble: {\n maxWidth: '85%',\n padding: '8px 12px',\n borderRadius: '12px',\n lineHeight: 1.5,\n wordBreak: 'break-word' as const,\n },\n userMessage: {\n alignSelf: 'flex-end' as const,\n backgroundColor: purple[4],\n color: base.white,\n borderBottomRightRadius: '4px',\n },\n assistantMessage: {\n alignSelf: 'flex-start' as const,\n backgroundColor: 'rgba(255, 255, 255, 0.08)',\n color: slateGrey[10],\n borderBottomLeftRadius: '4px',\n },\n loadingDots: {\n alignSelf: 'flex-start' as const,\n padding: '8px 16px',\n backgroundColor: 'rgba(255, 255, 255, 0.05)',\n borderRadius: '12px',\n color: slateGrey[8],\n fontSize: '13px',\n },\n errorBanner: {\n padding: '8px 12px',\n backgroundColor: 'rgba(239, 68, 68, 0.1)',\n color: red[4],\n fontSize: '13px',\n borderRadius: '8px',\n margin: '0 12px',\n },\n inputForm: {\n display: 'flex',\n gap: '8px',\n padding: '12px',\n borderTop: '1px solid rgba(255, 255, 255, 0.06)',\n },\n input: {\n flex: 1,\n padding: '8px 12px',\n borderRadius: '8px',\n border: '1px solid rgba(255, 255, 255, 0.1)',\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\n color: slateGrey[12],\n fontSize: '14px',\n outline: 'none',\n fontFamily: 'inherit',\n },\n sendButton: {\n padding: '8px 16px',\n borderRadius: '8px',\n border: 'none',\n backgroundColor: purple[4],\n color: base.white,\n fontWeight: 600,\n fontSize: '13px',\n cursor: 'pointer',\n whiteSpace: 'nowrap' as const,\n },\n sendButtonDisabled: {\n opacity: 0.5,\n cursor: 'not-allowed' as const,\n },\n};\n\n// ============================================================================\n// MessageBubble Component\n// ============================================================================\n\nfunction MessageBubble({ message }: { message: ChatMessage }) {\n const isUser = message.role === 'user';\n const bubbleStyle = {\n ...styles.messageBubble,\n ...(isUser ? styles.userMessage : styles.assistantMessage),\n };\n\n return <div style={bubbleStyle}>{message.text}</div>;\n}\n\n// ============================================================================\n// ChatAssistant Component\n// ============================================================================\n\nexport interface ChatAssistantProps {\n config: ChatbotConfig;\n runtime: ChatbotWidgetRuntime;\n tileId: string;\n}\n\nexport function ChatAssistant({ config, runtime, tileId }: ChatAssistantProps) {\n const {\n messages,\n isLoading,\n error,\n sendMessage,\n clearMessages: _clearMessages,\n } = useChat({\n backendUrl: config.backendUrl,\n tileId,\n runtime,\n greeting: config.greeting,\n maxHistory: config.maxHistory,\n mlflowRunId: config.mlflowRunId,\n });\n\n const messageListRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Auto-scroll to bottom on new messages\n useEffect(() => {\n if (messageListRef.current) {\n messageListRef.current.scrollTop = messageListRef.current.scrollHeight;\n }\n }, []);\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const input = inputRef.current;\n if (!input || !input.value.trim() || isLoading) return;\n\n const text = input.value;\n input.value = '';\n sendMessage(text);\n };\n\n return (\n <div style={styles.container} data-testid=\"chat-assistant\">\n {/* Message list */}\n <div ref={messageListRef} style={styles.messageList}>\n {messages.map((msg) => (\n <MessageBubble key={msg.id} message={msg} />\n ))}\n {isLoading && <div style={styles.loadingDots}>Thinking...</div>}\n </div>\n\n {/* Error banner */}\n {error && <div style={styles.errorBanner}>{error}</div>}\n\n {/* Input form */}\n <form onSubmit={handleSubmit} style={styles.inputForm}>\n <input\n ref={inputRef}\n style={styles.input}\n placeholder=\"Ask anything...\"\n disabled={isLoading}\n data-testid=\"chat-input\"\n />\n <button\n type=\"submit\"\n disabled={isLoading}\n style={{\n ...styles.sendButton,\n ...(isLoading ? styles.sendButtonDisabled : {}),\n }}\n data-testid=\"chat-send\"\n >\n Send\n </button>\n </form>\n </div>\n );\n}\n\n// ============================================================================\n// Mountable Widget Interface\n// ============================================================================\n\nexport const ChatAssistantMountableWidget = {\n mount(container: HTMLElement, mountConfig?: Record<string, unknown>) {\n const {\n config,\n runtime,\n tileId = 'chatbot-widget',\n } = (mountConfig || {}) as {\n config?: ChatbotConfig;\n runtime?: ChatbotWidgetRuntime;\n tileId?: string;\n };\n\n // React rendering when config + runtime + ReactDOM are available\n if (config && runtime && typeof createRoot === 'function') {\n const root = createRoot(container);\n root.render(\n React.createElement(ChatAssistant, {\n config,\n runtime,\n tileId,\n })\n );\n return () => {\n root.unmount();\n };\n }\n\n if (!config || !runtime) {\n container.innerHTML = `<div style=\"padding: 16px; color: ${slateGrey[8]};\">Chat widget requires config and runtime.</div>`;\n return () => {\n container.innerHTML = '';\n };\n }\n\n // HTML fallback\n container.innerHTML = `\n <div style=\"padding: 16px; font-family: system-ui; color: ${slateGrey[10]};\">\n <p style=\"margin: 0 0 8px; color: ${slateGrey[8]};\">${config.greeting || 'Hi! How can I help?'}</p>\n <p style=\"margin: 0; font-size: 12px; color: ${slateGrey[7]};\">Chat widget mounted. Awaiting React renderer.</p>\n </div>\n `;\n\n return () => {\n container.innerHTML = '';\n };\n },\n};\n\nexport default ChatAssistant;\n", "/**\n * Adaptive Chatbot - Runtime Module\n *\n * Runtime manifest for the AI chat assistant adaptive.\n * This is a widget-based adaptive with no action executors.\n */\n\nimport { ChatAssistantMountableWidget } from './ChatAssistant';\n\n// ============================================================================\n// App Runtime Manifest\n// ============================================================================\n\nexport const runtime = {\n id: 'adaptive-chatbot',\n version: '1.0.0',\n name: 'Chat Assistant',\n description: 'AI chat assistant with action execution capabilities',\n\n /** No action executors \u2014 chatbot uses existing action kinds via applyBatch */\n executors: [],\n\n /** Widget definitions for the runtime's WidgetRegistry */\n widgets: [\n {\n id: 'adaptive-chatbot:assistant',\n component: ChatAssistantMountableWidget,\n metadata: {\n name: 'Chat Assistant',\n description: 'AI-powered chat assistant that can execute DOM actions',\n icon: '\uD83D\uDCAC',\n },\n },\n ],\n};\n\nexport default runtime;\n", "/**\n * CDN Entry Point for Adaptive Chatbot\n *\n * This module is bundled for CDN delivery and self-registers with the global\n * SynOS app registry when loaded dynamically via the AppLoader.\n */\n\nimport ChatbotEditor, { editorPanel } from './editor';\nimport { runtime } from './runtime';\n\n/**\n * App manifest for registry registration.\n * Follows the AppManifest interface expected by AppLoader/AppRegistry.\n */\nexport const manifest = {\n id: 'adaptive-chatbot',\n version: runtime.version,\n name: runtime.name,\n description: runtime.description,\n runtime: {\n actions: [],\n widgets: runtime.widgets,\n },\n editor: { component: ChatbotEditor, panel: editorPanel },\n metadata: {\n isBuiltIn: false,\n },\n};\n\n/**\n * Self-register with global registry if available.\n * This happens when loaded via script tag (UMD).\n */\nif (typeof window !== 'undefined') {\n const registry = (window as any).SynOS?.appRegistry;\n if (registry && typeof registry.register === 'function') {\n registry.register(manifest);\n }\n}\n\nexport default manifest;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["cn", "classes", "_R", "_jsx", "type", "props", "key", "R", "p", "c", "jsx", "jsxs", "Fragment", "_R", "react_default", "_", "k", "useState", "useEffect", "useCallback", "_R", "useRef", "_r", "_R", "Fragment", "Suspense", "Children", "Component", "PureComponent", "_RD", "react_dom_default", "_", "k", "CSS_SELECTOR_TYPE", "libraryName", "showWarning", "id", "args", "DEFAULT_OPTIONS", "CSS_SELECTOR_TYPE", "isRegExp", "input", "wildcardToRegExp", "input", "createPatternMatcher", "list", "matchFunctions", "item", "isRegExp", "result", "showWarning", "re", "matchFunction", "INVALID_ID_RE", "INVALID_CLASS_RE", "SELECTOR_PATTERN", "CSS_SELECTOR_TYPE", "attributeBlacklistMatch", "createPatternMatcher", "ESCAPED_COLON", "EditorBody", "children", "jsx", "EditorFooter", "onSave", "onPublish", "jsxs", "jsx", "EditorHeader", "title", "subtitle", "jsxs", "jsx", "EditorInput", "label", "className", "props", "jsxs", "jsx", "cn", "EditorLayout", "children", "jsx", "EditorTextarea", "label", "className", "value", "props", "ref", "useRef", "useEffect", "el", "jsxs", "jsx", "cn", "ChatbotEditor", "config", "onChange", "editor", "typedConfig", "initialConsumed", "useRef", "useEffect", "handleChange", "field", "value", "jsxs", "EditorLayout", "jsx", "EditorHeader", "EditorBody", "EditorInput", "e", "EditorTextarea", "EditorFooter", "editorPanel", "editor_default", "base", "brand", "slateGrey", "green", "yellow", "red", "blue", "orange", "purple", "pink", "text", "slateGrey", "background", "border", "button", "base", "brand", "red", "green", "badge", "yellow", "purple", "blue", "orange", "pink", "badgeBanner", "alert", "tag", "menu", "inputDropdown", "inputField", "toggle", "checkbox", "avatar", "progressBarSlider", "card", "sidebar", "modal", "tab", "table", "breadcrumbs", "loadingIndicator", "datePicker", "scroll", "_RD", "client_default", "_", "k", "createRoot", "JSON_FENCE_RE", "parseActions", "input", "actions", "displayText", "matches", "match", "fullMatch", "json", "parsed", "AuthError", "message", "getAuthHeaders", "cookieMatch", "workspaceId", "sendMessage", "url", "request", "authHeaders", "response", "nextId", "generateId", "useChat", "options", "backendUrl", "tileId", "runtime", "greeting", "maxHistory", "mlflowRunId", "config", "messages", "setMessages", "useState", "isLoading", "setIsLoading", "error", "setError", "batchHandleRef", "useRef", "send", "useCallback", "text", "trimmed", "userMessage", "prev", "historySlice", "m", "response", "sendMessage", "displayText", "actions", "parseActions", "assistantMessage", "a", "err", "message", "clearMessages", "styles", "purple", "base", "slateGrey", "red", "MessageBubble", "message", "isUser", "bubbleStyle", "jsx", "ChatAssistant", "config", "runtime", "tileId", "messages", "isLoading", "error", "sendMessage", "_clearMessages", "useChat", "messageListRef", "useRef", "inputRef", "useEffect", "handleSubmit", "e", "input", "text", "jsxs", "msg", "ChatAssistantMountableWidget", "container", "mountConfig", "createRoot", "root", "react_default", "runtime", "ChatAssistantMountableWidget", "manifest", "runtime", "editor_default", "editorPanel", "registry", "cdn_default"]
|
|
7
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
function k(...e){return e.filter(Boolean).join(" ")}function Je(){return typeof SynOS<"u"&&SynOS.React||{}}function Ye(e,t,a){var o=Je(),r=t||{},s=r.children;return delete r.children,a!==void 0&&(r.key=a),Array.isArray(s)?o.createElement.apply(null,[e,r].concat(s)):s!==void 0?o.createElement(e,r,s):o.createElement(e,r)}var l=Ye,n=Ye,E=Je().Fragment;function T(){return typeof SynOS<"u"&&SynOS.React||{}}var so=new Proxy({},{get:function(e,t){return T()[t]}});function h(){return T().useState.apply(null,arguments)}function y(){return T().useEffect.apply(null,arguments)}function L(){return T().useCallback.apply(null,arguments)}function R(){return T().useRef.apply(null,arguments)}function G(){return T().createElement.apply(null,arguments)}function se(){return T().forwardRef.apply(null,arguments)}var W=T(),lo=W.Fragment,uo=W.Suspense,fo=W.Children,no=W.Component,io=W.PureComponent;function ea(){return typeof SynOS<"u"&&SynOS.ReactDOM||{}}var po=new Proxy({},{get:function(e,t){return ea()[t]}});function le(){return ea().createPortal.apply(null,arguments)}function ue(e){return typeof e=="object"&&e!==null&&e.nodeType===Node.ELEMENT_NODE}var q={NONE:"",DESCENDANT:" ",CHILD:" > "},m={id:"id",class:"class",tag:"tag",attribute:"attribute",nthchild:"nthchild",nthoftype:"nthoftype"};function aa(e,t){return Object.values(e).includes(t)}var Xa="CssSelectorGenerator";function O(e="unknown problem",...t){console.warn(`${Xa}: ${e}`,...t)}var ja={selectors:[m.id,m.class,m.tag,m.attribute],includeTag:!1,whitelist:[],blacklist:[],combineWithinSelector:!0,combineBetweenSelectors:!0,root:null,maxCombinations:Number.POSITIVE_INFINITY,maxCandidates:Number.POSITIVE_INFINITY,useScope:!1};function Ka(e){return Array.isArray(e)?e.filter(t=>aa(m,t)):[]}function he(e){return e instanceof RegExp}function Za(e){return["string","function"].includes(typeof e)||he(e)}function ta(e){return Array.isArray(e)?e.filter(Za):[]}function Qa(e){return e instanceof Node}function oa(e){let t=[Node.DOCUMENT_NODE,Node.DOCUMENT_FRAGMENT_NODE,Node.ELEMENT_NODE];return Qa(e)&&t.includes(e.nodeType)}function Ce(e,t){if(oa(e))return e.contains(t)||O("element root mismatch","Provided root does not contain the element. This will most likely result in producing a fallback selector using element's real root node. If you plan to use the selector using provided root (e.g. `root.querySelector`), it will not work as intended."),e;let a=t.getRootNode({composed:!1});return oa(a)?(a!==document&&O("shadow root inferred","You did not provide a root and the element is a child of Shadow DOM. This will produce a selector using ShadowRoot as a root. If you plan to use the selector using document as a root (e.g. `document.querySelector`), it will not work as intended."),a):z(t)}function Ie(e){return typeof e=="number"?e:Number.POSITIVE_INFINITY}function ra(e,t={}){let a=Object.assign(Object.assign({},ja),t);return{selectors:Ka(a.selectors),whitelist:ta(a.whitelist),blacklist:ta(a.blacklist),root:Ce(a.root,e),combineWithinSelector:!!a.combineWithinSelector,combineBetweenSelectors:!!a.combineBetweenSelectors,includeTag:!!a.includeTag,maxCombinations:Ie(a.maxCombinations),maxCandidates:Ie(a.maxCandidates),useScope:!!a.useScope,maxResults:Ie(a.maxResults)}}function v(e=[]){let[t=[],...a]=e;return a.length===0?t:a.reduce((o,r)=>o.filter(s=>r.includes(s)),t)}function sa(e){return[].concat(...e)}function Ja(e){return e.replace(/[|\\{}()[\]^$+?.]/g,"\\$&").replace(/\*/g,".+")}function V(e){let t=e.map(a=>{if(he(a))return o=>a.test(o);if(typeof a=="function")return o=>{let r=a(o);return typeof r!="boolean"?(O("pattern matcher function invalid","Provided pattern matching function does not return boolean. It's result will be ignored.",a),!1):r};if(typeof a=="string"){let o=new RegExp("^"+Ja(a)+"$");return r=>o.test(r)}return O("pattern matcher invalid","Pattern matching only accepts strings, regular expressions and/or functions. This item is invalid and will be ignored.",a),()=>!1});return a=>t.some(o=>o(a))}function $(e,t,a){let o=Array.from(Ce(a,e[0]).querySelectorAll(t));return o.length===e.length&&e.every(r=>o.includes(r))}function ge(e,t){t=t??z(e);let a=[],o=e;for(;ue(o)&&o!==t;)a.push(o),o=o.parentElement;return a}function la(e,t){return v(e.map(a=>ge(a,t)))}function z(e){return e.ownerDocument.querySelector(":root")}var de=", ",ua=new RegExp(["^$","\\s"].join("|")),da=new RegExp(["^$"].join("|")),fe=[m.nthoftype,m.tag,m.id,m.class,m.attribute,m.nthchild];var Ya=V(["class","id","ng-*"]);function et({name:e}){return`[${e}]`}function at({name:e,value:t}){return`[${e}='${t}']`}function tt({nodeName:e,nodeValue:t},a){let o=a.tagName.toLowerCase();return["input","option"].includes(o)&&e==="value"||e==="src"&&t?.startsWith("data:")?!1:!Ya(e)}function ot({nodeName:e,nodeValue:t}){return{name:D(e),value:D(t??void 0)}}function Se(e){let t=Array.from(e.attributes).filter(a=>tt(a,e)).map(ot);return[...t.map(et),...t.map(at)]}function fa(e){let t=e.map(Se);return v(t)}function we(e){var t;return((t=e.getAttribute("class"))!==null&&t!==void 0?t:"").trim().split(/\s+/).filter(a=>!da.test(a)).map(a=>`.${D(a)}`)}function na(e){let t=e.map(we);return v(t)}function ke(e){var t;let a=(t=e.getAttribute("id"))!==null&&t!==void 0?t:"",o=`#${D(a)}`,r=e.getRootNode({composed:!1});return!ua.test(a)&&$([e],o,r)?[o]:[]}function ia(e){return e.length===0||e.length>1?[]:ke(e[0])}function be(e){var t;let a=(t=e.parentElement)===null||t===void 0?void 0:t.children;if(a){for(let o=0;o<a.length;o++)if(a[o]===e)return[`:nth-child(${String(o+1)})`]}return[]}function ca(e){return v(e.map(be))}function ye(e){return[D(e.tagName.toLowerCase())]}function ne(e){let t=[...new Set(sa(e.map(ye)))];return t.length===0||t.length>1?[]:[t[0]]}function Pe(e){let t=ne([e])[0],a=e.parentElement;if(a){let r=Array.from(a.children).filter(s=>s.tagName.toLowerCase()===t).indexOf(e);if(r>-1)return[`${t}:nth-of-type(${String(r+1)})`]}return[]}function pa(e){return v(e.map(Pe))}function*Me(e=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){let a=0,o=Ae(1);for(;o.length<=e.length&&a<t;)a+=1,yield o.map(s=>e[s]),o=rt(o,e.length-1)}function ma(e=[],{maxResults:t=Number.POSITIVE_INFINITY}={}){return Array.from(Me(e,{maxResults:t}))}function rt(e=[],t=0){let a=e.length;if(a===0)return[];let o=[...e];o[a-1]+=1;for(let r=a-1;r>=0;r--)if(o[r]>t){if(r===0)return Ae(a+1);o[r-1]++,o[r]=o[r-1]+1}return o[a-1]>t?Ae(a+1):o}function Ae(e=1){return Array.from(Array(e).keys())}function*La(e={}){let t=Object.entries(e);if(t.length===0)return;let a=[{index:t.length-1,partial:{}}];for(;a.length>0;){let o=a.pop();if(!o)break;let{index:r,partial:s}=o;if(r<0){yield s;continue}let[u,f]=t[r];for(let c=f.length-1;c>=0;c--)a.push({index:r-1,partial:Object.assign(Object.assign({},s),{[u]:f[c]})})}}var st="3a".toUpperCase(),lt=/[ !"#$%&'()\[\]{|}<>*+,./;=?@^`~\\]/;function D(e=""){return CSS?CSS.escape(e):ut(e)}function ut(e=""){return e.split("").map(t=>t===":"?`\\${st} `:lt.test(t)?`\\${t}`:escape(t).replace(/%/g,"\\")).join("")}var dt={tag:ne,id:ia,class:na,attribute:fa,nthchild:ca,nthoftype:pa},ft={tag:ye,id:ke,class:we,attribute:Se,nthchild:be,nthoftype:Pe};function xa(e,t){return ft[t](e)}function nt(e,t){let a=dt[t];return a(e)}function it(e=[],t,a){return e.filter(o=>a(o)||!t(o))}function ct(e=[],t){return e.sort((a,o)=>{let r=t(a),s=t(o);return r&&!s?-1:!r&&s?1:0})}function*pt(e,t){let a=new Set,o=mt(e,t);for(let r of ht(o,t))a.has(r)||(a.add(r),yield r)}function mt(e,t){let{blacklist:a,whitelist:o,combineWithinSelector:r,maxCombinations:s}=t,u=V(a),f=V(o),c=(C,p)=>{let S=nt(e,p),I=it(S,u,f),g=ct(I,f);return C[p]=r?Array.from(Me(g,{maxResults:s})):g.map(P=>[P]),C};return Lt(t).reduce(c,{})}function Lt(e){let{selectors:t,includeTag:a}=e,o=[...t];return a&&!o.includes("tag")&&o.push("tag"),o}function xt(e){return e.includes(m.tag)||e.includes(m.nthoftype)?[...e]:[...e,m.tag]}function It(e){let{selectors:t,combineBetweenSelectors:a,includeTag:o,maxCandidates:r}=e,s=a?ma(t,{maxResults:r}):t.map(u=>[u]);return o?s.map(xt):s}function*ht(e,t){for(let a of It(t))yield*Ct(a,e)}function*Ct(e,t){let a={};for(let o of e){let r=t[o];r&&r.length>0&&(a[o]=r)}for(let o of La(a))yield St(o)}function gt(e,t){return t[e]?t[e].join(""):""}function St(e={}){let t=[...fe];return e[m.tag]&&e[m.nthoftype]&&t.splice(t.indexOf(m.tag),1),t.map(a=>gt(a,e)).join("")}function wt(e,t){return[...e.map(a=>t+q.DESCENDANT+a),...e.map(a=>t+q.CHILD+a)]}function*kt(e,t){if(t==="")yield*e;else for(let a of e)yield*wt([a],t)}function*bt(e,t,a="",o){let r=pt(e,o);for(let s of kt(r,a))$(e,s,t)&&(yield s)}function*yt(e,t,a="",o){if(e.length===0)return null;let r=[e.length>1?e:[],...la(e,t).map(s=>[s])];for(let s of r)for(let u of bt(s,t,a,o))yield{foundElements:s,selector:u}}function*Ia({elements:e,root:t,rootSelector:a="",options:o}){let r=t,s=a,u=!0;for(;u;){let f=!1;for(let c of yt(e,r,s,o)){let{foundElements:C,selector:p}=c;if(f=!0,$(e,p,t))yield p;else{r=C[0],s=p;break}}f||(u=!1)}}function ha(e){(e instanceof NodeList||e instanceof HTMLCollection)&&(e=Array.from(e));let t=(Array.isArray(e)?e:[e]).filter(ue);return[...new Set(t)]}function Pt(e){return{value:e,include:!1}}function Ca(e,t,a=q.NONE){let o={};return t.forEach(r=>{Reflect.set(o,r,xa(e,r).map(Pt))}),{element:e,operator:a,selectors:o}}function ga({selectors:e,operator:t}){let a=[...fe];e[m.tag]&&e[m.nthoftype]&&(a=a.filter(r=>r!==m.tag));let o="";return a.forEach(r=>{var s;((s=e[r])!==null&&s!==void 0?s:[]).forEach(({value:f,include:c})=>{c&&(o+=f)})}),t+o}function At(e,t){let o=ge(e,t).reverse().map(r=>{var s;let u=Ca(r,[m.nthchild],q.CHILD);return((s=u.selectors.nthchild)!==null&&s!==void 0?s:[]).forEach(f=>{f.include=!0}),u});return[t?":scope":":root",...o.map(ga)].join("")}function Sa(e,t){return e.map(a=>At(a,t)).join(de)}function ve(e,t={}){let a=Object.assign(Object.assign({},t),{maxResults:1});return Mt(e,a).next().value}function*Mt(e,t={}){var a;let o=ha(e),r=ra(o[0],t),s=(a=r.root)!==null&&a!==void 0?a:z(o[0]),u=0;for(let f of Ia({elements:o,options:r,root:s,rootSelector:""}))if(yield f,u++,u>=r.maxResults)return;o.length>1&&(yield o.map(f=>ve(f,r)).join(de),u++,u>=r.maxResults)||(yield Sa(o,r.useScope?s:void 0))}var vt={includeTag:!0,preferTestIds:!0,maxCombinations:100};function ie(e,t={}){let a={...vt,...t},o=[];o.push("id"),a.preferTestIds&&o.push("attribute"),o.push("class"),o.push("tag"),o.push("nthchild"),o.push("nthoftype");try{return ve(e,{selectors:o,includeTag:a.includeTag,maxCombinations:a.maxCombinations,blacklist:[/^[a-z]+-[a-f0-9]{5,}$/i,/^_[a-zA-Z0-9]+$/,/^svelte-[a-z0-9]+$/i,/^vue-[a-z0-9]+$/i,/^emotion-[0-9]+$/,/^sc-[a-zA-Z]+$/,/^(is-|has-|js-)/,/^(active|selected|focused|disabled|hidden|visible)$/,/^(fade|slide|animate)/,/-(enter|leave|active)(-active|-done)?$/],whitelist:[/^data-testid$/,/^data-cy$/,/^data-test$/,/^data-qa$/,/^aria-label$/,/^role$/,/^name$/,/^type$/,/^href$/]})}catch(r){return console.warn("[SelectorGenerator] Failed to generate selector:",r),Bt(e)}}function Bt(e){let t=[],a=e;for(;a&&a!==document.body&&a!==document.documentElement;){let o=a.tagName.toLowerCase();if(a.id){o=`#${CSS.escape(a.id)}`,t.unshift(o);break}let r=a.parentElement;if(r){let u=Array.from(r.children).indexOf(a)+1;o+=`:nth-child(${u})`}t.unshift(o),a=r}return t.join(" > ")}function Be(e,t){try{return document.querySelector(e)===t}catch{return!1}}function _(e){let t=e.tagName.toLowerCase(),a=e.id?`#${e.id}`:"",o=e.className&&typeof e.className=="string"?`.${e.className.split(" ").filter(u=>u&&!Rt(u)).slice(0,2).join(".")}`:"",r=e.textContent?.trim().slice(0,30)||"",s=r?` "${r}${r.length>=30?"...":""}"`:"";return`${t}${a}${o}${s}`.trim()}function Rt(e){return[/^[a-z]+-[a-f0-9]{5,}$/i,/^_[a-zA-Z0-9]+$/,/^svelte-[a-z0-9]+$/i,/^vue-[a-z0-9]+$/i,/^emotion-[0-9]+$/,/^sc-[a-zA-Z]+$/].some(a=>a.test(e))}var Dt="#3b82f6",Tt="rgba(59, 130, 246, 0.1)";function ce({isActive:e,onPick:t,onCancel:a,excludeSelector:o="[data-syntro-editor-panel], [data-shadow-canvas-id], .syntro-tooltip, .syntro-modal, .syntro-highlight, [data-syntro-anchor-picker]"}){let[r,s]=h(null),[u,f]=h(""),c=R(null),C=L(g=>{let P=c.current;P&&(P.style.pointerEvents="none");let M=document.elementFromPoint(g.clientX,g.clientY);if(P&&(P.style.pointerEvents="auto"),!M){s(null),f("");return}if(o&&M.closest(o)){s(null),f("");return}if(["HTML","BODY","HEAD"].includes(M.tagName)){s(null),f("");return}s(M);let te=ie(M);f(te)},[o]),p=L(g=>{if(g.preventDefault(),g.stopPropagation(),r&&u)if(Be(u,r))t({element:r,selector:u,description:_(r)});else{let P=ie(r);t({element:r,selector:P,description:_(r)})}},[r,u,t]),S=L(g=>{g.key==="Escape"&&(g.preventDefault(),a())},[a]);if(y(()=>{if(e)return document.addEventListener("mousemove",C,!0),document.addEventListener("click",p,!0),document.addEventListener("keydown",S,!0),()=>{document.removeEventListener("mousemove",C,!0),document.removeEventListener("click",p,!0),document.removeEventListener("keydown",S,!0)}},[e,C,p,S]),!e)return null;let I=r?.getBoundingClientRect();return le(n("div",{ref:c,"data-syntro-anchor-picker":!0,style:{position:"fixed",inset:0,cursor:"crosshair",zIndex:2147483647},children:[l("div",{style:{position:"absolute",inset:0,background:"rgba(0, 0, 0, 0.05)",pointerEvents:"none"}}),r&&I&&l("div",{style:{position:"fixed",left:I.left-2,top:I.top-2,width:I.width+4,height:I.height+4,border:`2px solid ${Dt}`,backgroundColor:Tt,borderRadius:"4px",boxShadow:"0 0 0 9999px rgba(0, 0, 0, 0.15)",pointerEvents:"none",transition:"all 0.1s ease-out"}}),r&&I&&n("div",{style:{position:"fixed",left:Math.max(8,Math.min(I.left,window.innerWidth-320)),top:Math.max(8,I.top-68),backgroundColor:"#1e293b",color:"#e2e8f0",padding:"8px 12px",borderRadius:"6px",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.3)",zIndex:1,fontFamily:"monospace",fontSize:"12px",maxWidth:"300px",pointerEvents:"none"},children:[l("div",{style:{fontSize:"11px",textTransform:"uppercase",letterSpacing:"0.05em",marginBottom:"4px",color:"#94a3b8"},children:"Click to select"}),l("div",{style:{color:"#38bdf8",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:u}),l("div",{style:{marginTop:"4px",color:"#cbd5e1",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:_(r)})]})]}),document.body)}var wa=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Ft=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,a,o)=>o?o.toUpperCase():a.toLowerCase()),Re=e=>{let t=Ft(e);return t.charAt(0).toUpperCase()+t.slice(1)},pe=(...e)=>e.filter((t,a,o)=>!!t&&t.trim()!==""&&o.indexOf(t)===a).join(" ").trim(),ka=e=>{for(let t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};var ba={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var ya=se(({color:e="currentColor",size:t=24,strokeWidth:a=2,absoluteStrokeWidth:o,className:r="",children:s,iconNode:u,...f},c)=>G("svg",{ref:c,...ba,width:t,height:t,stroke:e,strokeWidth:o?Number(a)*24/Number(t):a,className:pe("lucide",r),...!s&&!ka(f)&&{"aria-hidden":"true"},...f},[...u.map(([C,p])=>G(C,p)),...Array.isArray(s)?s:[s]]));var A=(e,t)=>{let a=se(({className:o,...r},s)=>G(ya,{ref:s,iconNode:t,className:pe(`lucide-${wa(Re(e))}`,`lucide-${e}`,o),...r}));return a.displayName=Re(e),a};var qt=[["path",{d:"M10 12.5 8 15l2 2.5",key:"1tg20x"}],["path",{d:"m14 12.5 2 2.5-2 2.5",key:"yinavb"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z",key:"1mlx9k"}]],X=A("file-code",qt);var Et=[["path",{d:"M5 12h14",key:"1ays0h"}]],j=A("minus",Et);var Ot=[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]],K=A("palette",Ot);var Ht=[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]],Z=A("plus",Ht);var Ut=[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]],Q=A("tag",Ut);var Nt=[["path",{d:"M12 4v16",key:"1654pz"}],["path",{d:"M4 7V5a1 1 0 0 1 1-1h14a1 1 0 0 1 1 1v2",key:"e0r10z"}],["path",{d:"M9 20h6",key:"s66wpe"}]],J=A("type",Nt);function De({found:e}){return l("span",{className:k("se-w-2 se-h-2 se-rounded-full se-shrink-0 se-inline-block",e?"se-bg-green-4":"se-bg-text-tertiary"),title:e?"Found on this page":"Not found on this page"})}function Te({count:e,children:t}){let[a,o]=h(!1);return n("div",{className:"se-mt-4 se-cursor-pointer se-select-none",children:[n("div",{role:"button",tabIndex:0,className:"se-text-xs se-font-semibold se-text-text-tertiary se-flex se-items-center se-gap-1.5 se-cursor-pointer",onClick:()=>o(!a),onKeyDown:r=>{(r.key==="Enter"||r.key===" ")&&o(!a)},children:[l("span",{children:a?"\u25BE":"\u25B8"}),n("span",{children:["Dismissed (",e,")"]})]}),a&&l("div",{className:"se-mt-1.5",children:t})]})}function Fe({children:e}){return l("div",{className:"se-flex-1 se-overflow-auto se-p-6",children:e})}function qe({children:e,itemKey:t,onClick:a,onMouseEnter:o,onMouseLeave:r,className:s,validated:u}){return l("div",{"data-item-key":t,onClick:a,onMouseEnter:o,onMouseLeave:r,className:k("se-py-2 se-px-2.5 se-rounded-lg se-border se-bg-card-bg se-shadow-sm se-mb-1 se-text-sm se-text-text-primary",u?"se-border-green-4/40 se-shadow-glow-green":"se-border-border-primary",a&&"se-cursor-pointer hover:se-border-border-primary/80 hover:se-bg-sidebar-hover se-transition-colors",s),children:e})}function Ee({onSave:e,onPublish:t}){return n("div",{className:"se-py-3 se-px-4 se-border-t se-border-border-primary se-flex se-gap-2",children:[l("button",{onClick:e,className:"se-flex-1 se-h-10 se-px-4 se-py-2 se-rounded-md se-bg-btn-neutral se-text-btn-neutral-text se-border se-border-btn-neutral-border hover:se-text-btn-neutral-text-hover se-text-sm se-font-medium se-cursor-pointer se-inline-flex se-items-center se-justify-center focus-visible:se-shadow-focus-primary focus-visible:se-outline-none",children:"Save Draft"}),l("button",{onClick:t,className:"se-flex-1 se-h-10 se-px-4 se-py-2 se-rounded-md se-border-none se-bg-btn-primary se-text-btn-primary-text hover:se-bg-btn-primary-hover se-text-sm se-font-medium se-cursor-pointer se-inline-flex se-items-center se-justify-center focus-visible:se-shadow-focus-primary focus-visible:se-outline-none",children:"Publish"})]})}function Oe({title:e,subtitle:t}){return n("div",{className:"se-px-4 se-pt-3 se-pb-2",children:[l("h2",{className:"se-m-0 se-text-base se-font-semibold se-text-text-primary",children:e}),t&&l("p",{className:"se-mt-0.5 se-mb-0 se-text-xs se-text-text-secondary",children:t})]})}function Y({label:e,className:t,...a}){return n("div",{children:[e&&l("label",{className:"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block",children:e}),l("input",{...a,className:k("se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-font-[inherit] se-mb-2 se-box-border","placeholder:se-text-input-field-text-placeholder","focus:se-border-input-field-border-selected focus:se-outline-none focus:se-shadow-focus-primary","disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50",t)})]})}function He({children:e}){return l("div",{className:"se-flex se-flex-col se-h-full se-font-sans",children:e})}function Ue({label:e,className:t,children:a,...o}){return n("div",{children:[e&&l("label",{className:"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block",children:e}),l("select",{...o,className:k("se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-mb-2","focus:se-border-input-field-border-selected focus:se-outline-none focus:se-shadow-focus-primary","disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50",t),children:a})]})}function ee({label:e,className:t,value:a,...o}){let r=R(null);return y(()=>{let s=r.current;s&&(s.style.height="auto",s.style.height=`${s.scrollHeight}px`)},[a]),n("div",{children:[e&&l("label",{className:"se-text-sm se-font-medium se-text-input-field-text-label se-mb-1 se-block",children:e}),l("textarea",{ref:r,value:a,...o,className:k("se-w-full se-py-2 se-px-3 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-font-[inherit] se-mb-2 se-resize-y se-min-h-[60px] se-max-h-[50vh] se-overflow-y-auto se-box-border","placeholder:se-text-input-field-text-placeholder","focus:se-border-input-field-border-selected focus:se-outline-none focus:se-shadow-focus-primary","disabled:se-bg-input-field-bg-disabled disabled:se-cursor-not-allowed disabled:se-opacity-50",t)})]})}function Ne({message:e}){return l("div",{className:"se-text-center se-py-8 se-px-4 se-text-text-secondary se-text-sm",children:e})}function Ge({label:e,count:t,className:a}){return n("div",{className:k("se-text-xs se-font-bold se-text-text-primary se-uppercase se-tracking-wide se-py-1 se-pb-2 se-flex se-items-center se-justify-between",a),children:[l("span",{children:e}),l("span",{className:"se-text-xs se-text-text-secondary se-bg-badge-slate-bg se-px-1.5 se-py-0.5 se-rounded-lg",children:t})]})}function zt(e){if(!e)return"(no target)";if(e.startsWith("#")){let a=e.slice(1),o=["hero-","main-","page-","app-","section-"];for(let r of o)if(a.startsWith(r)){a=a.slice(r.length);break}return Pa(a,50)}let t=e.match(/\[data-testid="([^"]+)"\]/);return t?`${t[1]} element`:Pa(e,50)}function Pa(e,t){return e.length<=t?e:`${e.slice(0,t)}...`}function Aa(e,t){return e.length<=t?`"${e}"`:`"${e.slice(0,t)}..."`}function Ma(e,t){let a=zt(t.anchorId||"");switch(e){case"textReplacements":{let o=t.text||"";return`Change ${a} to ${Aa(o,40)}`}case"attributeChanges":{let o=t.attr||"",r=t.value||"";return`Set ${a} ${o} to ${Aa(r,40)}`}case"styleChanges":{let o=t.styles||{},r=Object.keys(o).length;return`Restyle ${a} (${r} ${r===1?"property":"properties"})`}case"htmlInsertions":return`Insert HTML ${t.position||"append"} ${a}`;case"classAdditions":return`Add class "${t.className||""}" to ${a}`;case"classRemovals":return`Remove class "${t.className||""}" from ${a}`;default:return`Unknown change on ${a}`}}function va(e,t){return`${e}:${t}`}function Vt(e){let[t,a]=e.split(":");return{section:t,index:Number(a)}}var $e={textReplacements:J,attributeChanges:Q,styleChanges:K,htmlInsertions:X,classAdditions:Z,classRemovals:j};function We({section:e,className:t}){let a=$e[e];return l(a,{size:16,className:t})}function ze(e){let t=[],a=Object.keys($e);for(let o of a)(e[o]||[]).forEach((s,u)=>{let f=s;t.push({key:va(o,u),section:o,index:u,summary:Ma(o,f),anchorId:f.anchorId||""})});return t}function Ve(e,t){let a={...e},o=Object.keys($e);for(let r of o){let u=(e[r]||[]).filter((f,c)=>!t.has(va(r,c)));(u.length>0||e[r]!==void 0)&&(a[r]=u)}return a}function $t(e){let[t,a]=h(new Map),o=R(e);return o.current=e,y(()=>{let r=()=>{let u=new Map;for(let f of o.current){if(!f.anchorId){u.set(f.key,{found:!1,element:null});continue}try{let c=document.querySelector(f.anchorId);u.set(f.key,{found:c!==null,element:c})}catch{u.set(f.key,{found:!1,element:null})}}a(u)};r();let s=setInterval(r,2e3);return()=>clearInterval(s)},[]),t}function _t({config:e,onChange:t,editor:a}){let o=e,[r,s]=h(()=>a.getDismissedKeys?.()??new Set),[u,f]=h(null),[c,C]=h("after");y(()=>{a.setDismissedKeys?.(r)},[r,a]);let[p,S]=h(null),[I,g]=h(""),[P,M]=h(""),[te,oe]=h("");y(()=>{let d=a.previewMode;if(d)if(d==="before"){let i=new Set(ze(o).map(b=>b.key)),x=Ve(o,i);a.previewConfig(x)}else a.previewConfig(e)},[a.previewMode]);let re=R(!1);y(()=>{if(a.initialEditKey!=null&&!re.current){re.current=!0;let d=ze(o),i=Number(a.initialEditKey);if(i>=0&&i<d.length){let x=d[i];f(x.key),x.anchorId&&a.highlightElement(x.anchorId)}a.clearInitialState?.()}else a.initialCreate&&!re.current&&(re.current=!0,S("form"),a.clearInitialState?.())},[a,o]);let H=ze(o),U=H.filter(d=>!r.has(d.key)),me=H.filter(d=>r.has(d.key)),Le=U.length,[eo,Ke]=h(null),Ze=$t(H),Ra=U.filter(d=>Ze.get(d.key)?.found).length,Da=L(d=>{s(i=>{let x=new Set(i);return x.add(d),x}),u===d&&f(null)},[u]),Ta=L(d=>{s(i=>{let x=new Set(i);return x.delete(d),x})},[]),Fa=L(d=>{d.anchorId&&a.highlightElement(d.anchorId),f(d.key)},[a]),xe=L(()=>{f(null),C("after"),a.previewConfig(e),a.clearHighlight()},[a,e]);y(()=>(a.setBackHandler?.(u!==null?xe:null),()=>a.setBackHandler?.(null)),[u,xe,a]);let ao=L(d=>{if(C(d),d==="before"){let i=Ve(o,new Set([u]));a.previewConfig(i)}else a.previewConfig(e)},[o,u,a,e]),F=L((d,i,x,b)=>{let B=(o[d]||[]).slice(),w={...B[i]};w[x]=b,B[i]=w;let N={...o,[d]:B};t(N),a.setDirty(!0)},[o,t,a]),qa=L(()=>{if(r.size>0){let d=Ve(o,r);t(d)}a.publish()},[r,o,t,a]),Ea=L(d=>{Ke(d.key),d.anchorId&&a.highlightElement(d.anchorId)},[a]),Oa=L(()=>{Ke(null),a.clearHighlight()},[a]),Ha=L(()=>{f(null),a.clearHighlight(),g(""),M(""),oe(""),S("form")},[a]),Ua=L(d=>{g(d.selector),oe(d.description);let i=d.element.textContent?.trim()||"";M(i),S("form"),a.highlightElement(d.selector)},[a]),Qe=L(()=>{S(null),g(""),M(""),oe(""),a.clearHighlight()},[a]),Na=L(()=>{if(!I)return;let d=o.textReplacements||[],i={anchorId:I,text:P,summary:`Set text on ${I}`},x={...o,textReplacements:[...d,i]};t(x),a.setDirty(!0),S(null),g(""),M(""),oe(""),a.clearHighlight()},[I,P,o,t,a]),Ga=(d,i)=>{let b=(o[d]||[])[i];if(!b)return null;let B=b.anchorId||"";switch(d){case"textReplacements":return n("div",{className:"se-py-1",children:[l("div",{className:"se-text-sm se-font-mono se-text-text-secondary se-py-1 se-px-2 se-bg-slate-grey-3 se-rounded-lg se-mb-3",children:B}),l(ee,{label:"Text",value:b.text||"",onChange:w=>F(d,i,"text",w.target.value)})]});case"attributeChanges":return n("div",{className:"se-py-1",children:[l("div",{className:"se-text-sm se-font-mono se-text-text-secondary se-py-1 se-px-2 se-bg-slate-grey-3 se-rounded-lg se-mb-3",children:B}),l(Y,{label:"Attribute",value:b.attr||"",onChange:w=>F(d,i,"attr",w.target.value)}),l(Y,{label:"Value",value:b.value||"",onChange:w=>F(d,i,"value",w.target.value)})]});case"styleChanges":{let w=b.styles||{};return n("div",{className:"se-py-1",children:[l("div",{className:"se-text-sm se-font-mono se-text-text-secondary se-py-1 se-px-2 se-bg-slate-grey-3 se-rounded-lg se-mb-3",children:B}),l("label",{className:"se-text-[11px] se-font-semibold se-text-slate-grey-7 se-mb-1 se-block",children:"Styles"}),Object.entries(w).map(([N,Va])=>n("div",{className:"se-flex se-gap-1 se-mb-1",children:[l("input",{className:"se-flex-1 se-py-1.5 se-px-2 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-font-[inherit] se-box-border",value:N,readOnly:!0}),l("input",{className:"se-flex-1 se-py-1.5 se-px-2 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-font-[inherit] se-box-border",value:Va,onChange:$a=>{let _a={...w,[N]:$a.target.value};F(d,i,"styles",_a)}})]},N))]})}case"htmlInsertions":return n("div",{className:"se-py-1",children:[l("div",{className:"se-text-sm se-font-mono se-text-text-secondary se-py-1 se-px-2 se-bg-slate-grey-3 se-rounded-lg se-mb-3",children:B}),n(Ue,{label:"Position",value:b.position||"after",onChange:w=>F(d,i,"position",w.target.value),children:[l("option",{value:"before",children:"Before"}),l("option",{value:"after",children:"After"}),l("option",{value:"prepend",children:"Prepend"}),l("option",{value:"append",children:"Append"}),l("option",{value:"replace",children:"Replace"})]}),l(ee,{label:"HTML",value:b.html||"",onChange:w=>F(d,i,"html",w.target.value),className:"se-font-mono"})]});case"classAdditions":case"classRemovals":return n("div",{className:"se-py-1",children:[l("div",{className:"se-text-sm se-font-mono se-text-text-secondary se-py-1 se-px-2 se-bg-slate-grey-3 se-rounded-lg se-mb-3",children:B}),l(Y,{label:"Class Name",value:b.className||"",onChange:w=>F(d,i,"className",w.target.value)})]});default:return null}},Wa=p==="form"||p==="picking"?"Add Text Change":"Content",za=p==="picking"?"Click an element on the page to select it. Press ESC to go back.":p==="form"?"Pick an element and set its new text":`${Le} change${Le!==1?"s":""}${Le>0?` (${Ra} found on this page)`:""}`;return n(He,{children:[l(Oe,{title:Wa,subtitle:za,onBack:()=>{p==="picking"?S("form"):p==="form"?Qe():u!==null?xe():a.navigateHome()}}),l(Fe,{children:p==="form"||p==="picking"?n("div",{className:"se-flex se-flex-col se-gap-4",children:[n("div",{className:"se-flex se-flex-col se-gap-1.5",children:[l("span",{className:"se-text-sm se-font-semibold se-text-text-primary se-uppercase se-tracking-wide",children:"Target Element"}),I?n("div",{className:"se-flex se-gap-2 se-items-center",children:[l("code",{className:"se-flex-1 se-py-1.5 se-px-2 se-rounded-lg se-border se-border-input-field-border se-bg-slate-grey-3 se-text-text-primary se-text-sm se-overflow-hidden se-text-ellipsis se-whitespace-nowrap",children:I}),l("button",{type:"button",onClick:()=>S("picking"),className:"se-py-1.5 se-px-3 se-rounded-lg se-border se-border-btn-neutral-border se-bg-btn-neutral se-text-btn-neutral-text se-text-sm se-cursor-pointer se-shrink-0 hover:se-text-btn-neutral-text-hover",children:"Re-pick"})]}):l("button",{type:"button",onClick:()=>S("picking"),className:"se-w-full se-h-12 se-px-4 se-py-2 se-rounded-lg se-border-2 se-border-dashed se-border-btn-primary/30 se-bg-btn-primary/5 se-text-btn-primary se-text-sm se-font-medium se-cursor-pointer se-inline-flex se-items-center se-justify-center se-gap-2 hover:se-bg-btn-primary/10 hover:se-border-btn-primary/50",children:"+ Pick Target Element"}),te&&l("span",{className:"se-text-sm se-text-text-secondary",children:te})]}),n("div",{className:"se-flex se-flex-col se-gap-1.5",children:[l("span",{className:"se-text-sm se-font-semibold se-text-text-primary se-uppercase se-tracking-wide",children:"Text Content"}),l(ee,{value:P,onChange:d=>M(d.target.value)})]}),n("div",{className:"se-flex se-gap-2 se-mt-2",children:[l("button",{type:"button",onClick:Qe,className:"se-flex-1 se-h-10 se-px-4 se-py-2 se-rounded-md se-border se-border-btn-neutral-border se-bg-btn-neutral se-text-btn-neutral-text se-text-sm se-font-medium se-cursor-pointer se-inline-flex se-items-center se-justify-center hover:se-text-btn-neutral-text-hover",children:"Cancel"}),l("button",{type:"button",onClick:Na,disabled:!I,className:"se-flex-1 se-h-10 se-px-4 se-py-2 se-rounded-md se-border-none se-bg-btn-primary se-text-btn-primary-text se-text-sm se-font-medium se-cursor-pointer se-inline-flex se-items-center se-justify-center hover:se-bg-btn-primary-hover disabled:se-opacity-50 disabled:se-pointer-events-none",children:"Add Change"})]})]}):u!==null?(()=>{let d=Vt(u),i=H.find(x=>x.key===u);return n(E,{children:[n("div",{className:"se-flex se-items-center se-gap-2 se-mb-3 se-text-lg se-font-semibold se-text-text-primary",children:[l("span",{children:i&&l(We,{section:i.section})}),l("span",{children:i?.summary})]}),Ga(d.section,d.index)]})})():n(E,{children:[l("button",{type:"button",onClick:Ha,className:"se-w-full se-h-10 se-px-4 se-py-2 se-rounded-md se-border se-border-dashed se-border-btn-primary/30 se-bg-btn-primary/5 se-text-btn-primary se-text-sm se-font-medium se-cursor-pointer se-flex se-items-center se-justify-center se-gap-2 se-mb-3",children:"+ Add Text Change"}),H.length===0&&l(Ne,{message:"No content changes configured. Click above to add one."}),U.length>0&&n(E,{children:[l(Ge,{label:"CONTENT",count:U.length}),U.map(d=>{let i=Ze.get(d.key);return n(qe,{itemKey:d.key,onClick:()=>Fa(d),className:"se-flex se-items-center se-gap-2",onMouseEnter:()=>Ea(d),onMouseLeave:Oa,children:[l(De,{found:i?.found??!1}),l("span",{className:"se-shrink-0 se-flex se-items-center -se-ml-1",children:l(We,{section:d.section})}),l("span",{className:"se-flex-1 se-overflow-hidden se-text-ellipsis se-whitespace-nowrap",children:d.summary}),l("button",{type:"button",className:"se-py-0.5 se-px-1.5 se-rounded se-border-none se-bg-transparent se-text-slate-grey-7 se-text-sm se-cursor-pointer se-shrink-0 se-leading-none",onClick:x=>{x.stopPropagation(),Da(d.key)},title:"Dismiss this change",children:"\xD7"})]},d.key)})]}),me.length>0&&l(Te,{count:me.length,children:me.map(d=>n("div",{className:"se-flex se-items-center se-gap-2 se-py-1.5 se-px-2.5 se-rounded-lg se-border se-border-white/[0.03] se-bg-transparent se-mb-0.5 se-cursor-pointer se-text-sm se-text-text-tertiary se-opacity-60",children:[l("span",{className:"se-shrink-0 se-flex se-items-center -se-ml-1",children:l(We,{section:d.section})}),l("span",{className:"se-flex-1 se-overflow-hidden se-text-ellipsis se-whitespace-nowrap se-line-through",children:d.summary}),l("button",{type:"button",className:"se-py-0.5 se-px-1.5 se-rounded se-border-none se-bg-transparent se-text-blue-5 se-text-[11px] se-cursor-pointer se-shrink-0 se-leading-none",onClick:i=>{i.stopPropagation(),Ta(d.key)},children:"Restore"})]},d.key))})]})}),l(Ee,{onSave:()=>a.save(),onPublish:qa}),l(ce,{isActive:p==="picking",onPick:Ua,onCancel:()=>S("form")})]})}var _e={panel:{title:"Content",icon:"\u{1F4DD}",description:"Text and attribute modifications"},component:_t},tu=_e.panel;var Xt=new Set(["b","strong","i","em","u","span","div","p","br","ul","ol","li","code","pre","small","sup","sub","a","button"]);function Xe(e){if(typeof window.Sanitizer=="function")try{let f=new window.Sanitizer({}).sanitizeToFragment(e),c=document.createElement("div");return c.append(f),c.innerHTML}catch{}let a=document.createElement("template");a.innerHTML=e;let o=a.content,r=document.createTreeWalker(o,NodeFilter.SHOW_ELEMENT,null),s=[];for(;r.nextNode();){let u=r.currentNode,f=u.tagName.toLowerCase();if(!Xt.has(f)){s.push(u);continue}for(let c of Array.from(u.attributes)){let C=c.name.toLowerCase(),p=c.value.trim().toLowerCase(),S=C.startsWith("on"),g=(C==="href"||C==="src"||C==="formaction")&&(p.startsWith("javascript:")||p.startsWith("vbscript:")||p.startsWith("data:text/html"));(S||g)&&u.removeAttribute(c.name)}}for(let u of s){for(;u.firstChild;)u.parentNode?.insertBefore(u.firstChild,u);u.remove()}return a.innerHTML}var jt=async(e,t)=>{let a=t.resolveAnchor(e.anchorId);if(!a)throw new Error(`Anchor not found: ${e.anchorId}`);let o=Xe(e.html),r=document.createElement("div");r.setAttribute("data-syntro-action-id",t.generateId()),r.innerHTML=o;let s=null;switch(e.position){case"before":a.insertAdjacentElement("beforebegin",r);break;case"after":a.insertAdjacentElement("afterend",r);break;case"prepend":a.insertBefore(r,a.firstChild);break;case"append":a.appendChild(r);break;case"replace":s=a.innerHTML,a.replaceWith(r);break}return t.publishEvent("action.applied",{id:t.generateId(),kind:"content:insertHtml",anchorId:e.anchorId,position:e.position}),{cleanup:()=>{if(e.position==="replace"&&s!==null){let u=document.createElement(a.tagName);u.innerHTML=s,Array.from(a.attributes).forEach(f=>{u.setAttribute(f.name,f.value)}),r.replaceWith(u)}else r.remove()},updateFn:u=>{"html"in u&&typeof u.html=="string"&&(r.innerHTML=Xe(u.html))}}},Kt=async(e,t)=>{let a=t.resolveAnchor(e.anchorId);if(!a)throw new Error(`Anchor not found: ${e.anchorId}`);let o=a.textContent??"";return a.textContent=e.text,t.publishEvent("action.applied",{id:t.generateId(),kind:"content:setText",anchorId:e.anchorId}),{cleanup:()=>{a.textContent=o},updateFn:r=>{"text"in r&&typeof r.text=="string"&&(a.textContent=r.text)}}},Zt=async(e,t)=>{let a=t.resolveAnchor(e.anchorId);if(!a)throw new Error(`Anchor not found: ${e.anchorId}`);let o=e.attr.toLowerCase();if(o.startsWith("on"))throw new Error(`Dangerous attribute not allowed: ${e.attr}`);if(o==="href"||o==="src"||o==="formaction"){let f=e.value.trim().toLowerCase();if(f.startsWith("javascript:")||f.startsWith("vbscript:")||f.startsWith("data:text/html"))throw new Error(`Dangerous URL not allowed in ${e.attr}: ${e.value}`)}let s=a.getAttribute(e.attr),u=a.hasAttribute(e.attr);return a.setAttribute(e.attr,e.value),t.publishEvent("action.applied",{id:t.generateId(),kind:"content:setAttr",anchorId:e.anchorId,attr:e.attr}),{cleanup:()=>{u&&s!==null?a.setAttribute(e.attr,s):a.removeAttribute(e.attr)},updateFn:f=>{"value"in f&&typeof f.value=="string"&&a.setAttribute(e.attr,f.value)}}},Qt=async(e,t)=>{let a=t.resolveAnchor(e.anchorId);if(!a)throw new Error(`Anchor not found: ${e.anchorId}`);let o=a.classList.contains(e.className);return a.classList.add(e.className),t.publishEvent("action.applied",{id:t.generateId(),kind:"content:addClass",anchorId:e.anchorId,className:e.className}),{cleanup:()=>{o||a.classList.remove(e.className)}}},Jt=async(e,t)=>{let a=t.resolveAnchor(e.anchorId);if(!a)throw new Error(`Anchor not found: ${e.anchorId}`);let o=a.classList.contains(e.className);return a.classList.remove(e.className),t.publishEvent("action.applied",{id:t.generateId(),kind:"content:removeClass",anchorId:e.anchorId,className:e.className}),{cleanup:()=>{o&&a.classList.add(e.className)}}},Yt=async(e,t)=>{let a=t.resolveAnchor(e.anchorId);if(!a)throw new Error(`Anchor not found: ${e.anchorId}`);let o=new Map;for(let r of Object.keys(e.styles)){let s=a.style.getPropertyValue(r);o.set(r,s)}for(let[r,s]of Object.entries(e.styles))a.style.setProperty(r,s);return t.publishEvent("action.applied",{id:t.generateId(),kind:"content:setStyle",anchorId:e.anchorId,styles:Object.keys(e.styles)}),{cleanup:()=>{for(let[r,s]of o)s?a.style.setProperty(r,s):a.style.removeProperty(r)},updateFn:r=>{if("styles"in r&&typeof r.styles=="object"&&r.styles)for(let[s,u]of Object.entries(r.styles))a.style.setProperty(s,u)}}},je=[{kind:"content:insertHtml",executor:jt},{kind:"content:setText",executor:Kt},{kind:"content:setAttr",executor:Zt},{kind:"content:addClass",executor:Qt},{kind:"content:removeClass",executor:Jt},{kind:"content:setStyle",executor:Yt}],ae={id:"adaptive-content",version:"1.0.0",name:"Content",description:"DOM manipulation for text, attributes, and styles",executors:je};var Ba={id:ae.id,version:ae.version,name:ae.name,description:ae.description,runtime:{actions:je.map(({kind:e,executor:t})=>({kind:e,executor:t}))},editor:_e,metadata:{isBuiltIn:!0}};if(typeof window<"u"){let e=window.SynOS?.appRegistry;e&&typeof e.register=="function"&&e.register(Ba)}var nu=Ba;export{nu as default,Ba as manifest};
|
|
2
|
-
/*! Bundled license information:
|
|
3
|
-
|
|
4
|
-
lucide-react/dist/esm/shared/src/utils.js:
|
|
5
|
-
lucide-react/dist/esm/defaultAttributes.js:
|
|
6
|
-
lucide-react/dist/esm/Icon.js:
|
|
7
|
-
lucide-react/dist/esm/createLucideIcon.js:
|
|
8
|
-
lucide-react/dist/esm/icons/file-code.js:
|
|
9
|
-
lucide-react/dist/esm/icons/minus.js:
|
|
10
|
-
lucide-react/dist/esm/icons/palette.js:
|
|
11
|
-
lucide-react/dist/esm/icons/plus.js:
|
|
12
|
-
lucide-react/dist/esm/icons/tag.js:
|
|
13
|
-
lucide-react/dist/esm/icons/type.js:
|
|
14
|
-
lucide-react/dist/esm/lucide-react.js:
|
|
15
|
-
(**
|
|
16
|
-
* @license lucide-react v0.539.0 - ISC
|
|
17
|
-
*
|
|
18
|
-
* This source code is licensed under the ISC license.
|
|
19
|
-
* See the LICENSE file in the root directory of this source tree.
|
|
20
|
-
*)
|
|
21
|
-
*/
|
|
22
|
-
//# sourceMappingURL=index.js.map
|