@walkeros/explorer 4.0.0 → 4.0.1-next-1778068549946

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/monaco-context-types.ts","walkeros-types:virtual:walkeros-core-types","../src/utils/monaco-types.ts","../src/index.ts","../src/components/demos/PromotionPlayground.tsx","../src/components/atoms/grid.tsx","../src/contexts/GridHeightContext.tsx","../src/components/molecules/preview.tsx","../src/components/atoms/box.tsx","../src/components/atoms/header.tsx","../src/components/atoms/preview-footer.tsx","../src/components/organisms/browser-box.tsx","../src/components/atoms/button.tsx","../src/components/atoms/button-group.tsx","../src/components/atoms/code.tsx","../src/themes/names.ts","../src/themes/token-groups.ts","../src/themes/palenight.ts","../src/themes/lighthouse.ts","../src/themes/index.ts","../src/utils/monaco-decorators.ts","../src/utils/monaco-walkeros-decorations.ts","../src/utils/monaco-walkeros-providers.ts","../src/utils/contract-path-walker.ts","../src/utils/monaco-walkeros-completions.ts","../src/utils/monaco-json-path.ts","../src/utils/mapping-context-detector.ts","../src/utils/monaco-chain-ref-detector.ts","../src/utils/monaco-formatters.ts","../src/utils/monaco-json-schema.ts","../src/hooks/useMonacoHeight.ts","../src/utils/is-monaco-cancellation.ts","../src/components/molecules/code-box.tsx","../src/helpers/destinations.ts","../src/components/organisms/live-code.tsx","../src/utils/format-code.ts","../src/components/organisms/collector-box.tsx","../../../node_modules/@iconify/react/dist/iconify.js","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/tailwind-merge/src/lib/utils.ts","../../../node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/lib/utils.ts","../src/components/molecules/architecture-flow/ArchitectureFlow.tsx","../src/components/molecules/code-diff-box.tsx","../src/components/atoms/code-diff.tsx","../src/components/molecules/code-snippet.tsx","../src/components/molecules/flow-map/FlowMap.tsx","../src/components/molecules/property-table.tsx","../src/components/molecules/dropdown.tsx","../src/components/molecules/code-view.tsx","../src/components/atoms/code-static.tsx","../src/themes/shiki-adapter.ts","../src/components/atoms/footer.tsx","../src/components/atoms/button-link.tsx","../src/components/atoms/spinner.tsx","../src/components/atoms/icons/icons.tsx","../../../node_modules/@mdx-js/react/lib/index.js","../src/components/atoms/mdx-code.tsx","../src/providers/MDXProvider.tsx","../src/hooks/useDropdown.ts","../src/utils/monaco-schema-enrichment.ts","../src/utils/monaco-schema-flow-config.ts","../src/utils/monaco-schema-contract.ts","../src/utils/monaco-schema-variables.ts","../src/utils/monaco-walkeros-markers.ts","../src/utils/monaco-intellisense-flow-extractor.ts"],"sourcesContent":["/**\n * Monaco Editor Context Type Templates\n *\n * Hand-crafted global namespace declarations for function contexts.\n * These provide full TypeScript IntelliSense in Monaco Editor without\n * requiring import statements.\n *\n * Extracted from @walkeros/core types and simplified for editor use.\n */\n\n/**\n * Type template for 'fn' context (transformation functions)\n *\n * Provides types for:\n * - value: WalkerOS.DeepPartialEvent | unknown\n * - context: Mapping.Context (event, mapping, collector, logger, consent?)\n */\nexport const FN_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Source\n type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n version?: string;\n schema?: string;\n count?: number;\n trace?: string;\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n type Values = Array<Value>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n type Map = { [key: string]: Value };\n\n interface Context {\n event: WalkerOS.DeepPartialEvent;\n mapping: Value | Rule;\n collector: Collector.Instance;\n logger: Logger.Instance;\n consent?: WalkerOS.Consent;\n }\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (\n value: unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n interface Rule {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n name?: string;\n ignore?: boolean;\n silent?: boolean;\n }\n}\n\ndeclare namespace Logger {\n interface Instance {\n error: (msg: string, ...args: unknown[]) => void;\n warn: (msg: string, ...args: unknown[]) => void;\n info: (msg: string, ...args: unknown[]) => void;\n debug: (msg: string, ...args: unknown[]) => void;\n }\n}\n\n// Collector Types (minimal for fn context)\ndeclare namespace Collector {\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: any;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n globals: WalkerOS.Properties;\n group: string;\n queue: any[];\n round: number;\n session: any;\n timing: number;\n user: WalkerOS.User;\n version: string;\n [key: string]: any;\n }\n}\n\n// Parameter declarations for fn context\ndeclare const value: WalkerOS.DeepPartialEvent | unknown;\ndeclare const context: Mapping.Context;\n`;\n\n/**\n * Type template for 'condition' context (conditional functions)\n *\n * Provides types for:\n * - value: WalkerOS.DeepPartialEvent | unknown\n * - context: Mapping.Context (event, mapping, collector, logger, consent?)\n */\nexport const CONDITION_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Source\n type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n version?: string;\n schema?: string;\n count?: number;\n trace?: string;\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n type Values = Array<Value>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n type Map = { [key: string]: Value };\n\n interface Context {\n event: WalkerOS.DeepPartialEvent;\n mapping: Value | Rule;\n collector: Collector.Instance;\n logger: Logger.Instance;\n consent?: WalkerOS.Consent;\n }\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (\n value: unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n interface Rule {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n name?: string;\n ignore?: boolean;\n silent?: boolean;\n }\n}\n\ndeclare namespace Logger {\n interface Instance {\n error: (msg: string, ...args: unknown[]) => void;\n warn: (msg: string, ...args: unknown[]) => void;\n info: (msg: string, ...args: unknown[]) => void;\n debug: (msg: string, ...args: unknown[]) => void;\n }\n}\n\n// Collector Types (full interface for condition context)\ndeclare namespace Collector {\n interface SessionData extends WalkerOS.Properties {\n isStart: boolean;\n storage: boolean;\n id?: string;\n start?: number;\n marketing?: true;\n updated?: number;\n isNew?: boolean;\n device?: string;\n count?: number;\n runs?: number;\n }\n\n interface Config {\n run?: boolean;\n tagging: number;\n globalsStatic: WalkerOS.Properties;\n sessionStatic: Partial<SessionData>;\n verbose: boolean;\n onError?: any;\n onLog?: any;\n }\n\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: Config;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n sources: any;\n destinations: any;\n globals: WalkerOS.Properties;\n group: string;\n hooks: any;\n on: any;\n queue: any[];\n round: number;\n session: undefined | SessionData;\n timing: number;\n user: WalkerOS.User;\n version: string;\n }\n}\n\n// Parameter declarations for condition context\ndeclare const value: WalkerOS.DeepPartialEvent | unknown;\ndeclare const context: Mapping.Context;\n`;\n\n/**\n * Type template for 'validate' context (validation functions)\n *\n * Provides types for:\n * - value: unknown\n * - context: Mapping.Context (event, mapping, collector, logger, consent?)\n */\nexport const VALIDATE_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Source\n type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n version?: string;\n schema?: string;\n count?: number;\n trace?: string;\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n type Values = Array<Value>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n type Map = { [key: string]: Value };\n\n interface Context {\n event: WalkerOS.DeepPartialEvent;\n mapping: Value | Rule;\n collector: Collector.Instance;\n logger: Logger.Instance;\n consent?: WalkerOS.Consent;\n }\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (\n value: unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n interface Rule {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n name?: string;\n ignore?: boolean;\n silent?: boolean;\n }\n}\n\ndeclare namespace Logger {\n interface Instance {\n error: (msg: string, ...args: unknown[]) => void;\n warn: (msg: string, ...args: unknown[]) => void;\n info: (msg: string, ...args: unknown[]) => void;\n debug: (msg: string, ...args: unknown[]) => void;\n }\n}\n\n// Collector Types (minimal for validate context)\ndeclare namespace Collector {\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: any;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n globals: WalkerOS.Properties;\n group: string;\n queue: any[];\n round: number;\n session: any;\n timing: number;\n user: WalkerOS.User;\n version: string;\n [key: string]: any;\n }\n}\n\n// Parameter declarations for validate context\ndeclare const value: unknown;\ndeclare const context: Mapping.Context;\n`;\n\n/**\n * Get the type template for a specific function context\n */\nexport function getContextTypes(\n contextType: 'fn' | 'condition' | 'validate',\n): string {\n switch (contextType) {\n case 'fn':\n return FN_CONTEXT_TYPES;\n case 'condition':\n return CONDITION_CONTEXT_TYPES;\n case 'validate':\n return VALIDATE_CONTEXT_TYPES;\n default:\n return '';\n }\n}\n","export default \"type MatchExpression = MatchCondition | {\\n and: MatchExpression[];\\n} | {\\n or: MatchExpression[];\\n};\\ninterface MatchCondition {\\n key: string;\\n operator: MatchOperator;\\n value: string;\\n not?: boolean;\\n}\\ntype MatchOperator = 'eq' | 'contains' | 'prefix' | 'suffix' | 'regex' | 'gt' | 'lt' | 'exists';\\ntype CompiledMatcher = (context: Record<string, unknown>) => boolean;\\n\\ntype matcher_CompiledMatcher = CompiledMatcher;\\ntype matcher_MatchCondition = MatchCondition;\\ntype matcher_MatchExpression = MatchExpression;\\ntype matcher_MatchOperator = MatchOperator;\\ndeclare namespace matcher {\\n export type { matcher_CompiledMatcher as CompiledMatcher, matcher_MatchCondition as MatchCondition, matcher_MatchExpression as MatchExpression, matcher_MatchOperator as MatchOperator };\\n}\\n\\n/**\\n * Shared mapping configuration interface.\\n * Used by both Source.Config and Destination.Config.\\n */\\ninterface Config$7<T = unknown> {\\n consent?: Consent;\\n data?: Value | Values;\\n include?: string[];\\n mapping?: Rules<Rule<T>>;\\n policy?: Policy$1;\\n}\\ninterface Policy$1 {\\n [key: string]: Value;\\n}\\ninterface Rules<T = Rule> {\\n [entity: string]: Record<string, T | Array<T>> | undefined;\\n}\\ninterface Rule<Settings = unknown> {\\n batch?: number;\\n batchFn?: (destination: Instance$5, collector: Instance$6) => void;\\n batched?: Batch<Settings>;\\n condition?: Condition;\\n consent?: Consent;\\n settings?: Settings;\\n data?: Data$1;\\n include?: string[];\\n ignore?: boolean;\\n silent?: boolean;\\n name?: string;\\n policy?: Policy$1;\\n}\\ninterface Result$2 {\\n eventMapping?: Rule;\\n mappingKey?: string;\\n}\\ntype Data$1 = Value | Values;\\ntype Value = ValueType | Array<ValueType>;\\ntype Values = Array<Value>;\\ntype ValueType = string | ValueConfig;\\ninterface ValueConfig {\\n condition?: Condition;\\n consent?: Consent;\\n fn?: Fn$4;\\n key?: string;\\n loop?: Loop;\\n map?: Map;\\n set?: Value[];\\n validate?: Validate;\\n value?: PropertyType;\\n}\\ninterface Context$6 {\\n event: DeepPartialEvent;\\n /** The surrounding mapping config: a Value (value-level) or a Rule (rule-level). */\\n mapping: Value | Rule;\\n collector: Instance$6;\\n logger: Instance$4;\\n consent?: Consent;\\n}\\ntype Fn$4 = (value: unknown, context: Context$6) => PromiseOrValue<Property | unknown>;\\ntype Condition = (value: unknown, context: Context$6) => PromiseOrValue<boolean>;\\ntype Validate = (value: unknown, context: Context$6) => PromiseOrValue<boolean>;\\ntype Loop = [Value, Value];\\ntype Map = {\\n [key: string]: Value;\\n};\\n\\ntype mapping_Condition = Condition;\\ntype mapping_Loop = Loop;\\ntype mapping_Map = Map;\\ntype mapping_Rule<Settings = unknown> = Rule<Settings>;\\ntype mapping_Rules<T = Rule> = Rules<T>;\\ntype mapping_Validate = Validate;\\ntype mapping_Value = Value;\\ntype mapping_ValueConfig = ValueConfig;\\ntype mapping_ValueType = ValueType;\\ntype mapping_Values = Values;\\ndeclare namespace mapping {\\n export type { mapping_Condition as Condition, Config$7 as Config, Context$6 as Context, Data$1 as Data, Fn$4 as Fn, mapping_Loop as Loop, mapping_Map as Map, Policy$1 as Policy, Result$2 as Result, mapping_Rule as Rule, mapping_Rules as Rules, mapping_Validate as Validate, mapping_Value as Value, mapping_ValueConfig as ValueConfig, mapping_ValueType as ValueType, mapping_Values as Values };\\n}\\n\\ninterface CacheRule {\\n match: MatchExpression | '*';\\n key: string[];\\n ttl: number;\\n update?: Record<string, Value>;\\n}\\ninterface Cache {\\n full?: boolean;\\n store?: string;\\n rules: CacheRule[];\\n}\\n\\ntype cache_Cache = Cache;\\ntype cache_CacheRule = CacheRule;\\ndeclare namespace cache {\\n export type { cache_Cache as Cache, cache_CacheRule as CacheRule };\\n}\\n\\n/**\\n * Options for responding to an HTTP request.\\n * Same interface for web and server — sources implement the handler.\\n */\\ninterface RespondOptions {\\n /** Response body. Objects are JSON-serialized by source. */\\n body?: unknown;\\n /** HTTP status code (default: 200). Server-only, ignored by web sources. */\\n status?: number;\\n /** HTTP response headers. Server-only, ignored by web sources. */\\n headers?: Record<string, string>;\\n}\\n/**\\n * Standardized response function available on env for every step.\\n * Idempotent: first call wins, subsequent calls are no-ops.\\n * Created by sources via createRespond(), consumed by any step.\\n */\\ntype RespondFn = (options?: RespondOptions) => void;\\n/**\\n * Creates an idempotent respond function.\\n * The sender callback is source-specific (Express wraps res, Fetch wraps Response, etc.).\\n *\\n * @param sender - Platform-specific function that actually sends the response\\n * @returns Idempotent respond function (first call wins)\\n */\\ndeclare function createRespond(sender: (options: RespondOptions) => void): RespondFn;\\n\\n/**\\n * Metadata managed by the runtime. Do not overwrite from step code.\\n * The _ prefix signals \\\"runtime-managed.\\\"\\n */\\ninterface IngestMeta {\\n /** Number of steps this data has passed through. */\\n hops: number;\\n /** Ordered list of step IDs visited. path[0] is always the source ID. */\\n path: string[];\\n /** Current chain context, e.g., \\\"destination.ga4.before\\\" or \\\"source.web.next\\\". */\\n chainPath?: string;\\n}\\n/**\\n * Mutable shared context that accumulates knowledge as data flows through the graph.\\n *\\n * Event = strict schema (analytics data).\\n * Ingest = wild west (pipeline context).\\n *\\n * Any step can read and write arbitrary keys. The `_meta` section is\\n * managed by the runtime — increment hops and append to path before each step.\\n */\\ninterface Ingest {\\n [key: string]: unknown;\\n _meta: IngestMeta;\\n}\\n/** Create a fresh Ingest for a new pipeline invocation. */\\ndeclare function createIngest(sourceId: string): Ingest;\\n\\n/**\\n * Core collector configuration interface\\n */\\ninterface Config$6 {\\n /** Whether to run collector automatically */\\n run?: boolean;\\n /** Static global properties even on a new run */\\n globalsStatic: Properties;\\n /** Static session data even on a new run */\\n sessionStatic: Partial<SessionData>;\\n /** Logger configuration */\\n logger?: Config$4;\\n}\\n/**\\n * Initialization configuration that extends Config with initial state\\n */\\ninterface InitConfig extends Partial<Config$6> {\\n /** Initial consent state */\\n consent?: Consent;\\n /** Initial user data */\\n user?: User;\\n /** Initial global properties */\\n globals?: Properties;\\n /** Source configurations */\\n sources?: InitSources;\\n /** Destination configurations */\\n destinations?: InitDestinations;\\n /** Transformer configurations */\\n transformers?: InitTransformers;\\n /** Store configurations */\\n stores?: InitStores;\\n /** Initial custom properties */\\n custom?: Properties;\\n /** Hooks for pipeline observation and interception */\\n hooks?: Functions;\\n}\\ninterface SessionData extends Properties {\\n isStart: boolean;\\n storage: boolean;\\n id?: string;\\n start?: number;\\n marketing?: true;\\n updated?: number;\\n isNew?: boolean;\\n device?: string;\\n count?: number;\\n runs?: number;\\n}\\ninterface Status {\\n startedAt: number;\\n in: number;\\n out: number;\\n failed: number;\\n sources: Record<string, SourceStatus>;\\n destinations: Record<string, DestinationStatus>;\\n}\\ninterface SourceStatus {\\n count: number;\\n lastAt?: number;\\n duration: number;\\n}\\ninterface DestinationStatus {\\n count: number;\\n failed: number;\\n lastAt?: number;\\n duration: number;\\n}\\ninterface Sources {\\n [id: string]: Instance$2;\\n}\\ninterface Destinations$1 {\\n [id: string]: Instance$5;\\n}\\ninterface Transformers$1 {\\n [id: string]: Instance$3;\\n}\\ninterface Stores$1 {\\n [id: string]: Instance$1;\\n}\\ntype CommandType = 'action' | 'config' | 'consent' | 'context' | 'destination' | 'elb' | 'globals' | 'hook' | 'init' | 'link' | 'run' | 'user' | 'walker' | string;\\n/**\\n * Options passed to collector.push() from sources.\\n * NOT a Context - just push metadata.\\n */\\ninterface PushOptions {\\n id?: string;\\n ingest?: Ingest;\\n respond?: RespondFn;\\n mapping?: Config$7;\\n preChain?: string[];\\n include?: string[];\\n exclude?: string[];\\n}\\n/**\\n * Push function signature - handles events only\\n */\\ninterface PushFn$1 {\\n (event: DeepPartialEvent, options?: PushOptions): Promise<PushResult>;\\n}\\n/**\\n * Command function signature - handles walker commands only\\n */\\ninterface CommandFn {\\n (command: 'config', config: Partial<Config$6>): Promise<PushResult>;\\n (command: 'consent', consent: Consent): Promise<PushResult>;\\n <T extends Types$4>(command: 'destination', destination: Init$3<T> | Instance$5<T>, config?: Config$5<T>): Promise<PushResult>;\\n <K extends keyof Functions>(command: 'hook', name: K, hookFn: Functions[K]): Promise<PushResult>;\\n (command: 'on', type: Types$3, rules: SingleOrArray<Subscription>): Promise<PushResult>;\\n (command: 'user', user: User): Promise<PushResult>;\\n (command: 'run', runState?: {\\n consent?: Consent;\\n user?: User;\\n globals?: Properties;\\n custom?: Properties;\\n }): Promise<PushResult>;\\n (command: string, data?: unknown, options?: unknown): Promise<PushResult>;\\n}\\ninterface Instance$6 {\\n push: PushFn$1;\\n command: CommandFn;\\n allowed: boolean;\\n config: Config$6;\\n consent: Consent;\\n custom: Properties;\\n sources: Sources;\\n destinations: Destinations$1;\\n transformers: Transformers$1;\\n stores: Stores$1;\\n globals: Properties;\\n hooks: Functions;\\n logger: Instance$4;\\n on: OnConfig;\\n queue: Events;\\n round: number;\\n session: undefined | SessionData;\\n status: Status;\\n timing: number;\\n user: User;\\n pending: {\\n sources: InitSources;\\n destinations: InitDestinations;\\n };\\n}\\n\\ntype collector_CommandFn = CommandFn;\\ntype collector_CommandType = CommandType;\\ntype collector_DestinationStatus = DestinationStatus;\\ntype collector_InitConfig = InitConfig;\\ntype collector_PushOptions = PushOptions;\\ntype collector_SessionData = SessionData;\\ntype collector_SourceStatus = SourceStatus;\\ntype collector_Sources = Sources;\\ntype collector_Status = Status;\\ndeclare namespace collector {\\n export type { collector_CommandFn as CommandFn, collector_CommandType as CommandType, Config$6 as Config, collector_DestinationStatus as DestinationStatus, Destinations$1 as Destinations, collector_InitConfig as InitConfig, Instance$6 as Instance, PushFn$1 as PushFn, collector_PushOptions as PushOptions, collector_SessionData as SessionData, collector_SourceStatus as SourceStatus, collector_Sources as Sources, collector_Status as Status, Stores$1 as Stores, Transformers$1 as Transformers };\\n}\\n\\n/**\\n * Base context interface for walkerOS stages.\\n * Sources, Transformers, and Destinations extend this.\\n */\\ninterface Base<C = unknown, E = unknown> {\\n collector: Instance$6;\\n logger: Instance$4;\\n config: C;\\n env: E;\\n}\\n\\ntype context_Base<C = unknown, E = unknown> = Base<C, E>;\\ndeclare namespace context {\\n export type { context_Base as Base };\\n}\\n\\n/**\\n * Context provided to the destroy() lifecycle method.\\n *\\n * A subset of the init context — config, env, logger, and id.\\n * Does NOT include collector or event data. Destroy should only\\n * clean up resources, not interact with the event pipeline.\\n */\\ninterface DestroyContext<C = unknown, E = unknown> {\\n /** Step instance ID. */\\n id: string;\\n /** Step configuration (contains settings with SDK clients, etc.). */\\n config: C;\\n /** Runtime environment/dependencies (DB clients, auth clients, etc.). */\\n env: E;\\n /** Scoped logger for this step instance. */\\n logger: Instance$4;\\n}\\n/**\\n * Destroy function signature for step lifecycle cleanup.\\n *\\n * Implementations should be idempotent — calling destroy() twice must not throw.\\n * Used for closing connections, clearing timers, releasing SDK clients.\\n */\\ntype DestroyFn<C = unknown, E = unknown> = (context: DestroyContext<C, E>) => PromiseOrValue<void>;\\n\\ntype lifecycle_DestroyContext<C = unknown, E = unknown> = DestroyContext<C, E>;\\ntype lifecycle_DestroyFn<C = unknown, E = unknown> = DestroyFn<C, E>;\\ndeclare namespace lifecycle {\\n export type { lifecycle_DestroyContext as DestroyContext, lifecycle_DestroyFn as DestroyFn };\\n}\\n\\n/**\\n * Base environment requirements interface for walkerOS destinations\\n *\\n * This defines the core interface that destinations can use to declare\\n * their runtime environment requirements. Platform-specific extensions\\n * should extend this interface.\\n */\\ninterface BaseEnv$3 {\\n /**\\n * Generic global properties that destinations may require\\n * Platform-specific implementations can extend this interface\\n */\\n [key: string]: unknown;\\n}\\n/**\\n * Type bundle for destination generics.\\n * Groups Settings, InitSettings, Mapping, and Env into a single type parameter.\\n */\\ninterface Types$4<S = unknown, M = unknown, E = BaseEnv$3, I = S> {\\n settings: S;\\n initSettings: I;\\n mapping: M;\\n env: E;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access\\n */\\ntype TypesGeneric$3 = {\\n settings: any;\\n initSettings: any;\\n mapping: any;\\n env: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle\\n */\\ntype Settings$3<T extends TypesGeneric$3 = Types$4> = T['settings'];\\ntype InitSettings$3<T extends TypesGeneric$3 = Types$4> = T['initSettings'];\\ntype Mapping$1<T extends TypesGeneric$3 = Types$4> = T['mapping'];\\ntype Env$3<T extends TypesGeneric$3 = Types$4> = T['env'];\\n/**\\n * Inference helper: Extract Types from Instance\\n */\\ntype TypesOf$3<I> = I extends Instance$5<infer T> ? T : never;\\ninterface Instance$5<T extends TypesGeneric$3 = Types$4> {\\n config: Config$5<T>;\\n queuePush?: Events;\\n queueOn?: Array<{\\n type: Types$3;\\n data?: unknown;\\n }>;\\n dlq?: DLQ;\\n batches?: BatchRegistry<Mapping$1<T>>;\\n type?: string;\\n env?: Env$3<T>;\\n init?: InitFn$2<T>;\\n push: PushFn<T>;\\n pushBatch?: PushBatchFn<T>;\\n on?: OnFn;\\n destroy?: DestroyFn<Config$5<T>, Env$3<T>>;\\n}\\ninterface Config$5<T extends TypesGeneric$3 = Types$4> {\\n /** Required consent states to push events; queues events when not granted. */\\n consent?: Consent;\\n /** Implementation-specific configuration passed to the init function. */\\n settings?: InitSettings$3<T>;\\n /** Global data transformation applied to all events; result passed as context.data to push. */\\n data?: Value | Values;\\n /** Event sections to flatten into context.data. */\\n include?: string[];\\n /** Runtime dependencies merged from code and config env; extensible per destination. */\\n env?: Env$3<T>;\\n /** Destination identifier; auto-generated if not provided. */\\n id?: string;\\n /** Whether the destination has been initialized; prevents re-initialization. */\\n init?: boolean;\\n /** Whether to load external scripts (e.g., gtag.js); destination-specific behavior. */\\n loadScript?: boolean;\\n /** Logger configuration (level, handler) to override the collector's defaults. */\\n logger?: Config$4;\\n /** Entity-action rules to filter, rename, transform, and batch events for this destination. */\\n mapping?: Rules<Rule<Mapping$1<T>>>;\\n /** Pre-processing rules applied to all events before mapping; modifies events in-place. */\\n policy?: Policy;\\n /** Whether to queue events when consent is not granted; defaults to true. */\\n queue?: boolean;\\n /** Defer destination initialization until these collector events fire (e.g., `['consent']`). */\\n require?: string[];\\n /** Transformer chain to run after collector processing but before this destination. */\\n before?: Next;\\n /** Transformer chain to run after destination push completes. Push response available at ingest._response. */\\n next?: Next;\\n /** Cache configuration for deduplication (step-level: skip push on HIT). */\\n cache?: Cache;\\n /** Completely skip this destination — no init, no push, no queuing. */\\n disabled?: boolean;\\n /** Return this value instead of calling push(). Uses !== undefined check to support falsy values. */\\n mock?: unknown;\\n}\\ntype PartialConfig$1<T extends TypesGeneric$3 = Types$4> = Config$5<Types$4<Partial<Settings$3<T>> | Settings$3<T>, Partial<Mapping$1<T>> | Mapping$1<T>, Env$3<T>>>;\\ninterface Policy {\\n [key: string]: Value;\\n}\\ntype Code$1<T extends TypesGeneric$3 = Types$4> = Instance$5<T>;\\ntype Init$3<T extends TypesGeneric$3 = Types$4> = {\\n code: Code$1<T>;\\n config?: Partial<Config$5<T>>;\\n env?: Partial<Env$3<T>>;\\n before?: Next;\\n next?: Next;\\n cache?: Cache;\\n};\\ninterface InitDestinations {\\n [key: string]: Init$3<any>;\\n}\\ninterface Destinations {\\n [key: string]: Instance$5;\\n}\\n/**\\n * Context provided to destination functions.\\n * Extends base context with destination-specific properties.\\n */\\ninterface Context$5<T extends TypesGeneric$3 = Types$4> extends Base<Config$5<T>, Env$3<T>> {\\n id: string;\\n data?: Data;\\n}\\ninterface PushContext<T extends TypesGeneric$3 = Types$4> extends Context$5<T> {\\n ingest: Ingest;\\n rule?: Rule<Mapping$1<T>>;\\n}\\ninterface PushBatchContext<T extends TypesGeneric$3 = Types$4> extends Context$5<T> {\\n ingest: Ingest;\\n rule?: Rule<Mapping$1<T>>;\\n}\\ntype InitFn$2<T extends TypesGeneric$3 = Types$4> = (context: Context$5<T>) => PromiseOrValue<void | false | Config$5<T>>;\\ntype PushFn<T extends TypesGeneric$3 = Types$4> = (event: Event, context: PushContext<T>) => PromiseOrValue<void | unknown>;\\ntype PushBatchFn<T extends TypesGeneric$3 = Types$4> = (batch: Batch<Mapping$1<T>>, context: PushBatchContext<T>) => void;\\ntype PushEvent<Mapping = unknown> = {\\n event: Event;\\n mapping?: Rule<Mapping>;\\n};\\ntype PushEvents<Mapping = unknown> = Array<PushEvent<Mapping>>;\\ninterface Batch<Mapping> {\\n key: string;\\n events: Events;\\n data: Array<Data>;\\n mapping?: Rule<Mapping>;\\n}\\ninterface BatchRegistry<Mapping> {\\n [mappingKey: string]: {\\n batched: Batch<Mapping>;\\n batchFn: () => void;\\n };\\n}\\ntype Data = Property | undefined | Array<Property | undefined>;\\ninterface Ref {\\n type: string;\\n data?: unknown;\\n error?: unknown;\\n}\\ntype Push$1 = {\\n queuePush?: Events;\\n error?: unknown;\\n};\\ntype DLQ = Array<[Event, unknown]>;\\n\\ntype destination_Batch<Mapping> = Batch<Mapping>;\\ntype destination_BatchRegistry<Mapping> = BatchRegistry<Mapping>;\\ntype destination_DLQ = DLQ;\\ntype destination_Data = Data;\\ntype destination_Destinations = Destinations;\\ntype destination_InitDestinations = InitDestinations;\\ntype destination_Policy = Policy;\\ntype destination_PushBatchContext<T extends TypesGeneric$3 = Types$4> = PushBatchContext<T>;\\ntype destination_PushBatchFn<T extends TypesGeneric$3 = Types$4> = PushBatchFn<T>;\\ntype destination_PushContext<T extends TypesGeneric$3 = Types$4> = PushContext<T>;\\ntype destination_PushEvent<Mapping = unknown> = PushEvent<Mapping>;\\ntype destination_PushEvents<Mapping = unknown> = PushEvents<Mapping>;\\ntype destination_PushFn<T extends TypesGeneric$3 = Types$4> = PushFn<T>;\\ntype destination_Ref = Ref;\\ndeclare namespace destination {\\n export type { BaseEnv$3 as BaseEnv, destination_Batch as Batch, destination_BatchRegistry as BatchRegistry, Code$1 as Code, Config$5 as Config, Context$5 as Context, destination_DLQ as DLQ, destination_Data as Data, destination_Destinations as Destinations, Env$3 as Env, Init$3 as Init, destination_InitDestinations as InitDestinations, InitFn$2 as InitFn, InitSettings$3 as InitSettings, Instance$5 as Instance, Mapping$1 as Mapping, PartialConfig$1 as PartialConfig, destination_Policy as Policy, Push$1 as Push, destination_PushBatchContext as PushBatchContext, destination_PushBatchFn as PushBatchFn, destination_PushContext as PushContext, destination_PushEvent as PushEvent, destination_PushEvents as PushEvents, destination_PushFn as PushFn, destination_Ref as Ref, Settings$3 as Settings, Types$4 as Types, TypesGeneric$3 as TypesGeneric, TypesOf$3 as TypesOf };\\n}\\n\\ninterface EventFn<R = Promise<PushResult>> {\\n (partialEvent: DeepPartialEvent): R;\\n (event: string): R;\\n (event: string, data: Properties): R;\\n}\\ninterface Fn$3<R = Promise<PushResult>, Config = unknown> extends EventFn<R>, WalkerCommands<R, Config> {\\n}\\ninterface WalkerCommands<R = Promise<PushResult>, Config = unknown> {\\n (event: 'walker config', config: Partial<Config>): R;\\n (event: 'walker consent', consent: Consent): R;\\n <T extends Types$4>(event: 'walker destination', destination: Init$3<T> | Instance$5<T>, config?: Config$5<T>): R;\\n <K extends keyof Functions>(event: 'walker hook', name: K, hookFn: Functions[K]): R;\\n (event: 'walker on', type: Types$3, rules: SingleOrArray<Subscription>): R;\\n (event: 'walker user', user: User): R;\\n (event: 'walker run', runState: {\\n consent?: Consent;\\n user?: User;\\n globals?: Properties;\\n custom?: Properties;\\n }): R;\\n}\\ntype Event$1<R = Promise<PushResult>> = (partialEvent: DeepPartialEvent) => R;\\ntype PushData<Config = unknown> = DeepPartial<Config> | Consent | User | Properties;\\ninterface PushResult {\\n ok: boolean;\\n event?: Event;\\n done?: Record<string, Ref>;\\n queued?: Record<string, Ref>;\\n failed?: Record<string, Ref>;\\n}\\ntype Layer = Array<IArguments | DeepPartialEvent | unknown[]>;\\n\\ntype elb_EventFn<R = Promise<PushResult>> = EventFn<R>;\\ntype elb_Layer = Layer;\\ntype elb_PushData<Config = unknown> = PushData<Config>;\\ntype elb_PushResult = PushResult;\\ntype elb_WalkerCommands<R = Promise<PushResult>, Config = unknown> = WalkerCommands<R, Config>;\\ndeclare namespace elb {\\n export type { Event$1 as Event, elb_EventFn as EventFn, Fn$3 as Fn, elb_Layer as Layer, elb_PushData as PushData, elb_PushResult as PushResult, elb_WalkerCommands as WalkerCommands };\\n}\\n\\n/**\\n * Single flow configuration.\\n *\\n * Represents one deployment target (e.g., web_prod, server_stage).\\n * Platform is determined by `config.platform` ('web' | 'server').\\n *\\n * Variables/definitions cascade: source/destination > flow > root config.\\n */\\ninterface Flow {\\n /** Per-flow configuration: platform, url, settings, bundle. */\\n config?: Flow.Config;\\n /**\\n * Source configurations (data capture).\\n *\\n * Sources capture events from various origins:\\n * - Browser DOM interactions (clicks, page views)\\n * - DataLayer pushes\\n * - HTTP requests (server-side)\\n * - Cloud function triggers\\n *\\n * Key = unique source identifier (arbitrary)\\n * Value = source reference with package and config\\n */\\n sources?: Record<string, Flow.Source>;\\n /**\\n * Destination configurations (data output).\\n *\\n * Destinations send processed events to external services:\\n * - Google Analytics (gtag)\\n * - Meta Pixel (fbq)\\n * - Custom APIs\\n * - Data warehouses\\n *\\n * Key = unique destination identifier (arbitrary)\\n * Value = destination reference with package and config\\n */\\n destinations?: Record<string, Flow.Destination>;\\n /**\\n * Transformer configurations (event transformation).\\n *\\n * Pre-collector (source.next) or post-collector (destination.before).\\n *\\n * Key = unique transformer identifier (referenced by source.next or destination.before)\\n * Value = transformer reference with package and config\\n */\\n transformers?: Record<string, Flow.Transformer>;\\n /**\\n * Store configurations (key-value storage).\\n *\\n * Stores provide key-value storage consumed by sources, transformers,\\n * and destinations via env injection. Referenced using $store.storeId\\n * prefix in env values.\\n *\\n * Key = unique store identifier (arbitrary)\\n * Value = store reference with package and config\\n */\\n stores?: Record<string, Flow.Store>;\\n /**\\n * Collector configuration (event processing).\\n *\\n * The collector is the central event processing engine.\\n * Configuration includes consent management, global properties,\\n * user identification, and processing rules.\\n */\\n collector?: InitConfig;\\n /**\\n * Flow-level variables.\\n * Override root variables; overridden by source/destination variables.\\n */\\n variables?: Flow.Variables;\\n /**\\n * Flow-level definitions.\\n * Extend root definitions; overridden by source/destination definitions.\\n */\\n definitions?: Flow.Definitions;\\n}\\ndeclare namespace Flow {\\n /**\\n * Complete multi-flow configuration.\\n * Root type for walkeros.config.json files.\\n *\\n * If only one flow exists, it's auto-selected without --flow flag.\\n * Convention: use \\\"default\\\" as the flow name for single-flow configs.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"version\\\": 4,\\n * \\\"$schema\\\": \\\"https://walkeros.io/schema/flow/v4.json\\\",\\n * \\\"variables\\\": { \\\"CURRENCY\\\": \\\"USD\\\" },\\n * \\\"flows\\\": {\\n * \\\"default\\\": { \\\"config\\\": { \\\"platform\\\": \\\"web\\\" } }\\n * }\\n * }\\n * ```\\n */\\n interface Json {\\n /** Configuration schema version. */\\n version: 4;\\n /**\\n * JSON Schema reference for IDE validation.\\n * @example \\\"https://walkeros.io/schema/flow/v4.json\\\"\\n */\\n $schema?: string;\\n /**\\n * Folders to include in the bundle output.\\n * Copied to dist/ during bundle, available at runtime for both local and Docker execution.\\n *\\n * Use for credential files, configuration, or other runtime assets.\\n * Paths are relative to the config file location.\\n * Default: `[\\\"./shared\\\"]` if the folder exists, otherwise `[]`.\\n */\\n include?: string[];\\n /**\\n * Shared variables for interpolation.\\n * Resolution: destination/source > flow > root.\\n * Syntax: $var.name\\n */\\n variables?: Variables;\\n /**\\n * Reusable configuration definitions.\\n * Syntax: $def.name\\n */\\n definitions?: Definitions;\\n /**\\n * Data contract definition.\\n * Entity → action keyed JSON Schema with additive inheritance.\\n */\\n contract?: Contract;\\n /**\\n * Named flow configurations.\\n * If only one flow exists, it's auto-selected.\\n */\\n flows: Record<string, Flow>;\\n }\\n /**\\n * Per-flow configuration block.\\n *\\n * Groups platform identity, optional public URL, arbitrary settings bag,\\n * and bundle (build-time) configuration.\\n */\\n interface Config {\\n /**\\n * Platform identity for this flow.\\n * - `web` builds to IIFE format, ES2020 target, browser platform.\\n * - `server` builds to ESM format, Node18 target, node platform.\\n */\\n platform: 'web' | 'server';\\n /**\\n * Public URL where this flow is reachable (for cross-flow `$flow.X.url` references).\\n * Set explicitly by the user; the deployment process does not auto-populate it.\\n */\\n url?: string;\\n /**\\n * Arbitrary key-value settings consumed by the platform runtime.\\n *\\n * For web: typical keys include `windowCollector`, `windowElb`.\\n * For server: reserved for future server-specific options.\\n *\\n * This is a free-form bag — type promotion happens later if patterns emerge.\\n */\\n settings?: Settings;\\n /**\\n * Bundle configuration: NPM packages to include, transitive dependency overrides.\\n * Consumed by the CLI bundler at build time.\\n */\\n bundle?: Bundle;\\n }\\n /** Primitive value types for variables. */\\n type Primitive = string | number | boolean;\\n /**\\n * Variables record type for interpolation.\\n * Used at root, flow, source, destination, transformer, and store levels.\\n */\\n type Variables = Record<string, Primitive>;\\n /**\\n * Definitions record type for reusable configurations.\\n * Used at root, flow, source, destination, transformer, and store levels.\\n */\\n type Definitions = Record<string, unknown>;\\n /**\\n * Free-form settings bag inside `Flow.Config.settings`.\\n * Mirrors the package settings convention (arbitrary keys).\\n */\\n type Settings = Record<string, unknown>;\\n /**\\n * Bundle configuration for a flow.\\n *\\n * Groups all build-time bundling concerns: NPM packages to include and\\n * transitive dependency overrides. Consumed by the CLI bundler.\\n */\\n interface Bundle {\\n /** NPM packages to bundle, keyed by package name. */\\n packages?: Record<string, BundlePackage>;\\n /**\\n * Transitive dependency version pins.\\n *\\n * Maps package name → version spec. Applied during bundle package install\\n * to force transitive dependencies to a specific version. Useful for\\n * resolving conflicts between packages that depend on incompatible\\n * versions of a shared dependency.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"@amplitude/analytics-types\\\": \\\"2.11.1\\\"\\n * }\\n * ```\\n */\\n overrides?: Record<string, string>;\\n }\\n /**\\n * Single bundle package entry.\\n */\\n interface BundlePackage {\\n /** Version specifier (e.g., 'latest', '^2.0.0', '2.1.3'). */\\n version?: string;\\n /** Named imports to expose from the package. */\\n imports?: string[];\\n /** Local path to package directory (takes precedence over version). */\\n path?: string;\\n }\\n /**\\n * Inline code definition for sources/destinations/transformers/stores.\\n * Used instead of `package` when defining inline functions.\\n */\\n interface Code {\\n /** \\\"$code:...\\\" function (required). */\\n push: string;\\n /** Optional instance type identifier. */\\n type?: string;\\n /** Optional \\\"$code:...\\\" init function. */\\n init?: string;\\n }\\n /**\\n * Source reference with inline package syntax.\\n *\\n * References a source package and provides configuration.\\n * The package is automatically downloaded and imported during build.\\n * Alternatively, use `code` (string or inline Code) for inline code execution.\\n */\\n interface Source {\\n /**\\n * Package specifier with optional version.\\n *\\n * Formats:\\n * - `\\\"@walkeros/web-source-browser\\\"` - latest\\n * - `\\\"@walkeros/web-source-browser@2.0.0\\\"` - exact\\n * - `\\\"@walkeros/web-source-browser@^2.0.0\\\"` - semver range\\n *\\n * Optional when `code` is used for inline code execution.\\n */\\n package?: string;\\n /**\\n * Resolved import variable name (string) or inline code definition (Code).\\n *\\n * - String: auto-resolved from packages[package].imports[0] during getFlowSettings(),\\n * or provided explicitly for advanced use cases.\\n * - Code: object with type, push, and optional init for inline code definition.\\n */\\n code?: string | Code;\\n /**\\n * Source-specific configuration. Structure depends on the source package.\\n * Passed to the source's initialization function.\\n */\\n config?: unknown;\\n /**\\n * Source environment configuration.\\n * Environment-specific settings merged with default source environment.\\n */\\n env?: unknown;\\n /**\\n * Mark as primary source (provides main ELB).\\n *\\n * The primary source's ELB function is returned by `startFlow()`.\\n * Only one source should be marked as primary per flow.\\n *\\n * @default false\\n */\\n primary?: boolean;\\n /**\\n * First transformer in pre-source chain (consent-exempt).\\n *\\n * Runs before source.next chain. Consent-exempt because no analytics\\n * event exists yet - these transformers handle transport-level preprocessing\\n * (decode, validate, authenticate, normalize raw input).\\n * Raw request data is available in context.ingest.\\n */\\n before?: string | string[];\\n /**\\n * First transformer in pre-collector chain.\\n *\\n * Name of the transformer to execute after this source captures an event.\\n * Creates a pre-collector transformer chain. Chain ends at the collector.\\n * If omitted, events route directly to the collector.\\n * Can be an array for explicit chain control (bypasses transformer.next resolution).\\n */\\n next?: string | string[];\\n /** Cache configuration for this source. */\\n cache?: Cache;\\n /**\\n * Source-level variables (highest priority in cascade).\\n * Overrides flow and root variables.\\n */\\n variables?: Variables;\\n /**\\n * Source-level definitions (highest priority in cascade).\\n * Overrides flow and root definitions.\\n */\\n definitions?: Definitions;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution (not included in bundles).\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Destination reference with inline package syntax.\\n *\\n * References a destination package and provides configuration.\\n * Structure mirrors `Flow.Source` for consistency.\\n */\\n interface Destination {\\n /** Package specifier with optional version. Optional when `code` is provided. */\\n package?: string;\\n /** Resolved import variable name (string) or inline code definition (Code). */\\n code?: string | Code;\\n /**\\n * Destination-specific configuration. Typically includes:\\n * - settings: API keys, IDs, endpoints\\n * - mapping: Event transformation rules\\n * - consent: Required consent states\\n * - policy: Processing rules\\n */\\n config?: unknown;\\n /** Destination environment configuration, merged with default destination environment. */\\n env?: unknown;\\n /**\\n * First transformer in post-collector chain.\\n *\\n * Name of the transformer to execute before sending events to this destination.\\n * If omitted, events are sent directly from the collector.\\n * Can be an array for explicit chain control.\\n */\\n before?: string | string[];\\n /**\\n * First transformer in post-push chain.\\n *\\n * Runs after destination.push completes. The push response is available\\n * at context.ingest._response. Consent is inherited from the destination\\n * gate - no separate consent check needed.\\n */\\n next?: string | string[];\\n /** Cache configuration for this destination. */\\n cache?: Cache;\\n /** Destination-level variables (highest priority in cascade). */\\n variables?: Variables;\\n /** Destination-level definitions (highest priority in cascade). */\\n definitions?: Definitions;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution.\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Transformer reference with inline package syntax.\\n *\\n * Transformers transform events in the pipeline between sources and destinations.\\n * Alternatively, use `code` for inline code execution.\\n */\\n interface Transformer {\\n /** Package specifier with optional version. Optional when `code` is provided. */\\n package?: string;\\n /** Resolved import variable name (string) or inline code definition (Code). */\\n code?: string | Code;\\n /** Transformer-specific configuration. Structure depends on the package. */\\n config?: unknown;\\n /** Transformer environment configuration. */\\n env?: unknown;\\n /**\\n * Pre-transformer chain.\\n *\\n * Runs before this transformer's push function.\\n * Enables pre-processing or context loading before the main transform.\\n * Uses the same chain resolution as source.next and destination.before.\\n */\\n before?: string | string[];\\n /**\\n * Next transformer in chain.\\n *\\n * Name of the next transformer to execute after this one.\\n * In a pre-collector chain (source.next), terminates at the collector.\\n * In a post-collector chain (destination.before), terminates at the destination.\\n * If omitted, the chain ends and control passes to the next pipeline stage.\\n * Array values define an explicit chain (no walking). Circular references\\n * are safely detected at runtime by `walkChain()`.\\n */\\n next?: string | string[];\\n /** Cache configuration for this transformer. */\\n cache?: Cache;\\n /** Transformer-level variables (highest priority in cascade). */\\n variables?: Variables;\\n /** Transformer-level definitions (highest priority in cascade). */\\n definitions?: Definitions;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution.\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Store reference with inline package syntax.\\n *\\n * Stores provide key-value storage consumed by other components via env.\\n * Unlike sources/transformers/destinations, stores have no chain properties\\n * (no `next` or `before`) - they are passive infrastructure.\\n */\\n interface Store {\\n /** Package specifier with optional version. Optional when `code` is provided. */\\n package?: string;\\n /** Resolved import variable name (string) or inline code definition (Code). */\\n code?: string | Code;\\n /** Store-specific configuration. */\\n config?: unknown;\\n /** Store environment configuration. */\\n env?: unknown;\\n /** Store-level variables (highest priority in cascade). */\\n variables?: Variables;\\n /** Store-level definitions (highest priority in cascade). */\\n definitions?: Definitions;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution.\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Named contract map.\\n * Each key is a contract name, each value is a contract rule.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"default\\\": { \\\"globals\\\": { ... }, \\\"consent\\\": { ... } },\\n * \\\"web\\\": { \\\"extends\\\": \\\"default\\\", \\\"events\\\": { ... } },\\n * \\\"server\\\": { \\\"extends\\\": \\\"default\\\", \\\"events\\\": { ... } }\\n * }\\n * ```\\n */\\n type Contract = Record<string, ContractRule>;\\n /**\\n * A single named contract rule.\\n *\\n * All sections are optional. Sections mirror WalkerOS.Event fields:\\n * globals, context, custom, user, consent.\\n * Entity-action schemas live under `events`.\\n *\\n * Use `extends` to inherit from another named contract (additive merge).\\n */\\n interface ContractRule {\\n /** Inherit from another named contract (additive merge). */\\n extends?: string;\\n /** Tagging level (used by validators / runtime tagging policy). */\\n tagging?: number;\\n /** Human-readable description of the contract. */\\n description?: string;\\n /** JSON Schema for event.globals. */\\n globals?: ContractSchema;\\n /** JSON Schema for event.context. */\\n context?: ContractSchema;\\n /** JSON Schema for event.custom. */\\n custom?: ContractSchema;\\n /** JSON Schema for event.user. */\\n user?: ContractSchema;\\n /** JSON Schema for event.consent. */\\n consent?: ContractSchema;\\n /** Entity-action event schemas. */\\n events?: ContractEvents;\\n }\\n /**\\n * JSON Schema object for contract rule validation.\\n * Standard JSON Schema with description/examples annotations.\\n * Compatible with AJV for runtime validation.\\n */\\n type ContractSchema = Record<string, unknown>;\\n /**\\n * Contract action entries keyed by action name.\\n * Each value is a JSON Schema describing the expected WalkerOS.Event shape.\\n * Use \\\"*\\\" as wildcard for all actions of an entity.\\n */\\n type ContractActions = Record<string, ContractSchema>;\\n /**\\n * Entity-action event map used inside contracts.\\n * Keyed by entity name, each value is an action map.\\n * Use \\\"*\\\" as wildcard for all entities or all actions.\\n */\\n type ContractEvents = Record<string, ContractActions>;\\n /**\\n * Walker command names that a step example can invoke instead of pushing\\n * its `in` as a regular event. Mirrors the `elb('walker <command>', ...)`\\n * surface in `WalkerCommands` (see types/elb.ts).\\n *\\n * - `config` - update collector config (maps to `elb('walker config', in)`)\\n * - `consent` - update consent state (maps to `elb('walker consent', in)`)\\n * - `user` - update user identification (maps to `elb('walker user', in)`)\\n * - `run` - fire run state (maps to `elb('walker run', in)`)\\n *\\n * Note: `walker destination`, `walker hook`, and `walker on` are\\n * intentionally excluded - they configure wiring, not test data.\\n */\\n type StepCommand = 'config' | 'consent' | 'user' | 'run';\\n /** One observable effect: function/method call (`[callable, ...args]`) or return value (`['return', value]`). */\\n type StepEffect = readonly [callable: string, ...args: unknown[]];\\n /** The effects a step produces, in execution order. Empty = no observable effect (filtered, passthrough). */\\n type StepOut = readonly StepEffect[];\\n /**\\n * Named example pair for a step.\\n * `in` is the input to the step, `out` is the expected output.\\n *\\n * When `command` is set, the test runner invokes\\n * `elb('walker <command>', in)` instead of pushing `in` as a regular event.\\n * When `command` is absent (default), `in` is pushed as a normal event via\\n * `elb(event)`.\\n */\\n interface StepExample {\\n /** Human-readable title (overrides camelCase-to-spaced default heading in docs). */\\n title?: string;\\n description?: string;\\n /**\\n * Whether this example is meant for public consumption (docs, UI, MCP default output).\\n * Defaults to `true`. Set to `false` for test-only fixtures that should stay out of\\n * user-facing surfaces but still run in test suites and remain available to\\n * `flow_simulate` / CLI `--simulate`.\\n */\\n public?: boolean;\\n in?: unknown;\\n /** Trigger metadata for sources - type and options for the trigger call. */\\n trigger?: {\\n /** Which mechanism to activate (e.g., 'click', 'POST', 'load'). */\\n type?: string;\\n /** Mechanism-specific options (e.g., CSS selector, threshold). */\\n options?: unknown;\\n };\\n mapping?: unknown;\\n out?: StepOut;\\n /**\\n * Invoke a walker command with `in` instead of pushing `in` as an event.\\n * When set, the test runner calls `elb('walker <command>', in)`.\\n * When absent (default), `in` is pushed as a regular event.\\n */\\n command?: StepCommand;\\n }\\n /** Named step examples keyed by scenario name. */\\n type StepExamples = Record<string, StepExample>;\\n}\\n\\ntype AnyFunction$1<P extends unknown[] = never[], R = unknown> = (...args: P) => R;\\ntype Functions = {\\n [key: string]: AnyFunction$1;\\n};\\ninterface Parameter<P extends unknown[], R> {\\n fn: (...args: P) => R;\\n result?: R;\\n}\\ntype HookFn<T extends AnyFunction$1> = (params: Parameter<Parameters<T>, ReturnType<T>>, ...args: Parameters<T>) => ReturnType<T>;\\n\\ntype hooks_Functions = Functions;\\ntype hooks_HookFn<T extends AnyFunction$1> = HookFn<T>;\\ndeclare namespace hooks {\\n export type { AnyFunction$1 as AnyFunction, hooks_Functions as Functions, hooks_HookFn as HookFn };\\n}\\n\\n/**\\n * Log levels from most to least severe\\n */\\ndeclare enum Level {\\n ERROR = 0,\\n WARN = 1,\\n INFO = 2,\\n DEBUG = 3\\n}\\n/**\\n * Normalized error context extracted from Error objects\\n */\\ninterface ErrorContext {\\n message: string;\\n name: string;\\n stack?: string;\\n cause?: unknown;\\n}\\n/**\\n * Context passed to log handlers\\n * If an Error was passed, it's normalized into the error property\\n */\\ninterface LogContext {\\n [key: string]: unknown;\\n error?: ErrorContext;\\n}\\n/**\\n * Log message function signature\\n * Accepts string or Error as message, with optional context\\n */\\ntype LogFn = (message: string | Error, context?: unknown | Error) => void;\\n/**\\n * Throw function signature - logs error then throws\\n * Returns never as it always throws\\n */\\ntype ThrowFn = (message: string | Error, context?: unknown) => never;\\n/**\\n * Default handler function (passed to custom handlers for chaining)\\n */\\ntype DefaultHandler = (level: Level, message: string, context: LogContext, scope: string[]) => void;\\n/**\\n * Custom log handler function\\n * Receives originalHandler to allow middleware-style chaining\\n */\\ntype Handler = (level: Level, message: string, context: LogContext, scope: string[], originalHandler: DefaultHandler) => void;\\n/**\\n * Logger instance with scoping support\\n * All logs automatically include trace path from scoping\\n */\\ninterface Instance$4 {\\n /**\\n * Log an error message (always visible unless silenced)\\n */\\n error: LogFn;\\n /**\\n * Log a warning (degraded state, config issues, transient failures)\\n */\\n warn: LogFn;\\n /**\\n * Log an informational message\\n */\\n info: LogFn;\\n /**\\n * Log a debug message\\n */\\n debug: LogFn;\\n /**\\n * Log an error message and throw an Error\\n * Combines logging and throwing in one call\\n */\\n throw: ThrowFn;\\n /**\\n * Output structured JSON data\\n */\\n json: (data: unknown) => void;\\n /**\\n * Create a scoped child logger with automatic trace path\\n * @param name - Scope name (e.g., destination type, destination key)\\n * @returns A new logger instance with the scope applied\\n */\\n scope: (name: string) => Instance$4;\\n}\\n/**\\n * Logger configuration options\\n */\\ninterface Config$4 {\\n /**\\n * Minimum log level to display\\n * @default Level.ERROR\\n */\\n level?: Level | keyof typeof Level;\\n /**\\n * Custom log handler function\\n * Receives originalHandler to preserve default behavior\\n */\\n handler?: Handler;\\n /** Custom handler for json() output. Default: console.log(JSON.stringify(data, null, 2)) */\\n jsonHandler?: (data: unknown) => void;\\n}\\n/**\\n * Internal config with resolved values and scope\\n */\\ninterface InternalConfig {\\n level: Level;\\n handler?: Handler;\\n jsonHandler?: (data: unknown) => void;\\n scope: string[];\\n}\\n/**\\n * Logger factory function type\\n */\\ntype Factory = (config?: Config$4) => Instance$4;\\n\\ntype logger_DefaultHandler = DefaultHandler;\\ntype logger_ErrorContext = ErrorContext;\\ntype logger_Factory = Factory;\\ntype logger_Handler = Handler;\\ntype logger_InternalConfig = InternalConfig;\\ntype logger_Level = Level;\\ndeclare const logger_Level: typeof Level;\\ntype logger_LogContext = LogContext;\\ntype logger_LogFn = LogFn;\\ntype logger_ThrowFn = ThrowFn;\\ndeclare namespace logger {\\n export { type Config$4 as Config, type logger_DefaultHandler as DefaultHandler, type logger_ErrorContext as ErrorContext, type logger_Factory as Factory, type logger_Handler as Handler, type Instance$4 as Instance, type logger_InternalConfig as InternalConfig, logger_Level as Level, type logger_LogContext as LogContext, type logger_LogFn as LogFn, type logger_ThrowFn as ThrowFn };\\n}\\n\\n/** Collector state mapping for the `on` actions. */\\ntype Config$3 = {\\n config?: Array<GenericFn>;\\n consent?: Array<ConsentRule>;\\n custom?: Array<GenericFn>;\\n globals?: Array<GenericFn>;\\n ready?: Array<ReadyFn>;\\n run?: Array<RunFn>;\\n session?: Array<SessionFn>;\\n user?: Array<UserFn>;\\n};\\n/** Allow arbitrary string events via `(string & {})`. */\\ntype Types$3 = keyof Config$3 | (string & {});\\n/** Map each event type to its expected data payload type. */\\ninterface EventDataMap {\\n config: Partial<Config$6>;\\n consent: Consent;\\n custom: Properties;\\n globals: Properties;\\n ready: void;\\n run: void;\\n session: SessionData | undefined;\\n user: User;\\n}\\n/** Extract the data type for a specific event. */\\ntype EventData<T extends keyof EventDataMap> = EventDataMap[T];\\n/** Union of all possible data types. */\\ntype AnyEventData = EventDataMap[keyof EventDataMap];\\n/**\\n * Context provided to every `on` callback.\\n * Same posture as Mapping.Context: collector + logger only;\\n * subscriptions are a collector-level concern, not a stage-level one.\\n */\\ninterface Context$4 {\\n collector: Instance$6;\\n logger: Instance$4;\\n}\\n/** Unified subscription callback shape. */\\ntype Fn$2<TData = unknown> = (data: TData, context: Context$4) => PromiseOrValue<void>;\\n/** Typed-data variants for readability and IntelliSense. All reduce to Fn<TData>. */\\ntype ConsentFn = Fn$2<Consent>;\\ntype GenericFn = Fn$2<unknown>;\\ntype ReadyFn = Fn$2<void>;\\ntype RunFn = Fn$2<void>;\\ntype SessionFn = Fn$2<SessionData | undefined>;\\ntype UserFn = Fn$2<User>;\\n/**\\n * Consent rule: a record of `{ [consentKey]: ConsentFn }`.\\n * Only the consent action uses this shape (per-key handler dispatch).\\n */\\ninterface ConsentRule {\\n [key: string]: ConsentFn;\\n}\\n/** Anything registerable via `walker.on(action, X)`: a typed callback or a consent rule record. */\\ntype Subscription = ConsentRule | GenericFn | ReadyFn | RunFn | SessionFn | UserFn;\\ninterface OnConfig {\\n config?: GenericFn[];\\n consent?: ConsentRule[];\\n custom?: GenericFn[];\\n globals?: GenericFn[];\\n ready?: ReadyFn[];\\n run?: RunFn[];\\n session?: SessionFn[];\\n user?: UserFn[];\\n [key: string]: ConsentRule[] | GenericFn[] | ReadyFn[] | RunFn[] | SessionFn[] | UserFn[] | undefined;\\n}\\n/**\\n * Destination `on` handler: receives the action type and a destination context.\\n * Already context-style; kept for compatibility with the destination interface.\\n */\\ntype OnFn<T extends TypesGeneric$3 = Types$4> = (type: Types$3, context: Context$5<T>) => PromiseOrValue<void>;\\ntype OnFnRuntime = (type: Types$3, context: Context$5) => PromiseOrValue<void>;\\n\\ntype on_AnyEventData = AnyEventData;\\ntype on_ConsentFn = ConsentFn;\\ntype on_ConsentRule = ConsentRule;\\ntype on_EventData<T extends keyof EventDataMap> = EventData<T>;\\ntype on_EventDataMap = EventDataMap;\\ntype on_GenericFn = GenericFn;\\ntype on_OnConfig = OnConfig;\\ntype on_OnFn<T extends TypesGeneric$3 = Types$4> = OnFn<T>;\\ntype on_OnFnRuntime = OnFnRuntime;\\ntype on_ReadyFn = ReadyFn;\\ntype on_RunFn = RunFn;\\ntype on_SessionFn = SessionFn;\\ntype on_Subscription = Subscription;\\ntype on_UserFn = UserFn;\\ndeclare namespace on {\\n export type { on_AnyEventData as AnyEventData, Config$3 as Config, on_ConsentFn as ConsentFn, on_ConsentRule as ConsentRule, Context$4 as Context, on_EventData as EventData, on_EventDataMap as EventDataMap, Fn$2 as Fn, on_GenericFn as GenericFn, on_OnConfig as OnConfig, on_OnFn as OnFn, on_OnFnRuntime as OnFnRuntime, on_ReadyFn as ReadyFn, on_RunFn as RunFn, on_SessionFn as SessionFn, on_Subscription as Subscription, Types$3 as Types, on_UserFn as UserFn };\\n}\\n\\ninterface NextRule {\\n match: MatchExpression | '*';\\n next: Next;\\n}\\ntype Next = string | string[] | NextRule[];\\n/**\\n * Base environment interface for walkerOS transformers.\\n *\\n * Minimal like Destination - just an extensible object.\\n * Transformers receive dependencies through context, not env.\\n */\\ninterface BaseEnv$2 {\\n [key: string]: unknown;\\n}\\n/**\\n * Type bundle for transformer generics.\\n * Groups Settings, InitSettings, and Env into a single type parameter.\\n * Follows the Source/Destination pattern.\\n *\\n * @template S - Settings configuration type\\n * @template E - Environment type\\n * @template I - InitSettings configuration type (user input)\\n */\\ninterface Types$2<S = unknown, E = BaseEnv$2, I = S> {\\n settings: S;\\n initSettings: I;\\n env: E;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access.\\n */\\ntype TypesGeneric$2 = {\\n settings: any;\\n initSettings: any;\\n env: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle.\\n */\\ntype Settings$2<T extends TypesGeneric$2 = Types$2> = T['settings'];\\ntype InitSettings$2<T extends TypesGeneric$2 = Types$2> = T['initSettings'];\\ntype Env$2<T extends TypesGeneric$2 = Types$2> = T['env'];\\n/**\\n * Inference helper: Extract Types from Instance.\\n */\\ntype TypesOf$2<I> = I extends Instance$3<infer T> ? T : never;\\n/**\\n * Transformer configuration.\\n */\\ninterface Config$2<T extends TypesGeneric$2 = Types$2> {\\n settings?: InitSettings$2<T>;\\n env?: Env$2<T>;\\n id?: string;\\n logger?: Config$4;\\n before?: Next;\\n next?: Next;\\n cache?: Cache;\\n init?: boolean;\\n disabled?: boolean;\\n /** Return this value instead of calling push(). Global mock for all chains. */\\n mock?: unknown;\\n /** Path-specific mock values keyed by chain path (e.g., \\\"destination.ga4.before\\\"). Takes precedence over global mock. */\\n chainMocks?: Record<string, unknown>;\\n}\\n/**\\n * Context provided to transformer functions.\\n * Extends base context with transformer-specific properties.\\n */\\ninterface Context$3<T extends TypesGeneric$2 = Types$2> extends Base<Config$2<T>, Env$2<T>> {\\n id: string;\\n ingest: Ingest;\\n}\\n/**\\n * Unified result type for transformer functions.\\n * Replaces the old union return type with a structured object.\\n *\\n * @field event - Modified event to continue with\\n * @field respond - Wrapped respond function for downstream transformers\\n * @field next - Branch to a different chain (replaces BranchResult)\\n */\\ninterface Result$1<E = DeepPartialEvent> {\\n event?: E;\\n respond?: RespondFn;\\n next?: Next;\\n}\\n/**\\n * Result of running a transformer chain.\\n * Returns the processed event (singular, fan-out array, or null if dropped)\\n * alongside the potentially wrapped respond function.\\n */\\ninterface ChainResult {\\n event: DeepPartialEvent | DeepPartialEvent[] | null;\\n respond?: RespondFn;\\n}\\n/**\\n * The main transformer function.\\n *\\n * Pre-collector transformers use default E = DeepPartialEvent.\\n * Post-collector transformers can use E = Event for type-safe access.\\n * A transformer written for DeepPartialEvent works in both positions\\n * because Event is a subtype of DeepPartialEvent.\\n *\\n * @returns Result - structured result with event, respond, next\\n * @returns Result[] - fan-out: each Result continues independently through remaining chain\\n * @returns void - continue with current event unchanged (passthrough)\\n * @returns false - stop chain, cancel further processing\\n */\\ntype Fn$1<T extends TypesGeneric$2 = Types$2, E = DeepPartialEvent> = (event: E, context: Context$3<T>) => PromiseOrValue<Result$1<E> | Result$1<E>[] | false | void>;\\n/**\\n * Optional initialization function.\\n * Called once before first push.\\n *\\n * @param context - Transformer context\\n * @returns void - initialization successful\\n * @returns false - initialization failed, skip this transformer\\n * @returns Config<T> - return updated config\\n */\\ntype InitFn$1<T extends TypesGeneric$2 = Types$2> = (context: Context$3<T>) => PromiseOrValue<void | false | Config$2<T>>;\\n/**\\n * Transformer instance returned by Init function.\\n */\\ninterface Instance$3<T extends TypesGeneric$2 = Types$2> {\\n type: string;\\n config: Config$2<T>;\\n push: Fn$1<T>;\\n init?: InitFn$1<T>;\\n destroy?: DestroyFn<Config$2<T>, Env$2<T>>;\\n}\\n/**\\n * Transformer initialization function.\\n * Creates a transformer instance from context.\\n */\\ntype Init$2<T extends TypesGeneric$2 = Types$2> = (context: Context$3<Types$2<Partial<Settings$2<T>>, Env$2<T>, InitSettings$2<T>>>) => Instance$3<T> | Promise<Instance$3<T>>;\\n/**\\n * Configuration for initializing a transformer.\\n * Used in collector registration.\\n */\\ntype InitTransformer<T extends TypesGeneric$2 = Types$2> = {\\n code: Init$2<T>;\\n config?: Partial<Config$2<T>>;\\n env?: Partial<Env$2<T>>;\\n before?: Next;\\n next?: Next;\\n cache?: Cache;\\n};\\n/**\\n * Transformers configuration for collector.\\n * Maps transformer IDs to their initialization configurations.\\n */\\ninterface InitTransformers {\\n [transformerId: string]: InitTransformer<any>;\\n}\\n/**\\n * Active transformer instances registry.\\n */\\ninterface Transformers {\\n [transformerId: string]: Instance$3;\\n}\\n\\ntype transformer_ChainResult = ChainResult;\\ntype transformer_InitTransformer<T extends TypesGeneric$2 = Types$2> = InitTransformer<T>;\\ntype transformer_InitTransformers = InitTransformers;\\ntype transformer_Next = Next;\\ntype transformer_NextRule = NextRule;\\ntype transformer_Transformers = Transformers;\\ndeclare namespace transformer {\\n export type { BaseEnv$2 as BaseEnv, transformer_ChainResult as ChainResult, Config$2 as Config, Context$3 as Context, Env$2 as Env, Fn$1 as Fn, Init$2 as Init, InitFn$1 as InitFn, InitSettings$2 as InitSettings, transformer_InitTransformer as InitTransformer, transformer_InitTransformers as InitTransformers, Instance$3 as Instance, transformer_Next as Next, transformer_NextRule as NextRule, Result$1 as Result, Settings$2 as Settings, transformer_Transformers as Transformers, Types$2 as Types, TypesGeneric$2 as TypesGeneric, TypesOf$2 as TypesOf };\\n}\\n\\ninterface Context$2 {\\n city?: string;\\n country?: string;\\n encoding?: string;\\n hash?: string;\\n ip?: string;\\n language?: string;\\n origin?: string;\\n region?: string;\\n userAgent?: string;\\n [key: string]: string | undefined;\\n}\\n\\ndeclare namespace request {\\n export type { Context$2 as Context };\\n}\\n\\n/**\\n * Base Env interface for dependency injection into sources.\\n *\\n * Sources receive all their dependencies through this environment object,\\n * making them platform-agnostic and easily testable.\\n */\\ninterface BaseEnv$1 {\\n [key: string]: unknown;\\n push: PushFn$1;\\n command: CommandFn;\\n sources?: Sources;\\n elb: Fn$3;\\n logger: Instance$4;\\n}\\n/**\\n * Type bundle for source generics.\\n * Groups Settings, Mapping, Push, Env, and InitSettings into a single type parameter.\\n *\\n * @template S - Settings configuration type\\n * @template M - Mapping configuration type\\n * @template P - Push function signature (flexible to support HTTP handlers, etc.)\\n * @template E - Environment dependencies type\\n * @template I - InitSettings configuration type (user input)\\n */\\ninterface Types$1<S = unknown, M = unknown, P = Fn$3, E = BaseEnv$1, I = S> {\\n settings: S;\\n initSettings: I;\\n mapping: M;\\n push: P;\\n env: E;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access\\n */\\ntype TypesGeneric$1 = {\\n settings: any;\\n initSettings: any;\\n mapping: any;\\n push: any;\\n env: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle\\n */\\ntype Settings$1<T extends TypesGeneric$1 = Types$1> = T['settings'];\\ntype InitSettings$1<T extends TypesGeneric$1 = Types$1> = T['initSettings'];\\ntype Mapping<T extends TypesGeneric$1 = Types$1> = T['mapping'];\\ntype Push<T extends TypesGeneric$1 = Types$1> = T['push'];\\ntype Env$1<T extends TypesGeneric$1 = Types$1> = T['env'];\\n/**\\n * Inference helper: Extract Types from Instance\\n */\\ntype TypesOf$1<I> = I extends Instance$2<infer T> ? T : never;\\ninterface Config$1<T extends TypesGeneric$1 = Types$1> extends Config$7<Mapping<T>> {\\n /** Implementation-specific configuration passed to the init function. */\\n settings?: InitSettings$1<T>;\\n /** Runtime dependencies injected by the collector (push, command, logger, etc.). */\\n env?: Env$1<T>;\\n /** Source identifier; defaults to the InitSources object key. */\\n id?: string;\\n /** Logger configuration (level, handler) to override the collector's defaults. */\\n logger?: Config$4;\\n /** Mark as primary source; its push function becomes the exported `elb` from startFlow. */\\n primary?: boolean;\\n /** Defer source initialization until these collector events fire (e.g., `['consent']`). */\\n require?: string[];\\n /**\\n * Ingest metadata extraction mapping.\\n * Extracts values from raw request objects (Express req, Lambda event, etc.)\\n * using walkerOS mapping syntax. Extracted data flows to transformers/destinations.\\n *\\n * @example\\n * ingest: {\\n * ip: 'req.ip',\\n * ua: 'req.headers.user-agent',\\n * origin: 'req.headers.origin'\\n * }\\n */\\n ingest?: Data$1;\\n /** Completely skip this source — no init, no event capture. */\\n disabled?: boolean;\\n}\\ntype PartialConfig<T extends TypesGeneric$1 = Types$1> = Config$1<Types$1<Partial<Settings$1<T>> | Settings$1<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env$1<T>>>;\\ninterface Instance$2<T extends TypesGeneric$1 = Types$1> {\\n type: string;\\n config: Config$1<T>;\\n push: Push<T>;\\n destroy?: DestroyFn<Config$1<T>, Env$1<T>>;\\n on?(event: Types$3, context?: unknown): void | boolean | Promise<void | boolean>;\\n}\\n/**\\n * Context provided to source init function.\\n * Extends base context with source-specific properties.\\n */\\ninterface Context$1<T extends TypesGeneric$1 = Types$1> extends Base<Partial<Config$1<T>>, Env$1<T>> {\\n id: string;\\n /**\\n * Sets ingest metadata for the current request.\\n * Extracts values from the raw request using config.ingest mapping.\\n * The extracted data is passed through to transformers and destinations.\\n *\\n * @param value - Raw request object (Express req, Lambda event, etc.)\\n */\\n setIngest: (value: unknown) => Promise<void>;\\n /** Sets respond function for the current request. Called by source per-request. */\\n setRespond: (fn: RespondFn | undefined) => void;\\n}\\ntype Init$1<T extends TypesGeneric$1 = Types$1> = (context: Context$1<T>) => Instance$2<T> | Promise<Instance$2<T>>;\\ntype InitSource<T extends TypesGeneric$1 = Types$1> = {\\n code: Init$1<T>;\\n config?: Partial<Config$1<T>>;\\n env?: Partial<Env$1<T>>;\\n primary?: boolean;\\n next?: Next;\\n before?: Next;\\n cache?: Cache;\\n};\\n/**\\n * Sources configuration for collector.\\n * Maps source IDs to their initialization configurations.\\n */\\ninterface InitSources {\\n [sourceId: string]: InitSource<any>;\\n}\\n/**\\n * Renderer hint for source simulation UI.\\n * - 'browser': Source needs a real DOM (iframe with live preview)\\n * - 'codebox': Source uses a JSON/code editor (default)\\n */\\ntype Renderer = 'browser' | 'codebox';\\n\\ntype source_InitSource<T extends TypesGeneric$1 = Types$1> = InitSource<T>;\\ntype source_InitSources = InitSources;\\ntype source_Mapping<T extends TypesGeneric$1 = Types$1> = Mapping<T>;\\ntype source_PartialConfig<T extends TypesGeneric$1 = Types$1> = PartialConfig<T>;\\ntype source_Push<T extends TypesGeneric$1 = Types$1> = Push<T>;\\ntype source_Renderer = Renderer;\\ndeclare namespace source {\\n export type { BaseEnv$1 as BaseEnv, Config$1 as Config, Context$1 as Context, Env$1 as Env, Init$1 as Init, InitSettings$1 as InitSettings, source_InitSource as InitSource, source_InitSources as InitSources, Instance$2 as Instance, source_Mapping as Mapping, source_PartialConfig as PartialConfig, source_Push as Push, source_Renderer as Renderer, Settings$1 as Settings, Types$1 as Types, TypesGeneric$1 as TypesGeneric, TypesOf$1 as TypesOf };\\n}\\n\\ninterface BaseEnv {\\n [key: string]: unknown;\\n}\\ninterface Types<S = unknown, E = BaseEnv, I = S> {\\n settings: S;\\n initSettings: I;\\n env: E;\\n}\\ntype TypesGeneric = {\\n settings: any;\\n initSettings: any;\\n env: any;\\n};\\ntype Settings<T extends TypesGeneric = Types> = T['settings'];\\ntype InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\\ntype Env<T extends TypesGeneric = Types> = T['env'];\\ntype TypesOf<I> = I extends Instance$1<infer T> ? T : never;\\ninterface Config<T extends TypesGeneric = Types> {\\n settings?: InitSettings<T>;\\n env?: Env<T>;\\n id?: string;\\n logger?: Config$4;\\n}\\ninterface Context<T extends TypesGeneric = Types> extends Base<Config<T>, Env<T>> {\\n id: string;\\n}\\ntype GetFn<T = unknown> = (key: string) => T | undefined | Promise<T | undefined>;\\ntype SetFn<T = unknown> = (key: string, value: T, ttl?: number) => void | Promise<void>;\\ntype DeleteFn = (key: string) => void | Promise<void>;\\ninterface Instance$1<T extends TypesGeneric = Types> {\\n type: string;\\n config: Config<T>;\\n get: GetFn;\\n set: SetFn;\\n delete: DeleteFn;\\n destroy?: DestroyFn<Config<T>, Env<T>>;\\n}\\ntype Init<T extends TypesGeneric = Types> = (context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>) => Instance$1<T> | Promise<Instance$1<T>>;\\ntype InitFn<T extends TypesGeneric = Types> = (context: Context<T>) => PromiseOrValue<void | false | Config<T>>;\\ntype InitStore<T extends TypesGeneric = Types> = {\\n code: Init<T>;\\n config?: Partial<Config<T>>;\\n env?: Partial<Env<T>>;\\n};\\ninterface InitStores {\\n [storeId: string]: InitStore<any>;\\n}\\ninterface Stores {\\n [storeId: string]: Instance$1;\\n}\\n\\ntype store_BaseEnv = BaseEnv;\\ntype store_Config<T extends TypesGeneric = Types> = Config<T>;\\ntype store_Context<T extends TypesGeneric = Types> = Context<T>;\\ntype store_DeleteFn = DeleteFn;\\ntype store_Env<T extends TypesGeneric = Types> = Env<T>;\\ntype store_GetFn<T = unknown> = GetFn<T>;\\ntype store_Init<T extends TypesGeneric = Types> = Init<T>;\\ntype store_InitFn<T extends TypesGeneric = Types> = InitFn<T>;\\ntype store_InitSettings<T extends TypesGeneric = Types> = InitSettings<T>;\\ntype store_InitStore<T extends TypesGeneric = Types> = InitStore<T>;\\ntype store_InitStores = InitStores;\\ntype store_SetFn<T = unknown> = SetFn<T>;\\ntype store_Settings<T extends TypesGeneric = Types> = Settings<T>;\\ntype store_Stores = Stores;\\ntype store_Types<S = unknown, E = BaseEnv, I = S> = Types<S, E, I>;\\ntype store_TypesGeneric = TypesGeneric;\\ntype store_TypesOf<I> = TypesOf<I>;\\ndeclare namespace store {\\n export type { store_BaseEnv as BaseEnv, store_Config as Config, store_Context as Context, store_DeleteFn as DeleteFn, store_Env as Env, store_GetFn as GetFn, store_Init as Init, store_InitFn as InitFn, store_InitSettings as InitSettings, store_InitStore as InitStore, store_InitStores as InitStores, Instance$1 as Instance, store_SetFn as SetFn, store_Settings as Settings, store_Stores as Stores, store_Types as Types, store_TypesGeneric as TypesGeneric, store_TypesOf as TypesOf };\\n}\\n\\n/**\\n * Trigger — unified interface for invoking any walkerOS step in simulation\\n * and testing. Every package exports a `createTrigger` factory from its\\n * examples that conforms to `Trigger.CreateFn`.\\n *\\n * Usage:\\n * const { flow, trigger } = await createTrigger(initConfig);\\n * const result = await trigger(type?, options?)(content);\\n *\\n * @packageDocumentation\\n */\\n\\n/** Flow access handle returned by createTrigger. */\\ninterface FlowHandle {\\n /** The collector instance created by startFlow. */\\n collector: Instance$6;\\n /** The elb push function for direct event injection. */\\n elb: Fn$3;\\n}\\n/** What createTrigger returns — a flow handle (lazy) and a trigger function. */\\ninterface Instance<TContent = unknown, TResult = unknown> {\\n /** Flow handle — undefined until first trigger() call, then stable. */\\n readonly flow: FlowHandle | undefined;\\n trigger: Fn<TContent, TResult>;\\n}\\n/**\\n * Curried trigger function — always async.\\n *\\n * First call selects mechanism (type) and configures it (options).\\n * Second call fires with content and returns result.\\n *\\n * @example\\n * // Browser source — click trigger\\n * trigger('click', 'button.cta')('<button data-elb=\\\"cta\\\">Sign Up</button>')\\n *\\n * // Express source — POST request\\n * trigger('POST')({ path: '/collect', body: { name: 'page view' } })\\n *\\n * // DataLayer — default mechanism\\n * trigger()(['event', 'purchase', { value: 25.42 }])\\n */\\ntype Fn<TContent = unknown, TResult = unknown> = (type?: string, options?: unknown) => (content: TContent) => Promise<TResult>;\\n/**\\n * Factory function exported by each package's examples.\\n *\\n * Receives full Collector.InitConfig. Does NOT call startFlow eagerly —\\n * startFlow is deferred to the first trigger() invocation (lazy init).\\n * The flow property uses a getter to read the closure variable live.\\n * createTrigger itself stays async for consistency (other packages may\\n * need await during setup). Config is passed through UNMODIFIED —\\n * validation is startFlow's job.\\n *\\n * @example\\n * // Package exports:\\n * export const createTrigger: Trigger.CreateFn<HTMLContent, void> = async (config) => {\\n * let flow: Trigger.FlowHandle | undefined;\\n *\\n * const trigger: Trigger.Fn<HTMLContent, void> = (type?, options?) => async (content) => {\\n * // Pre-startFlow work (e.g., inject HTML for browser source)\\n * // ...\\n *\\n * // Lazy init — only on first call\\n * if (!flow) flow = await startFlow(config);\\n *\\n * // Post-startFlow work (e.g., dispatch click event)\\n * // ...\\n * };\\n *\\n * return {\\n * get flow() { return flow; },\\n * trigger,\\n * };\\n * };\\n */\\ntype CreateFn<TContent = unknown, TResult = unknown> = (config: InitConfig, options?: unknown) => Promise<Instance<TContent, TResult>>;\\n\\ntype trigger_CreateFn<TContent = unknown, TResult = unknown> = CreateFn<TContent, TResult>;\\ntype trigger_FlowHandle = FlowHandle;\\ntype trigger_Fn<TContent = unknown, TResult = unknown> = Fn<TContent, TResult>;\\ntype trigger_Instance<TContent = unknown, TResult = unknown> = Instance<TContent, TResult>;\\ndeclare namespace trigger {\\n export type { trigger_CreateFn as CreateFn, trigger_FlowHandle as FlowHandle, trigger_Fn as Fn, trigger_Instance as Instance };\\n}\\n\\ntype AnyObject<T = unknown> = Record<string, T>;\\ntype Elb = Fn$3;\\ntype AnyFunction = (...args: unknown[]) => unknown;\\ntype SingleOrArray<T> = T | Array<T>;\\ntype Events = Array<Event>;\\ntype PartialEvent = Partial<Event>;\\ntype DeepPartialEvent = DeepPartial<Event>;\\ninterface Event {\\n name: string;\\n data: Properties;\\n context: OrderedProperties;\\n globals: Properties;\\n custom: Properties;\\n user: User;\\n nested: Entities;\\n consent: Consent;\\n id: string;\\n trigger: string;\\n entity: string;\\n action: string;\\n timestamp: number;\\n timing: number;\\n source: Source;\\n}\\ninterface Consent {\\n [name: string]: boolean;\\n}\\ninterface User extends Properties {\\n id?: string;\\n device?: string;\\n session?: string;\\n hash?: string;\\n address?: string;\\n email?: string;\\n phone?: string;\\n userAgent?: string;\\n browser?: string;\\n browserVersion?: string;\\n deviceType?: string;\\n language?: string;\\n country?: string;\\n region?: string;\\n city?: string;\\n zip?: string;\\n timezone?: string;\\n os?: string;\\n osVersion?: string;\\n screenSize?: string;\\n ip?: string;\\n internal?: boolean;\\n}\\ntype SourcePlatform = 'web' | 'server' | 'app' | 'ios' | 'android' | 'terminal' | string;\\n/**\\n * SourceMap is the discriminated-union registry for source kinds.\\n * Each source package augments this interface via `declare module\\n * '@walkeros/core'` to register its own `type` literal and any\\n * source-specific fields. Conflicting declarations cause compile errors,\\n * intentional, to surface naming collisions early.\\n */\\ninterface SourceMap {\\n collector: {\\n type: 'collector';\\n };\\n}\\ninterface Source extends Properties {\\n type: string;\\n platform?: SourcePlatform;\\n /** Deployment version of the source emitter (string). */\\n version?: string;\\n /** Event-model spec version. Collector defaults to \\\"4\\\". */\\n schema?: string;\\n /** Emission sequence per run (was: event.count). */\\n count?: number;\\n /** W3C traceparent full string; set when the emission is part of a chained trace. */\\n trace?: string;\\n /** Walker-controlled standard suggestions (sources may set). */\\n url?: string;\\n referrer?: string;\\n tool?: string;\\n command?: string;\\n}\\ntype PropertyType = boolean | string | number | {\\n [key: string]: Property;\\n};\\ntype Property = PropertyType | Array<PropertyType>;\\ninterface Properties {\\n [key: string]: Property | undefined;\\n}\\ninterface OrderedProperties {\\n [key: string]: [Property, number] | undefined;\\n}\\ntype Entities = Array<Entity>;\\ninterface Entity {\\n entity: string;\\n data: Properties;\\n nested?: Entities;\\n context?: OrderedProperties;\\n}\\ntype ConsentHandler = Record<string, AnyFunction>;\\ntype ActionHandler = AnyFunction;\\ntype DeepPartial<T> = {\\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\\n};\\ntype PromiseOrValue<T> = T | Promise<T>;\\n\\ntype walkeros_ActionHandler = ActionHandler;\\ntype walkeros_AnyFunction = AnyFunction;\\ntype walkeros_AnyObject<T = unknown> = AnyObject<T>;\\ntype walkeros_Consent = Consent;\\ntype walkeros_ConsentHandler = ConsentHandler;\\ntype walkeros_DeepPartial<T> = DeepPartial<T>;\\ntype walkeros_DeepPartialEvent = DeepPartialEvent;\\ntype walkeros_Elb = Elb;\\ntype walkeros_Entities = Entities;\\ntype walkeros_Entity = Entity;\\ntype walkeros_Event = Event;\\ntype walkeros_Events = Events;\\ntype walkeros_OrderedProperties = OrderedProperties;\\ntype walkeros_PartialEvent = PartialEvent;\\ntype walkeros_PromiseOrValue<T> = PromiseOrValue<T>;\\ntype walkeros_Properties = Properties;\\ntype walkeros_Property = Property;\\ntype walkeros_PropertyType = PropertyType;\\ntype walkeros_SingleOrArray<T> = SingleOrArray<T>;\\ntype walkeros_Source = Source;\\ntype walkeros_SourceMap = SourceMap;\\ntype walkeros_SourcePlatform = SourcePlatform;\\ntype walkeros_User = User;\\ndeclare namespace walkeros {\\n export type { walkeros_ActionHandler as ActionHandler, walkeros_AnyFunction as AnyFunction, walkeros_AnyObject as AnyObject, walkeros_Consent as Consent, walkeros_ConsentHandler as ConsentHandler, walkeros_DeepPartial as DeepPartial, walkeros_DeepPartialEvent as DeepPartialEvent, walkeros_Elb as Elb, walkeros_Entities as Entities, walkeros_Entity as Entity, walkeros_Event as Event, walkeros_Events as Events, walkeros_OrderedProperties as OrderedProperties, walkeros_PartialEvent as PartialEvent, walkeros_PromiseOrValue as PromiseOrValue, walkeros_Properties as Properties, walkeros_Property as Property, walkeros_PropertyType as PropertyType, walkeros_SingleOrArray as SingleOrArray, walkeros_Source as Source, walkeros_SourceMap as SourceMap, walkeros_SourcePlatform as SourcePlatform, walkeros_User as User };\\n}\\n\\n/**\\n * A recorded function call made during simulation.\\n * Captures what a destination called on its env (e.g., window.gtag).\\n */\\ninterface Call {\\n /** Dot-path of the function called: \\\"window.gtag\\\", \\\"dataLayer.push\\\" */\\n fn: string;\\n /** Arguments passed to the function */\\n args: unknown[];\\n /** Unix timestamp in ms */\\n ts: number;\\n}\\n/**\\n * Result of simulating a single step.\\n * Same shape for source, transformer, and destination.\\n */\\ninterface Result {\\n /** Which step type was simulated */\\n step: 'source' | 'transformer' | 'destination';\\n /** Step name, e.g. \\\"gtag\\\", \\\"dataLayer\\\", \\\"enricher\\\" */\\n name: string;\\n /**\\n * Output events:\\n * - source: captured pre-collector events\\n * - transformer: [transformed event] or [] if filtered\\n * - destination: [] (destinations don't produce events)\\n */\\n events: DeepPartialEvent[];\\n /** Intercepted env calls. Populated for destinations, empty [] for others. */\\n calls: Call[];\\n /** Execution time in ms */\\n duration: number;\\n /** Error if the step threw */\\n error?: Error;\\n}\\n\\ntype simulation_Call = Call;\\ntype simulation_Result = Result;\\ndeclare namespace simulation {\\n export type { simulation_Call as Call, simulation_Result as Result };\\n}\\n\\ninterface Code {\\n lang?: string;\\n code: string;\\n}\\ninterface Hint {\\n text: string;\\n code?: Array<Code>;\\n}\\ntype Hints = Record<string, Hint>;\\n\\ntype hint_Code = Code;\\ntype hint_Hint = Hint;\\ntype hint_Hints = Hints;\\ndeclare namespace hint {\\n export type { hint_Code as Code, hint_Hint as Hint, hint_Hints as Hints };\\n}\\n\\ntype StorageType = 'local' | 'session' | 'cookie';\\ndeclare const Const: {\\n readonly Utils: {\\n readonly Storage: {\\n readonly Local: \\\"local\\\";\\n readonly Session: \\\"session\\\";\\n readonly Cookie: \\\"cookie\\\";\\n };\\n };\\n};\\n\\ntype SendDataValue = Property | Properties;\\ntype SendHeaders = {\\n [key: string]: string;\\n};\\ninterface SendResponse {\\n ok: boolean;\\n data?: unknown;\\n error?: string;\\n}\\n\\n/**\\n * Creates a TransformerResult for dynamic chain routing.\\n * Use this in transformer push functions to redirect the chain.\\n */\\ndeclare function branch(event: DeepPartialEvent, next: Next): Result$1;\\n\\n/**\\n * Anonymizes an IPv4 address by setting the last octet to 0.\\n *\\n * @param ip The IP address to anonymize.\\n * @returns The anonymized IP address or an empty string if the IP is invalid.\\n */\\ndeclare function anonymizeIP(ip: string): string;\\n\\n/**\\n * Flow Configuration Utilities\\n *\\n * Functions for resolving and processing Flow configurations.\\n *\\n * @packageDocumentation\\n */\\n\\n/** Sentinel prefix for deferred $env resolution. Shared with CLI bundler. */\\ndeclare const ENV_MARKER_PREFIX = \\\"__WALKEROS_ENV:\\\";\\ninterface ResolveOptions {\\n deferred?: boolean;\\n /**\\n * When false, unresolved `$flow.X.Y` refs (unknown flow, missing key,\\n * empty value) trigger {@link onWarning} and the original `$flow…` string\\n * is left in place. Cycles always throw regardless of this flag.\\n * Default: true (strict — throws as today).\\n */\\n strictFlowRefs?: boolean;\\n /** Called for each unresolved $flow ref when {@link strictFlowRefs} is false. */\\n onWarning?: (message: string) => void;\\n}\\n/**\\n * Walk a dot-separated path into a value.\\n * Throws if any intermediate segment is missing or not an object.\\n */\\ndeclare function walkPath(value: unknown, path: string, refPrefix: string): unknown;\\n/**\\n * Resolver callback for `$flow.X.Y` references.\\n *\\n * Given a sibling flow name, returns its fully resolved `Flow.Config` block\\n * (with `$env`/`$var`/`$def`/`$contract` already resolved) as `unknown` so\\n * that {@link walkPath} can traverse it. Returns `undefined` if the flow\\n * does not exist. Implementations are responsible for cycle detection across\\n * recursive calls.\\n */\\ntype FlowConfigResolver = (flowName: string) => unknown;\\n/**\\n * Convert package name to valid JavaScript variable name.\\n * Used for deterministic default import naming.\\n * @example\\n * packageNameToVariable('@walkeros/server-destination-api')\\n * // → '_walkerosServerDestinationApi'\\n */\\ndeclare function packageNameToVariable(packageName: string): string;\\n/**\\n * Get resolved flow for a named flow.\\n *\\n * Resolution pass order:\\n * 1. `$env` / `$var` resolve per-flow in isolation (no cross-flow context).\\n * 2. `$flow.X.Y` resolves against pass-1 outputs of sibling flows (so `$env`/`$var`\\n * inside the referenced flow are already resolved when `$flow` reads it).\\n * 3. `$def` / `$contract` resolve last (with `$flow` results available).\\n *\\n * In practice these passes are interleaved by the resolver: when `$flow.X.Y`\\n * is encountered, the sibling flow X's `Flow.Config` block is recursively\\n * resolved on demand (with all its own `$env`/`$var`/`$def`/`$contract`\\n * references resolved first), then the deep path is walked. Cycles are\\n * detected via a visiting set.\\n *\\n * @param config - The complete Flow.Json (root multi-flow config)\\n * @param flowName - Flow name (auto-selected if only one exists)\\n * @param options - Resolution options\\n * @returns Resolved {@link Flow} with $var, $env, $def, $contract, and $flow patterns resolved\\n * @throws Error if flow selection is required but not specified, or flow not found\\n * @throws Error if a `$flow.X.Y` reference forms a cycle\\n *\\n * @example\\n * ```typescript\\n * import { getFlowSettings } from '@walkeros/core';\\n *\\n * const config = JSON.parse(fs.readFileSync('walkeros.config.json', 'utf8'));\\n *\\n * // Auto-select if only one flow\\n * const flow = getFlowSettings(config);\\n *\\n * // Or specify flow\\n * const prodFlow = getFlowSettings(config, 'production');\\n * ```\\n */\\ndeclare function getFlowSettings(config: Flow.Json, flowName?: string, options?: ResolveOptions): Flow;\\n/**\\n * Get the platform of a flow ('web' or 'server').\\n *\\n * Reads from `flow.config.platform`.\\n *\\n * @param flow - Resolved flow (output of {@link getFlowSettings})\\n * @returns \\\"web\\\" or \\\"server\\\"\\n * @throws Error if `config.platform` is missing\\n *\\n * @example\\n * ```typescript\\n * import { getPlatform } from '@walkeros/core';\\n *\\n * const platform = getPlatform(flow);\\n * // Returns \\\"web\\\" or \\\"server\\\"\\n * ```\\n */\\ndeclare function getPlatform(flow: Flow): 'web' | 'server';\\n\\n/**\\n * @interface Assign\\n * @description Options for the assign function.\\n * @property merge - Merge array properties instead of overriding them.\\n * @property shallow - Create a shallow copy instead of updating the target object.\\n * @property extend - Extend the target with new properties instead of only updating existing ones.\\n */\\ninterface Assign {\\n merge?: boolean;\\n shallow?: boolean;\\n extend?: boolean;\\n}\\n/**\\n * Merges objects with advanced options.\\n *\\n * @template T, U\\n * @param target - The target object to merge into.\\n * @param obj - The source object to merge from.\\n * @param options - Options for merging.\\n * @returns The merged object.\\n */\\ndeclare function assign<T extends object, U extends object>(target: T, obj?: U, options?: Assign): T & U;\\n\\n/**\\n * Gets a value from an object by a dot-notation string.\\n * Supports wildcards for arrays.\\n *\\n * @example\\n * getByPath({ data: { id: 1 } }, \\\"data.id\\\") // Returns 1\\n *\\n * @param event - The object to get the value from.\\n * @param key - The dot-notation string.\\n * @param defaultValue - The default value to return if the key is not found.\\n * @returns The value from the object or the default value.\\n */\\ndeclare function getByPath(event: unknown, key?: string, defaultValue?: unknown): unknown;\\n/**\\n * Sets a value in an object by a dot-notation string.\\n *\\n * @param obj - The object to set the value in.\\n * @param key - The dot-notation string.\\n * @param value - The value to set.\\n * @returns A new object with the updated value.\\n */\\ndeclare function setByPath<T = unknown>(obj: T, key: string, value: unknown): T;\\n\\ndeclare function flattenIncludeSections(event: DeepPartialEvent, sections: string[]): Record<string, unknown>;\\n\\n/**\\n * Casts a value to a specific type.\\n *\\n * @param value The value to cast.\\n * @returns The casted value.\\n */\\ndeclare function castValue(value: unknown): PropertyType;\\n\\n/**\\n * Creates a deep clone of a value.\\n * Supports primitive values, objects, arrays, dates, and regular expressions.\\n * Handles circular references.\\n *\\n * @template T\\n * @param org - The value to clone.\\n * @param visited - A map of visited objects to handle circular references.\\n * @returns The cloned value.\\n */\\ndeclare function clone<T>(org: T, visited?: WeakMap<object, unknown>): T;\\n\\n/**\\n * Checks if the required consent is granted.\\n *\\n * @param required - The required consent states.\\n * @param state - The current consent states.\\n * @param individual - Individual consent states to prioritize.\\n * @returns The granted consent states or false if not granted.\\n */\\ndeclare function getGrantedConsent(required: Consent | undefined, state?: Consent, individual?: Consent): false | Consent;\\n\\n/**\\n * Creates a new destination instance by merging a base destination with additional configuration.\\n *\\n * This utility enables elegant destination configuration while avoiding config side-effects\\n * that could occur when reusing destination objects across multiple collector instances.\\n *\\n * @param baseDestination - The base destination to extend\\n * @param config - Additional configuration to merge with the base destination's config\\n * @returns A new destination instance with merged configuration\\n *\\n * @example\\n * ```typescript\\n * // Types are inferred automatically from destinationGtag\\n * elb('walker destination', createDestination(destinationGtag, {\\n * settings: { ga4: { measurementId: 'G-123' } }\\n * }));\\n * ```\\n */\\ndeclare function createDestination<I extends Instance$5>(baseDestination: I, config: Partial<Config$5<TypesOf$3<I>>>): I;\\n\\n/**\\n * Deep merges source into target, mutating target in-place.\\n * Recurses into plain objects; everything else is a leaf (replaced).\\n * Skips undefined source values; null overwrites.\\n */\\ndeclare function deepMerge<T extends Record<string, unknown>>(target: T, source: Record<string, unknown>): T;\\n\\n/**\\n * Creates a complete event with default values.\\n * Used for testing and debugging.\\n *\\n * @param props - Properties to override the default values.\\n * @returns A complete event.\\n */\\ndeclare function createEvent(props?: DeepPartialEvent): Event;\\n/**\\n * Creates a complete event with default values based on the event name.\\n * Used for testing and debugging.\\n *\\n * @param name - The name of the event to create.\\n * @param props - Properties to override the default values.\\n * @returns A complete event.\\n */\\ndeclare function getEvent(name?: string, props?: DeepPartialEvent): Event;\\n\\n/**\\n * Generates a random string of a given length.\\n *\\n * @param length - The length of the random string.\\n * @param charset - Optional custom charset. Defaults to base-36 (0-9a-z).\\n * @returns The random string.\\n */\\ndeclare function getId(length?: number, charset?: string): string;\\n\\n/**\\n * W3C span_id: 8 random bytes encoded as 16 lowercase hex characters.\\n * Reference: W3C Trace Context (W3C Recommendation, January 2020).\\n */\\ndeclare function getSpanId(): string;\\n\\ninterface MarketingParameters {\\n [key: string]: string;\\n}\\n/**\\n * Click-ID registry entry — maps a URL parameter name to a canonical platform.\\n *\\n * Runtime shape only; the corresponding Zod schema lives in\\n * `@walkeros/core/dev` (schemas/marketing.ts) for dev tooling that needs\\n * validation or JSON Schema generation.\\n */\\ninterface ClickIdEntry {\\n param: string;\\n platform: string;\\n}\\n/**\\n * Default click-ID registry.\\n *\\n * Ordered by priority: when a URL contains multiple click IDs, the entry\\n * appearing earlier wins as the resolved `clickId` / `platform`. All matched\\n * raw values are still preserved on the result.\\n *\\n * Extend via the third argument to {@link getMarketingParameters} or the\\n * `clickIds` field in the session source settings.\\n */\\ndeclare const defaultClickIds: ClickIdEntry[];\\n/**\\n * Extracts marketing parameters from a URL.\\n *\\n * - UTM and custom params are mapped to friendly names (`utm_source` → `source`).\\n * - Known click IDs are detected case-insensitively; each raw value is stored\\n * under its canonical lowercase param name.\\n * - `clickId` and `platform` reference the highest-priority match (first entry\\n * in the registry present in the URL).\\n * - Custom `clickIds` override default platforms by `param` in place and\\n * append new params at the end of the priority list.\\n */\\ndeclare function getMarketingParameters(url: URL, custom?: MarketingParameters, clickIds?: ClickIdEntry[]): Properties;\\n\\n/**\\n * Creates a debounced function that delays invoking `fn` until after `wait`\\n * milliseconds have elapsed since the last time the debounced function was\\n * invoked. The debounced function comes with a `cancel` method to cancel\\n * delayed `fn` invocations and a `flush` method to immediately invoke them.\\n *\\n * @template P, R\\n * @param fn The function to debounce.\\n * @param wait The number of milliseconds to delay.\\n * @param immediate Trigger the function on the leading edge, instead of the trailing.\\n * @returns The new debounced function.\\n */\\ndeclare function debounce<P extends unknown[], R>(fn: (...args: P) => R, wait?: number, immediate?: boolean): (...args: P) => Promise<R>;\\ndeclare function throttle<P extends unknown[], R>(fn: (...args: P) => R | undefined, delay?: number): (...args: P) => R | undefined;\\n\\n/**\\n * Checks if a value is an arguments object.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an arguments object, false otherwise.\\n */\\ndeclare function isArguments(value: unknown): value is IArguments;\\n/**\\n * Checks if a value is an array.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an array, false otherwise.\\n */\\ndeclare function isArray<T>(value: unknown): value is T[];\\n/**\\n * Checks if a value is a boolean.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a boolean, false otherwise.\\n */\\ndeclare function isBoolean(value: unknown): value is boolean;\\n/**\\n * Checks if an entity is a walker command.\\n *\\n * @param entity The entity to check.\\n * @returns True if the entity is a walker command, false otherwise.\\n */\\ndeclare function isCommand(entity: string): entity is \\\"walker\\\";\\n/**\\n * Checks if a value is defined.\\n *\\n * @param value The value to check.\\n * @returns True if the value is defined, false otherwise.\\n */\\ndeclare function isDefined<T>(val: T | undefined): val is T;\\n/**\\n * Checks if a value is an element or the document.\\n *\\n * @param elem The value to check.\\n * @returns True if the value is an element or the document, false otherwise.\\n */\\ndeclare function isElementOrDocument(elem: unknown): elem is Element;\\n/**\\n * Checks if a value is a function.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a function, false otherwise.\\n */\\ndeclare function isFunction(value: unknown): value is Function;\\n/**\\n * Checks if a value is a number.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a number, false otherwise.\\n */\\ndeclare function isNumber(value: unknown): value is number;\\n/**\\n * Checks if a value is an object.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an object, false otherwise.\\n */\\ndeclare function isObject(value: unknown): value is AnyObject;\\n/**\\n * Checks if two variables have the same type.\\n *\\n * @param variable The first variable.\\n * @param type The second variable.\\n * @returns True if the variables have the same type, false otherwise.\\n */\\ndeclare function isSameType<T>(variable: unknown, type: T): variable is typeof type;\\n/**\\n * Checks if a value is a string.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a string, false otherwise.\\n */\\ndeclare function isString(value: unknown): value is string;\\n\\n/**\\n * Create a logger instance\\n *\\n * @param config - Logger configuration\\n * @returns Logger instance with all log methods and scoping support\\n *\\n * @example\\n * ```typescript\\n * // Basic usage\\n * const logger = createLogger({ level: 'DEBUG' });\\n * logger.info('Hello world');\\n *\\n * // With scoping\\n * const destLogger = logger.scope('gtag').scope('myInstance');\\n * destLogger.debug('Processing event'); // DEBUG [gtag:myInstance] Processing event\\n *\\n * // With custom handler\\n * const logger = createLogger({\\n * handler: (level, message, context, scope, originalHandler) => {\\n * // Custom logic (e.g., send to Sentry)\\n * originalHandler(level, message, context, scope);\\n * }\\n * });\\n * ```\\n *\\n * // TODO: Consider compile-time stripping of debug logs in production builds\\n * // e.g., if (__DEV__) { logger.debug(...) }\\n */\\ndeclare function createLogger(config?: Config$4): Instance$4;\\n\\n/**\\n * Gets the mapping for an event.\\n *\\n * @param event The event to get the mapping for (can be partial or full).\\n * @param mapping The mapping rules.\\n * @param collector Required to evaluate rule-level conditions against the unified Context. Legacy callers may omit; rule-level conditions then run with `undefined as never` (defensive).\\n * @returns The mapping result.\\n */\\ndeclare function getMappingEvent(event: DeepPartialEvent | PartialEvent | Event, mapping?: Rules, collector?: Instance$6): Promise<Result$2>;\\n/**\\n * Gets a value from a mapping.\\n *\\n * @param value The value to get the mapping from.\\n * @param data The mapping data.\\n * @param options The mapping options.\\n * @returns The mapped value.\\n */\\ndeclare function getMappingValue(value: DeepPartialEvent | unknown | undefined, data?: Data$1, context?: Partial<Context$6>): Promise<Property | undefined>;\\n/**\\n * Processes an event through mapping configuration.\\n *\\n * This is the unified mapping logic used by both sources and destinations.\\n * It applies transformations in this order:\\n * 1. Config-level policy - modifies the event itself (global rules)\\n * 2. Mapping rules - finds matching rule based on entity-action\\n * 3. Event-level policy - modifies the event based on specific mapping rule\\n * 4. Data transformation - creates context data\\n * 5. Ignore check and name override\\n *\\n * Sources can pass partial events, destinations pass full events.\\n * getMappingValue works with both partial and full events.\\n *\\n * @param event - The event to process (can be partial or full, will be mutated by policies)\\n * @param config - Mapping configuration (mapping, data, policy, consent)\\n * @param collector - Collector instance for context\\n * @returns Object with transformed event, data, mapping rule, and ignore flag\\n */\\ndeclare function processEventMapping<T extends DeepPartialEvent | Event>(event: T, config: Config$7, collector: Instance$6): Promise<{\\n event: T;\\n data?: Property;\\n mapping?: Rule;\\n mappingKey?: string;\\n ignore: boolean;\\n silent: boolean;\\n}>;\\n\\n/**\\n * Environment mocking utilities for walkerOS destinations\\n *\\n * Provides standardized tools for intercepting function calls in environment objects,\\n * enabling consistent testing patterns across all destinations.\\n */\\ntype InterceptorFn = (path: string[], args: unknown[], original?: Function) => unknown;\\n/**\\n * Creates a proxied environment that intercepts function calls\\n *\\n * Uses Proxy to wrap environment objects and capture all function calls,\\n * allowing for call recording, mocking, or simulation.\\n *\\n * @param env - The environment object to wrap\\n * @param interceptor - Function called for each intercepted call\\n * @returns Proxied environment with interceptor applied\\n *\\n * @example\\n * ```typescript\\n * const calls: Array<{ path: string[]; args: unknown[] }> = [];\\n *\\n * const testEnv = mockEnv(env.push, (path, args) => {\\n * calls.push({ path, args });\\n * });\\n *\\n * // Use testEnv with destination\\n * await destination.push(event, { env: testEnv });\\n *\\n * // Analyze captured calls\\n * expect(calls).toContainEqual({\\n * path: ['window', 'gtag'],\\n * args: ['event', 'purchase', { value: 99.99 }]\\n * });\\n * ```\\n */\\ndeclare function mockEnv<T extends object>(env: T, interceptor: InterceptorFn): T;\\n/**\\n * Traverses environment object and replaces values using a replacer function\\n *\\n * Alternative to mockEnv for environments where Proxy is not suitable.\\n * Performs deep traversal and allows value transformation at each level.\\n *\\n * @param env - The environment object to traverse\\n * @param replacer - Function to transform values during traversal\\n * @returns New environment object with transformed values\\n *\\n * @example\\n * ```typescript\\n * const recordedCalls: APICall[] = [];\\n *\\n * const recordingEnv = traverseEnv(originalEnv, (value, path) => {\\n * if (typeof value === 'function') {\\n * return (...args: unknown[]) => {\\n * recordedCalls.push({\\n * path: path.join('.'),\\n * args: structuredClone(args)\\n * });\\n * return value(...args);\\n * };\\n * }\\n * return value;\\n * });\\n * ```\\n */\\ndeclare function traverseEnv<T extends object>(env: T, replacer: (value: unknown, path: string[]) => unknown): T;\\n\\n/**\\n * Create a mock context for testing transformers and destinations.\\n *\\n * Provides sensible defaults for all required fields. Override only\\n * what the test cares about. When context signatures change, only\\n * this factory needs updating — not every test file.\\n *\\n * @example\\n * ```typescript\\n * // Transformer test — only specify config\\n * const ctx = createMockContext({ config: { settings: { strict: true } } });\\n * const result = await transformer.push(event, ctx);\\n *\\n * // Destination test — specify config and custom env\\n * const ctx = createMockContext({ config: { settings: { url } }, env: { sendWeb } });\\n * await destination.push(event, ctx);\\n *\\n * // With custom ingest data\\n * const ctx = createMockContext({ ingest: { ...createIngest('test'), path: '/api' } });\\n * ```\\n */\\ndeclare function createMockContext<T extends TypesGeneric$2 = Types$2>(overrides?: Partial<Omit<Context$3<T>, 'config' | 'ingest'> & {\\n config?: Config$2<T> | Config$5<TypesGeneric$3>;\\n ingest?: Ingest | (Record<string, unknown> & {\\n _meta: Ingest['_meta'];\\n });\\n data?: unknown;\\n rule?: unknown;\\n}>): Context$3<T> & PushContext<TypesGeneric$3>;\\n\\n/**\\n * Mock logger instance for testing\\n * Includes all logger methods as jest.fn() plus tracking of scoped loggers\\n * Extends Instance to ensure type compatibility\\n */\\ninterface MockLogger extends Instance$4 {\\n error: jest.Mock;\\n warn: jest.Mock;\\n info: jest.Mock;\\n debug: jest.Mock;\\n throw: jest.Mock<never, [string | Error, unknown?]>;\\n json: jest.Mock;\\n scope: jest.Mock<MockLogger, [string]>;\\n /**\\n * Array of all scoped loggers created by this logger\\n * Useful for asserting on scoped logger calls in tests\\n */\\n scopedLoggers: MockLogger[];\\n}\\n/**\\n * Create a mock logger for testing\\n * All methods are jest.fn() that can be used for assertions\\n *\\n * @example\\n * ```typescript\\n * const mockLogger = createMockLogger();\\n *\\n * // Use in code under test\\n * someFunction(mockLogger);\\n *\\n * // Assert on calls\\n * expect(mockLogger.error).toHaveBeenCalledWith('error message');\\n *\\n * // Assert on scoped logger\\n * const scoped = mockLogger.scopedLoggers[0];\\n * expect(scoped.debug).toHaveBeenCalledWith('debug in scope');\\n * ```\\n */\\ndeclare function createMockLogger(): MockLogger;\\n\\n/**\\n * Checks if a value is a valid property type.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a valid property type, false otherwise.\\n */\\ndeclare function isPropertyType(value: unknown): value is PropertyType;\\n/**\\n * Filters a value to only include valid property types.\\n *\\n * @param value The value to filter.\\n * @returns The filtered value or undefined.\\n */\\ndeclare function filterValues(value: unknown): Property | undefined;\\n/**\\n * Casts a value to a valid property type.\\n *\\n * @param value The value to cast.\\n * @returns The casted value or undefined.\\n */\\ndeclare function castToProperty(value: unknown): Property | undefined;\\n\\n/**\\n * Converts a request string to a data object.\\n *\\n * @param parameter The request string to convert.\\n * @returns The data object or undefined.\\n */\\ndeclare function requestToData(parameter: unknown): AnyObject | undefined;\\n/**\\n * Converts a data object to a request string.\\n *\\n * @param data The data object to convert.\\n * @returns The request string.\\n */\\ndeclare function requestToParameter(data: AnyObject | PropertyType): string;\\n\\n/**\\n * Transforms data to a string.\\n *\\n * @param data The data to transform.\\n * @returns The transformed data.\\n */\\ndeclare function transformData(data?: SendDataValue): string | undefined;\\n/**\\n * Gets the headers for a request.\\n *\\n * @param headers The headers to merge with the default headers.\\n * @returns The merged headers.\\n */\\ndeclare function getHeaders(headers?: SendHeaders): SendHeaders;\\n\\n/**\\n * Throws an error.\\n *\\n * @param error The error to throw.\\n */\\ndeclare function throwError(error: unknown): never;\\n\\n/**\\n * Trims quotes and whitespaces from a string.\\n *\\n * @param str The string to trim.\\n * @returns The trimmed string.\\n */\\ndeclare function trim(str: string): string;\\n\\n/**\\n * A utility function that wraps a function in a try-catch block.\\n *\\n * @template P, R, S\\n * @param fn The function to wrap.\\n * @param onError A function to call when an error is caught.\\n * @param onFinally A function to call in the finally block.\\n * @returns The wrapped function.\\n */\\ndeclare function tryCatch<P extends unknown[], R, S>(fn: (...args: P) => R | undefined, onError: (err: unknown) => S, onFinally?: () => void): (...args: P) => R | S;\\ndeclare function tryCatch<P extends unknown[], R>(fn: (...args: P) => R | undefined, onError?: undefined, onFinally?: () => void): (...args: P) => R | undefined;\\n/**\\n * A utility function that wraps an async function in a try-catch block.\\n *\\n * @template P, R, S\\n * @param fn The async function to wrap.\\n * @param onError A function to call when an error is caught.\\n * @param onFinally A function to call in the finally block.\\n * @returns The wrapped async function.\\n */\\ndeclare function tryCatchAsync<P extends unknown[], R, S>(fn: (...args: P) => R, onError: (err: unknown) => S, onFinally?: () => void | Promise<void>): (...args: P) => Promise<R | S>;\\ndeclare function tryCatchAsync<P extends unknown[], R>(fn: (...args: P) => R, onError?: undefined, onFinally?: () => void | Promise<void>): (...args: P) => Promise<R | undefined>;\\n\\n/**\\n * A utility function that wraps a function with hooks.\\n *\\n * Pre/post hooks are user-supplied and may throw. A throwing hook must not\\n * crash the surrounding pipeline — on failure, fall back to calling the\\n * original function (pre-hook) or keep the original result (post-hook).\\n *\\n * @template P, R\\n * @param fn The function to wrap.\\n * @param name The name of the function.\\n * @param hooks The hooks to use.\\n * @param logger Optional logger for hook failure warnings. Falls back to\\n * `console.warn` when not provided.\\n * @returns The wrapped function.\\n */\\ndeclare function useHooks<P extends unknown[], R>(fn: (...args: P) => R, name: string, hooks: Functions, logger?: Instance$4): (...args: P) => R;\\n\\n/**\\n * Parses a user agent string to extract browser, OS, and device information.\\n *\\n * @param userAgent The user agent string to parse.\\n * @returns An object containing the parsed user agent information.\\n */\\ndeclare function parseUserAgent(userAgent?: string): User;\\n/**\\n * Gets the browser name from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The browser name or undefined.\\n */\\ndeclare function getBrowser(userAgent: string): string | undefined;\\n/**\\n * Gets the browser version from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The browser version or undefined.\\n */\\ndeclare function getBrowserVersion(userAgent: string): string | undefined;\\n/**\\n * Gets the OS name from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The OS name or undefined.\\n */\\ndeclare function getOS(userAgent: string): string | undefined;\\n/**\\n * Gets the OS version from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The OS version or undefined.\\n */\\ndeclare function getOSVersion(userAgent: string): string | undefined;\\n/**\\n * Gets the device type from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The device type or undefined.\\n */\\ndeclare function getDeviceType(userAgent: string): string | undefined;\\n\\n/**\\n * Inline Code Wrapping Utilities\\n *\\n * Converts inline code strings to executable functions for the three mapping\\n * callbacks: condition, fn, validate. All three share a single signature:\\n *\\n * (value, context) => result\\n *\\n * Inside the inline body, the available bindings are:\\n * - value: unknown - the value being mapped/validated/checked\\n * - context: Mapping.Context with these fields:\\n * event: WalkerOS.DeepPartialEvent\\n * mapping: Mapping.Value | Mapping.Rule\\n * collector: Collector.Instance\\n * logger: Logger.Instance\\n * consent?: WalkerOS.Consent\\n *\\n * If the body has no explicit `return`, it is auto-wrapped with `return`.\\n *\\n * @packageDocumentation\\n */\\n\\n/**\\n * Wrap inline code as a Mapping.Condition.\\n *\\n * @example\\n * ```ts\\n * const c = wrapCondition('context.consent?.marketing === true');\\n * c(value, context); // boolean\\n * ```\\n */\\ndeclare function wrapCondition(code: string): Condition;\\n/**\\n * Wrap inline code as a Mapping.Fn.\\n *\\n * @example\\n * ```ts\\n * const fn = wrapFn('value.user.email.split(\\\"@\\\")[1]');\\n * fn(value, context); // domain\\n * ```\\n */\\ndeclare function wrapFn(code: string): Fn$4;\\n/**\\n * Wrap inline code as a Mapping.Validate.\\n *\\n * @example\\n * ```ts\\n * const v = wrapValidate('typeof value === \\\"string\\\" && value.length > 0');\\n * v(value, context); // boolean\\n * ```\\n */\\ndeclare function wrapValidate(code: string): Validate;\\n\\ninterface ExampleSummary {\\n name: string;\\n description?: string;\\n}\\ninterface WalkerOSPackageMeta {\\n packageName: string;\\n version: string;\\n description?: string;\\n type?: string;\\n platform?: string | string[];\\n}\\ninterface WalkerOSPackageInfo {\\n packageName: string;\\n version: string;\\n type?: string;\\n platform?: string | string[];\\n schemas: Record<string, unknown>;\\n examples: Record<string, unknown>;\\n hints?: Record<string, unknown>;\\n}\\ninterface WalkerOSPackage extends WalkerOSPackageInfo {\\n description?: string;\\n docs?: string;\\n source?: string;\\n hintKeys: string[];\\n exampleSummaries: ExampleSummary[];\\n}\\ndeclare function fetchPackage(packageName: string, options?: {\\n version?: string;\\n timeout?: number;\\n baseUrl?: string;\\n client?: string;\\n}): Promise<WalkerOSPackage>;\\n/**\\n * @deprecated Use fetchPackage instead.\\n * Still used by: entry.ts (validator), package-schemas.ts (MCP resource).\\n */\\ndeclare function fetchPackageSchema(packageName: string, options?: {\\n version?: string;\\n timeout?: number;\\n baseUrl?: string;\\n client?: string;\\n}): Promise<WalkerOSPackageInfo>;\\n\\n/**\\n * Resolve all named contracts: process extends chains, expand wildcards,\\n * strip annotations from event schemas.\\n *\\n * Returns a fully resolved map where each contract entry has inherited\\n * properties merged in and wildcards expanded into concrete actions.\\n */\\ndeclare function resolveContracts(contracts: Flow.Contract): Record<string, Flow.ContractRule>;\\n/**\\n * Deep merge two JSON Schema objects with additive semantics.\\n * - `required` arrays: union (deduplicated)\\n * - `properties`: deep merge (child wins on conflict for scalars)\\n * - Scalars: child overrides parent\\n */\\ndeclare function mergeContractSchemas(parent: Record<string, unknown>, child: Record<string, unknown>): Record<string, unknown>;\\n\\ndeclare function mcpResult(result: unknown, hints?: {\\n next?: string[];\\n warnings?: string[];\\n}): {\\n content: {\\n type: \\\"text\\\";\\n text: string;\\n }[];\\n structuredContent: Record<string, unknown>;\\n};\\ndeclare function mcpError(error: unknown, hint?: string): {\\n content: {\\n type: \\\"text\\\";\\n text: string;\\n }[];\\n structuredContent: Record<string, unknown>;\\n isError: true;\\n};\\n\\n/**\\n * Compiles a match expression into a closure for fast runtime evaluation.\\n * Regex patterns are compiled once. Numeric comparisons are parsed once.\\n * Runtime evaluation is pure function calls with short-circuit logic.\\n */\\ndeclare function compileMatcher(expr: MatchExpression | '*'): CompiledMatcher;\\n\\ninterface CompiledRoute {\\n match: CompiledMatcher;\\n next: CompiledNext;\\n}\\ntype CompiledNext = {\\n type: 'static';\\n value: string;\\n} | {\\n type: 'chain';\\n value: string[];\\n} | {\\n type: 'routes';\\n routes: CompiledRoute[];\\n};\\ndeclare function isRouteArray(next: Next): next is NextRule[];\\ndeclare function compileNext(next: Next | undefined): CompiledNext | undefined;\\ndeclare function resolveNext(compiled: CompiledNext | undefined, context?: Record<string, unknown>): string | string[] | undefined;\\n\\ninterface CompiledCacheRule {\\n match: CompiledMatcher;\\n key: string[];\\n ttl: number;\\n update?: CacheRule['update'];\\n}\\ninterface CompiledCache {\\n full: boolean;\\n storeId?: string;\\n rules: CompiledCacheRule[];\\n}\\ninterface CacheResult {\\n status: 'HIT' | 'MISS';\\n key: string;\\n value?: unknown;\\n rule: CompiledCacheRule;\\n}\\n/**\\n * Builds a structured context object for cache and routing operations.\\n * Normalizes ingest (defaulting to {}) and optionally includes event.\\n */\\ndeclare function buildCacheContext(ingest?: unknown, event?: unknown): Record<string, unknown>;\\ndeclare function compileCache(cache: Cache): CompiledCache;\\ndeclare function checkCache(compiled: CompiledCache, store: Instance$1, context: Record<string, unknown>, namespace: string): CacheResult | null;\\ndeclare function storeCache(store: Instance$1, key: string, value: unknown, ttlSeconds: number): void;\\ndeclare function applyUpdate(value: unknown, update: Record<string, unknown> | undefined, context: Record<string, unknown>, collector: Instance$6): Promise<unknown>;\\n\\ntype StepOut = Flow.StepOut;\\n/**\\n * Format a step example's `out` as readable code for docs/app rendering.\\n *\\n * - Empty `out` → `// no output`.\\n * - `['return', value]` → `return <value>` (no parentheses).\\n * - `[callable, ...args]` → `callable(<args>)`.\\n * - Primitive args render as JSON (strings quoted, numbers/booleans/null bare).\\n * - `undefined` renders as the literal token `undefined`.\\n * - Objects/arrays render as `JSON.stringify(v, null, 2)`.\\n * - Functions render as `[Function]` (rare in outs; safe fallback).\\n *\\n * Pure function. No runtime dependencies. Used by the website\\n * `<StepExample>` renderer and the app `OutputPanel` for a single source of truth.\\n */\\ndeclare function formatOut(out: StepOut): string;\\n\\n/**\\n * walkerOS reference-syntax regex constants — single source of truth.\\n *\\n * Rule:\\n * - `.` = key or path (resolver walks it)\\n * - `:` = literal value or raw-code payload (resolver uses it verbatim)\\n *\\n * Every tool that recognizes references (core resolver, CLI bundler,\\n * app secrets service, explorer IntelliSense) imports these — no\\n * inline regexes elsewhere.\\n */\\ndeclare const REF_VAR: RegExp;\\ndeclare const REF_DEF: RegExp;\\ndeclare const REF_ENV: RegExp;\\ndeclare const REF_CONTRACT: RegExp;\\n/** Whole-string `$flow.<name>(.<path>)?`: cross-flow value reference. */\\ndeclare const REF_FLOW: RegExp;\\ndeclare const REF_STORE: RegExp;\\ndeclare const REF_SECRET: RegExp;\\ndeclare const REF_CODE_PREFIX = \\\"$code:\\\";\\n\\nexport { cache as Cache, type CacheResult, type ClickIdEntry, collector as Collector, type CompiledCache, type CompiledNext, type CompiledRoute, Const, context as Context, destination as Destination, ENV_MARKER_PREFIX, elb as Elb, type ExampleSummary, Flow, type FlowConfigResolver, hint as Hint, hooks as Hooks, type Ingest, type IngestMeta, Level, lifecycle as Lifecycle, logger as Logger, mapping as Mapping, type MarketingParameters, matcher as Matcher, type MockLogger, on as On, REF_CODE_PREFIX, REF_CONTRACT, REF_DEF, REF_ENV, REF_FLOW, REF_SECRET, REF_STORE, REF_VAR, request as Request, type ResolveOptions, type RespondFn, type RespondOptions, type SendDataValue, type SendHeaders, type SendResponse, simulation as Simulation, source as Source, type StorageType, store as Store, transformer as Transformer, trigger as Trigger, walkeros as WalkerOS, type WalkerOSPackage, type WalkerOSPackageInfo, type WalkerOSPackageMeta, anonymizeIP, applyUpdate, assign, branch, buildCacheContext, castToProperty, castValue, checkCache, clone, compileCache, compileMatcher, compileNext, createDestination, createEvent, createIngest, createLogger, createMockContext, createMockLogger, createRespond, debounce, deepMerge, defaultClickIds, fetchPackage, fetchPackageSchema, filterValues, flattenIncludeSections, formatOut, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getFlowSettings, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, getPlatform, getSpanId, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isRouteArray, isSameType, isString, mcpError, mcpResult, mergeContractSchemas, mockEnv, packageNameToVariable, parseUserAgent, processEventMapping, requestToData, requestToParameter, resolveContracts, resolveNext, setByPath, storeCache, throttle, throwError, transformData, traverseEnv, trim, tryCatch, tryCatchAsync, useHooks, walkPath, wrapCondition, wrapFn, wrapValidate };\\n\"","/**\n * Monaco Editor TypeScript Type Management\n *\n * This utility manages TypeScript type definitions in Monaco Editor for:\n * 1. Static walkerOS core types (bundled at build time via Vite ?raw import)\n * 2. Dynamic destination types (loaded on-the-fly when destinations are added)\n * 3. Context-specific function signatures (condition, fn, validate)\n *\n * Architecture:\n * - Uses monaco.languages.typescript.typescriptDefaults.addExtraLib()\n * - Each type definition gets a unique file path (e.g., 'file:///destinations/gtag.d.ts')\n * - Types can be added/removed dynamically without page reload\n * - Core types are bundled for offline support and predictable versioning\n */\n\nimport type { Monaco } from '@monaco-editor/react';\nimport { getContextTypes } from './monaco-context-types';\n\n// This import will be replaced by tsup plugin with actual TypeScript content\nimport walkerosCoreTypesBundled from 'virtual:walkeros-core-types';\n\n/**\n * Type library entry - tracks loaded type definitions\n */\ninterface TypeLibrary {\n uri: string; // Unique identifier (e.g., 'file:///walkeros-core.d.ts')\n content: string; // TypeScript definition content\n disposable?: { dispose: () => void }; // Monaco disposable for cleanup\n}\n\n/**\n * Registry of loaded type libraries\n */\nconst typeLibraries = new Map<string, TypeLibrary>();\n\n// One-shot guards. Monaco's `setCompilerOptions` and `addExtraLib` invalidate\n// all existing TypeScript workers and cancel their in-flight operations —\n// those cancellations surface as unhandled rejections in the dev overlay.\n// Every CodeBox mount would re-trigger this, so we guard per-monaco-instance.\nconst configuredMonacos = new WeakSet<Monaco>();\nconst ambientsRegistered = new WeakSet<Monaco>();\n\n/**\n * Configuration for TypeScript compiler options\n */\nexport function configureMonacoTypeScript(monaco: Monaco) {\n if (configuredMonacos.has(monaco)) return;\n configuredMonacos.add(monaco);\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2022 ?? 9, // 9 = ES2022\n lib: ['es2022', 'dom'],\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.ESNext,\n moduleDetection: 3, // ModuleDetectionKind.Force — Monaco does not expose the enum. Auto=1, Legacy=2, Force=3.\n noEmit: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n skipLibCheck: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n allowJs: true,\n checkJs: false,\n strict: false,\n noImplicitAny: false,\n strictNullChecks: false,\n });\n\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: false,\n noSyntaxValidation: false,\n diagnosticCodesToIgnore: [1108, 1005],\n });\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2022 ?? 9, // 9 = ES2022\n lib: ['es2022', 'dom'],\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.ESNext,\n moduleDetection: 3, // ModuleDetectionKind.Force — Monaco does not expose the enum. Auto=1, Legacy=2, Force=3.\n noEmit: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n skipLibCheck: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n allowJs: true,\n strict: false,\n noImplicitAny: false,\n });\n}\n\n/**\n * Add a type library from a string\n *\n * @param monaco - Monaco instance\n * @param uri - Unique identifier (e.g., 'file:///destinations/gtag.d.ts')\n * @param content - TypeScript definition content\n * @returns True if added, false if already exists\n */\nexport function addTypeLibrary(\n monaco: Monaco,\n uri: string,\n content: string,\n): boolean {\n // Check if already loaded\n if (typeLibraries.has(uri)) {\n return false;\n }\n\n // Add to both JavaScript and TypeScript language services\n // This ensures types work whether the editor is in JS or TS mode\n const jsDisposable =\n monaco.languages.typescript.javascriptDefaults.addExtraLib(content, uri);\n\n const tsDisposable =\n monaco.languages.typescript.typescriptDefaults.addExtraLib(content, uri);\n\n // Track in registry (store both disposables)\n typeLibraries.set(uri, {\n uri,\n content,\n disposable: {\n dispose: () => {\n jsDisposable.dispose();\n tsDisposable.dispose();\n },\n },\n });\n\n return true;\n}\n\n/**\n * Remove a type library\n *\n * @param uri - URI to remove\n * @returns True if removed, false if not found\n */\nexport function removeTypeLibrary(uri: string): boolean {\n const lib = typeLibraries.get(uri);\n if (!lib) {\n return false;\n }\n\n // Dispose Monaco resource\n lib.disposable?.dispose();\n\n // Remove from registry\n typeLibraries.delete(uri);\n\n return true;\n}\n\n/**\n * Update a type library (remove + add)\n *\n * @param monaco - Monaco instance\n * @param uri - URI to update\n * @param content - New content\n */\nexport function updateTypeLibrary(\n monaco: Monaco,\n uri: string,\n content: string,\n) {\n removeTypeLibrary(uri);\n addTypeLibrary(monaco, uri, content);\n}\n\n/**\n * Load type definitions from a URL\n *\n * @param monaco - Monaco instance\n * @param url - URL to .d.ts file\n * @param uri - Optional custom URI (defaults to URL)\n */\nexport async function loadTypeLibraryFromURL(\n monaco: Monaco,\n url: string,\n uri?: string,\n): Promise<boolean> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n return false;\n }\n\n const content = await response.text();\n const typeUri = uri || `file:///${url}`;\n\n return addTypeLibrary(monaco, typeUri, content);\n } catch {\n return false;\n }\n}\n\n/**\n * Strip problematic imports from type definition content\n *\n * Removes import statements that Monaco can't resolve, while preserving:\n * - Type declarations\n * - Export statements\n * - Re-export statements (export * from / export { } from)\n *\n * Uses multiple strategies for robustness:\n * 1. Simple single-line imports (fast path)\n * 2. Multi-line imports (comprehensive)\n * 3. Import type assertions\n *\n * Does NOT remove:\n * - export { } from 'module' (re-exports)\n * - export * from 'module' (re-exports)\n * - Triple-slash directives (/// <reference types=\"...\" />)\n *\n * @param content - Raw .d.ts file content\n * @returns Cleaned content safe for Monaco\n */\nfunction stripExternalImports(content: string): string {\n // Strategy 1: Remove simple single-line imports\n // Matches: import ... from '...';\n // Handles: import type, import *, import { }, default imports\n let cleaned = content.replace(\n /^import\\s+(?:type\\s+)?(?:\\*\\s+as\\s+\\w+|\\{[^}]*\\}|[\\w$]+)(?:\\s*,\\s*(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+))?\\s+from\\s+['\"][^'\"]+['\"];?\\s*$/gm,\n '',\n );\n\n // Strategy 2: Remove multi-line imports (more aggressive)\n // Matches imports that span multiple lines\n cleaned = cleaned.replace(\n /^import\\s+(?:type\\s+)?(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+|[\\w$]+)\\s+from\\s+['\"][^'\"]+['\"];?\\s*$/gms,\n '',\n );\n\n // Strategy 3: Remove import type assertions\n // Matches: import('module')\n cleaned = cleaned.replace(/import\\s*\\(\\s*['\"][^'\"]+['\"]\\s*\\)/g, 'any');\n\n // Clean up excessive blank lines (more than 2 consecutive)\n cleaned = cleaned.replace(/\\n{3,}/g, '\\n\\n');\n\n return cleaned;\n}\n\n/**\n * Options for loading package types dynamically\n */\nexport interface LoadPackageTypesOptions {\n /** Package name (e.g., '@walkeros/destination-gtag') */\n package: string;\n /** Version to load (e.g., '0.1.0', 'latest') */\n version?: string;\n}\n\n/**\n * Configurable base URL for package types fetching.\n *\n * When unset (default), `loadPackageTypes` fetches `.d.ts` directly from\n * jsdelivr — keeping the explorer self-contained for docs and standalone use.\n *\n * When set, callers route requests through their own origin (e.g. an app's\n * `/api/packages/[name]/types` proxy) so CSP and caching can be controlled\n * by the host. The base URL must NOT include a trailing slash; the resolver\n * inserts one. Pass `undefined` to reset to the default.\n */\nlet packageTypesBaseUrl: string | undefined;\n\nexport function setPackageTypesBaseUrl(url: string | undefined): void {\n packageTypesBaseUrl = url;\n}\n\nexport function resolveTypesUrl(packageName: string, version: string): string {\n return packageTypesBaseUrl\n ? `${packageTypesBaseUrl}/${encodeURIComponent(packageName)}/types?version=${encodeURIComponent(version)}`\n : `https://cdn.jsdelivr.net/npm/${packageName}@${version}/dist/index.d.ts`;\n}\n\nexport async function loadPackageTypes(\n monaco: Monaco,\n options: LoadPackageTypesOptions,\n): Promise<boolean> {\n const { package: packageName, version = 'latest' } = options;\n const uri = `file:///node_modules/${packageName}/index.d.ts`;\n\n if (typeLibraries.has(uri)) {\n return true;\n }\n\n const url = resolveTypesUrl(packageName, version);\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n return false;\n }\n\n let content = await response.text();\n content = stripExternalImports(content);\n\n const moduleContent = `declare module '${packageName}' {\\n${content}\\n}`;\n const success = addTypeLibrary(monaco, uri, moduleContent);\n\n return success;\n } catch {\n return false;\n }\n}\n\n/**\n * Load walkerOS core types (bundled at build time)\n *\n * Uses bundled types imported via Vite's ?raw import.\n * This ensures types are always available offline and match the installed version.\n */\nexport function loadWalkerOSCoreTypes(monaco: Monaco): boolean {\n const uri = 'file:///node_modules/@walkeros/core/index.d.ts';\n\n // Check if already loaded\n if (typeLibraries.has(uri)) {\n return true;\n }\n\n // Clean the types using the same robust stripping function\n const cleanedTypes = stripExternalImports(walkerosCoreTypesBundled);\n\n // Wrap in module declaration\n const moduleContent = `declare module '@walkeros/core' {\n${cleanedTypes}\n}`;\n\n return addTypeLibrary(monaco, uri, moduleContent);\n}\n\n/**\n * Type of function context (fn, condition, validate)\n */\nexport type FunctionType = 'condition' | 'fn' | 'validate';\n\n/**\n * Add context-specific globals for function editors\n *\n * Provides type definitions for inline function parameters without imports.\n * All three function types share the same signature:\n * - fn: (value, context) => Property | unknown\n * - condition: (value, context) => boolean\n * - validate: (value, context) => boolean\n */\nexport interface FunctionContext {\n type: FunctionType;\n valueType?: string; // Optional: Custom type for 'value' parameter\n}\n\nexport function addFunctionContextTypes(\n monaco: Monaco,\n context: FunctionContext,\n) {\n const uri = `file:///context/${context.type}.d.ts`;\n\n // Use hand-crafted type templates from monaco-context-types\n const contextTypes = getContextTypes(context.type);\n\n // Update or add\n updateTypeLibrary(monaco, uri, contextTypes);\n}\n\n/**\n * Add destination-specific types dynamically\n *\n * @param monaco - Monaco instance\n * @param destinationId - Unique destination identifier (e.g., 'gtag', 'fbq')\n * @param typeDefinition - TypeScript definition for destination's custom config/event\n *\n * @example\n * ```typescript\n * addDestinationType(monaco, 'gtag', `\n * declare namespace Gtag {\n * interface Settings {\n * measurementId: string;\n * sendPageView?: boolean;\n * }\n *\n * interface EventParams {\n * event_category?: string;\n * event_label?: string;\n * value?: number;\n * }\n * }\n *\n * // Extend WalkerOS namespace\n * declare namespace WalkerOS {\n * namespace Destination {\n * interface ConfigMap {\n * gtag: Gtag.Settings;\n * }\n * }\n * }\n * `);\n * ```\n */\nexport function addDestinationType(\n monaco: Monaco,\n destinationId: string,\n typeDefinition: string,\n) {\n const uri = `file:///destinations/${destinationId}.d.ts`;\n updateTypeLibrary(monaco, uri, typeDefinition);\n}\n\n/**\n * Remove destination types when destination is removed\n */\nexport function removeDestinationType(destinationId: string) {\n const uri = `file:///destinations/${destinationId}.d.ts`;\n removeTypeLibrary(uri);\n}\n\n/**\n * Simple helper to register only walkerOS core types\n *\n * Use this for basic scenarios where you just need @walkeros/core types.\n * For advanced usage (destinations, function contexts), use initializeMonacoTypes.\n *\n * @param monaco - Monaco editor instance\n *\n * @example\n * ```typescript\n * const handleBeforeMount = (monaco: Monaco) => {\n * registerWalkerOSTypes(monaco);\n * };\n * ```\n */\nexport function registerWalkerOSTypes(monaco: Monaco): void {\n configureMonacoTypeScript(monaco);\n loadWalkerOSCoreTypes(monaco);\n registerWalkerOSAmbients(monaco);\n}\n\n/**\n * Register walkerOS runtime globals so snippets can reference them without\n * imports. Uses Monaco's official `addExtraLib` API — the documented way to\n * inject ambient TypeScript declarations into the editor.\n *\n * Globals declared here:\n * - getMappingEvent, getMappingValue: pure mapping helpers from @walkeros/core\n * - elb: the walker push function bound by startFlow\n */\nexport function registerWalkerOSAmbients(monaco: Monaco): void {\n if (ambientsRegistered.has(monaco)) return;\n ambientsRegistered.add(monaco);\n\n // Re-alias real exports from @walkeros/core as globals — no duplication,\n // signatures stay in sync with the package.\n const ambients = `\n import type {\n getMappingEvent as _getMappingEvent,\n getMappingValue as _getMappingValue,\n WalkerOS,\n } from '@walkeros/core';\n\n declare global {\n const getMappingEvent: typeof _getMappingEvent;\n const getMappingValue: typeof _getMappingValue;\n const elb: WalkerOS.Elb;\n }\n\n export {};\n `;\n\n const uri = 'file:///node_modules/@walkeros/_ambient/index.d.ts';\n\n monaco.languages.typescript.typescriptDefaults.addExtraLib(ambients, uri);\n monaco.languages.typescript.javascriptDefaults.addExtraLib(ambients, uri);\n}\n\n/**\n * Initialize Monaco with walkerOS types (full setup)\n *\n * Call this once in CodeBox's beforeMount handler.\n * Includes core types, TypeScript config, and default function context.\n *\n * @param monaco - Monaco editor instance\n *\n * @example\n * ```typescript\n * const handleBeforeMount = (monaco: Monaco) => {\n * initializeMonacoTypes(monaco);\n * };\n * ```\n */\nexport function initializeMonacoTypes(monaco: Monaco): void {\n // Configure compiler\n configureMonacoTypeScript(monaco);\n\n // Load core types (now synchronous with bundled types)\n loadWalkerOSCoreTypes(monaco);\n\n // Add default function context (condition)\n addFunctionContextTypes(monaco, { type: 'condition' });\n}\n\n/**\n * Get all loaded type libraries (for debugging)\n */\nexport function getLoadedTypeLibraries(): string[] {\n return Array.from(typeLibraries.keys());\n}\n\n/**\n * Clear all type libraries (for testing)\n */\nexport function clearAllTypeLibraries() {\n for (const lib of typeLibraries.values()) {\n lib.disposable?.dispose();\n }\n typeLibraries.clear();\n}\n","// Ready-to-use demos\nexport { PromotionPlayground } from './components/demos/PromotionPlayground';\nexport type { PromotionPlaygroundProps } from './components/demos/PromotionPlayground';\n\n// Organisms\nexport { LiveCode } from './components/organisms/live-code';\nexport { CollectorBox } from './components/organisms/collector-box';\nexport { BrowserBox } from './components/organisms/browser-box';\nexport type { LiveCodeProps } from './components/organisms/live-code';\nexport type { CollectorBoxProps } from './components/organisms/collector-box';\nexport type { BrowserBoxProps } from './components/organisms/browser-box';\n\n// Molecules\nexport { ArchitectureFlow } from './components/molecules/architecture-flow';\nexport { CodeBox } from './components/molecules/code-box';\nexport { CodeDiffBox } from './components/molecules/code-diff-box';\nexport type { CodeDiffBoxProps } from './components/molecules/code-diff-box';\nexport { CodeSnippet } from './components/molecules/code-snippet';\nexport { FlowMap } from './components/molecules/flow-map';\nexport { PropertyTable } from './components/molecules/property-table';\nexport {\n Dropdown,\n DropdownItem,\n DropdownDivider,\n} from './components/molecules/dropdown';\nexport type {\n ArchitectureFlowProps,\n FlowColumn,\n FlowSection,\n FlowItem,\n} from './components/molecules/architecture-flow';\nexport type { CodeBoxProps, CodeBoxTab } from './components/molecules/code-box';\nexport { CodeView } from './components/molecules/code-view';\nexport type {\n CodeViewProps,\n CodeViewTab,\n} from './components/molecules/code-view';\nexport type { CodeSnippetProps } from './components/molecules/code-snippet';\nexport type {\n FlowMapProps,\n FlowStageConfig,\n} from './components/molecules/flow-map';\nexport type { PropertyTableProps } from './components/molecules/property-table';\nexport type {\n DropdownProps,\n DropdownItemProps,\n DropdownDividerProps,\n} from './components/molecules/dropdown';\n\nexport { Preview } from './components/molecules/preview';\nexport type { PreviewProps } from './components/molecules/preview';\n\n// Atoms\nexport { Code } from './components/atoms/code';\nexport { CodeDiff } from './components/atoms/code-diff';\nexport { CodeStatic } from './components/atoms/code-static';\nexport { Box } from './components/atoms/box';\nexport { Grid } from './components/atoms/grid';\nexport { Header } from './components/atoms/header';\nexport { Footer } from './components/atoms/footer';\nexport { Button } from './components/atoms/button';\nexport { ButtonGroup } from './components/atoms/button-group';\nexport { ButtonLink } from './components/atoms/button-link';\nexport { Spinner } from './components/atoms/spinner';\n\nexport { Icon } from './components/atoms/icons';\nexport type { CodeProps } from './components/atoms/code';\nexport type {\n CodeDiffProps,\n CodeDiffSummary,\n} from './components/atoms/code-diff';\nexport type { CodeStaticProps } from './components/atoms/code-static';\nexport type { BoxProps, BoxTab } from './components/atoms/box';\nexport type { GridProps } from './components/atoms/grid';\nexport type { HeaderProps } from './components/atoms/header';\nexport type { FooterProps } from './components/atoms/footer';\nexport type { ButtonProps } from './components/atoms/button';\nexport type { ButtonGroupProps } from './components/atoms/button-group';\nexport type { ButtonLinkProps } from './components/atoms/button-link';\nexport type { SpinnerProps } from './components/atoms/spinner';\n\n// Utils\nexport { isMonacoCancellation } from './utils/is-monaco-cancellation';\n\n// MDX Integration\nexport { MDXProvider } from './providers/MDXProvider';\nexport { MDXCode } from './components/atoms/mdx-code';\n\n// Utility\nexport { cn } from './lib/utils';\n\n// Hooks\nexport { useDropdown } from './hooks/useDropdown';\nexport type { UseDropdownReturn } from './hooks/useDropdown';\n\n// Monaco Editor themes\nexport {\n palenightTheme,\n lighthouseTheme,\n registerPalenightTheme,\n registerLighthouseTheme,\n registerAllThemes,\n} from './themes';\nexport type { ExplorerTheme } from './themes';\n\n// Monaco Editor type (re-exported for consumers of callbacks that receive a\n// Monaco instance — e.g. `CodeBox.beforeMount(monaco)`. Raw `Editor` / `DiffEditor`\n// components stay private — use CodeBox / CodeDiffBox molecules instead).\nexport type { Monaco } from '@monaco-editor/react';\n\n// Monaco Editor type registration\nexport {\n registerWalkerOSTypes,\n initializeMonacoTypes,\n loadPackageTypes,\n loadTypeLibraryFromURL,\n setPackageTypesBaseUrl,\n resolveTypesUrl,\n} from './utils/monaco-types';\nexport type { LoadPackageTypesOptions } from './utils/monaco-types';\n\n// Monaco JSON Schema registry\nexport {\n registerJsonSchema,\n unregisterJsonSchema,\n generateModelPath,\n} from './utils/monaco-json-schema';\n\n// Schema enrichment\nexport {\n enrichSchema,\n type MonacoSchemaExtension,\n} from './utils/monaco-schema-enrichment';\nexport { enrichFlowConfigSchema } from './utils/monaco-schema-flow-config';\nexport { getEnrichedContractSchema } from './utils/monaco-schema-contract';\nexport { getVariablesSchema } from './utils/monaco-schema-variables';\n\n// walkerOS reference decorations\nexport {\n findWalkerOSReferences,\n applyWalkerOSDecorations,\n registerWalkerOSDecorationStyles,\n REFERENCE_PATTERNS,\n} from './utils/monaco-walkeros-decorations';\n\n// IntelliSense types\nexport type { IntelliSenseContext, PackageInfo } from './types/intellisense';\n\n// IntelliSense providers\nexport {\n registerWalkerOSProviders,\n disposeWalkerOSProviders,\n setIntelliSenseContext,\n removeIntelliSenseContext,\n} from './utils/monaco-walkeros-providers';\nexport { validateWalkerOSReferences } from './utils/monaco-walkeros-markers';\nexport { extractFlowIntelliSenseContext } from './utils/monaco-intellisense-flow-extractor';\n\n// Destination helpers\nexport {\n createGtagDestination,\n createFbqDestination,\n createPlausibleDestination,\n} from './helpers/destinations';\n","import React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n} from 'react';\nimport type { WalkerOS, Elb, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { Grid } from '../atoms/grid';\nimport { Preview } from '../molecules/preview';\nimport { BrowserBox } from '../organisms/browser-box';\nimport { CodeBox } from '../molecules/code-box';\nimport {\n createGtagDestination,\n type DestinationCode,\n} from '../../helpers/destinations';\n\nexport interface PromotionPlaygroundProps {\n initialHtml?: string;\n initialCss?: string;\n initialJs?: string;\n initialMapping?: string;\n labelCode?: string;\n labelPreview?: string;\n labelEvents?: string;\n labelMapping?: string;\n labelResult?: string;\n destination?: DestinationCode;\n}\n\nconst defaultHtml = `<div\n data-elb=\"product\"\n data-elbaction=\"load:view\"\n data-elbcontext=\"stage:inspire\"\n class=\"product-card\"\n>\n <figure class=\"product-figure\">\n <div class=\"product-badge-container\">\n <div data-elb-product=\"badge:delicious\" class=\"product-badge\">delicious</div>\n </div>\n </figure>\n <div class=\"product-body\">\n <h3 data-elb-product=\"name:#innerText\" class=\"product-title\">\n Everyday Ruck Snack\n </h3>\n <div class=\"form-control\">\n <label class=\"form-label\">Taste</label>\n <select\n data-elb-product=\"taste:#value\"\n class=\"form-select\"\n >\n <option value=\"sweet\">Sweet</option>\n <option value=\"spicy\">Spicy</option>\n </select>\n </div>\n <p data-elb-product=\"price:2.50\" class=\"product-price\">\n € 2.50 <span data-elb-product=\"old_price:3.14\" class=\"product-old-price\">€ 3.14</span>\n </p>\n <div data-elbcontext=\"stage:hooked\" class=\"product-actions\">\n <button\n data-elbaction=\"click:save\"\n class=\"btn btn-secondary\"\n >\n Maybe later\n </button>\n <button\n data-elbaction=\"click:add\"\n class=\"btn btn-primary\"\n >\n Add to Cart\n </button>\n </div>\n </div>\n</div>`;\n\nconst defaultCss = `* {\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n}\n\n.product-card {\n width: 100%;\n max-width: 400px;\n margin: 0 auto;\n background: #ffffff;\n border-radius: 16px;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.product-figure {\n position: relative;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 160px;\n background:\n linear-gradient(135deg, rgba(243, 244, 246, 0.9) 0%, rgba(229, 231, 235, 0.9) 100%),\n repeating-linear-gradient(\n 45deg,\n #f9fafb,\n #f9fafb 10px,\n #f3f4f6 10px,\n #f3f4f6 20px\n );\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.product-figure::before {\n content: '🍟';\n font-size: 8rem;\n opacity: 0.8;\n}\n\n.product-badge-container {\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.product-badge {\n background: #01b5e2;\n color: white;\n padding: 0.25rem 0.75rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.product-body {\n padding: 1.5rem;\n}\n\n.product-title {\n font-size: 1.125rem;\n font-weight: 700;\n margin: 0 0 1rem 0;\n color: #111827;\n}\n\n.form-control {\n margin-bottom: 1rem;\n}\n\n.form-label {\n display: block;\n font-size: 0.875rem;\n font-weight: 500;\n color: #6b7280;\n margin-bottom: 0.5rem;\n}\n\n.form-select {\n width: 100%;\n padding: 0.5rem 0.75rem;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n font-size: 0.875rem;\n color: #111827;\n background: white;\n cursor: pointer;\n transition: border-color 0.2s;\n}\n\n.form-select:hover {\n border-color: #9ca3af;\n}\n\n.form-select:focus {\n outline: none;\n border-color: #01b5e2;\n box-shadow: 0 0 0 3px rgba(1, 181, 226, 0.1);\n}\n\n.product-price {\n font-size: 1.25rem;\n font-weight: 700;\n color: #111827;\n margin: 0 0 1rem 0;\n}\n\n.product-old-price {\n font-size: 1rem;\n font-weight: 400;\n color: #9ca3af;\n text-decoration: line-through;\n margin-left: 0.5rem;\n}\n\n.product-actions {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n}\n\n.btn {\n flex: 1;\n padding: 0.75rem 1rem;\n border: none;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n text-align: center;\n}\n\n.btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n.btn:active {\n transform: translateY(0);\n}\n\n.btn-primary {\n background: #01b5e2;\n color: white;\n}\n\n.btn-primary:hover {\n background: #0195b8;\n}\n\n.btn-secondary {\n background: #ffffff;\n color: #01b5e2;\n border: 1px solid #01b5e2;\n}\n\n.btn-secondary:hover {\n background: #01b5e2;\n color: #ffffff;\n}`;\n\nconst defaultMapping = `{\n \"product\": {\n \"view\": {\n \"name\": \"view_item\",\n \"data\": {\n \"map\": {\n \"event\": \"name\",\n \"price\": \"data.price\",\n \"stage\": \"context.stage.0\"\n }\n }\n },\n \"add\": {\n \"name\": \"add_to_cart\",\n \"data\": {\n \"map\": {\n \"event\": \"event\",\n \"price\": \"data.price\",\n \"user\": {\n \"consent\": { \"marketing\": true },\n \"key\": \"user.session\"\n },\n \"isSale\": {\n \"fn\": \"(e) => !!e.data.old_price\"\n }\n }\n }\n },\n \"save\": {\n \"data\": {\n \"map\": {\n \"event\": \"event\",\n \"data\": \"data\"\n }\n }\n }\n }\n}`;\n\n/**\n * PromotionPlayground - Full walkerOS demonstration with live code editing\n *\n * Shows the complete chain:\n * 1. Code Editor - Edit HTML/CSS/JS with walkerOS data attributes\n * 2. Preview - Live rendered output that captures real events\n * 3. Events - Real events captured from preview interactions\n * 4. Mapping - Apply transformations and see destination output\n * 5. Result - Final destination function calls\n *\n * Uses a single unified collector flow:\n * - PromotionPlayground owns the collector with destinations\n * - Preview initializes browser source using parent's elb\n * - Events flow through one collector to all destinations\n */\nexport function PromotionPlayground({\n initialHtml = defaultHtml,\n initialCss = defaultCss,\n initialJs = '',\n initialMapping = defaultMapping,\n labelCode = 'Code',\n labelPreview = 'Preview',\n labelEvents = 'Events',\n labelMapping = 'Mapping',\n labelResult = 'Result',\n destination: destinationProp,\n}: PromotionPlaygroundProps) {\n // Memoize destination to prevent useEffect re-runs on every render\n // Default prop values create new objects each render, breaking effect dependencies\n const destination = useMemo(\n () => destinationProp ?? createGtagDestination(),\n [destinationProp],\n );\n const [html, setHtml] = useState(initialHtml);\n const [css, setCss] = useState(initialCss);\n const [js, setJs] = useState(initialJs);\n const [mappingInput, setMappingInput] = useState(initialMapping);\n const [eventJson, setEventJson] = useState<string>(\n '// Click elements in the preview to see events',\n );\n const [outputString, setOutputString] = useState<string>(\n '// Click elements in the preview to see function call',\n );\n\n const collectorRef = useRef<Collector.Instance | null>(null);\n const elbRef = useRef<Elb.Fn | null>(null);\n const lastEventRef = useRef<WalkerOS.Event | null>(null);\n const [isReady, setIsReady] = useState(false);\n\n // Initialize collector once on mount\n useEffect(() => {\n let mounted = true;\n\n const init = async () => {\n try {\n const parsedMapping = JSON.parse(initialMapping);\n\n const { collector, elb } = await startFlow({\n destinations: {\n // Capture raw events for display in Events column\n rawCapture: {\n code: {\n type: 'rawCapture',\n config: {},\n push: async (event: WalkerOS.Event) => {\n if (!mounted) return;\n lastEventRef.current = event;\n setEventJson(JSON.stringify(event, null, 2));\n },\n },\n },\n // Transform and display formatted output in Result column\n gtag: {\n code: destination,\n config: {\n mapping: parsedMapping,\n },\n env: {\n elb: (output: string) => {\n if (!mounted) return;\n setOutputString(output);\n },\n },\n },\n },\n consent: { functional: true, marketing: true },\n user: { session: 'playground' },\n });\n\n if (!mounted) return;\n\n collectorRef.current = collector;\n elbRef.current = elb;\n setIsReady(true);\n } catch {\n // Initialization failed - component will show placeholder\n }\n };\n\n init();\n\n return () => {\n mounted = false;\n // Cleanup collector\n if (collectorRef.current) {\n // Sources cleanup would happen here if needed\n }\n };\n }, [initialMapping, destination]);\n\n // Handle mapping changes - update collector destination config\n const handleMappingChange = useCallback((newMapping: string) => {\n setMappingInput(newMapping);\n\n // Debounced update to collector\n const timeoutId = setTimeout(() => {\n try {\n const parsed = JSON.parse(newMapping);\n // Update destination config directly\n if (collectorRef.current?.destinations?.gtag?.config) {\n collectorRef.current.destinations.gtag.config.mapping = parsed;\n }\n // Re-process last event to update Result column\n if (lastEventRef.current && collectorRef.current) {\n collectorRef.current.push(lastEventRef.current);\n }\n } catch {\n // Invalid JSON - don't update\n }\n }, 500);\n\n return () => clearTimeout(timeoutId);\n }, []);\n\n return (\n <Grid columns={5} rowHeight={600}>\n {/* Column 1: Code Editor with HTML/CSS/JS tabs */}\n <BrowserBox\n label={labelCode}\n html={html}\n css={css}\n js={js}\n onHtmlChange={setHtml}\n onCssChange={setCss}\n onJsChange={setJs}\n showPreview={false}\n initialTab=\"html\"\n lineNumbers={false}\n wordWrap\n />\n\n {/* Column 2: Preview - uses parent's elb for event capture */}\n <Preview\n label={labelPreview}\n html={html}\n css={css}\n elb={isReady ? (elbRef.current ?? undefined) : undefined}\n />\n\n {/* Column 3: Events - raw captured events */}\n <CodeBox\n label={labelEvents}\n code={eventJson}\n onChange={setEventJson}\n language=\"json\"\n wordWrap\n />\n\n {/* Column 4: Mapping - editable transformation rules */}\n <CodeBox\n label={labelMapping}\n code={mappingInput}\n onChange={handleMappingChange}\n language=\"json\"\n wordWrap\n />\n\n {/* Column 5: Result - transformed destination output */}\n <CodeBox\n label={labelResult}\n code={outputString}\n language=\"javascript\"\n disabled\n wordWrap\n />\n </Grid>\n );\n}\n","import React, {\n useRef,\n useState,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport {\n GridHeightContext,\n type GridHeightContextValue,\n} from '../../contexts/GridHeightContext';\n\nexport interface GridProps {\n children: React.ReactNode;\n columns?: number;\n minBoxWidth?: number | string;\n gap?: number | string;\n rowHeight?: 'auto' | 'equal' | 'synced' | number;\n maxRowHeight?: number | string | 'none';\n showScrollButtons?: boolean;\n className?: string;\n}\n\n/**\n * Grid - Horizontal scrolling layout component for arranging boxes\n *\n * Provides consistent grid layout for box components with horizontal\n * scrolling when content exceeds available space. Boxes maintain minimum\n * width and never wrap to new rows.\n *\n * @example\n * // 5 boxes with default 350px minimum width\n * <Grid columns={5}>\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom minimum box width\n * <Grid columns={3} minBoxWidth={400}>\n * <BrowserBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom row height\n * <Grid columns={2} rowHeight={300}>\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Auto row height (no minimum)\n * <Grid columns={3} rowHeight=\"auto\">\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Unlimited row height (no max constraint)\n * <Grid columns={2} maxRowHeight=\"none\">\n * <PropertyTable ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom max row height\n * <Grid columns={2} maxRowHeight={800}>\n * <PropertyTable ... />\n * <CodeBox ... />\n * </Grid>\n */\nexport function Grid({\n children,\n columns,\n minBoxWidth,\n gap,\n rowHeight = 'equal',\n maxRowHeight,\n showScrollButtons = true,\n className = '',\n}: GridProps) {\n const gridRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const [boxHeights, setBoxHeights] = useState<Map<number, number>>(new Map());\n const boxIdCounter = useRef(0);\n\n const getBoxId = useCallback(() => boxIdCounter.current++, []);\n\n const registerBox = useCallback((id: number, height: number) => {\n setBoxHeights((prev) => {\n const next = new Map(prev);\n next.set(id, height);\n return next;\n });\n }, []);\n\n const unregisterBox = useCallback((id: number) => {\n setBoxHeights((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const syncedHeight = useMemo(() => {\n if (rowHeight !== 'synced' || boxHeights.size === 0) return null;\n return Math.min(600, Math.max(...Array.from(boxHeights.values())));\n }, [boxHeights, rowHeight]);\n\n const contextValue: GridHeightContextValue = useMemo(\n () => ({\n registerBox,\n unregisterBox,\n getBoxId,\n syncedHeight,\n enabled: rowHeight === 'synced',\n }),\n [registerBox, unregisterBox, getBoxId, syncedHeight, rowHeight],\n );\n\n const classNames = ['elb-explorer-grid'];\n const gridStyle: React.CSSProperties = {};\n\n // Row height modifiers\n if (rowHeight === 'auto') {\n classNames.push('elb-explorer-grid--row-auto');\n } else if (rowHeight === 'equal') {\n classNames.push('elb-explorer-grid--row-equal');\n } else if (rowHeight === 'synced') {\n classNames.push('elb-explorer-grid--row-synced');\n } else if (typeof rowHeight === 'number') {\n // Apply custom row height via CSS variable\n (gridStyle as Record<string, string>)['--grid-row-min-height'] =\n `${rowHeight}px`;\n (gridStyle as Record<string, string>)['--grid-row-max-height'] =\n `${rowHeight}px`;\n }\n\n // Add custom className\n if (className) {\n classNames.push(className);\n }\n\n // Apply custom gap if provided\n if (gap !== undefined) {\n gridStyle.gap = typeof gap === 'number' ? `${gap}px` : gap;\n }\n\n // Apply custom minimum box width if provided\n if (minBoxWidth !== undefined) {\n (gridStyle as Record<string, string>)['--grid-min-box-width'] =\n typeof minBoxWidth === 'number' ? `${minBoxWidth}px` : minBoxWidth;\n }\n\n if (maxRowHeight !== undefined) {\n // Warn about dangerous configuration that can cause infinite growth\n (gridStyle as Record<string, string>)['--grid-row-max-height'] =\n maxRowHeight === 'none'\n ? 'none'\n : typeof maxRowHeight === 'number'\n ? `${maxRowHeight}px`\n : maxRowHeight;\n }\n\n // Check scroll state\n const updateScrollState = useCallback(() => {\n const el = gridRef.current;\n if (!el) return;\n\n const hasOverflow = el.scrollWidth > el.clientWidth;\n const isAtStart = el.scrollLeft <= 1;\n const isAtEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 1;\n\n setCanScrollLeft(hasOverflow && !isAtStart);\n setCanScrollRight(hasOverflow && !isAtEnd);\n }, []);\n\n // Scroll handlers\n const scrollLeft = () => {\n if (!gridRef.current) return;\n const scrollAmount = gridRef.current.clientWidth * 0.8;\n gridRef.current.scrollBy({ left: -scrollAmount, behavior: 'smooth' });\n };\n\n const scrollRight = () => {\n if (!gridRef.current) return;\n const scrollAmount = gridRef.current.clientWidth * 0.8;\n gridRef.current.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n // Update scroll state on mount, scroll, and resize\n useEffect(() => {\n const el = gridRef.current;\n if (!el || !showScrollButtons) return;\n\n updateScrollState();\n\n el.addEventListener('scroll', updateScrollState);\n window.addEventListener('resize', updateScrollState);\n\n return () => {\n el.removeEventListener('scroll', updateScrollState);\n window.removeEventListener('resize', updateScrollState);\n };\n }, [updateScrollState, showScrollButtons]);\n\n return (\n <GridHeightContext.Provider value={contextValue}>\n <div className=\"elb-explorer elb-explorer-grid-wrapper\">\n {showScrollButtons && canScrollLeft && (\n <button\n className=\"elb-explorer-grid-scroll-button elb-explorer-grid-scroll-button--left\"\n onClick={scrollLeft}\n aria-label=\"Scroll left\"\n type=\"button\"\n >\n ‹\n </button>\n )}\n\n <div ref={gridRef} className={classNames.join(' ')} style={gridStyle}>\n {children}\n </div>\n\n {showScrollButtons && canScrollRight && (\n <button\n className=\"elb-explorer-grid-scroll-button elb-explorer-grid-scroll-button--right\"\n onClick={scrollRight}\n aria-label=\"Scroll right\"\n type=\"button\"\n >\n ›\n </button>\n )}\n </div>\n </GridHeightContext.Provider>\n );\n}\n","import { createContext, useContext, useRef } from 'react';\n\nexport interface GridHeightContextValue {\n registerBox: (id: number, height: number) => void;\n unregisterBox: (id: number) => void;\n getBoxId: () => number;\n syncedHeight: number | null;\n enabled: boolean;\n}\n\nexport const GridHeightContext = createContext<GridHeightContextValue | null>(\n null,\n);\n\nexport function useGridHeight(): GridHeightContextValue | null {\n return useContext(GridHeightContext);\n}\n\nlet nextBoxId = 0;\nexport function useBoxId(): number {\n const idRef = useRef<number | null>(null);\n if (idRef.current === null) {\n idRef.current = nextBoxId++;\n }\n return idRef.current;\n}\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport type { Elb, Source, Logger, Collector, Lifecycle } from '@walkeros/core';\nimport {\n sourceBrowser,\n type SourceBrowser,\n} from '@walkeros/web-source-browser';\n\ninterface SourceHandle {\n instance: Source.Instance<SourceBrowser.Types>;\n destroyContext: Lifecycle.DestroyContext<\n SourceBrowser.Config,\n SourceBrowser.Env\n >;\n}\nimport { Box } from '../atoms/box';\nimport { PreviewFooter } from '../atoms/preview-footer';\n\nexport interface PreviewProps {\n html: string;\n css?: string;\n elb?: Elb.Fn;\n label?: string;\n}\n\n/**\n * Preview - HTML preview wrapped in a Box with highlight buttons\n *\n * Renders HTML in an isolated iframe with highlight buttons footer.\n * When elb is provided, initializes walkerOS browser source in iframe\n * that pushes events to the parent collector.\n *\n * @example\n * // Read-only preview\n * <Preview html={html} css={css} label=\"Preview\" />\n *\n * // Interactive preview with event capture (elb from parent collector)\n * <Preview html={html} css={css} elb={elb} label=\"Preview\" />\n */\nexport function Preview({\n html,\n css = '',\n elb,\n label = 'Preview',\n}: PreviewProps) {\n const [highlights, setHighlights] = useState<Set<string>>(new Set());\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const updateTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n const elbRef = useRef(elb);\n const sourceRef = useRef<SourceHandle | null>(null);\n\n // Keep elbRef in sync\n useEffect(() => {\n elbRef.current = elb;\n }, [elb]);\n\n const toggleHighlight = (type: string) => {\n setHighlights((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n const autoMarkProperties = useCallback(\n (container: HTMLElement | Document) => {\n const entities = container.querySelectorAll('[data-elb]');\n entities.forEach((entity) => {\n const entityName = entity.getAttribute('data-elb');\n if (!entityName) return;\n\n const propertySelector = `[data-elb-${entityName}]`;\n entity.querySelectorAll(propertySelector).forEach((el) => {\n el.setAttribute('data-elbproperty', '');\n });\n });\n },\n [],\n );\n\n useEffect(() => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n updateTimeoutRef.current = setTimeout(() => {\n const iframe = iframeRef.current;\n if (!iframe || !iframe.contentDocument) return;\n\n const doc = iframe.contentDocument;\n const highlightClasses = Array.from(highlights)\n .map((type) => `highlight-${type}`)\n .join(' ');\n\n doc.open();\n doc.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <style>\n /* Reset */\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n padding: 1.5rem;\n background: #f9fafb;\n color: #111827;\n min-height: 100vh;\n }\n\n @media (prefers-color-scheme: dark) {\n body {\n background: #1f2937;\n color: #e5e7eb;\n }\n }\n\n /* User CSS */\n ${css}\n\n /* Highlight CSS - imported from highlight styles */\n :root {\n --highlight-globals: #4fc3f7cc;\n --highlight-context: #ffbd44cc;\n --highlight-entity: #00ca4ecc;\n --highlight-property: #ff605ccc;\n --highlight-action: #9900ffcc;\n }\n\n body.elb-highlight.highlight-entity [data-elb] {\n box-shadow: 0 0 0 2px var(--highlight-entity);\n }\n\n body.elb-highlight.highlight-context [data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-context);\n }\n\n body.elb-highlight.highlight-property [data-elbproperty] {\n box-shadow: 0 0 0 2px var(--highlight-property);\n }\n\n body.elb-highlight.highlight-action [data-elbaction] {\n box-shadow: 0 0 0 2px var(--highlight-action);\n }\n\n /* Combined highlights */\n body.elb-highlight.highlight-entity.highlight-action [data-elb][data-elbaction] {\n box-shadow: 0 0 0 2px var(--highlight-action), 0 0 0 4px var(--highlight-entity);\n }\n\n body.elb-highlight.highlight-entity.highlight-context [data-elb][data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-entity), 0 0 0 4px var(--highlight-context);\n }\n\n body.elb-highlight.highlight-action.highlight-context [data-elbaction][data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-action), 0 0 0 4px var(--highlight-context);\n }\n </style>\n </head>\n <body class=\"elb-highlight ${highlightClasses}\">\n ${html}\n </body>\n </html>\n `);\n doc.close();\n\n autoMarkProperties(doc);\n\n // Initialize browser source in iframe with parent's elb\n if (elbRef.current && iframe.contentWindow && iframe.contentDocument) {\n setTimeout(async () => {\n // Cleanup previous source instance\n if (sourceRef.current) {\n try {\n await sourceRef.current.instance.destroy?.(\n sourceRef.current.destroyContext,\n );\n } catch {\n // Ignore cleanup errors\n }\n }\n\n try {\n if (\n !iframe.contentWindow ||\n !iframe.contentDocument ||\n !elbRef.current\n ) {\n return;\n }\n\n // Create a noop logger that satisfies the Logger.Instance interface\n const createNoopLogger = (): Logger.Instance => ({\n error: () => {},\n warn: () => {},\n info: () => {},\n debug: () => {},\n json: () => {},\n throw: (msg: string | Error): never => {\n throw msg instanceof Error ? msg : new Error(msg);\n },\n scope: () => createNoopLogger(),\n });\n const noopLogger = createNoopLogger();\n\n // Create a noop push function for env\n const noopPush: Collector.PushFn = async () => ({\n ok: true,\n destination: {},\n });\n\n // Initialize browser source directly with parent's elb\n // This connects the iframe's DOM events to the parent collector\n const config: SourceBrowser.Config = {\n settings: {\n pageview: false,\n prefix: 'data-elb',\n elb: 'elb',\n elbLayer: 'elbLayer',\n // Use body as scope - trigger.ts compares `scope !== document` against\n // main page's document, so iframe.contentDocument fails the Element cast\n scope: iframe.contentDocument.body,\n },\n };\n const env: SourceBrowser.Env = {\n elb: elbRef.current,\n push: noopPush,\n command: async () => ({ ok: true, destination: {} }),\n logger: noopLogger,\n window: iframe.contentWindow as Window & typeof globalThis,\n document: iframe.contentDocument,\n };\n\n const instance = await sourceBrowser({\n id: 'preview',\n collector: {} as Collector.Instance, // Not used when elb is provided directly\n logger: noopLogger,\n setIngest: async () => {},\n setRespond: () => {},\n config,\n env,\n });\n\n sourceRef.current = {\n instance,\n destroyContext: {\n id: 'preview',\n config,\n env,\n logger: noopLogger,\n },\n };\n } catch {\n // sourceBrowser init failed - events won't be captured\n }\n }, 50);\n }\n }, 200);\n\n return () => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n // Cleanup source\n if (sourceRef.current) {\n sourceRef.current.instance.destroy?.(sourceRef.current.destroyContext);\n }\n };\n }, [html, css, highlights, autoMarkProperties, elb]);\n\n return (\n <Box\n header={label}\n footer={\n <PreviewFooter highlights={highlights} onToggle={toggleHighlight} />\n }\n >\n <div className=\"elb-preview-content\">\n <iframe\n ref={iframeRef}\n className=\"elb-preview-iframe\"\n title=\"HTML Preview\"\n />\n </div>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Header } from './header';\nimport { useGridHeight } from '../../contexts/GridHeightContext';\n\nexport interface BoxTab {\n id: string;\n label: string;\n content?: React.ReactNode;\n}\n\nexport interface BoxProps {\n header?: string;\n headerActions?: React.ReactNode;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n // Height management\n height?: number | string;\n minHeight?: number | string;\n maxHeight?: number | string;\n tiny?: boolean;\n resizable?: boolean;\n showHeader?: boolean; // Hide header (default: true)\n // Tabs support\n tabs?: BoxTab[];\n activeTab?: string; // Controlled mode\n onTabChange?: (id: string) => void;\n defaultTab?: string; // Uncontrolled default\n // Mac style\n showTrafficLights?: boolean;\n}\n\n/**\n * Box - Container atom component\n *\n * Provides a consistent box container with header and content area.\n * Used across all explorer components for consistent styling.\n *\n * Height behavior:\n * - Default: minHeight 100px, grows as needed\n * - tiny prop: sets minHeight to 100px explicitly\n * - Custom minHeight/maxHeight: override defaults\n * - In Grid: fills row height (equal heights per row)\n *\n * @example\n * <Box header=\"Preview\">\n * <Preview html={html} css={css} />\n * </Box>\n *\n * @example\n * <Box header=\"Code\" minHeight={200} maxHeight={600}>\n * <CodeBox ... />\n * </Box>\n */\nfunction TrafficLights() {\n return (\n <div className=\"elb-explorer-traffic-lights\">\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--red\" />\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--yellow\" />\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--green\" />\n </div>\n );\n}\n\nexport function Box({\n header,\n headerActions,\n footer,\n children,\n className = '',\n style,\n height,\n minHeight,\n maxHeight,\n tiny = false,\n resizable = false,\n showHeader = true,\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n showTrafficLights = false,\n}: BoxProps) {\n // Grid context for synchronized heights\n const gridContext = useGridHeight();\n\n // Uncontrolled tab state\n const [internalActiveTab, setInternalActiveTab] = useState(\n defaultTab || (tabs?.[0]?.id ?? ''),\n );\n\n // Controlled vs uncontrolled\n const isControlled = controlledActiveTab !== undefined;\n const activeTabId = isControlled ? controlledActiveTab : internalActiveTab;\n\n const handleTabClick = (tabId: string) => {\n if (onTabChange) {\n onTabChange(tabId);\n }\n if (!isControlled) {\n setInternalActiveTab(tabId);\n }\n };\n\n // Height management: explicit > grid synced > default\n const boxStyle: React.CSSProperties = { ...style };\n\n if (height !== undefined) {\n boxStyle.height = typeof height === 'number' ? `${height}px` : height;\n } else if (gridContext?.syncedHeight) {\n boxStyle.height = `${gridContext.syncedHeight}px`;\n }\n\n if (tiny) {\n boxStyle.height = 'auto';\n boxStyle.minHeight =\n minHeight !== undefined\n ? typeof minHeight === 'number'\n ? `${minHeight}px`\n : minHeight\n : '100px';\n } else if (minHeight !== undefined) {\n boxStyle.minHeight =\n typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n }\n\n if (maxHeight !== undefined) {\n boxStyle.maxHeight =\n typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n\n if (resizable) {\n boxStyle.resize = 'vertical';\n boxStyle.overflow = 'auto';\n }\n\n // Auto-height class for grid context\n const useContentHeight = !!gridContext?.enabled;\n const autoHeightClass = useContentHeight ? 'elb-box--auto-height' : '';\n\n // Determine content: tab content (if available) or children\n const activeTabContent = tabs?.find((t) => t.id === activeTabId)?.content;\n const content = activeTabContent ?? children;\n\n // Render tabs header or regular header\n const hasTabs = tabs && tabs.length > 0;\n const showRegularHeader = showHeader && header && !hasTabs;\n\n return (\n <div\n className={`elb-explorer elb-explorer-box ${autoHeightClass} ${className}`.trim()}\n style={boxStyle}\n >\n {hasTabs && (\n <div className=\"elb-explorer-tabs\">\n {showTrafficLights && <TrafficLights />}\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n className={`elb-explorer-tab ${activeTabId === tab.id ? 'elb-explorer-tab--active' : ''}`}\n onClick={() => handleTabClick(tab.id)}\n >\n {tab.label}\n </button>\n ))}\n {headerActions && (\n <div className=\"elb-explorer-tab-actions\">{headerActions}</div>\n )}\n </div>\n )}\n {showRegularHeader && <Header label={header}>{headerActions}</Header>}\n <div className=\"elb-explorer-content\">{content}</div>\n {footer && <div className=\"elb-explorer-footer\">{footer}</div>}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface HeaderProps {\n label: string;\n children?: React.ReactNode;\n}\n\nexport function Header({ label, children }: HeaderProps) {\n return (\n <div className=\"elb-explorer-header\">\n <span className=\"elb-explorer-label\">{label}</span>\n {children}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface PreviewFooterButton {\n type: string;\n label: string;\n highlightClass: string;\n}\n\nexport interface PreviewFooterProps {\n highlights: Set<string>;\n onToggle: (type: string) => void;\n buttons?: PreviewFooterButton[];\n}\n\nconst defaultButtons: PreviewFooterButton[] = [\n { type: 'context', label: 'Context', highlightClass: 'highlight-context' },\n { type: 'entity', label: 'Entity', highlightClass: 'highlight-entity' },\n { type: 'property', label: 'Property', highlightClass: 'highlight-property' },\n { type: 'action', label: 'Action', highlightClass: 'highlight-action' },\n];\n\n/**\n * PreviewFooter - Footer with highlight toggle buttons\n *\n * Renders a set of buttons to toggle highlighting of walkerOS data attributes.\n * Designed to be used with Box footer prop for preview components.\n *\n * @example\n * const [highlights, setHighlights] = useState<Set<string>>(new Set());\n * const handleToggle = (type: string) => {\n * setHighlights(prev => {\n * const next = new Set(prev);\n * next.has(type) ? next.delete(type) : next.add(type);\n * return next;\n * });\n * };\n *\n * <Box footer={<PreviewFooter highlights={highlights} onToggle={handleToggle} />}>\n * Preview content\n * </Box>\n */\nexport function PreviewFooter({\n highlights,\n onToggle,\n buttons = defaultButtons,\n}: PreviewFooterProps) {\n return (\n <div className=\"elb-preview-footer\">\n {buttons.map((button) => (\n <button\n key={button.type}\n className={`elb-preview-btn ${\n highlights.has(button.type) ? button.highlightClass : ''\n }`}\n onClick={() => onToggle(button.type)}\n type=\"button\"\n >\n {button.label}\n </button>\n ))}\n </div>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box } from '../atoms/box';\nimport { ButtonGroup } from '../atoms/button-group';\nimport { Preview } from '../molecules/preview';\nimport { Code } from '../atoms/code';\n\nexport interface BrowserBoxProps {\n html?: string;\n css?: string;\n js?: string;\n onHtmlChange?: (value: string) => void;\n onCssChange?: (value: string) => void;\n onJsChange?: (value: string) => void;\n showPreview?: boolean;\n label?: string;\n className?: string;\n initialTab?: 'preview' | 'html' | 'css' | 'js';\n lineNumbers?: boolean;\n wordWrap?: boolean;\n}\n\n/**\n * BrowserBox - Code editor with HTML/CSS/JS toggle\n *\n * Displays code editor with button group to switch between HTML, CSS, and JavaScript.\n * Only shows tabs for content that is provided.\n *\n * @example\n * <BrowserBox\n * html={htmlCode}\n * css={cssCode}\n * onHtmlChange={setHtml}\n * onCssChange={setCss}\n * label=\"Code\"\n * />\n */\nexport function BrowserBox({\n html,\n css,\n js,\n onHtmlChange,\n onCssChange,\n onJsChange,\n showPreview = true,\n label = 'Code',\n className = '',\n initialTab,\n lineNumbers = false,\n wordWrap = false,\n}: BrowserBoxProps) {\n // Determine available tabs\n const availableTabs = useMemo(() => {\n const tabs: Array<{ label: string; value: string }> = [];\n if (showPreview && html !== undefined)\n tabs.push({ label: 'Preview', value: 'preview' });\n if (html !== undefined) tabs.push({ label: 'HTML', value: 'html' });\n if (css !== undefined) tabs.push({ label: 'CSS', value: 'css' });\n if (js !== undefined) tabs.push({ label: 'JS', value: 'js' });\n return tabs;\n }, [html, css, js, showPreview]);\n\n // Set initial active tab\n const [activeTab, setActiveTab] = useState<string>(() => {\n if (initialTab && availableTabs.some((t) => t.value === initialTab)) {\n return initialTab;\n }\n return availableTabs[0]?.value || 'preview';\n });\n\n // Get current content and language\n const { content, language, onChange } = useMemo(() => {\n switch (activeTab) {\n case 'html':\n return {\n content: html || '',\n language: 'html' as const,\n onChange: onHtmlChange,\n };\n case 'css':\n return {\n content: css || '',\n language: 'css' as const,\n onChange: onCssChange,\n };\n case 'js':\n return {\n content: js || '',\n language: 'javascript' as const,\n onChange: onJsChange,\n };\n default:\n return {\n content: '',\n language: 'text' as const,\n onChange: undefined,\n };\n }\n }, [activeTab, html, css, js, onHtmlChange, onCssChange, onJsChange]);\n\n // Build button group data\n const buttons = useMemo(\n () =>\n availableTabs.map((tab) => ({\n label: tab.label,\n value: tab.value,\n active: activeTab === tab.value,\n })),\n [availableTabs, activeTab],\n );\n\n return (\n <Box\n header={label}\n headerActions={\n availableTabs.length > 1 ? (\n <ButtonGroup buttons={buttons} onButtonClick={setActiveTab} />\n ) : null\n }\n className={className}\n >\n {activeTab === 'preview' ? (\n <Preview html={html || ''} css={css || ''} />\n ) : (\n <Code\n code={content}\n language={language}\n onChange={onChange}\n disabled={!onChange}\n lineNumbers={lineNumbers}\n wordWrap={wordWrap}\n />\n )}\n </Box>\n );\n}\n","import React from 'react';\n\nexport interface ButtonProps {\n active?: boolean;\n onClick?: () => void;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Button - Button component for headers and controls\n *\n * Used in button groups or standalone in headers.\n * Follows atomic design principles as a base atom.\n */\nexport function Button({\n active = false,\n onClick,\n children,\n className = '',\n}: ButtonProps) {\n return (\n <button\n className={`elb-explorer-btn ${active ? 'active' : ''} ${className}`}\n onClick={onClick}\n type=\"button\"\n >\n {children}\n </button>\n );\n}\n","import React from 'react';\nimport { Button } from './button';\n\nexport interface ButtonGroupProps {\n buttons: Array<{\n label: string;\n value: string;\n active?: boolean;\n }>;\n onButtonClick: (value: string) => void;\n className?: string;\n}\n\n/**\n * ButtonGroup - Segmented control for headers\n *\n * Displays multiple buttons in a grouped segmented control style.\n * Commonly used for tab switching (HTML/CSS/JS, etc.)\n */\nexport function ButtonGroup({\n buttons,\n onButtonClick,\n className = '',\n}: ButtonGroupProps) {\n return (\n <div className={`elb-explorer-button-group ${className}`}>\n {buttons.map((button) => (\n <Button\n key={button.value}\n active={button.active}\n onClick={() => onButtonClick(button.value)}\n >\n {button.label}\n </Button>\n ))}\n </div>\n );\n}\n","import React, {\n type ComponentType,\n useEffect,\n useState,\n useRef,\n useCallback,\n} from 'react';\nimport { Editor, loader } from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport {\n registerAllThemes,\n ELB_THEME_DARK,\n ELB_THEME_LIGHT,\n} from '../../themes';\nimport {\n configureMonacoTypeScript,\n registerWalkerOSAmbients,\n registerWalkerOSTypes,\n} from '../../utils/monaco-types';\nimport {\n applyDataElbDecorations,\n registerDataElbStyles,\n} from '../../utils/monaco-decorators';\nimport {\n applyWalkerOSDecorations,\n registerWalkerOSDecorationStyles,\n} from '../../utils/monaco-walkeros-decorations';\nimport {\n registerWalkerOSProviders,\n setIntelliSenseContext,\n removeIntelliSenseContext,\n} from '../../utils/monaco-walkeros-providers';\nimport { registerFormatters } from '../../utils/monaco-formatters';\nimport {\n generateModelPath,\n initMonacoJson,\n registerJsonSchema,\n unregisterJsonSchema,\n} from '../../utils/monaco-json-schema';\nimport { useMonacoHeight } from '../../hooks/useMonacoHeight';\nimport { useGridHeight } from '../../contexts/GridHeightContext';\nimport { isMonacoCancellation } from '../../utils/is-monaco-cancellation';\n\n// Monaco Editor configuration\n// NOTE: MonacoEnvironment.getWorker and loader.config() should be configured\n// by the consuming application. See examples in the explorer app's main.tsx\nimport type * as monaco from 'monaco-editor';\nimport type { IntelliSenseContext } from '../../types/intellisense';\n\n// Suppress Monaco loader cancellation rejections at the window level. See\n// `isMonacoCancellation` for the full rationale. ES modules evaluate once, so\n// the listener registers once per module graph. HMR re-execution may add a\n// duplicate in dev, which is harmless (preventDefault on an already-prevented\n// event is a no-op).\nif (typeof window !== 'undefined') {\n window.addEventListener('unhandledrejection', (event) => {\n if (isMonacoCancellation(event.reason)) {\n event.preventDefault();\n }\n });\n}\n\n// Run Monaco base setup exactly once at module load — before any <Editor>\n// mounts. Doing this during `beforeMount` of an editor invalidates any\n// in-flight TypeScript worker operations from sibling editors mounted in\n// parallel, which leak as `{ type: 'cancelation' }` unhandled rejections.\nif (typeof window !== 'undefined') {\n loader\n .init()\n .then((m) => {\n configureMonacoTypeScript(m);\n registerWalkerOSAmbients(m);\n })\n .catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[walkerOS] Monaco loader.init() failed:', err);\n }\n });\n}\n\nexport interface CodeProps {\n code: string;\n language?: string;\n onChange?: (code: string) => void;\n disabled?: boolean;\n lineNumbers?: boolean;\n minimap?: boolean;\n folding?: boolean;\n wordWrap?: boolean;\n className?: string;\n beforeMount?: (monaco: typeof import('monaco-editor')) => void;\n onMount?: (editor: editor.IStandaloneCodeEditor) => void;\n autoHeight?: boolean | { min?: number; max?: number };\n fontSize?: number;\n packages?: string[];\n sticky?: boolean; // Enable sticky scroll (default: true)\n ide?: boolean; // Enable IDE features: hover, validation, etc. (default: false)\n /** JSON Schema (Draft 7) for validation and IntelliSense in JSON mode */\n jsonSchema?: Record<string, unknown>;\n /** Context data for dynamic IntelliSense (variable names, secrets, etc.) */\n intellisenseContext?: IntelliSenseContext;\n /** Validation function — called on content change, results rendered as Monaco markers */\n validate?: (code: string) => {\n valid: boolean;\n errors: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n endLine?: number;\n endColumn?: number;\n }>;\n warnings: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n endLine?: number;\n endColumn?: number;\n }>;\n };\n /** Callback when Monaco marker counts change */\n onMarkerCounts?: (info: {\n errors: number;\n warnings: number;\n markers: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n }>;\n }) => void;\n}\n\n/**\n * Code - Pure Monaco editor atom\n *\n * Height Management:\n * Two modes controlled by `autoHeight` prop:\n *\n * 1. Default (autoHeight=false): height=\"100%\" - fills parent container\n * - Uses flex: 1 + min-height: 0 for proper flex overflow containment\n * - Monaco set to height=\"100%\" to fill container\n * - automaticLayout: true + ResizeObserver for reliable resize detection\n * - Use in Grid (equal heights) and Flex contexts (fill parent)\n *\n * 2. Auto-height (autoHeight=true): Dynamically sizes to content\n * - Uses Monaco's getContentHeight() API for accurate content measurement\n * - Respects min/max boundaries (default: 100-600px)\n * - Updates automatically when content changes\n * - Use in standalone contexts (docs) to eliminate blank space\n *\n * @example\n * // Grid context - use default height=\"100%\" for equal row heights\n * <Grid columns={3}>\n * <CodeBox code={event} />\n * <CodeBox code={mapping} />\n * </Grid>\n *\n * @example\n * // Standalone context - use autoHeight to fit content\n * <CodeBox\n * code={shortExample}\n * autoHeight={{ min: 100, max: 600 }}\n * />\n */\nexport function Code({\n code,\n language = 'javascript',\n onChange,\n disabled = false,\n lineNumbers = false,\n minimap = false,\n folding = false,\n wordWrap = false,\n className,\n beforeMount,\n onMount,\n autoHeight,\n fontSize = 13,\n packages,\n sticky = true,\n ide = false,\n jsonSchema,\n intellisenseContext,\n validate,\n onMarkerCounts,\n}: CodeProps) {\n // Track if component has mounted (client-side hydration complete)\n const [isMounted, setIsMounted] = useState(false);\n // Use a consistent default theme for SSR - only update after mount\n const [monacoTheme, setMonacoTheme] = useState('vs-light');\n const decorationsCleanupRef = useRef<Array<() => void>>([]);\n const monacoRef = useRef<typeof import('monaco-editor') | null>(null);\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const gridContext = useGridHeight();\n const boxIdRef = useRef<number | null>(null);\n\n if (gridContext?.enabled && boxIdRef.current === null) {\n boxIdRef.current = gridContext.getBoxId();\n }\n\n const handleHeightChange = useCallback(\n (height: number) => {\n if (gridContext?.enabled && boxIdRef.current !== null) {\n gridContext.registerBox(boxIdRef.current, height);\n }\n },\n [gridContext],\n );\n\n useEffect(() => {\n return () => {\n if (gridContext?.enabled && boxIdRef.current !== null) {\n gridContext.unregisterBox(boxIdRef.current);\n }\n };\n }, [gridContext]);\n\n const heightConfig = typeof autoHeight === 'object' ? autoHeight : {};\n const [calculatedHeight, registerEditor] = useMonacoHeight({\n enabled: !!autoHeight || !!gridContext?.enabled,\n minHeight: heightConfig.min ?? (gridContext?.enabled ? 1 : 20),\n maxHeight: heightConfig.max ?? 600,\n defaultHeight: gridContext?.enabled ? 250 : 400,\n onHeightChange: handleHeightChange,\n });\n\n // Register data-elb styles on mount\n useEffect(() => {\n registerDataElbStyles();\n }, []);\n\n // Helper: Find data-theme attribute from closest ancestor or document\n // Returns null during SSR (no document available)\n const getDataTheme = useCallback((): string | null => {\n if (typeof document === 'undefined') return null;\n\n // Check container ref first (closest to Monaco)\n if (containerRef.current) {\n const closest = containerRef.current.closest('[data-theme]');\n if (closest) {\n return closest.getAttribute('data-theme');\n }\n }\n\n // Fall back to document root\n return document.documentElement.getAttribute('data-theme');\n }, []);\n\n // Mark component as mounted (hydration complete)\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Theme detection - only runs after mount to prevent hydration mismatch\n useEffect(() => {\n if (!isMounted) return;\n\n const checkTheme = () => {\n const dataTheme = getDataTheme();\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n const newTheme = isDark ? ELB_THEME_DARK : ELB_THEME_LIGHT;\n\n setMonacoTheme(newTheme);\n };\n\n checkTheme();\n\n const observer = new MutationObserver(() => {\n checkTheme();\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n checkTheme();\n };\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n observer.disconnect();\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [isMounted, getDataTheme]);\n\n // ResizeObserver for container size changes\n // Complements automaticLayout: true for more reliable detection\n // Handles cases where Grid constraints change or parent container resizes\n useEffect(() => {\n const editor = editorRef.current;\n const container = containerRef.current;\n\n if (!editor || !container) return;\n\n const resizeObserver = new ResizeObserver(() => {\n // Debounce layout calls to prevent excessive updates\n requestAnimationFrame(() => {\n editor.layout();\n });\n });\n\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // JSON Schema registration for IntelliSense\n const modelPathRef = useRef<string | null>(null);\n const intellisenseContextRef = useRef(intellisenseContext);\n intellisenseContextRef.current = intellisenseContext;\n const validateRef = useRef(validate);\n validateRef.current = validate;\n const onMarkerCountsRef = useRef(onMarkerCounts);\n onMarkerCountsRef.current = onMarkerCounts;\n\n // Always generate a stable model path with a language-appropriate extension.\n // Monaco's TypeScript worker uses the extension to decide TS vs TSX vs JS\n // parsing. Without this, all snippets default to `.json` paths and TS\n // diagnostics misbehave on any non-JSON content.\n if (!modelPathRef.current) {\n modelPathRef.current = generateModelPath(language);\n }\n\n // Register/update JSON schema when it changes\n useEffect(() => {\n if (!jsonSchema || !modelPathRef.current) return;\n\n registerJsonSchema(modelPathRef.current, jsonSchema);\n\n return () => {\n if (modelPathRef.current) {\n unregisterJsonSchema(modelPathRef.current);\n }\n };\n }, [jsonSchema]);\n\n // Sync intellisenseContext with provider registry\n useEffect(() => {\n if (intellisenseContext && modelPathRef.current) {\n setIntelliSenseContext(modelPathRef.current, intellisenseContext);\n return () => {\n if (modelPathRef.current) {\n removeIntelliSenseContext(modelPathRef.current);\n }\n };\n }\n }, [intellisenseContext]);\n\n const handleChange = (value: string | undefined) => {\n if (onChange && value !== undefined) {\n onChange(value);\n }\n };\n\n const handleBeforeMount = async (monaco: typeof import('monaco-editor')) => {\n monacoRef.current = monaco;\n\n // Initialize JSON schema registry with this monaco instance\n initMonacoJson(monaco);\n\n // Always run built-in setup\n registerAllThemes(monaco);\n registerFormatters(monaco);\n\n // Monaco base setup (compiler options + ambient globals) runs once at\n // module load via `loader.init()`. The WeakSet guards inside those\n // functions make them no-ops here even if called again.\n\n if (packages && packages.length > 0) {\n registerWalkerOSTypes(monaco);\n\n const { loadPackageTypes } = await import('../../utils/monaco-types');\n for (const pkg of packages) {\n if (pkg !== '@walkeros/core') {\n await loadPackageTypes(monaco, { package: pkg }).catch(() => {});\n }\n }\n }\n\n const dataTheme = getDataTheme();\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n const themeName = isDark ? ELB_THEME_DARK : ELB_THEME_LIGHT;\n monaco.editor.setTheme(themeName);\n\n // Register walkerOS IntelliSense providers for JSON\n if (language === 'json') {\n registerWalkerOSProviders(monaco);\n }\n\n // Call user's beforeMount AFTER built-in setup\n if (beforeMount) {\n beforeMount(monaco);\n }\n };\n\n const MonacoEditor = Editor as ComponentType<{\n height: string;\n language: string;\n value: string;\n onChange: (value: string | undefined) => void;\n beforeMount?: (monaco: typeof import('monaco-editor')) => void;\n onMount?: (editor: editor.IStandaloneCodeEditor) => void;\n theme: string;\n options: Record<string, unknown>;\n path?: string; // Model URI for JSON schema fileMatch\n }>;\n\n const handleEditorMount = (monacoEditor: editor.IStandaloneCodeEditor) => {\n editorRef.current = monacoEditor;\n\n // Register with height hook if auto-height or grid context is enabled\n if (autoHeight || gridContext?.enabled) {\n registerEditor(monacoEditor);\n }\n\n // Apply data-elb decorations for HTML\n if (language === 'html' && monacoRef.current) {\n decorationsCleanupRef.current.push(\n applyDataElbDecorations(monacoEditor, monacoRef.current),\n );\n }\n\n // Apply walkerOS reference decorations for JSON\n if (language === 'json') {\n registerWalkerOSDecorationStyles();\n decorationsCleanupRef.current.push(\n applyWalkerOSDecorations(monacoEditor),\n );\n }\n\n // Run validation from validate prop (replaces internal walkerOS markers)\n if (validateRef.current && monacoRef.current) {\n const monacoInstance = monacoRef.current;\n let validateTimer: ReturnType<typeof setTimeout>;\n\n const runValidation = () => {\n const model = monacoEditor.getModel();\n if (!model) return;\n const text = model.getValue();\n const fn = validateRef.current;\n if (!fn) return;\n\n const result = fn(text);\n const allIssues = [...result.errors, ...result.warnings];\n\n monacoInstance.editor.setModelMarkers(\n model,\n 'validate',\n allIssues.map((issue) => ({\n severity: issue.severity === 'error' ? 8 : 4,\n message: issue.message,\n startLineNumber: issue.line,\n startColumn: issue.column,\n endLineNumber: issue.endLine ?? issue.line,\n endColumn: issue.endColumn ?? issue.column + 1,\n })),\n );\n\n // Don't report here — the global marker listener below handles it\n };\n\n // Initial validation\n runValidation();\n\n // Debounced validation on content change\n const validateDisposable = monacoEditor.onDidChangeModelContent(() => {\n clearTimeout(validateTimer);\n validateTimer = setTimeout(runValidation, 300);\n });\n\n decorationsCleanupRef.current.push(() => {\n clearTimeout(validateTimer);\n validateDisposable.dispose();\n });\n }\n\n // Listen for marker changes and report counts to CodeBox header badges.\n // When a custom validate prop is provided, it is the single source of truth\n // (same validator the CLI uses). Clear Monaco's built-in JSON diagnostics\n // so they don't double-count.\n if (onMarkerCountsRef.current && monacoRef.current) {\n const monacoInstance = monacoRef.current;\n const model = monacoEditor.getModel();\n const hasCustomValidate = !!validateRef.current;\n if (model) {\n const reportMarkers = () => {\n // When custom validate owns validation, strip Monaco's JSON markers\n if (hasCustomValidate) {\n monacoInstance.editor.setModelMarkers(model, 'json', []);\n }\n const raw = monacoInstance.editor.getModelMarkers({\n resource: model.uri,\n });\n let errors = 0;\n let warnings = 0;\n const details: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n }> = [];\n for (const m of raw) {\n if (m.severity === 8) {\n errors++;\n details.push({\n message: m.message,\n severity: 'error',\n line: m.startLineNumber,\n column: m.startColumn,\n });\n } else if (m.severity === 4) {\n warnings++;\n details.push({\n message: m.message,\n severity: 'warning',\n line: m.startLineNumber,\n column: m.startColumn,\n });\n }\n }\n onMarkerCountsRef.current?.({ errors, warnings, markers: details });\n };\n\n const markerDisposable = monacoInstance.editor.onDidChangeMarkers(\n (uris) => {\n if (uris.some((uri) => uri.toString() === model.uri.toString())) {\n reportMarkers();\n }\n },\n );\n\n // Initial report (catches markers set before listener)\n requestAnimationFrame(reportMarkers);\n\n decorationsCleanupRef.current.push(() => {\n markerDisposable.dispose();\n });\n }\n }\n\n // Initial layout call after mount\n requestAnimationFrame(() => {\n monacoEditor.layout();\n });\n\n if (onMount) {\n onMount(monacoEditor);\n }\n };\n\n // Cleanup\n useEffect(() => {\n return () => {\n for (const cleanup of decorationsCleanupRef.current) {\n cleanup();\n }\n decorationsCleanupRef.current = [];\n };\n }, []);\n\n // Choose height strategy: auto-calculated or fill parent\n // Note: When grid context is enabled with synced mode, CodeBox applies\n // syncedHeight to the Box container. Monaco should use calculatedHeight\n // (content-only) here, not syncedHeight (which includes header + border).\n const monacoHeight =\n autoHeight || gridContext?.enabled ? `${calculatedHeight}px` : '100%';\n\n // Add modifier class when using auto-height or synced height\n const useContentHeight = !!autoHeight || !!gridContext?.enabled;\n const codeClassName =\n `elb-code ${useContentHeight ? 'elb-code--auto-height' : ''} ${className || ''}`.trim();\n\n return (\n <div className={codeClassName} ref={containerRef}>\n <MonacoEditor\n height={monacoHeight}\n language={language}\n value={code}\n onChange={handleChange}\n beforeMount={handleBeforeMount}\n onMount={handleEditorMount}\n theme={monacoTheme}\n path={modelPathRef.current || undefined}\n options={{\n readOnly: disabled || !onChange,\n readOnlyMessage: { value: '' },\n minimap: { enabled: minimap },\n fontSize: fontSize,\n lineHeight: Math.round(fontSize * 1.5),\n padding: 0,\n lineNumbers: lineNumbers ? 'on' : 'off',\n lineNumbersMinChars: 3,\n glyphMargin: false,\n folding: folding,\n lineDecorationsWidth: 8, // Gap between line numbers and code\n scrollBeyondLastLine: false,\n automaticLayout: true,\n tabSize: 2,\n detectIndentation: false,\n trimAutoWhitespace: false,\n wordWrap: wordWrap ? 'on' : 'off',\n fixedOverflowWidgets: true,\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n renderValidationDecorations: ide || jsonSchema ? 'editable' : 'off',\n hover: { enabled: ide || !!jsonSchema || !!intellisenseContext },\n 'semanticHighlighting.enabled': ide,\n showDeprecated: ide,\n showUnused: ide,\n 'bracketPairColorization.enabled': false,\n guides: {\n bracketPairs: false,\n bracketPairsHorizontal: false,\n highlightActiveBracketPair: false,\n indentation: false, // Disable indentation guide lines\n },\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n alwaysConsumeMouseWheel: false,\n },\n // Cursor and selection behavior\n cursorBlinking: 'blink', // Make cursor blink visibly\n cursorStyle: 'line', // Use line cursor (most visible)\n cursorWidth: 2, // Make cursor 2px wide for better visibility\n cursorSmoothCaretAnimation: 'off', // Disable smooth cursor animation\n selectionHighlight: false, // Disable auto-highlighting of selected text occurrences\n occurrencesHighlight: 'off', // Disable highlighting matching words\n selectOnLineNumbers: false, // Don't select line when clicking line numbers\n wordBasedSuggestions: 'off', // Reduce auto-completion interference\n quickSuggestions:\n jsonSchema || intellisenseContext\n ? { strings: true, other: true, comments: false }\n : false,\n stickyScroll: { enabled: sticky },\n }}\n />\n </div>\n );\n}\n","/**\n * Theme name constants\n *\n * Single source of truth for Monaco `defineTheme` keys and Shiki theme names.\n * Import these instead of hard-coding the string literals — renaming a theme\n * then only changes one place and both engines stay in sync.\n */\n\nexport const ELB_THEME_DARK = 'elbTheme-dark';\nexport const ELB_THEME_LIGHT = 'elbTheme-light';\n\nexport type ElbThemeName = typeof ELB_THEME_DARK | typeof ELB_THEME_LIGHT;\n","/**\n * Token groups — unified scope → color mapping for Monaco + Shiki\n *\n * Each `TokenGroup` defines ONE semantic color (foreground + optional fontStyle)\n * and a list of `scopes` that should receive it. The list pools both Monaco's\n * Monarch-style token names (e.g. `string.value.json`, `identifier.ts`) AND\n * TextMate scopes that Shiki grammars emit (e.g. `string.quoted.double.json`,\n * `variable.other.object.ts`). Because the same list drives both engines via\n * `tokenGroupsToMonacoRules` + `monacoThemeToShiki`, a single edit here updates\n * CodeBox (Monaco) and CodeView (Shiki) together.\n */\n\nimport type { editor } from 'monaco-editor';\n\nexport interface TokenGroup {\n /** Foreground hex WITHOUT leading `#` (Monaco convention). Omit for font-style-only rules. */\n foreground?: string;\n /** Monaco / TextMate fontStyle string, e.g. 'italic', 'bold', 'italic bold'. */\n fontStyle?: string;\n /**\n * Monarch token names (Monaco) AND TextMate scopes (Shiki), pooled into one list.\n * Every scope in this list gets the same foreground + fontStyle, so both engines\n * render the same color for every token they emit under any of these names.\n */\n scopes: string[];\n}\n\n/**\n * Expand `TokenGroup[]` into the flat `editor.ITokenThemeRule[]` Monaco wants.\n * Each scope becomes one rule with the group's shared foreground + fontStyle.\n */\nexport function tokenGroupsToMonacoRules(\n groups: TokenGroup[],\n): editor.ITokenThemeRule[] {\n return groups.flatMap((g) =>\n g.scopes.map((token) => {\n const rule: editor.ITokenThemeRule = { token };\n if (g.foreground !== undefined) rule.foreground = g.foreground;\n if (g.fontStyle !== undefined) rule.fontStyle = g.fontStyle;\n return rule;\n }),\n );\n}\n","/**\n * Palenight Theme for Monaco Editor\n *\n * Dark theme for walkerOS Explorer matching Prism's palenight theme.\n * Aligned with website documentation syntax highlighting for consistency.\n *\n * Token Color Mappings (Matching Prism Palenight):\n * - comment: #697098 - gray, italic\n * - string/inserted: #c3e88d - green\n * - number: #f78c6c - orange\n * - builtin/char/constant/function: #82aaff - blue\n * - punctuation/delimiter: #c792ea - purple\n * - variable: #bfc7d5 - light gray\n * - class-name: #ffcb6b - yellow/gold\n * - attr-name: #c3e88d - green (matching string color)\n * - tag/deleted: #ff5572 - red/pink\n * - operator: #89ddff - cyan\n * - boolean: #ff5874 - red\n * - keyword: #c084fc - bright purple, italic\n * - doctype: #c084fc - purple, italic\n * - namespace: #b2ccd6 - blue-gray\n * - url: #dddddd - white\n */\n\nimport type { editor } from 'monaco-editor';\nimport { ELB_THEME_DARK } from './names';\nimport { tokenGroupsToMonacoRules, type TokenGroup } from './token-groups';\n\n// Semantic color palette — change a hex here, it flows to every scope that uses it.\nconst C = {\n comment: '697098',\n string: 'c3e88d',\n regexp: '89ddff',\n number: 'f78c6c',\n keyword: 'c084fc',\n operator: '89ddff',\n function: '82aaff',\n type: 'ffcb6b',\n variable: 'bfc7d5',\n bool: 'ff5874',\n punctuation: 'c792ea',\n tag: 'ff5572',\n namespace: 'b2ccd6',\n url: 'dddddd',\n invalid: 'ff5572',\n invalidDep: 'f78c6c',\n cssSelector: 'ff5572',\n cssId: '82aaff',\n cssProperty: 'c084fc',\n} as const;\n\n// Token groups pool Monarch token names (Monaco) + TextMate scopes (Shiki).\n// Both engines consume the SAME list — change a group, both pick up.\n//\n// ORDER MATTERS: more-specific scopes should come AFTER broader ones so they\n// win when both match. Monaco walks `rules[]` top-to-bottom and (like\n// TextMate) later rules override earlier ones for the same scope.\nconst TOKEN_GROUPS: TokenGroup[] = [\n // Comments\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: [\n 'comment',\n 'comment.block',\n 'comment.line',\n 'comment.html',\n 'comment.line.double-slash',\n 'comment.line.number-sign',\n 'comment.block.documentation',\n 'punctuation.definition.comment',\n ],\n },\n\n // Strings (generic)\n {\n foreground: C.string,\n scopes: [\n 'string',\n 'string.quoted',\n 'string.template',\n 'string.value.json',\n 'string.json',\n 'string.html',\n 'string.css',\n 'string.js',\n 'string.ts',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.triple',\n 'punctuation.definition.string',\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'meta.string',\n // HTML/JSX attribute values stay in string color (matches prior rule)\n 'attribute.value.html',\n ],\n },\n\n // Regex (cyan — distinct from plain strings)\n {\n foreground: C.regexp,\n scopes: ['string.regexp'],\n },\n\n // Numbers\n {\n foreground: C.number,\n scopes: [\n 'number',\n 'number.hex',\n 'number.binary',\n 'number.octal',\n 'number.float',\n 'constant.numeric',\n 'constant.numeric.decimal',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'keyword.other.unit',\n ],\n },\n\n // Keywords — italic\n {\n foreground: C.keyword,\n fontStyle: 'italic',\n scopes: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.import',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'storage.type',\n 'storage.modifier',\n 'keyword.declaration',\n ],\n },\n\n // Keyword \"other\" — same color, upright\n {\n foreground: C.keyword,\n scopes: ['keyword.other'],\n },\n\n // Operators — cyan\n {\n foreground: C.operator,\n scopes: [\n 'operator',\n 'operators',\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.arithmetic',\n 'keyword.operator.logical',\n 'keyword.operator.comparison',\n 'keyword.operator.type',\n 'keyword.operator.type.ts',\n ],\n },\n\n // Functions\n {\n foreground: C.function,\n scopes: [\n 'function',\n 'identifier.function',\n 'support.function',\n 'entity.name.function',\n 'meta.function-call',\n 'meta.function-call.entity.name.function',\n 'variable.function',\n ],\n },\n\n // Types & classes\n {\n foreground: C.type,\n scopes: [\n 'type',\n 'type.identifier',\n 'entity.name.type',\n 'entity.name.class',\n 'support.type',\n 'support.class',\n 'support.type.primitive.ts',\n 'support.type.primitive.js',\n 'entity.name.type.ts',\n 'entity.name.type.js',\n 'meta.type.annotation',\n 'meta.type.annotation.ts',\n 'entity.other.inherited-class',\n 'storage.type.class',\n 'storage.type.function',\n 'storage.type.interface',\n 'support.type.primitive',\n ],\n },\n\n // Variables / identifiers / property names — unified light gray\n {\n foreground: C.variable,\n scopes: [\n 'variable',\n 'variable.name',\n 'variable.parameter',\n 'variable.parameter.ts',\n 'variable.parameter.js',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.language',\n 'meta.definition.variable',\n 'identifier',\n 'identifier.ts',\n 'identifier.js',\n // Object keys — JSON, TS, JS\n 'support.type.property-name',\n 'support.type.property-name.json',\n 'string.key.json',\n 'string.name.tag.json',\n 'meta.object-literal.key',\n 'variable.other.property',\n 'variable.other.object.property',\n 'variable.other.constant.property',\n ],\n },\n\n // Constants & built-ins (blue — matches function color per Prism palenight)\n {\n foreground: C.function,\n scopes: ['constant', 'constant.character', 'support.constant'],\n },\n\n // Booleans / null / language constants\n {\n foreground: C.bool,\n scopes: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'keyword.constant.boolean',\n ],\n },\n\n // Delimiters & punctuation\n {\n foreground: C.punctuation,\n scopes: [\n 'delimiter',\n 'delimiter.bracket',\n 'delimiter.parenthesis',\n 'delimiter.square',\n 'delimiter.html',\n 'punctuation',\n 'punctuation.separator',\n 'punctuation.definition',\n 'punctuation.terminator',\n 'punctuation.section',\n 'meta.brace',\n 'meta.brace.round',\n 'meta.brace.square',\n 'meta.brace.curly',\n 'meta.tag.html',\n 'punctuation.definition.tag.html',\n ],\n },\n\n // Tags (HTML/XML/JSX) — red/pink accent\n {\n foreground: C.tag,\n scopes: [\n 'tag',\n 'meta.tag',\n 'entity.name.tag',\n 'entity.name.tag.tsx',\n 'entity.name.tag.jsx',\n 'punctuation.definition.tag',\n 'punctuation.definition.tag.begin',\n 'punctuation.definition.tag.end',\n ],\n },\n\n // Attribute names — string color (matches prior theme intent)\n {\n foreground: C.string,\n scopes: ['attribute.name', 'entity.other.attribute-name', 'meta.attribute'],\n },\n\n // Namespaces\n {\n foreground: C.namespace,\n scopes: ['namespace', 'entity.name.namespace', 'storage.type.namespace'],\n },\n\n // URLs / links\n {\n foreground: C.url,\n scopes: ['markup.underline.link', 'string.other.link'],\n },\n\n // Doctype\n {\n foreground: C.keyword,\n fontStyle: 'italic',\n scopes: ['meta.tag.sgml.doctype'],\n },\n\n // Markdown\n {\n fontStyle: 'bold',\n scopes: ['markup.bold'],\n },\n {\n fontStyle: 'italic',\n scopes: ['markup.italic'],\n },\n {\n foreground: C.keyword,\n fontStyle: 'bold',\n scopes: ['markup.heading'],\n },\n {\n foreground: C.string,\n scopes: ['markup.raw'],\n },\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: ['markup.quote'],\n },\n {\n foreground: C.variable,\n scopes: ['markup.list'],\n },\n\n // Language-Specific: HTML — tag names/attributes rendered as identifiers\n {\n foreground: C.variable,\n scopes: [\n 'entity.name.tag.html',\n 'tag.html',\n 'entity.other.attribute-name.html',\n 'attribute.name.html',\n ],\n },\n\n // Language-Specific: CSS\n {\n foreground: C.cssSelector,\n scopes: ['entity.name.tag.css'],\n },\n {\n foreground: C.type,\n scopes: ['entity.other.attribute-name.class.css'],\n },\n {\n foreground: C.cssId,\n scopes: ['entity.other.attribute-name.id.css'],\n },\n {\n foreground: C.cssProperty,\n scopes: ['support.type.property-name.css'],\n },\n {\n foreground: C.number,\n scopes: ['support.constant.property-value.css', 'keyword.other.unit.css'],\n },\n\n // Errors / invalid\n {\n foreground: C.invalid,\n scopes: ['invalid', 'invalid.illegal'],\n },\n {\n foreground: C.invalidDep,\n scopes: ['invalid.deprecated'],\n },\n];\n\nexport const palenightTheme: editor.IStandaloneThemeData = {\n base: 'vs-dark',\n inherit: true,\n rules: tokenGroupsToMonacoRules(TOKEN_GROUPS),\n colors: {\n // Editor Background - transparent, let box handle background\n // Falls back to CSS var(--bg-input) in _code.scss\n 'editor.background': '#00000000', // Transparent\n 'editor.foreground': '#bfc7d5',\n\n // Editor Lines - transparent to inherit box background\n 'editor.lineHighlightBackground': '#00000000', // Transparent\n 'editorLineNumber.foreground': '#676E95',\n 'editorLineNumber.activeForeground': '#c084fc',\n\n // Editor Cursor & Selection\n 'editorCursor.foreground': '#c084fc', // Purple cursor for dark theme\n 'editor.selectionBackground': '#717CB450', // Visible selection\n 'editor.inactiveSelectionBackground': '#717CB430',\n 'editor.selectionHighlightBackground': '#717CB420',\n\n // Editor Gutter - transparent to inherit box background\n 'editorGutter.background': '#00000000', // Transparent\n 'editorGutter.modifiedBackground': '#82aaff',\n 'editorGutter.addedBackground': '#c3e88d',\n 'editorGutter.deletedBackground': '#ff5572',\n\n // Editor Widgets\n 'editorWidget.background': '#1e1e2e',\n 'editorWidget.border': '#676E95',\n 'editorSuggestWidget.background': '#1e1e2e',\n 'editorSuggestWidget.border': '#676E95',\n 'editorSuggestWidget.selectedBackground': '#717CB440',\n\n // Sticky Scroll - match box background with subtle border\n 'editorStickyScroll.background': '#292d3e',\n 'editorStickyScroll.border': '#676E9540',\n 'editorStickyScrollHover.background': '#292d3e',\n 'editorStickyScroll.shadow': '#00000000',\n 'editorStickyScrollGutter.background': '#292d3e',\n\n // Hover Widgets - Tooltips and hover information\n 'editorHoverWidget.background': '#1e1e2e',\n 'editorHoverWidget.border': '#676E95',\n 'editorHoverWidget.statusBarBackground': '#676E95',\n\n // Inline Hints - Type hints, parameter hints, inline suggestions\n 'editorInlineHint.background': '#292d3e',\n 'editorInlineHint.foreground': '#676E95',\n\n // Code Lens - Reference counts, test indicators\n 'editorCodeLens.foreground': '#697098',\n\n // Ghost Text - Autocomplete suggestions shown inline\n 'editorGhostText.foreground': '#676E9540',\n\n // Editor Whitespace & Indentation\n 'editorWhitespace.foreground': '#676E9540',\n 'editorIndentGuide.background': '#676E9520',\n 'editorIndentGuide.activeBackground': '#676E95',\n\n // Scrollbar\n 'scrollbar.shadow': '#00000000',\n 'scrollbarSlider.background': '#676E9530',\n 'scrollbarSlider.hoverBackground': '#676E9550',\n 'scrollbarSlider.activeBackground': '#676E9570',\n\n // Bracket Matching\n 'editorBracketMatch.background': '#676E9540',\n 'editorBracketMatch.border': '#676E95',\n\n // Find/Replace\n 'editor.findMatchBackground': '#717CB440',\n 'editor.findMatchHighlightBackground': '#676E9530',\n 'editor.findRangeHighlightBackground': '#676E9520',\n\n // Minimap\n 'minimap.background': '#292d3e',\n 'minimap.selectionHighlight': '#717CB440',\n 'minimap.findMatchHighlight': '#717CB440',\n\n // Overview Ruler\n 'editorOverviewRuler.border': '#676E9520',\n 'editorOverviewRuler.modifiedForeground': '#82aaff',\n 'editorOverviewRuler.addedForeground': '#c3e88d',\n 'editorOverviewRuler.deletedForeground': '#ff5572',\n\n // Peek View\n 'peekView.border': '#676E95',\n 'peekViewEditor.background': '#1e1e2e',\n 'peekViewResult.background': '#1e1e2e',\n 'peekViewTitle.background': '#1e1e2e',\n\n // Diff Editor\n 'diffEditor.insertedTextBackground': '#c3e88d20',\n 'diffEditor.removedTextBackground': '#ff557220',\n },\n};\n\n/**\n * Register the palenight theme with Monaco Editor\n * Call this function before creating any editor instances\n */\nexport function registerPalenightTheme(monaco: typeof import('monaco-editor')) {\n monaco.editor.defineTheme(ELB_THEME_DARK, palenightTheme);\n}\n","/**\n * Lighthouse Theme for Monaco Editor\n *\n * Custom light theme for walkerOS Explorer, designed to complement the Palenight dark theme.\n * Based on VS Code Light+ with adjustments for optimal readability and brand consistency.\n *\n * Color Palette Strategy:\n * - Comments: Muted green (#6A737D) for subtle annotations\n * - Strings: Dark green (#22863A) for clear text distinction\n * - Numbers: Brick red (#D73A49) for numeric emphasis\n * - Functions: Deep blue (#005CC5) for callable identification\n * - Keywords: Purple (#6F42C1) maintaining syntax hierarchy\n * - Variables: Near black (#24292E) for primary code elements\n * - Types/Classes: Dark gold (#B08800) for type definitions\n * - Tags: Red (#D73A49) for HTML/JSX elements\n * - Operators: Teal (#0086B3) for logical operations\n * - Booleans: Red (#D73A49) for literal values\n */\n\nimport type { editor } from 'monaco-editor';\nimport { ELB_THEME_LIGHT } from './names';\nimport { tokenGroupsToMonacoRules, type TokenGroup } from './token-groups';\n\n// Semantic color palette — change a hex here, it flows to every scope that uses it.\nconst C = {\n comment: '6A737D',\n string: '22863A',\n regexp: '032F62',\n number: 'D73A49',\n numericConstant: 'fb923c',\n keyword: '6F42C1',\n operator: '01b5e2', // Brand cyan — `operator` / `operators` tokens only\n operatorKeyword: '0086B3', // Darker teal — `keyword.operator*`\n function: '005CC5',\n type: 'B08800',\n variable: '24292E',\n bool: 'ef4444',\n tag: 'D73A49',\n namespace: '6F42C1',\n url: '005CC5',\n invalid: 'CB2431',\n invalidDep: 'D73A49',\n cssSelector: 'D73A49',\n cssClass: 'B08800',\n cssId: '005CC5',\n cssProperty: '6F42C1',\n cssValue: 'D73A49',\n} as const;\n\n// Token groups pool Monarch token names (Monaco) + TextMate scopes (Shiki).\n// Both engines consume the SAME list — change a group, both pick up.\nconst TOKEN_GROUPS: TokenGroup[] = [\n // Comments\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: [\n 'comment',\n 'comment.block',\n 'comment.line',\n 'comment.html',\n 'comment.line.double-slash',\n 'comment.line.number-sign',\n 'comment.block.documentation',\n 'punctuation.definition.comment',\n ],\n },\n\n // Strings (generic)\n {\n foreground: C.string,\n scopes: [\n 'string',\n 'string.quoted',\n 'string.template',\n 'string.value.json',\n 'string.json',\n 'string.html',\n 'string.css',\n 'string.js',\n 'string.ts',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.triple',\n 'punctuation.definition.string',\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'meta.string',\n 'attribute.value.html',\n ],\n },\n\n // Regex\n {\n foreground: C.regexp,\n scopes: ['string.regexp'],\n },\n\n // Numbers (base)\n {\n foreground: C.number,\n scopes: [\n 'number',\n 'number.hex',\n 'number.binary',\n 'number.octal',\n 'number.float',\n 'constant.numeric.decimal',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'keyword.other.unit',\n ],\n },\n\n // Numeric constants (distinct hex in original theme)\n {\n foreground: C.numericConstant,\n scopes: ['constant.numeric'],\n },\n\n // Keywords — italic\n {\n foreground: C.keyword,\n fontStyle: 'italic',\n scopes: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.import',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'storage.type',\n 'storage.modifier',\n 'keyword.declaration',\n ],\n },\n\n // Keyword \"other\" — same color, upright\n {\n foreground: C.keyword,\n scopes: ['keyword.other'],\n },\n\n // `operator` / `operators` — brand cyan (Monarch tokens)\n {\n foreground: C.operator,\n scopes: ['operator', 'operators'],\n },\n\n // `keyword.operator*` — darker teal\n {\n foreground: C.operatorKeyword,\n scopes: [\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.arithmetic',\n 'keyword.operator.logical',\n 'keyword.operator.comparison',\n 'keyword.operator.type',\n 'keyword.operator.type.ts',\n ],\n },\n\n // Functions\n {\n foreground: C.function,\n scopes: [\n 'function',\n 'identifier.function',\n 'support.function',\n 'entity.name.function',\n 'meta.function-call',\n 'meta.function-call.entity.name.function',\n 'variable.function',\n ],\n },\n\n // Types & classes\n {\n foreground: C.type,\n scopes: [\n 'type',\n 'type.identifier',\n 'entity.name.type',\n 'entity.name.class',\n 'support.type',\n 'support.class',\n 'support.type.primitive.ts',\n 'support.type.primitive.js',\n 'entity.name.type.ts',\n 'entity.name.type.js',\n 'meta.type.annotation',\n 'meta.type.annotation.ts',\n 'entity.other.inherited-class',\n 'storage.type.class',\n 'storage.type.function',\n 'storage.type.interface',\n 'support.type.primitive',\n ],\n },\n\n // Variables / identifiers / property names — near-black\n {\n foreground: C.variable,\n scopes: [\n 'variable',\n 'variable.name',\n 'variable.parameter',\n 'variable.parameter.ts',\n 'variable.parameter.js',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.language',\n 'meta.definition.variable',\n 'identifier',\n 'identifier.ts',\n 'identifier.js',\n // Object keys — JSON, TS, JS\n 'support.type.property-name',\n 'support.type.property-name.json',\n 'string.key.json',\n 'string.name.tag.json',\n 'meta.object-literal.key',\n 'variable.other.property',\n 'variable.other.object.property',\n 'variable.other.constant.property',\n ],\n },\n\n // Constants & built-ins — deep blue\n {\n foreground: C.function,\n scopes: ['constant', 'constant.character', 'support.constant'],\n },\n\n // Booleans / null / language constants\n {\n foreground: C.bool,\n scopes: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'keyword.constant.boolean',\n ],\n },\n\n // Delimiters & punctuation\n {\n foreground: C.variable,\n scopes: [\n 'delimiter',\n 'delimiter.bracket',\n 'delimiter.parenthesis',\n 'delimiter.square',\n 'delimiter.html',\n 'punctuation',\n 'punctuation.separator',\n 'punctuation.definition',\n 'punctuation.terminator',\n 'punctuation.section',\n 'meta.brace',\n 'meta.brace.round',\n 'meta.brace.square',\n 'meta.brace.curly',\n 'meta.tag.html',\n 'punctuation.definition.tag.html',\n ],\n },\n\n // Tags (HTML/XML/JSX)\n {\n foreground: C.tag,\n scopes: [\n 'tag',\n 'meta.tag',\n 'entity.name.tag',\n 'entity.name.tag.tsx',\n 'entity.name.tag.jsx',\n 'punctuation.definition.tag',\n 'punctuation.definition.tag.begin',\n 'punctuation.definition.tag.end',\n ],\n },\n\n // Attribute names — string color (matches prior theme intent)\n {\n foreground: C.string,\n scopes: ['attribute.name', 'entity.other.attribute-name', 'meta.attribute'],\n },\n\n // Namespaces\n {\n foreground: C.namespace,\n scopes: ['namespace', 'entity.name.namespace', 'storage.type.namespace'],\n },\n\n // URLs / links\n {\n foreground: C.url,\n scopes: ['markup.underline.link', 'string.other.link'],\n },\n\n // Doctype\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: ['meta.tag.sgml.doctype'],\n },\n\n // Markdown\n {\n fontStyle: 'bold',\n scopes: ['markup.bold'],\n },\n {\n fontStyle: 'italic',\n scopes: ['markup.italic'],\n },\n {\n foreground: C.keyword,\n fontStyle: 'bold',\n scopes: ['markup.heading'],\n },\n {\n foreground: C.string,\n scopes: ['markup.raw'],\n },\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: ['markup.quote'],\n },\n {\n foreground: C.variable,\n scopes: ['markup.list'],\n },\n\n // Language-Specific: HTML — tag names/attributes rendered as identifiers\n {\n foreground: C.variable,\n scopes: [\n 'entity.name.tag.html',\n 'tag.html',\n 'entity.other.attribute-name.html',\n 'attribute.name.html',\n ],\n },\n\n // Language-Specific: CSS\n {\n foreground: C.cssSelector,\n scopes: ['entity.name.tag.css'],\n },\n {\n foreground: C.cssClass,\n scopes: ['entity.other.attribute-name.class.css'],\n },\n {\n foreground: C.cssId,\n scopes: ['entity.other.attribute-name.id.css'],\n },\n {\n foreground: C.cssProperty,\n scopes: ['support.type.property-name.css'],\n },\n {\n foreground: C.cssValue,\n scopes: ['support.constant.property-value.css', 'keyword.other.unit.css'],\n },\n\n // Errors / invalid\n {\n foreground: C.invalid,\n scopes: ['invalid', 'invalid.illegal'],\n },\n {\n foreground: C.invalidDep,\n scopes: ['invalid.deprecated'],\n },\n];\n\nexport const lighthouseTheme: editor.IStandaloneThemeData = {\n base: 'vs',\n inherit: true,\n rules: tokenGroupsToMonacoRules(TOKEN_GROUPS),\n colors: {\n // Editor Background - transparent, let box handle background\n 'editor.background': '#00000000', // Transparent\n 'editor.foreground': '#24292E',\n\n // Editor Lines - transparent to inherit box background\n 'editor.lineHighlightBackground': '#00000000', // Transparent\n 'editorLineNumber.foreground': '#1B1F2380',\n 'editorLineNumber.activeForeground': '#6F42C1',\n\n // Editor Cursor & Selection\n 'editorCursor.foreground': '#6F42C1', // Purple cursor for light theme\n 'editor.selectionBackground': '#0366D630', // Visible blue selection\n 'editor.inactiveSelectionBackground': '#0366D620',\n 'editor.selectionHighlightBackground': '#0366D615',\n\n // Editor Gutter - transparent to inherit box background\n 'editorGutter.background': '#00000000', // Transparent\n 'editorGutter.modifiedBackground': '#005CC5',\n 'editorGutter.addedBackground': '#28A745',\n 'editorGutter.deletedBackground': '#D73A49',\n\n // Editor Widgets\n 'editorWidget.background': '#F6F8FA',\n 'editorWidget.border': '#E1E4E8',\n 'editorSuggestWidget.background': '#F6F8FA',\n 'editorSuggestWidget.border': '#E1E4E8',\n 'editorSuggestWidget.selectedBackground': '#0366D625',\n\n // Sticky Scroll - match box background with subtle border\n 'editorStickyScroll.background': '#ffffff',\n 'editorStickyScroll.border': '#E1E4E8',\n 'editorStickyScrollHover.background': '#ffffff',\n 'editorStickyScroll.shadow': '#00000000',\n 'editorStickyScrollGutter.background': '#ffffff',\n\n // Hover Widgets - Tooltips and hover information\n 'editorHoverWidget.background': '#F6F8FA',\n 'editorHoverWidget.border': '#E1E4E8',\n 'editorHoverWidget.statusBarBackground': '#E1E4E8',\n\n // Inline Hints - Type hints, parameter hints, inline suggestions\n 'editorInlineHint.background': '#F6F8FA',\n 'editorInlineHint.foreground': '#6A737D',\n\n // Code Lens - Reference counts, test indicators\n 'editorCodeLens.foreground': '#6A737D',\n\n // Ghost Text - Autocomplete suggestions shown inline\n 'editorGhostText.foreground': '#1B1F2350',\n\n // Editor Whitespace & Indentation\n 'editorWhitespace.foreground': '#1B1F2340',\n 'editorIndentGuide.background': '#E1E4E820',\n 'editorIndentGuide.activeBackground': '#E1E4E8',\n\n // Scrollbar\n 'scrollbar.shadow': '#00000000',\n 'scrollbarSlider.background': '#1B1F2330',\n 'scrollbarSlider.hoverBackground': '#1B1F2350',\n 'scrollbarSlider.activeBackground': '#1B1F2370',\n\n // Bracket Matching\n 'editorBracketMatch.background': '#34D05840',\n 'editorBracketMatch.border': '#34D058',\n\n // Find/Replace\n 'editor.findMatchBackground': '#FFDF5D40',\n 'editor.findMatchHighlightBackground': '#FFDF5D30',\n 'editor.findRangeHighlightBackground': '#0366D620',\n\n // Minimap\n 'minimap.background': '#FAFBFC',\n 'minimap.selectionHighlight': '#0366D625',\n 'minimap.findMatchHighlight': '#FFDF5D40',\n\n // Overview Ruler\n 'editorOverviewRuler.border': '#E1E4E820',\n 'editorOverviewRuler.modifiedForeground': '#005CC5',\n 'editorOverviewRuler.addedForeground': '#28A745',\n 'editorOverviewRuler.deletedForeground': '#D73A49',\n\n // Peek View\n 'peekView.border': '#0366D6',\n 'peekViewEditor.background': '#F6F8FA',\n 'peekViewResult.background': '#FAFBFC',\n 'peekViewTitle.background': '#F6F8FA',\n\n // Diff Editor\n 'diffEditor.insertedTextBackground': '#28A74520',\n 'diffEditor.removedTextBackground': '#D73A4920',\n },\n};\n\n/**\n * Register the lighthouse theme with Monaco Editor\n * Call this function before creating any editor instances\n */\nexport function registerLighthouseTheme(\n monaco: typeof import('monaco-editor'),\n) {\n monaco.editor.defineTheme(ELB_THEME_LIGHT, lighthouseTheme);\n}\n","/**\n * Monaco Editor Themes for walkerOS Explorer\n *\n * Custom Monaco themes that integrate seamlessly with the CSS-based theme system.\n * Theme switching is handled via CSS `data-theme` attribute on document root.\n */\n\n// Import registration functions for use in registerAllThemes\nimport { registerPalenightTheme } from './palenight';\nimport { registerLighthouseTheme } from './lighthouse';\n\n// Monaco Editor themes\nexport { palenightTheme, registerPalenightTheme } from './palenight';\nexport { lighthouseTheme, registerLighthouseTheme } from './lighthouse';\n\n// Theme name constants — use these instead of hard-coded string literals\nexport { ELB_THEME_DARK, ELB_THEME_LIGHT } from './names';\nexport type { ElbThemeName } from './names';\n\n// Unified scope → color grouping (drives Monaco + Shiki from one source)\nexport type { TokenGroup } from './token-groups';\n\n// Theme types (for documentation and TypeScript support)\nexport type { ExplorerTheme } from './types';\n\n/**\n * Register all Monaco themes\n * Convenience function for registering both themes at once\n *\n * @example\n * ```typescript\n * import { registerAllThemes } from '@walkeros/explorer';\n * import * as monaco from 'monaco-editor';\n *\n * registerAllThemes(monaco);\n * ```\n */\nexport function registerAllThemes(\n monaco: typeof import('monaco-editor'),\n): void {\n registerPalenightTheme(monaco);\n registerLighthouseTheme(monaco);\n}\n","import type { editor } from 'monaco-editor';\n\n/**\n * Regular expressions to match walkerOS data attributes\n */\nconst DATA_ELB_PATTERNS = [\n /\\bdata-elb(?!-)\\b/g, // data-elb (not followed by hyphen)\n /\\bdata-elbaction\\b/g, // data-elbaction\n /\\bdata-elbactions\\b/g, // data-elbactions\n /\\bdata-elbglobals\\b/g, // data-elbglobals\n /\\bdata-elbcontext\\b/g, // data-elbcontext\n /\\bdata-elblink\\b/g, // data-elblink\n /\\bdata-elb-[\\w-]+\\b/g, // data-elb-* (property attributes)\n];\n\n/**\n * Apply decorations to highlight walkerOS data attributes in Monaco editor\n *\n * This function scans the editor content for data-elb* attributes and\n * applies color highlighting to match the website's Prism.js styling.\n *\n * @param editor - Monaco editor instance\n * @param monaco - Monaco module\n */\nexport function applyDataElbDecorations(\n monacoEditor: editor.IStandaloneCodeEditor,\n monaco: typeof import('monaco-editor'),\n): () => void {\n const decorationIds: string[] = [];\n\n const updateDecorations = () => {\n const model = monacoEditor.getModel();\n if (!model) return;\n\n const content = model.getValue();\n const decorations: editor.IModelDeltaDecoration[] = [];\n\n // Find all matches for each pattern\n DATA_ELB_PATTERNS.forEach((pattern) => {\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const startPos = model.getPositionAt(match.index);\n const endPos = model.getPositionAt(match.index + match[0].length);\n\n decorations.push({\n range: new monaco.Range(\n startPos.lineNumber,\n startPos.column,\n endPos.lineNumber,\n endPos.column,\n ),\n options: {\n inlineClassName: 'elb-data-attribute',\n inlineClassNameAffectsLetterSpacing: true,\n },\n });\n }\n });\n\n // Apply decorations\n const newDecorationIds = monacoEditor.deltaDecorations(\n decorationIds,\n decorations,\n );\n decorationIds.length = 0;\n decorationIds.push(...newDecorationIds);\n };\n\n // Initial decoration\n updateDecorations();\n\n // Update decorations on content change\n const disposable = monacoEditor.onDidChangeModelContent(() => {\n updateDecorations();\n });\n\n // Return cleanup function\n return () => {\n disposable.dispose();\n monacoEditor.deltaDecorations(decorationIds, []);\n };\n}\n\n/**\n * Register CSS styles for data-elb attribute decorations\n * Call this once during app initialization\n */\nexport function registerDataElbStyles() {\n if (typeof document === 'undefined') return;\n\n const styleId = 'elb-monaco-data-attribute-styles';\n if (document.getElementById(styleId)) return;\n\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n .monaco-editor .elb-data-attribute {\n color: var(--color-highlight-primary, #01b5e2) !important;\n }\n `;\n document.head.appendChild(style);\n}\n","import type { editor } from 'monaco-editor';\n\nexport type ReferenceType =\n | 'variable'\n | 'definition'\n | 'secret'\n | 'env'\n | 'store'\n | 'flow'\n | 'contract'\n | 'code';\n\nexport interface WalkerOSReference {\n type: ReferenceType;\n name: string;\n startIndex: number;\n endIndex: number;\n}\n\n// Covers every canonical walkerOS reference form. Aligned with REF_* constants\n// in @walkeros/core, but relaxed here because the decorator scans free-form\n// substrings inside quoted JSON/TS strings rather than whole-string values.\n// Name regex allows trailing dot + optional name/path so that prefix-only\n// typing (e.g. `\"$var.\"`) still lights up for IntelliSense.\nexport const REFERENCE_PATTERNS: Array<{\n type: ReferenceType;\n regex: RegExp;\n className: string;\n}> = [\n { type: 'variable', regex: /\\$var\\.(\\w*)/g, className: 'elb-ref-variable' },\n {\n type: 'definition',\n regex: /\\$def\\.(\\w*(?:\\.[\\w.]*)?)/g,\n className: 'elb-ref-definition',\n },\n { type: 'secret', regex: /\\$secret\\.(\\w*)/g, className: 'elb-ref-secret' },\n {\n type: 'env',\n regex: /\\$env\\.(\\w*)(?::[^\"}\\s]*)?/g,\n className: 'elb-ref-env',\n },\n {\n type: 'contract',\n regex: /\\$contract\\.(\\w*(?:\\.[\\w.]*)?)/g,\n className: 'elb-ref-contract',\n },\n { type: 'store', regex: /\\$store\\.(\\w*)/g, className: 'elb-ref-store' },\n {\n type: 'flow',\n regex: /\\$flow\\.(\\w*(?:\\.[\\w.]*)?)/g,\n className: 'elb-ref-flow',\n },\n { type: 'code', regex: /\\$code:/g, className: 'elb-ref-code' },\n];\n\n/**\n * Find all walkerOS reference patterns in text.\n * Used for both decorations and validation.\n */\nexport function findWalkerOSReferences(text: string): WalkerOSReference[] {\n const references: WalkerOSReference[] = [];\n\n for (const pattern of REFERENCE_PATTERNS) {\n const regex = new RegExp(pattern.regex.source, pattern.regex.flags);\n let match: RegExpExecArray | null;\n while ((match = regex.exec(text)) !== null) {\n references.push({\n type: pattern.type,\n name: pattern.type === 'code' ? '' : match[1] || '',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n\n return references;\n}\n\n/**\n * Apply walkerOS reference decorations to a Monaco editor.\n * Returns a cleanup function.\n */\nexport function applyWalkerOSDecorations(\n editorInstance: editor.IStandaloneCodeEditor,\n): () => void {\n let decorationIds: string[] = [];\n\n function update() {\n const model = editorInstance.getModel();\n if (!model) return;\n\n const text = model.getValue();\n const references = findWalkerOSReferences(text);\n\n const decorations: editor.IModelDeltaDecoration[] = references.map(\n (ref) => {\n const startPos = model.getPositionAt(ref.startIndex);\n const endPos = model.getPositionAt(ref.endIndex);\n const pattern = REFERENCE_PATTERNS.find((p) => p.type === ref.type)!;\n\n return {\n range: {\n startLineNumber: startPos.lineNumber,\n startColumn: startPos.column,\n endLineNumber: endPos.lineNumber,\n endColumn: endPos.column,\n },\n options: { inlineClassName: pattern.className },\n };\n },\n );\n\n decorationIds = editorInstance.deltaDecorations(decorationIds, decorations);\n }\n\n update();\n const disposable = editorInstance.onDidChangeModelContent(() => update());\n\n return () => {\n disposable.dispose();\n editorInstance.deltaDecorations(decorationIds, []);\n };\n}\n\n/**\n * Register CSS styles for walkerOS reference decorations.\n * Call once on app init.\n */\nexport function registerWalkerOSDecorationStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById('walkeros-ref-styles')) return;\n\n const style = document.createElement('style');\n style.id = 'walkeros-ref-styles';\n style.textContent = `\n .monaco-editor .elb-ref-variable { color: #89ddff !important; font-style: italic; }\n .monaco-editor .elb-ref-definition { color: #c3e88d !important; font-style: italic; }\n .monaco-editor .elb-ref-secret { color: #ffcb6b !important; font-style: italic; }\n .monaco-editor .elb-ref-env { color: #ffcb6b !important; font-style: italic; }\n .monaco-editor .elb-ref-contract { color: #c3e88d !important; font-style: italic; }\n .monaco-editor .elb-ref-store { color: #89ddff !important; font-style: italic; }\n .monaco-editor .elb-ref-flow { color: #82aaff !important; font-style: italic; }\n .monaco-editor .elb-ref-code { color: #c084fc !important; }\n `;\n document.head.appendChild(style);\n}\n","import type { languages, editor, IDisposable, Position } from 'monaco-editor';\nimport {\n REF_VAR,\n REF_DEF,\n REF_ENV,\n REF_CONTRACT,\n REF_FLOW,\n REF_STORE,\n REF_SECRET,\n} from '@walkeros/core';\nimport type { IntelliSenseContext } from '../types/intellisense';\nimport {\n getVariableCompletions,\n getDefinitionCompletions,\n getSecretCompletions,\n getStoreCompletions,\n getFlowCompletions,\n getEnvCompletions,\n getPackageCompletions,\n getStepNameCompletions,\n getContractCompletions,\n getMappingPathCompletions,\n type CompletionEntry,\n} from './monaco-walkeros-completions';\nimport { getJsonPathAtOffset } from './monaco-json-path';\nimport { detectMappingContext } from './mapping-context-detector';\nimport {\n detectChainRefContext,\n detectKeyContext,\n} from './monaco-chain-ref-detector';\n\n/**\n * Build an inline global regex from any REF_* source. The shared REF_*\n * constants in @walkeros/core include `^`/`$` anchors for whole-value\n * matches (e.g. REF_STORE). For inline scanning (hover on a token within a\n * line) we need a non-anchored global variant with the same capture groups.\n *\n * For REF_CONTRACT the trailing path is `(.+)` which would greedily eat\n * characters when unanchored, so we bound it to `[\\w.]+` for inline scans.\n */\nfunction inlineGlobal(pattern: RegExp): RegExp {\n const src = pattern.source\n .replace(/^\\^/, '')\n .replace(/\\$$/, '')\n .replace(/\\(\\.\\+\\)\\?$/, '([\\\\w.]+)?');\n return new RegExp(src, 'g');\n}\n\n/**\n * Extract the partial path typed after the `$contract.` prefix at the end\n * of the input. The prefix is derived from REF_CONTRACT.source so this\n * stays in lockstep with the shared reference syntax; the tail uses a\n * UI-friendly looser class because the user may be mid-typing (trailing\n * dot allowed).\n */\nconst CONTRACT_PREFIX = REF_CONTRACT.source\n .replace(/^\\^/, '')\n .split(/\\\\\\./, 1)[0]; // \"\\$contract\"\nconst CONTRACT_PATH_AT_END = new RegExp(\n `${CONTRACT_PREFIX}\\\\.([a-zA-Z0-9_.]*)?$`,\n);\n\nfunction getContractPathAtEnd(text: string): RegExpMatchArray | null {\n return text.match(CONTRACT_PATH_AT_END);\n}\n\n/**\n * Returns true iff the cursor is inside a JSON string literal whose content\n * so far matches `^$contract(.path)?`. This guards the `$contract.` completion\n * branch — runtime only resolves contract refs when the string value starts\n * with `$contract.` at position 0 (see REF_CONTRACT), so inline cases like\n * `\"prefix $contract.foo\"` should NOT offer contract completions.\n */\nexport function isAtContractValueStart(\n model: editor.ITextModel,\n position: Position,\n): boolean {\n const lineContent = model.getLineContent(position.lineNumber);\n const col = position.column - 1;\n const textBefore = lineContent.substring(0, col);\n const lastQuote = textBefore.lastIndexOf('\"');\n if (lastQuote < 0) return false;\n const between = textBefore.substring(lastQuote + 1);\n return /^\\$contract(\\.[a-zA-Z0-9_.]*)?$/.test(between);\n}\n\n// Store context per model path for scoped completions\nconst contextRegistry = new Map<string, IntelliSenseContext>();\nconst disposables: IDisposable[] = [];\nlet registered = false;\n\n/**\n * Update the IntelliSense context for a specific editor model.\n */\nexport function setIntelliSenseContext(\n modelPath: string,\n context: IntelliSenseContext,\n): void {\n contextRegistry.set(modelPath, context);\n}\n\n/**\n * Remove context when editor unmounts.\n */\nexport function removeIntelliSenseContext(modelPath: string): void {\n contextRegistry.delete(modelPath);\n}\n\n/**\n * Register the walkerOS CompletionItemProvider and HoverProvider for JSON.\n * Call once on app initialization. Safe to call multiple times (idempotent).\n */\nexport function registerWalkerOSProviders(\n monaco: typeof import('monaco-editor'),\n): void {\n if (registered) return;\n registered = true;\n\n // CompletionItemProvider\n disposables.push(\n monaco.languages.registerCompletionItemProvider('json', {\n triggerCharacters: ['\"', '.', '$'],\n provideCompletionItems(\n model: editor.ITextModel,\n position: Position,\n ): languages.CompletionList {\n const modelPath = model.uri.toString();\n const context = contextRegistry.get(modelPath);\n if (!context) return { suggestions: [] };\n\n const lineContent = model.getLineContent(position.lineNumber);\n const textBeforeCursor = lineContent.substring(0, position.column - 1);\n const offset = model.getOffsetAt(position);\n const fullText = model.getValue();\n const chainKey = detectChainRefContext(fullText, offset);\n\n const entries: CompletionEntry[] = [];\n\n if (\n textBeforeCursor.includes('$var.') ||\n textBeforeCursor.endsWith('\"$var')\n ) {\n entries.push(...getVariableCompletions(context.variables));\n } else if (\n textBeforeCursor.includes('$def.') ||\n textBeforeCursor.endsWith('\"$def')\n ) {\n entries.push(...getDefinitionCompletions(context.definitions));\n } else if (\n textBeforeCursor.includes('$secret.') ||\n textBeforeCursor.endsWith('\"$secret')\n ) {\n entries.push(...getSecretCompletions(context.secrets));\n } else if (\n textBeforeCursor.includes('$store.') ||\n textBeforeCursor.endsWith('\"$store')\n ) {\n entries.push(...getStoreCompletions(context.stores));\n } else if (\n textBeforeCursor.includes('$flow.') ||\n textBeforeCursor.endsWith('\"$flow')\n ) {\n entries.push(...getFlowCompletions(context.flows));\n } else if (\n textBeforeCursor.includes('$env.') ||\n textBeforeCursor.endsWith('\"$env')\n ) {\n entries.push(...getEnvCompletions(context.envNames));\n } else if (\n (textBeforeCursor.includes('$contract.') ||\n textBeforeCursor.endsWith('\"$contract')) &&\n isAtContractValueStart(model, position)\n ) {\n // Extract the partial path typed so far after the \"$contract.\"\n // prefix. This is a UI extraction helper (looser character class\n // than REF_CONTRACT because the user may be mid-typing), so it\n // captures any word-or-dot sequence at end of the cursor line.\n const match = getContractPathAtEnd(textBeforeCursor);\n const pathStr = match?.[1] || '';\n const segments = pathStr ? pathStr.split('.').filter(Boolean) : [];\n if (pathStr && !pathStr.endsWith('.') && segments.length > 0) {\n segments.pop();\n }\n entries.push(\n ...getContractCompletions(context.contractRaw, segments),\n );\n } else if (detectKeyContext(fullText, offset, 'package')) {\n entries.push(\n ...getPackageCompletions(context.packages, context.platform),\n );\n } else if (chainKey) {\n entries.push(...getStepNameCompletions(context.stepNames, chainKey));\n } else if (\n textBeforeCursor.endsWith('\"$') ||\n textBeforeCursor.endsWith('\"')\n ) {\n entries.push(...getVariableCompletions(context.variables));\n entries.push(...getDefinitionCompletions(context.definitions));\n entries.push(...getSecretCompletions(context.secrets));\n entries.push(...getStoreCompletions(context.stores));\n entries.push(...getFlowCompletions(context.flows));\n entries.push(...getEnvCompletions(context.envNames));\n entries.push(...getContractCompletions(context.contractRaw, []));\n }\n\n // Mapping value path completions (data., globals., user., etc.)\n if (entries.length === 0 && context.contractRaw) {\n const jsonPath = getJsonPathAtOffset(fullText, offset);\n const mappingCtx = detectMappingContext(jsonPath);\n\n if (mappingCtx) {\n const valueMatch = textBeforeCursor.match(/\"([a-z_]*)\\.?$/);\n if (valueMatch) {\n const prefix = valueMatch[1];\n const mappingEntries = getMappingPathCompletions(\n context.contractRaw,\n mappingCtx.entity,\n mappingCtx.action,\n prefix,\n );\n if (mappingEntries.length > 0) {\n entries.push(...mappingEntries);\n }\n }\n }\n }\n\n // Calculate range that covers the full $ref.name token.\n // Monaco's getWordUntilPosition doesn't understand $ or . as word chars,\n // so we scan backwards to find the $ that starts the reference.\n const refStartMatch = textBeforeCursor.match(\n /\\$(?:var|def|secret|env|code|contract|store|flow)[.:]?[\\w.]*$/,\n );\n const mappingPathMatch = !refStartMatch\n ? textBeforeCursor.match(/[a-z_][\\w.]*$/i)\n : null;\n const word = model.getWordUntilPosition(position);\n const startCol = refStartMatch\n ? position.column - refStartMatch[0].length\n : mappingPathMatch\n ? position.column - mappingPathMatch[0].length\n : word.startColumn;\n const range = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: startCol,\n endColumn: position.column,\n };\n\n return {\n suggestions: entries.map((entry) => ({\n label: entry.label,\n insertText: entry.insertText,\n detail: entry.detail,\n documentation: entry.documentation,\n kind: mapCompletionKind(monaco, entry.kind),\n sortText: entry.sortText,\n range,\n })),\n };\n },\n }),\n );\n\n // HoverProvider\n disposables.push(\n monaco.languages.registerHoverProvider('json', {\n provideHover(model, position) {\n const modelPath = model.uri.toString();\n const context = contextRegistry.get(modelPath);\n if (!context) return null;\n\n const lineContent = model.getLineContent(position.lineNumber);\n const col = position.column - 1; // 0-based index into line\n\n // Helper: find a reference match at cursor position\n function matchAtCursor(pattern: RegExp): RegExpExecArray | null {\n const regex = new RegExp(pattern.source, 'g');\n let m: RegExpExecArray | null;\n while ((m = regex.exec(lineContent)) !== null) {\n if (col >= m.index && col <= m.index + m[0].length) return m;\n }\n return null;\n }\n\n // $var.name\n const varMatch = matchAtCursor(inlineGlobal(REF_VAR));\n if (varMatch && context.variables) {\n const name = varMatch[1];\n if (name in context.variables) {\n const value = context.variables[name];\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: varMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: varMatch.index + varMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Variable:** \\`$var.${name}\\`\\n\\n**Value:** \\`${JSON.stringify(value)}\\`\\n\\n*Resolved at runtime via variable interpolation*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown variable** \\`$var.${name}\\`\\n\\nDefined variables: ${Object.keys(context.variables).join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $def.name\n const defMatch = matchAtCursor(inlineGlobal(REF_DEF));\n if (defMatch && context.definitions) {\n const name = defMatch[1];\n if (name in context.definitions) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: defMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: defMatch.index + defMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Definition:** \\`$def.${name}\\`\\n\\n*Injects reusable config fragment at runtime*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown definition** \\`$def.${name}\\`\\n\\nDefined: ${Object.keys(context.definitions).join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $secret.name\n const secretMatch = matchAtCursor(inlineGlobal(REF_SECRET));\n if (secretMatch) {\n const name = secretMatch[1];\n if (context.secrets?.includes(name)) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: secretMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: secretMatch.index + secretMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Secret:** \\`$secret.${name}\\`\\n\\n*Securely injected at runtime. Value not stored in config.*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown secret** \\`$secret.${name}\\`\\n\\nAvailable secrets: ${context.secrets?.join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $store.name\n const storeMatch = matchAtCursor(inlineGlobal(REF_STORE));\n if (storeMatch) {\n const name = storeMatch[1];\n if (context.stores?.includes(name)) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: storeMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: storeMatch.index + storeMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Store:** \\`$store.${name}\\`\\n\\n*Resolved to store instance at runtime.*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown store** \\`$store.${name}\\`\\n\\nAvailable: ${context.stores?.join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $flow.name(.path)?\n const flowMatch = matchAtCursor(inlineGlobal(REF_FLOW));\n if (flowMatch && context.flows) {\n const flowName = flowMatch[1];\n const path = flowMatch[2];\n const known = context.flows.includes(flowName);\n const headline = known\n ? `**Flow reference:** \\`$flow.${flowName}${path ? `.${path}` : ''}\\``\n : `**Unknown flow** \\`$flow.${flowName}\\``;\n const body = known\n ? path\n ? `Resolves to \\`flows.${flowName}.config.${path}\\` at runtime.`\n : `Resolves to the full \\`Flow.Config\\` block of \"${flowName}\" at runtime.`\n : `Available: ${context.flows.join(', ') || 'none'}`;\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: flowMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: flowMatch.index + flowMatch[0].length + 1,\n },\n contents: [{ value: `${headline}\\n\\n${body}` }],\n };\n }\n\n // $env.NAME\n const envMatch = matchAtCursor(inlineGlobal(REF_ENV));\n if (envMatch) {\n const name = envMatch[1];\n if (context.envNames && context.envNames.length > 0) {\n if (context.envNames.includes(name)) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: envMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: envMatch.index + envMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Env var:** \\`$env.${name}\\`\\n\\n*Resolved from process.env at runtime. Append \\`:default\\` for a literal fallback.*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown env var** \\`$env.${name}\\`\\n\\nKnown: ${context.envNames.join(', ') || 'none'}`,\n },\n ],\n };\n }\n // No inventory: generic hint\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: envMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: envMatch.index + envMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Env var:** \\`$env.${name}\\`\\n\\n*Resolved from process.env at runtime.*`,\n },\n ],\n };\n }\n\n // $contract.path\n const contractMatch = matchAtCursor(inlineGlobal(REF_CONTRACT));\n if (contractMatch && context.contractRaw) {\n const fullRef = contractMatch[0];\n const pathStr = fullRef.replace('$contract.', '');\n const segments = pathStr.split('.');\n\n const contractName = segments[0];\n const description =\n segments.length === 1\n ? `**Contract:** \\`${fullRef}\\`\\n\\nNamed contract entry \"${contractName}\".`\n : `**Contract reference:** \\`${fullRef}\\`\\n\\nResolves path \\`${segments.slice(1).join('.')}\\` in contract \"${contractName}\".`;\n\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: contractMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: contractMatch.index + contractMatch[0].length + 1,\n },\n contents: [{ value: description }],\n };\n }\n\n return null;\n },\n }),\n );\n}\n\n/**\n * Dispose all registered providers. Call on app teardown.\n */\nexport function disposeWalkerOSProviders(): void {\n for (const d of disposables) d.dispose();\n disposables.length = 0;\n registered = false;\n contextRegistry.clear();\n}\n\nfunction mapCompletionKind(\n monaco: typeof import('monaco-editor'),\n kind: CompletionEntry['kind'],\n): languages.CompletionItemKind {\n switch (kind) {\n case 'variable':\n return monaco.languages.CompletionItemKind.Variable;\n case 'reference':\n return monaco.languages.CompletionItemKind.Reference;\n case 'secret':\n return monaco.languages.CompletionItemKind.Constant;\n case 'module':\n return monaco.languages.CompletionItemKind.Module;\n case 'property':\n return monaco.languages.CompletionItemKind.Property;\n default:\n return monaco.languages.CompletionItemKind.Text;\n }\n}\n","import type { Flow } from '@walkeros/core';\nimport { resolveContracts } from '@walkeros/core';\n\nexport interface PathCompletion {\n key: string;\n type?: string;\n detail?: string;\n}\n\n// Cache resolved contracts to avoid re-resolving on every keystroke.\nlet cachedRawJson = '';\nlet cachedResolved: Record<string, Flow.ContractRule> = {};\n\nfunction getResolved(raw: Flow.Contract): Record<string, Flow.ContractRule> {\n const json = JSON.stringify(raw);\n if (json !== cachedRawJson) {\n try {\n cachedResolved = resolveContracts(raw);\n cachedRawJson = json;\n } catch {\n return {};\n }\n }\n return cachedResolved;\n}\n\n/**\n * Extract property names and types from a JSON Schema object.\n */\nexport function getSchemaPropertyCompletions(\n schema: Record<string, unknown>,\n): PathCompletion[] {\n const props = schema.properties;\n if (!props || typeof props !== 'object') return [];\n\n return Object.entries(props as Record<string, Record<string, unknown>>).map(\n ([key, value]) => ({\n key,\n type: typeof value?.type === 'string' ? value.type : undefined,\n }),\n );\n}\n\n/**\n * Get available completions at a given dot-path into the resolved contract.\n *\n * Path examples:\n * - [] → contract names (\"default\", \"web\")\n * - [\"web\"] → top-level keys (\"globals\", \"events\", \"tagging\", ...)\n * - [\"web\", \"events\"] → entity names (\"page\", \"product\")\n * - [\"web\", \"events\", \"page\"] → action names (\"view\", \"read\")\n * - [\"web\", \"events\", \"page\", \"view\"] → schema properties (\"title\", \"url\")\n * - [\"web\", \"globals\"] → globals schema properties (\"lang\", \"env\")\n */\nexport function getContractPathCompletions(\n raw: Flow.Contract,\n pathSegments: string[],\n): PathCompletion[] {\n if (!raw || Object.keys(raw).length === 0) return [];\n\n const resolved = getResolved(raw);\n if (Object.keys(resolved).length === 0) return [];\n\n // Level 0: contract names\n if (pathSegments.length === 0) {\n return Object.keys(resolved).map((key) => ({\n key,\n detail: resolved[key].description || 'contract',\n }));\n }\n\n const [contractName, ...rest] = pathSegments;\n const entry = resolved[contractName];\n if (!entry) return [];\n\n // Level 1: top-level keys of a contract entry\n if (rest.length === 0) {\n const keys: PathCompletion[] = [];\n if (entry.tagging !== undefined)\n keys.push({ key: 'tagging', type: 'number' });\n if (entry.description !== undefined)\n keys.push({ key: 'description', type: 'string' });\n for (const section of [\n 'globals',\n 'context',\n 'custom',\n 'user',\n 'consent',\n ] as const) {\n if (entry[section]) keys.push({ key: section, detail: 'schema' });\n }\n if (entry.events) keys.push({ key: 'events', detail: 'entity map' });\n return keys;\n }\n\n // Level 2+: walk into the entry\n const firstKey = rest[0];\n\n // Section schemas (globals, context, custom, user, consent)\n const sectionKeys = ['globals', 'context', 'custom', 'user', 'consent'];\n if (sectionKeys.includes(firstKey)) {\n const schema = entry[firstKey as keyof Flow.ContractRule];\n if (!schema || typeof schema !== 'object') return [];\n if (rest.length === 1) {\n return getSchemaPropertyCompletions(schema as Record<string, unknown>);\n }\n return walkSchemaPath(schema as Record<string, unknown>, rest.slice(1));\n }\n\n // Events path\n if (firstKey === 'events') {\n if (!entry.events) return [];\n\n // [\"events\"] → entity names\n if (rest.length === 1) {\n return Object.keys(entry.events)\n .filter((k) => k !== '*')\n .map((key) => ({ key, detail: 'entity' }));\n }\n\n const entity = rest[1];\n const actions = entry.events[entity];\n if (!actions) return [];\n\n // [\"events\", \"page\"] → action names\n if (rest.length === 2) {\n return Object.keys(actions)\n .filter((k) => k !== '*')\n .map((key) => ({ key, detail: 'action' }));\n }\n\n const action = rest[2];\n const schema = actions[action];\n if (!schema || typeof schema !== 'object') return [];\n\n // [\"events\", \"page\", \"view\"] → schema properties\n if (rest.length === 3) {\n return getSchemaPropertyCompletions(schema as Record<string, unknown>);\n }\n\n // Deeper: walk into nested schema\n return walkSchemaPath(schema as Record<string, unknown>, rest.slice(3));\n }\n\n return [];\n}\n\n/**\n * Walk into nested JSON Schema properties by path segments.\n */\nfunction walkSchemaPath(\n schema: Record<string, unknown>,\n segments: string[],\n): PathCompletion[] {\n let current = schema;\n for (const seg of segments) {\n const props = current.properties as\n | Record<string, Record<string, unknown>>\n | undefined;\n if (!props || !props[seg]) return [];\n current = props[seg];\n }\n return getSchemaPropertyCompletions(current);\n}\n\n/**\n * Clear the resolution cache (useful for testing).\n */\nexport function clearContractCache(): void {\n cachedRawJson = '';\n cachedResolved = {};\n}\n","import type { IntelliSenseContext, PackageInfo } from '../types/intellisense';\nimport { getContractPathCompletions } from './contract-path-walker';\n\nexport interface CompletionEntry {\n label: string;\n insertText: string;\n detail?: string;\n documentation?: string;\n kind: 'variable' | 'reference' | 'secret' | 'module' | 'property';\n sortText?: string;\n}\n\nexport function getVariableCompletions(\n variables: IntelliSenseContext['variables'],\n): CompletionEntry[] {\n if (!variables || Object.keys(variables).length === 0) return [];\n return Object.entries(variables).map(([name, value]) => ({\n label: `$var.${name}`,\n insertText: `$var.${name}`,\n detail: `= ${JSON.stringify(value)}`,\n documentation: `Variable reference. Resolves to \\`${JSON.stringify(value)}\\` at runtime.`,\n kind: 'variable' as const,\n sortText: '0_var_' + name,\n }));\n}\n\nexport function getDefinitionCompletions(\n definitions: IntelliSenseContext['definitions'],\n): CompletionEntry[] {\n if (!definitions || Object.keys(definitions).length === 0) return [];\n return Object.keys(definitions).map((name) => ({\n label: `$def.${name}`,\n insertText: `$def.${name}`,\n detail: '(definition)',\n documentation: `Definition reference. Injects the reusable config fragment \"${name}\" at runtime.`,\n kind: 'reference' as const,\n sortText: '0_def_' + name,\n }));\n}\n\nexport function getSecretCompletions(\n secrets: IntelliSenseContext['secrets'],\n): CompletionEntry[] {\n if (!secrets || secrets.length === 0) return [];\n return secrets.map((name) => ({\n label: `$secret.${name}`,\n insertText: `$secret.${name}`,\n detail: '(secret)',\n documentation:\n 'Secret reference. Value is securely injected at runtime. Never stored in config.',\n kind: 'secret' as const,\n sortText: '0_secret_' + name,\n }));\n}\n\nexport function getStoreCompletions(\n stores: IntelliSenseContext['stores'],\n): CompletionEntry[] {\n if (!stores || stores.length === 0) return [];\n return stores.map((id) => ({\n label: `$store.${id}`,\n insertText: `$store.${id}`,\n detail: '(store)',\n documentation: `Store reference. Injected as store instance at runtime.`,\n kind: 'reference' as const,\n sortText: '0_store_' + id,\n }));\n}\n\nexport function getFlowCompletions(\n flows: IntelliSenseContext['flows'],\n): CompletionEntry[] {\n if (!flows || flows.length === 0) return [];\n return flows.map((name) => ({\n label: `$flow.${name}`,\n insertText: `$flow.${name}`,\n detail: '(flow)',\n documentation: `Cross-flow reference. Resolves to the resolved Flow.Config of \"${name}\" at runtime. Append \\`.url\\`, \\`.settings.<key>\\`, or another path inside that flow's config.`,\n kind: 'reference' as const,\n sortText: '0_flow_' + name,\n }));\n}\n\nexport function getEnvCompletions(\n envNames: IntelliSenseContext['envNames'],\n): CompletionEntry[] {\n if (!envNames || envNames.length === 0) return [];\n return envNames.map((name) => ({\n label: `$env.${name}`,\n insertText: `$env.${name}`,\n detail: '(env var)',\n documentation: `Environment variable. Resolved from process.env at runtime. Add a literal default with $env.${name}:default.`,\n kind: 'variable' as const,\n sortText: '0_env_' + name,\n }));\n}\n\nexport function getPackageCompletions(\n packages: PackageInfo[] | undefined,\n platform: IntelliSenseContext['platform'],\n): CompletionEntry[] {\n if (!packages || packages.length === 0) return [];\n const filtered = platform\n ? packages.filter((p) => p.platform === platform)\n : packages;\n return filtered.map((pkg) => ({\n label: pkg.package,\n insertText: pkg.package,\n detail: `${pkg.type} (${pkg.platform})`,\n documentation: `walkerOS ${pkg.type}: ${pkg.shortName}`,\n kind: 'module' as const,\n sortText: '1_pkg_' + pkg.shortName,\n }));\n}\n\nexport function getStepNameCompletions(\n stepNames: IntelliSenseContext['stepNames'],\n context: 'next' | 'before',\n): CompletionEntry[] {\n if (!stepNames) return [];\n const names = stepNames.transformers || [];\n return names.map((name) => ({\n label: name,\n insertText: name,\n detail: `transformer (${context} chain)`,\n documentation: `Reference to transformer step \"${name}\" in this flow config.`,\n kind: 'reference' as const,\n sortText: '0_step_' + name,\n }));\n}\n\n/** Top-level WalkerOS event fields available in mapping values */\nconst EVENT_ROOT_FIELDS: CompletionEntry[] = [\n {\n label: 'data',\n insertText: 'data',\n detail: '(event data)',\n kind: 'property',\n sortText: '0_event_data',\n },\n {\n label: 'globals',\n insertText: 'globals',\n detail: '(global properties)',\n kind: 'property',\n sortText: '0_event_globals',\n },\n {\n label: 'user',\n insertText: 'user',\n detail: '(user properties)',\n kind: 'property',\n sortText: '0_event_user',\n },\n {\n label: 'context',\n insertText: 'context',\n detail: '(context data)',\n kind: 'property',\n sortText: '0_event_context',\n },\n {\n label: 'custom',\n insertText: 'custom',\n detail: '(custom properties)',\n kind: 'property',\n sortText: '0_event_custom',\n },\n {\n label: 'consent',\n insertText: 'consent',\n detail: '(consent state)',\n kind: 'property',\n sortText: '0_event_consent',\n },\n {\n label: 'nested',\n insertText: 'nested',\n detail: '(nested entities)',\n kind: 'property',\n sortText: '0_event_nested',\n },\n {\n label: 'entity',\n insertText: 'entity',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_entity',\n },\n {\n label: 'action',\n insertText: 'action',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_action',\n },\n {\n label: 'name',\n insertText: 'name',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_name',\n },\n {\n label: 'trigger',\n insertText: 'trigger',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_trigger',\n },\n {\n label: 'timestamp',\n insertText: 'timestamp',\n detail: '(number)',\n kind: 'property',\n sortText: '1_event_timestamp',\n },\n {\n label: 'timing',\n insertText: 'timing',\n detail: '(number)',\n kind: 'property',\n sortText: '1_event_timing',\n },\n {\n label: 'id',\n insertText: 'id',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_id',\n },\n {\n label: 'group',\n insertText: 'group',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_group',\n },\n {\n label: 'count',\n insertText: 'count',\n detail: '(number)',\n kind: 'property',\n sortText: '1_event_count',\n },\n {\n label: 'source',\n insertText: 'source',\n detail: '(source info)',\n kind: 'property',\n sortText: '1_event_source',\n },\n {\n label: 'version',\n insertText: 'version',\n detail: '(version info)',\n kind: 'property',\n sortText: '1_event_version',\n },\n];\n\n/**\n * Get mapping value path completions based on contract schemas.\n *\n * When typing \"data.\" inside a mapping rule for entity \"page\" action \"view\",\n * this returns the properties defined in the contract for page.view.\n */\nexport function getMappingPathCompletions(\n contractRaw: IntelliSenseContext['contractRaw'],\n entity: string,\n action: string,\n prefix: string,\n): CompletionEntry[] {\n if (!prefix) return EVENT_ROOT_FIELDS;\n\n if (!contractRaw || Object.keys(contractRaw).length === 0) return [];\n\n const sectionMap: Record<string, string> = {\n data: 'events',\n globals: 'globals',\n context: 'context',\n custom: 'custom',\n user: 'user',\n consent: 'consent',\n };\n\n const section = sectionMap[prefix];\n if (!section) return [];\n\n const allCompletions: CompletionEntry[] = [];\n const seen = new Set<string>();\n\n for (const contractName of Object.keys(contractRaw)) {\n const pathSegments =\n section === 'events'\n ? [contractName, 'events', entity, action]\n : [contractName, section];\n\n const completions = getContractPathCompletions(\n contractRaw as Record<string, Record<string, unknown>>,\n pathSegments,\n );\n\n for (const c of completions) {\n if (seen.has(c.key)) continue;\n seen.add(c.key);\n allCompletions.push({\n label: `${prefix}.${c.key}`,\n insertText: `${prefix}.${c.key}`,\n detail: c.type ? `(${c.type})` : '(property)',\n documentation: `Event property from contract. Maps to event.${prefix}.${c.key}.`,\n kind: 'property' as const,\n sortText: `0_mapping_${c.key}`,\n });\n }\n }\n\n return allCompletions;\n}\n\nexport function getContractCompletions(\n contractRaw: IntelliSenseContext['contractRaw'],\n pathSegments: string[],\n): CompletionEntry[] {\n if (!contractRaw || Object.keys(contractRaw).length === 0) return [];\n\n const completions = getContractPathCompletions(\n contractRaw as Record<string, Record<string, unknown>>,\n pathSegments,\n );\n\n const prefix =\n pathSegments.length > 0\n ? `$contract.${pathSegments.join('.')}.`\n : '$contract.';\n\n return completions.map((c) => ({\n label: `${prefix}${c.key}`.replace(/\\.$/, ''),\n insertText:\n pathSegments.length === 0\n ? `$contract.${c.key}`\n : `$contract.${pathSegments.join('.')}.${c.key}`,\n detail: c.type ? `(${c.type})` : c.detail ? `(${c.detail})` : '(contract)',\n documentation: `Contract reference. Resolves to the ${c.key} ${c.detail || 'value'} at runtime.`,\n kind: 'property' as const,\n sortText: '0_contract_' + pathSegments.concat(c.key).join('_'),\n }));\n}\n","/**\n * Extract the JSON key path at a given character offset in a JSON string.\n *\n * Uses a simple stack-based parser that tracks object keys as we scan\n * from the start to the offset position.\n *\n * @param json - The full JSON string\n * @param offset - Character offset (0-based) of cursor position\n * @returns Array of key segments from root to cursor\n */\nexport function getJsonPathAtOffset(json: string, offset: number): string[] {\n const path: string[] = [];\n let i = 0;\n let currentKey: string | undefined;\n let inString = false;\n let stringStart = -1;\n let escaped = false;\n\n while (i < json.length && i <= offset) {\n const ch = json[i];\n\n if (escaped) {\n escaped = false;\n i++;\n continue;\n }\n\n if (ch === '\\\\' && inString) {\n escaped = true;\n i++;\n continue;\n }\n\n if (ch === '\"') {\n if (inString) {\n // End of string\n const str = json.substring(stringStart, i);\n inString = false;\n\n // Determine if this string is a key or value by looking ahead for ':'\n let j = i + 1;\n while (j < json.length && /\\s/.test(json[j])) j++;\n if (json[j] === ':') {\n currentKey = str;\n }\n } else {\n // Start of string\n inString = true;\n stringStart = i + 1;\n }\n } else if (!inString) {\n if (ch === '{') {\n if (currentKey !== undefined) {\n path.push(currentKey);\n currentKey = undefined;\n }\n } else if (ch === '}') {\n path.pop();\n }\n }\n\n i++;\n }\n\n // Add the current key if we're at a value position\n if (currentKey !== undefined) {\n path.push(currentKey);\n }\n\n return path;\n}\n","export interface MappingContext {\n entity: string;\n action: string;\n}\n\n/**\n * Detect the entity/action context from a JSON path that includes \"mapping\".\n *\n * The mapping structure in flow.json is:\n * flows.<name>.destinations.<name>.mapping.<entity>.<action>.<...>\n *\n * After the \"mapping\" key, the next two segments are entity and action.\n *\n * @param pathSegments - JSON path segments from root to cursor position\n * @returns Entity and action if inside a mapping rule, null otherwise\n */\nexport function detectMappingContext(\n pathSegments: string[],\n): MappingContext | null {\n const mappingIndex = pathSegments.indexOf('mapping');\n if (mappingIndex === -1) return null;\n\n const entity = pathSegments[mappingIndex + 1];\n const action = pathSegments[mappingIndex + 2];\n\n if (!entity || !action) return null;\n\n return { entity, action };\n}\n","import { getJsonPathAtOffset } from './monaco-json-path';\n\nexport type ChainKey = 'next' | 'before';\n\n/**\n * Detects whether a JSON-path offset lies inside a value of a `next` or `before`\n * chain field. Handles scalar, inline array, multi-line array, and Route[] inner `next`.\n */\nexport function detectChainRefContext(\n fullText: string,\n offset: number,\n): ChainKey | null {\n const path = getJsonPathAtOffset(fullText, offset);\n if (!path || path.length === 0) return null;\n const last = path[path.length - 1];\n const parent = path[path.length - 2];\n if (last === 'next' || last === 'before') return last;\n if (typeof last === 'number' && (parent === 'next' || parent === 'before')) {\n return parent;\n }\n return null;\n}\n\n/**\n * Detects whether the cursor's JSON path ends at the given key — useful for\n * scalar-valued keys like `\"package\"` that need multi-line-value awareness.\n */\nexport function detectKeyContext(\n fullText: string,\n offset: number,\n key: string,\n): boolean {\n const path = getJsonPathAtOffset(fullText, offset);\n if (!path || path.length === 0) return false;\n return path[path.length - 1] === key;\n}\n","import * as prettier from 'prettier/standalone';\nimport prettierBabel from 'prettier/plugins/babel';\nimport prettierEstree from 'prettier/plugins/estree';\nimport prettierTypescript from 'prettier/plugins/typescript';\nimport prettierHtml from 'prettier/plugins/html';\nimport type * as monaco from 'monaco-editor';\n\n/**\n * Register Monaco Editor formatting providers for various languages\n *\n * Uses Prettier for professional-grade code formatting.\n * Registered once when Monaco is initialized.\n *\n * Supported languages:\n * - JavaScript (parser: babel)\n * - TypeScript (parser: typescript)\n * - JSON (native JSON.stringify)\n * - HTML (parser: html)\n * - CSS (parser: css)\n */\nexport function registerFormatters(monacoInstance: typeof monaco): void {\n // JavaScript formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider(\n 'javascript',\n {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'babel',\n plugins: [prettierBabel, prettierEstree],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n },\n );\n\n // TypeScript formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider(\n 'typescript',\n {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'typescript',\n plugins: [prettierTypescript, prettierEstree],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n },\n );\n\n // JSON formatter (use native JSON.stringify for simplicity)\n monacoInstance.languages.registerDocumentFormattingEditProvider('json', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const parsed = JSON.parse(text);\n const formatted = JSON.stringify(parsed, null, options.tabSize);\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n\n // HTML formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider('html', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'html',\n plugins: [prettierHtml],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n htmlWhitespaceSensitivity: 'css',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n\n // CSS formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider('css', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'css',\n plugins: [prettierHtml], // CSS parser is in html plugin\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n}\n","/**\n * Monaco JSON Schema Registry\n *\n * Manages JSON Schema registrations for Monaco's JSON language service.\n * Multiple Code instances can register schemas concurrently — the registry\n * accumulates all schemas and issues a single setDiagnosticsOptions() call.\n *\n * The monaco json namespace is initialized via initMonacoJson() when the\n * Code atom's beforeMount fires. Schemas registered before initialization\n * are queued and flushed once the namespace becomes available.\n */\n\ninterface RegisteredSchema {\n /** Unique schema identifier */\n uri: string;\n /** Glob patterns matching model URIs */\n fileMatch: string[];\n /** JSON Schema Draft 7 object */\n schema: Record<string, unknown>;\n}\n\nconst schemaRegistry = new Map<string, RegisteredSchema>();\n\nlet idCounter = 0;\n\n// Monaco JSON namespace, set via initMonacoJson() from Code atom's beforeMount\nlet _json: typeof import('monaco-editor').json | undefined;\n\n/**\n * Initialize the JSON schema registry with the monaco instance.\n * Called from Code atom's handleBeforeMount where monaco is guaranteed loaded.\n * Flushes any schemas registered before initialization.\n */\nexport function initMonacoJson(monaco: typeof import('monaco-editor')): void {\n if (_json) return;\n _json = monaco.json;\n if (schemaRegistry.size > 0) applySchemas();\n}\n\n/**\n * Reset state (for testing only).\n */\nexport function resetMonacoJson(): void {\n _json = undefined;\n schemaRegistry.clear();\n idCounter = 0;\n}\n\nconst EXTENSION_BY_LANGUAGE: Record<string, string> = {\n typescript: 'ts',\n javascript: 'js',\n typescriptreact: 'tsx',\n javascriptreact: 'jsx',\n json: 'json',\n html: 'html',\n css: 'css',\n markdown: 'md',\n};\n\n/**\n * Generate a unique model path for a Code instance.\n * Extension matches the language so Monaco's TypeScript worker treats `.tsx`\n * files as TSX, `.ts` files as TS, etc. Without this, all snippets live on\n * `.json` paths and TypeScript diagnostics misbehave.\n * Used as the `path` prop for @monaco-editor/react Editor.\n */\nexport function generateModelPath(language = 'json'): string {\n const ext = EXTENSION_BY_LANGUAGE[language] ?? 'txt';\n return `inmemory://walkeros/model-${++idCounter}.${ext}`;\n}\n\n/**\n * Register a JSON schema for a specific model path.\n * Triggers a global setDiagnosticsOptions update.\n */\nexport function registerJsonSchema(\n modelPath: string,\n schema: Record<string, unknown>,\n): void {\n schemaRegistry.set(modelPath, {\n uri: `schema://walkeros/${modelPath}`,\n fileMatch: [modelPath],\n schema,\n });\n applySchemas();\n}\n\n/**\n * Unregister a JSON schema when a Code instance unmounts.\n * Triggers a global setDiagnosticsOptions update.\n */\nexport function unregisterJsonSchema(modelPath: string): void {\n schemaRegistry.delete(modelPath);\n applySchemas();\n}\n\n/**\n * Apply all registered schemas to Monaco's JSON language service.\n */\nfunction applySchemas(): void {\n if (!_json) return;\n _json.jsonDefaults.setDiagnosticsOptions({\n validate: true,\n schemaValidation: 'error',\n schemaRequest: 'ignore',\n enableSchemaRequest: false,\n schemas: Array.from(schemaRegistry.values()),\n });\n}\n\n/**\n * Get count of registered schemas (for testing/debugging).\n */\nexport function getRegisteredSchemaCount(): number {\n return schemaRegistry.size;\n}\n\n/**\n * Clear all schemas (for testing).\n */\nexport function clearAllSchemas(): void {\n schemaRegistry.clear();\n applySchemas();\n}\n","import { useEffect, useState, useRef, useCallback } from 'react';\nimport type { editor } from 'monaco-editor';\n\nexport interface UseMonacoHeightOptions {\n enabled?: boolean;\n minHeight?: number;\n maxHeight?: number;\n defaultHeight?: number;\n onHeightChange?: (height: number) => void;\n}\n\n/**\n * Hook to automatically calculate Monaco Editor height based on content\n *\n * @param enabled - Whether to enable auto-height calculation\n * @param minHeight - Minimum height in pixels (default: 100)\n * @param maxHeight - Maximum height in pixels (default: 800)\n * @param defaultHeight - Default height when not auto-sizing (default: 400)\n *\n * @returns [height, setEditor] - Current height and function to register editor instance\n *\n * @example\n * const [height, setEditor] = useMonacoHeight({ enabled: autoHeight });\n *\n * <Editor\n * height={height}\n * onMount={(editor) => setEditor(editor)}\n * />\n */\nexport function useMonacoHeight({\n enabled = false,\n minHeight = 100,\n maxHeight = 800,\n defaultHeight = 400,\n onHeightChange,\n}: UseMonacoHeightOptions = {}): [\n number,\n (editor: editor.IStandaloneCodeEditor | null) => void,\n] {\n const [height, setHeight] = useState<number>(\n enabled ? minHeight : defaultHeight,\n );\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const previousHeightRef = useRef<number>(enabled ? minHeight : defaultHeight);\n const updateTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const updateHeight = useCallback(() => {\n if (!enabled || !editorRef.current) return;\n\n try {\n const monacoContentHeight = editorRef.current.getContentHeight();\n const boundedMonacoHeight = Math.max(\n minHeight,\n Math.min(maxHeight, monacoContentHeight),\n );\n\n if (boundedMonacoHeight === previousHeightRef.current) {\n return;\n }\n\n previousHeightRef.current = boundedMonacoHeight;\n setHeight(boundedMonacoHeight);\n\n if (onHeightChange) {\n const HEADER_HEIGHT = 36;\n const BORDER = 2;\n const totalBoxHeight = boundedMonacoHeight + HEADER_HEIGHT + BORDER;\n onHeightChange(totalBoxHeight);\n }\n\n // Note: We don't call editor.layout() here because Monaco's\n // automaticLayout option handles layout updates automatically.\n // Calling layout() here would create a feedback loop with\n // onDidContentSizeChange, causing height to grow indefinitely.\n } catch (error) {\n // Silently fail - editor might not be fully initialized\n }\n }, [enabled, minHeight, maxHeight, onHeightChange]);\n\n const setEditor = useCallback(\n (editor: editor.IStandaloneCodeEditor | null) => {\n // Clean up previous timeout if it exists\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n updateTimeoutRef.current = null;\n }\n\n editorRef.current = editor;\n\n if (!enabled || !editor) {\n setHeight(defaultHeight);\n previousHeightRef.current = defaultHeight;\n return;\n }\n\n // Trigger initial height calculation\n setTimeout(() => updateHeight(), 50);\n\n // Listen for content changes with debouncing\n const disposable = editor.onDidContentSizeChange(() => {\n // Clear any pending update\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n // Debounce updates to prevent rapid-fire recalculations\n updateTimeoutRef.current = setTimeout(() => {\n updateHeight();\n updateTimeoutRef.current = null;\n }, 150);\n });\n\n // Store disposable for cleanup\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (editor as any).__heightDisposable = disposable;\n },\n [enabled, defaultHeight, updateHeight],\n );\n\n return [height, setEditor];\n}\n","/**\n * Detect `@monaco-editor/loader`'s cancelation rejection.\n *\n * When a component using `<CodeBox>` unmounts before Monaco's loader promise\n * settles (React strict-mode double-mount, route change, Fast Refresh),\n * `@monaco-editor/loader`'s `makeCancelable` wrapper calls `.cancel()` and\n * the wrapped promise rejects with `{type: 'cancelation', msg: 'operation\n * is manually canceled'}`. The rejection lives inside `@monaco-editor/react`\n * and is not catchable from userland, so consumers suppress it via a\n * `window.addEventListener('unhandledrejection', ...)` filter (canonical\n * workaround, see https://github.com/suren-atoyan/monaco-react/issues/440).\n *\n * webpack-dev-server's runtime overlay hooks rejections independently and\n * wraps the reason in `new Error(reason, { cause: reason })`, so the same\n * identity check must walk `.cause` too.\n *\n * This predicate handles both shapes (raw reason and wrapping Error).\n */\nexport function isMonacoCancellation(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const v = value as {\n type?: string;\n msg?: string;\n cause?: unknown;\n message?: string;\n };\n if (v.type === 'cancelation') return true;\n if (v.cause !== undefined && isMonacoCancellation(v.cause)) return true;\n return false;\n}\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport type { editor } from 'monaco-editor';\nimport { useMonaco } from '@monaco-editor/react';\nimport { Box } from '../atoms/box';\nimport { Code, type CodeProps } from '../atoms/code';\n\n/**\n * Tab with code content for CodeBox\n */\nexport interface CodeBoxTab {\n id: string;\n label: string;\n code: string;\n language?: string; // Optional, defaults to CodeBox's language prop\n}\n\nexport interface CodeBoxProps extends Omit<CodeProps, 'code'> {\n // Single code mode (backward compat)\n code?: string;\n\n // Header (use header OR tabs, not both)\n label?: string; // Shorthand for header\n header?: string; // Box header prop\n showHeader?: boolean;\n\n // Tabs with code content\n tabs?: CodeBoxTab[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n defaultTab?: string;\n\n // Visual options\n showTrafficLights?: boolean;\n\n // Actions\n showCopy?: boolean;\n showFormat?: boolean;\n showSettings?: boolean;\n\n /** Callback when validation issues change. Use to disable Save when errors > 0. */\n onValidationIssues?: (counts: { errors: number; warnings: number }) => void;\n\n // Layout\n footer?: React.ReactNode;\n height?: string | number;\n style?: React.CSSProperties;\n}\n\n/**\n * CodeBox - Monaco editor wrapped in a Box with header and actions\n *\n * Molecule that combines Box + Code atom + toolbar actions.\n * Use this when you need an editor with header, copy, and format buttons.\n * Use Code atom directly when you need an editor without Box wrapper.\n *\n * Height Behavior:\n *\n * Three height modes:\n * 1. Grid context: Equal row heights (250-450px), fills available space\n * 2. Explicit height prop: Fixed height (e.g., height={600} or height=\"50vh\")\n * 3. Auto-height prop: Dynamically sizes to content (min-max boundaries)\n *\n * @example\n * // Grid context - use default (no autoHeight) for equal row heights\n * <Grid columns={3}>\n * <CodeBox code={event} label=\"Event\" showCopy />\n * <CodeBox code={mapping} label=\"Mapping\" showFormat />\n * <CodeBox code={output} label=\"Output\" disabled />\n * </Grid>\n *\n * @example\n * // Standalone with auto-height - fits content, no blank space\n * <CodeBox\n * code={setupCode}\n * label=\"Setup\"\n * autoHeight={{ min: 100, max: 600 }}\n * disabled\n * />\n *\n * @example\n * // Explicit height override\n * <CodeBox\n * code={largeConfig}\n * label=\"Configuration\"\n * height={600}\n * showFormat\n * />\n */\nexport function CodeBox({\n // Code props (single code mode)\n code,\n language = 'javascript',\n onChange,\n disabled = false,\n autoHeight,\n // Header\n label,\n header,\n showHeader = true,\n // Tabs with code content\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n // Visual\n showTrafficLights = false,\n // Actions\n showCopy = true,\n showFormat = false,\n showSettings = false,\n // Validation\n onValidationIssues,\n // Layout\n footer,\n height,\n style,\n className,\n ...codeProps\n}: CodeBoxProps) {\n const { onMount: userOnMount, ...restCodeProps } = codeProps;\n const monaco = useMonaco();\n const [copied, setCopied] = useState(false);\n const [showSettingsPanel, setShowSettingsPanel] = useState(false);\n const [settings, setSettings] = useState({\n lineNumbers: codeProps.lineNumbers ?? false,\n minimap: codeProps.minimap ?? false,\n wordWrap: codeProps.wordWrap ?? false,\n sticky: codeProps.sticky ?? true,\n });\n const settingsRef = useRef<HTMLDivElement>(null);\n type MarkerDetail = {\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n };\n const [markerCounts, setMarkerCounts] = useState({ errors: 0, warnings: 0 });\n const [markerDetails, setMarkerDetails] = useState<MarkerDetail[]>([]);\n const [openMarkerMenu, setOpenMarkerMenu] = useState<\n 'error' | 'warning' | null\n >(null);\n const markerMenuRef = useRef<HTMLDivElement>(null);\n const editorInstanceRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n\n useEffect(() => {\n if (!showSettingsPanel && !openMarkerMenu) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n showSettingsPanel &&\n settingsRef.current &&\n !settingsRef.current.contains(e.target as Node)\n ) {\n setShowSettingsPanel(false);\n }\n if (\n openMarkerMenu &&\n markerMenuRef.current &&\n !markerMenuRef.current.contains(e.target as Node)\n ) {\n setOpenMarkerMenu(null);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showSettingsPanel, openMarkerMenu]);\n\n // Track active tab for copy button (Box handles tab state, we just observe)\n const [currentTabId, setCurrentTabId] = useState(\n controlledActiveTab ?? defaultTab ?? tabs?.[0]?.id ?? '',\n );\n\n // Update internal tracking when controlled prop changes\n const effectiveTabId = controlledActiveTab ?? currentTabId;\n\n // Wrap user's onTabChange to also update our tracking\n const handleTabChange = useCallback(\n (tabId: string) => {\n setCurrentTabId(tabId);\n onTabChange?.(tabId);\n },\n [onTabChange],\n );\n\n // Get current code for copy/format buttons\n const activeTabData = tabs?.find((t) => t.id === effectiveTabId);\n const currentCode = activeTabData?.code ?? code ?? '';\n const currentLanguage = activeTabData?.language ?? language;\n\n // Use label as fallback for header (backward compat)\n const boxHeader = header ?? label ?? 'Code';\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(currentCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard write failed silently\n }\n };\n\n const handleFormat = () => {\n if (!onChange || disabled || currentLanguage !== 'json') return;\n\n try {\n const parsed = JSON.parse(currentCode);\n const formatted = JSON.stringify(parsed, null, 2);\n onChange(formatted);\n } catch (e) {\n // Invalid JSON, do nothing\n }\n };\n\n const handleEditorMount = useCallback(\n (monacoEditor: editor.IStandaloneCodeEditor) => {\n editorInstanceRef.current = monacoEditor;\n userOnMount?.(monacoEditor);\n },\n [userOnMount],\n );\n\n const handleMarkerCounts = useCallback(\n (info: { errors: number; warnings: number; markers: MarkerDetail[] }) => {\n setMarkerCounts({ errors: info.errors, warnings: info.warnings });\n setMarkerDetails(info.markers);\n onValidationIssues?.({ errors: info.errors, warnings: info.warnings });\n },\n [onValidationIssues],\n );\n\n const jumpToLine = useCallback((line: number, column: number) => {\n const ed = editorInstanceRef.current;\n if (!ed) return;\n ed.revealLineInCenter(line);\n ed.setPosition({ lineNumber: line, column });\n ed.focus();\n setOpenMarkerMenu(null);\n }, []);\n\n const settingsProps = {\n lineNumbers: settings.lineNumbers,\n minimap: settings.minimap,\n wordWrap: settings.wordWrap,\n sticky: settings.sticky,\n };\n\n // Build header actions\n const actions = (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {markerCounts.errors > 0 && (\n <div\n ref={openMarkerMenu === 'error' ? markerMenuRef : undefined}\n style={{ position: 'relative' }}\n >\n <button\n className=\"elb-codebox-marker-badge elb-codebox-marker-badge--error\"\n onClick={() =>\n setOpenMarkerMenu(openMarkerMenu === 'error' ? null : 'error')\n }\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n <span>{markerCounts.errors}</span>\n </button>\n {openMarkerMenu === 'error' && (\n <MarkerMenu\n markers={markerDetails.filter((m) => m.severity === 'error')}\n onJump={jumpToLine}\n />\n )}\n </div>\n )}\n {markerCounts.warnings > 0 && (\n <div\n ref={openMarkerMenu === 'warning' ? markerMenuRef : undefined}\n style={{ position: 'relative' }}\n >\n <button\n className=\"elb-codebox-marker-badge elb-codebox-marker-badge--warning\"\n onClick={() =>\n setOpenMarkerMenu(openMarkerMenu === 'warning' ? null : 'warning')\n }\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <circle cx=\"12\" cy=\"17\" r=\".5\" />\n </svg>\n <span>{markerCounts.warnings}</span>\n </button>\n {openMarkerMenu === 'warning' && (\n <MarkerMenu\n markers={markerDetails.filter((m) => m.severity === 'warning')}\n onJump={jumpToLine}\n />\n )}\n </div>\n )}\n {showFormat && !disabled && currentLanguage === 'json' && (\n <button\n className=\"elb-explorer-btn\"\n onClick={handleFormat}\n title=\"Format JSON\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"5\" x2=\"16\" y2=\"5\" />\n <line x1=\"7\" y1=\"10\" x2=\"20\" y2=\"10\" />\n <line x1=\"7\" y1=\"15\" x2=\"18\" y2=\"15\" />\n <line x1=\"3\" y1=\"20\" x2=\"12\" y2=\"20\" />\n </svg>\n </button>\n )}\n {showCopy && (\n <button\n className=\"elb-explorer-btn\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy to clipboard'}\n >\n {copied ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n )}\n {showSettings && (\n <div ref={settingsRef} style={{ position: 'relative' }}>\n <button\n className={`elb-explorer-btn${showSettingsPanel ? ' active' : ''}`}\n onClick={() => setShowSettingsPanel(!showSettingsPanel)}\n title=\"Editor settings\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n {showSettingsPanel && (\n <div className=\"elb-codebox-settings\">\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.lineNumbers}\n onChange={() =>\n setSettings((s) => ({ ...s, lineNumbers: !s.lineNumbers }))\n }\n />\n Line numbers\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.minimap}\n onChange={() =>\n setSettings((s) => ({ ...s, minimap: !s.minimap }))\n }\n />\n Minimap\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.wordWrap}\n onChange={() =>\n setSettings((s) => ({ ...s, wordWrap: !s.wordWrap }))\n }\n />\n Word wrap\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.sticky}\n onChange={() =>\n setSettings((s) => ({ ...s, sticky: !s.sticky }))\n }\n />\n Sticky scroll\n </label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n\n // Auto-height class for content-based sizing (Box handles gridContext)\n const autoHeightClass = autoHeight ? 'elb-box--auto-height' : '';\n const boxClassName = `${autoHeightClass} ${className || ''}`.trim();\n\n // Convert CodeBoxTab[] to BoxTab[] with Code as content (Box handles rendering)\n const boxTabs = tabs?.map((tab) => ({\n id: tab.id,\n label: tab.label,\n content: (\n <Code\n code={tab.code}\n language={tab.language ?? language}\n onChange={onChange}\n disabled={disabled}\n autoHeight={autoHeight}\n onMount={handleEditorMount}\n onMarkerCounts={handleMarkerCounts}\n {...restCodeProps}\n {...settingsProps}\n />\n ),\n }));\n\n return (\n <Box\n header={boxHeader}\n headerActions={actions}\n showHeader={showHeader}\n tabs={boxTabs}\n defaultTab={defaultTab}\n activeTab={controlledActiveTab}\n onTabChange={handleTabChange}\n showTrafficLights={showTrafficLights}\n footer={footer}\n height={height}\n style={style}\n className={boxClassName}\n >\n {/* Only render Code as children when no tabs (single code mode) */}\n {!tabs && (\n <Code\n code={code ?? ''}\n language={language}\n onChange={onChange}\n disabled={disabled}\n autoHeight={autoHeight}\n onMount={handleEditorMount}\n onMarkerCounts={handleMarkerCounts}\n {...restCodeProps}\n {...settingsProps}\n />\n )}\n </Box>\n );\n}\n\nfunction MarkerMenu({\n markers,\n onJump,\n}: {\n markers: Array<{ message: string; line: number; column: number }>;\n onJump: (line: number, column: number) => void;\n}) {\n return (\n <div className=\"elb-codebox-marker-menu\">\n {markers\n .sort((a, b) => a.line - b.line || a.column - b.column)\n .map((m, i) => (\n <button\n key={i}\n className=\"elb-codebox-marker-menu-item\"\n onClick={() => onJump(m.line, m.column)}\n >\n <span className=\"elb-codebox-marker-menu-line\">Ln {m.line}</span>\n <span className=\"elb-codebox-marker-menu-msg\">{m.message}</span>\n </button>\n ))}\n </div>\n );\n}\n","import type { Destination, WalkerOS } from '@walkeros/core';\n\n// Demo destination type with elb function in env\nexport interface DemoEnv extends Destination.BaseEnv {\n elb: (output: string) => void;\n}\n\nexport type DestinationCode = Destination.Instance<\n Destination.Types<unknown, unknown, DemoEnv>\n>;\n\n/**\n * Creates a gtag-style destination for demo purposes.\n * Formats output as: gtag('event', 'event_name', { data })\n */\nexport function createGtagDestination(): DestinationCode {\n return {\n type: 'gtag',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `gtag('event', '${event.name}', ${JSON.stringify(data, null, 2)});`;\n env.elb(formatted);\n },\n };\n}\n\n/**\n * Creates a Facebook Pixel-style destination for demo purposes.\n * Formats output as: fbq('track', 'EventName', { data })\n */\nexport function createFbqDestination(): DestinationCode {\n return {\n type: 'fbq',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `fbq('track', '${event.name}', ${JSON.stringify(data, null, 2)});`;\n env.elb(formatted);\n },\n };\n}\n\n/**\n * Creates a Plausible-style destination for demo purposes.\n * Formats output as: plausible('event_name', { props: { data } })\n */\nexport function createPlausibleDestination(): DestinationCode {\n return {\n type: 'plausible',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `plausible('${event.name}', { props: ${JSON.stringify(data, null, 2)} });`;\n env.elb(formatted);\n },\n };\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport type { WalkerOS } from '@walkeros/core';\nimport { debounce, isString, tryCatchAsync } from '@walkeros/core';\nimport { CodeBox } from '../molecules/code-box';\nimport { Grid } from '../atoms/grid';\nimport { cn } from '../../lib/utils';\nimport { formatCode } from '../../utils/format-code';\n\nexport interface LiveCodeProps {\n input: unknown;\n config?: unknown;\n output?: unknown;\n options?: WalkerOS.AnyObject;\n fn?: (\n input: unknown,\n config: unknown,\n log: (...args: unknown[]) => void,\n options?: WalkerOS.AnyObject,\n ) => Promise<void>;\n fnName?: string;\n labelInput?: string;\n labelConfig?: string;\n labelOutput?: string;\n emptyText?: string;\n disableInput?: boolean;\n disableConfig?: boolean;\n showQuotes?: boolean;\n className?: string;\n language?: string;\n format?: boolean;\n rowHeight?: 'auto' | 'equal' | 'synced' | number;\n /** Language for the Result panel. Defaults to json (the typical output\n * shape). Set to `javascript` when emptyText includes `//` comments. */\n outputLanguage?: string;\n /** Language for the Config panel. Defaults to `json`. Override when the\n * Config panel content is not JSON. */\n configLanguage?: string;\n}\n\nfunction formatValue(value: unknown, options: { quotes?: boolean } = {}) {\n if (value === undefined) return '';\n const str = isString(value) ? value.trim() : JSON.stringify(value, null, 2);\n return options.quotes && isString(value) ? `\"${str}\"` : str;\n}\n\nexport function LiveCode({\n input: initInput,\n config: initConfig,\n output: initOutput = '',\n options,\n fn,\n fnName,\n labelInput = 'Event',\n labelConfig = 'Config',\n labelOutput = 'Result',\n emptyText = 'No event yet.',\n disableInput = false,\n disableConfig = false,\n showQuotes = true,\n className,\n language = 'json',\n format = true,\n rowHeight,\n outputLanguage = 'json',\n configLanguage = 'json',\n}: LiveCodeProps) {\n const [input, setInput] = useState(formatValue(initInput));\n const [config, setConfig] = useState(formatValue(initConfig));\n const [output, setOutput] = useState([formatValue(initOutput)]);\n\n // Format input code on mount\n useEffect(() => {\n if (format && initInput) {\n const rawInput = formatValue(initInput);\n formatCode(rawInput, language).then(setInput);\n }\n }, [initInput, language, format]);\n\n // Format config code on mount\n useEffect(() => {\n if (format && initConfig) {\n const rawConfig = formatValue(initConfig);\n formatCode(rawConfig, language).then(setConfig);\n }\n }, [initConfig, language, format]);\n\n const log = useCallback(\n (...args: unknown[]) => {\n const params = args\n .map((arg) => formatValue(arg, { quotes: showQuotes }))\n .join(', ');\n setOutput([fnName ? `${fnName}(${params})` : params]);\n },\n [fnName, showQuotes],\n );\n\n const updateOutput = useCallback(\n debounce(\n async (inputStr: string, configStr: string, opts: WalkerOS.AnyObject) => {\n if (!fn) return;\n setOutput([]);\n await tryCatchAsync(fn, (e) => {\n setOutput([`Error: ${String(e)}`]);\n })(inputStr, configStr, log, opts);\n },\n 500,\n true,\n ),\n [fn, log],\n );\n\n useEffect(() => {\n updateOutput(input, config, options || {});\n }, [input, config, options, updateOutput]);\n\n return (\n <Grid columns={3} className={className} rowHeight={rowHeight}>\n <CodeBox\n label={labelInput}\n code={input}\n onChange={disableInput ? undefined : setInput}\n disabled={disableInput}\n language={language}\n showFormat={!disableInput && language === 'json'}\n />\n\n {config && (\n <CodeBox\n label={labelConfig}\n code={config}\n onChange={disableConfig ? undefined : setConfig}\n disabled={disableConfig}\n language={configLanguage}\n showFormat={!disableConfig && configLanguage === 'json'}\n />\n )}\n\n <CodeBox\n label={labelOutput}\n code={output[0] || emptyText}\n disabled\n language={outputLanguage}\n />\n </Grid>\n );\n}\n","import * as prettier from 'prettier/standalone';\nimport prettierBabel from 'prettier/plugins/babel';\nimport prettierEstree from 'prettier/plugins/estree';\nimport prettierTypescript from 'prettier/plugins/typescript';\nimport prettierHtml from 'prettier/plugins/html';\n\n/**\n * Format code using Prettier\n *\n * @param code - The code to format\n * @param language - The language (javascript, typescript, json, html, css)\n * @returns Formatted code, or original code if formatting fails\n */\nexport async function formatCode(\n code: string,\n language: string,\n): Promise<string> {\n try {\n let formatted: string;\n\n switch (language) {\n case 'javascript':\n case 'js': {\n // Wrap bare objects in parens so Prettier can parse them\n // Skip one-liners — they're intentionally compact\n const isBareObject =\n code.trimStart().startsWith('{') && code.includes('\\n');\n const input = isBareObject ? `(${code})` : code;\n formatted = await prettier.format(input, {\n parser: 'babel',\n plugins: [prettierBabel, prettierEstree],\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n if (isBareObject) {\n // Unwrap: remove leading \"(\" and trailing \");\\n\"\n formatted = formatted.replace(/^\\(/, '').replace(/\\);?\\s*$/, '');\n }\n break;\n }\n\n case 'typescript':\n case 'ts':\n case 'tsx':\n formatted = await prettier.format(code, {\n parser: 'typescript',\n plugins: [prettierTypescript, prettierEstree],\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n break;\n\n case 'json':\n // Use native JSON for simplicity\n const parsed = JSON.parse(code);\n formatted = JSON.stringify(parsed, null, 2);\n break;\n\n case 'html':\n formatted = await prettier.format(code, {\n parser: 'html',\n plugins: [prettierHtml],\n htmlWhitespaceSensitivity: 'css',\n });\n break;\n\n case 'css':\n case 'scss':\n formatted = await prettier.format(code, {\n parser: 'css',\n plugins: [prettierHtml],\n });\n break;\n\n default:\n // Unsupported language, return original\n return code;\n }\n\n // Trim trailing whitespace/newlines\n return formatted.trim();\n } catch (error) {\n return code;\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport { startFlow } from '@walkeros/collector';\nimport type { DestinationCode } from '../../helpers/destinations';\nimport { CodeBox } from '../molecules/code-box';\n\nexport interface CollectorBoxProps {\n event: string;\n mapping: string;\n destination: DestinationCode;\n label?: string;\n wordWrap?: boolean;\n}\n\n/**\n * CollectorBox - Runs a collector with destination to transform events\n *\n * Takes raw event and mapping config, processes through collector pipeline,\n * and displays the formatted destination output.\n *\n * @example\n * <CollectorBox\n * event={JSON.stringify(event)}\n * mapping={mappingConfig}\n * destination={createGtagDestination()}\n * label=\"Result\"\n * />\n */\nexport function CollectorBox({\n event,\n mapping,\n destination,\n label = 'Result',\n wordWrap = false,\n}: CollectorBoxProps) {\n const [output, setOutput] = useState(\n '// Click elements in the preview to see function call',\n );\n\n useEffect(() => {\n (async () => {\n try {\n // Parse inputs\n const eventObj = JSON.parse(event);\n const mappingObj = JSON.parse(mapping);\n\n // Create collector with destination\n const { collector } = await startFlow({\n destinations: {\n demo: {\n code: destination,\n config: {\n mapping: mappingObj,\n },\n env: {\n elb: setOutput,\n },\n },\n },\n });\n\n // Push event through collector → destination\n await collector.push(eventObj);\n } catch (error) {\n if (error instanceof Error) {\n setOutput(`// Error: ${error.message}`);\n } else {\n setOutput(`// Error: ${String(error)}`);\n }\n }\n })();\n }, [event, mapping, destination]);\n\n return (\n <CodeBox\n code={output}\n language=\"javascript\"\n disabled\n label={label}\n wordWrap={wordWrap}\n />\n );\n}\n","'use client';\n\nimport { createElement, forwardRef, useState, useEffect } from 'react';\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for transformations\n*/\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/**\n* Default values for all optional IconifyIcon properties\n*/\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/**\n* Default values for all properties used in ExtendedIconifyIcon\n*/\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons(provider, prefix) {\n\tlet allIcons = [];\n\tconst providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n\tproviders.forEach((provider$1) => {\n\t\tconst prefixes = typeof provider$1 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider$1] || {});\n\t\tprefixes.forEach((prefix$1) => {\n\t\t\tconst storage = getStorage(provider$1, prefix$1);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider$1 !== \"\" ? \"@\" + provider$1 + \":\" : \"\") + prefix$1 + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\tconst storage = getStorage(provider, prefix);\n\treturn !!addIconSet(storage, data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* IDs usage:\n*\n* id=\"{id}\"\n* xlink:href=\"#{id}\"\n* url(#{id})\n*\n* From SVG animations:\n*\n* begin=\"0;{id}.end\"\n* begin=\"{id}.end\"\n* begin=\"{id}.click\"\n*/\n/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* New random-ish prefix for ids\n*\n* Do not use dash, it cannot be used in SVG 2 animations\n*/\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\n/**\n* Counter for ids, increasing with every replacement\n*/\nlet counter = 0;\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body, prefix = randomPrefix) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\tconst result = {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n\treturn result;\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch$1) {\n\tfetchModule = fetch$1;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tconst host = item;\n\t\t\tmaxHostLength = Math.max(maxHostLength, host.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst icons = params.icons;\n\t\t\tconst iconsList = icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status$1, data) => {\n\t\t\t\tmoduleResponse(item, status$1, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query$1 = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query$1);\n\t\treturn query$1;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\tconst instance = {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n\treturn instance;\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tconst redundancy = initRedundancy(config);\n\t\tconst cachedReundancy = {\n\t\t\tconfig,\n\t\t\tredundancy\n\t\t};\n\t\tredundancyCache[provider] = cachedReundancy;\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst moduleKey = target.resources ? target.resources[0] : \"\";\n\t\t\tconst api = getAPIModule(moduleKey);\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tconst parsed = addIconSet(storage, data);\n\t\tif (!parsed.length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons$1 = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons$1 || !icons$1.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons$1.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons$1, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons$1, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons$1.forEach((name) => {\n\t\t\t\t\tconst response = customIconLoader(name, prefix, provider);\n\t\t\t\t\tparsePossiblyAsyncResponse(response, (data) => {\n\t\t\t\t\t\tconst iconSet = data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null;\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], iconSet);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons$1);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst params = api.prepare(provider, prefix, valid);\n\t\t\tparams.forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons = (icons, callback) => {\n\tconst cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n\tconst sortedIcons = sortIcons(cleanedIcons);\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n* Convert IconifyIconCustomisations to FullIconCustomisations, checking value types\n*/\nfunction mergeCustomisations(defaults, item) {\n\tconst result = { ...defaults };\n\tfor (const key in item) {\n\t\tconst value = item[key];\n\t\tconst valueType = typeof value;\n\t\tif (key in defaultIconSizeCustomisations) {\n\t\t\tif (value === null || value && (valueType === \"string\" || valueType === \"number\")) result[key] = value;\n\t\t} else if (valueType === typeof result[key]) result[key] = key === \"rotate\" ? value % 4 : value;\n\t}\n\treturn result;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tconst value = str.trim();\n\t\tswitch (value) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value$1) {\n\t\twhile (value$1 < 0) value$1 += 4;\n\t\treturn value$1 % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nlet policy;\n/**\n* Attempt to create policy\n*/\nfunction createPolicy() {\n\ttry {\n\t\tpolicy = window.trustedTypes.createPolicy(\"iconify\", { createHTML: (s) => s });\n\t} catch (err) {\n\t\tpolicy = null;\n\t}\n}\n/**\n* Clean up value for innerHTML assignment\n*\n* This code doesn't actually clean up anything.\n* It is intended be used with Iconify icon data, which has already been validated\n*/\nfunction cleanUpInnerHTML(html) {\n\tif (policy === void 0) createPolicy();\n\treturn policy ? policy.createHTML(html) : html;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n WebkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n ...defaultExtendedIconCustomisations,\n inline: true,\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops, \n// Icon name\nname) => {\n // Get default properties\n const defaultProps = props.inline\n ? inlineDefaults\n : defaultExtendedIconCustomisations;\n // Get all customisations\n const customisations = mergeCustomisations(defaultProps, props);\n // Check mode\n const mode = props.mode || 'svg';\n // Create style\n const style = {};\n const customStyle = props.style || {};\n // Create SVG component properties\n const componentProps = {\n ...(mode === 'svg' ? svgDefaults : {}),\n };\n if (name) {\n const iconName = stringToIcon(name, false, true);\n if (iconName) {\n const classNames = ['iconify'];\n const props = [\n 'provider',\n 'prefix',\n ];\n for (const prop of props) {\n if (iconName[prop]) {\n classNames.push('iconify--' + iconName[prop]);\n }\n }\n componentProps.className = classNames.join(' ');\n }\n }\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'children':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n case 'fallback':\n break;\n // Forward ref\n case '_ref':\n componentProps.ref = value;\n break;\n // Merge class names\n case 'className':\n componentProps[key] =\n (componentProps[key] ? componentProps[key] + ' ' : '') +\n value;\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: copy to style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n // Copy missing property if it does not exist in customisations\n default:\n if (defaultProps[key] === void 0) {\n componentProps[key] = value;\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add icon stuff\n componentProps.dangerouslySetInnerHTML = {\n __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact')),\n };\n return createElement('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return createElement('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\nfunction IconComponent(props) {\n const [mounted, setMounted] = useState(!!props.ssr);\n const [abort, setAbort] = useState({});\n // Get initial state\n function getInitialState(mounted) {\n if (mounted) {\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n return {\n name: '',\n data: name,\n };\n }\n const data = getIconData(name);\n if (data) {\n return {\n name,\n data,\n };\n }\n }\n return {\n name: '',\n };\n }\n const [state, setState] = useState(getInitialState(!!props.ssr));\n // Cancel loading\n function cleanup() {\n const callback = abort.callback;\n if (callback) {\n callback();\n setAbort({});\n }\n }\n // Change state if it is different\n function changeState(newState) {\n if (JSON.stringify(state) !== JSON.stringify(newState)) {\n cleanup();\n setState(newState);\n return true;\n }\n }\n // Update state\n function updateState() {\n var _a;\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n changeState({\n name: '',\n data: name,\n });\n return;\n }\n // New icon or got icon data\n const data = getIconData(name);\n if (changeState({\n name,\n data,\n })) {\n if (data === undefined) {\n // Load icon, update state when done\n const callback = loadIcons([name], updateState);\n setAbort({\n callback,\n });\n }\n else if (data) {\n // Icon data is available: trigger onLoad callback if present\n (_a = props.onLoad) === null || _a === void 0 ? void 0 : _a.call(props, name);\n }\n }\n }\n // Mounted state, cleanup for loader\n useEffect(() => {\n setMounted(true);\n return cleanup;\n }, []);\n // Icon changed or component mounted\n useEffect(() => {\n if (mounted) {\n updateState();\n }\n }, [props.icon, mounted]);\n // Render icon\n const { name, data } = state;\n if (!data) {\n return props.children\n ? props.children\n : props.fallback\n ? props.fallback\n : createElement('span', {});\n }\n return render({\n ...defaultIconProps,\n ...data,\n }, props, name);\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = forwardRef((props, ref) => IconComponent({\n ...props,\n _ref: ref,\n}));\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = forwardRef((props, ref) => IconComponent({\n inline: true,\n ...props,\n _ref: ref,\n}));\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nexport const concatArrays = <T, U>(\n array1: readonly T[],\n array2: readonly U[],\n): readonly (T | U)[] => {\n // Pre-allocate for better V8 optimization\n const combinedArray: (T | U)[] = new Array(array1.length + array2.length)\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i]!\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i]!\n }\n return combinedArray\n}\n","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\nimport { concatArrays } from './utils'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[] | null\n classGroupId: AnyClassGroupIds | undefined // Always define optional props for consistent shape\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (\n classGroupId: AnyClassGroupIds,\n validator: ClassValidator,\n): ClassValidatorObject => ({\n classGroupId,\n validator,\n})\n\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (\n nextPart: Map<string, ClassPartObject> = new Map(),\n validators: ClassValidatorObject[] | null = null,\n classGroupId?: AnyClassGroupIds,\n): ClassPartObject => ({\n nextPart,\n validators,\n classGroupId,\n})\n\nconst CLASS_PART_SEPARATOR = '-'\n\nconst EMPTY_CONFLICTS: readonly AnyClassGroupIds[] = []\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className)\n }\n\n const classParts = className.split(CLASS_PART_SEPARATOR)\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0\n return getGroupRecursive(classParts, startIndex, classMap)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ): readonly AnyClassGroupIds[] => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId]\n const baseConflicts = conflictingClassGroups[classGroupId]\n\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts)\n }\n // Only modifier conflicts\n return modifierConflicts\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS\n }\n\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n startIndex: number,\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n const classPathsLength = classParts.length - startIndex\n if (classPathsLength === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[startIndex]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject)\n if (result) return result\n }\n\n const validators = classPartObject.validators\n if (validators === null) {\n return undefined\n }\n\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest =\n startIndex === 0\n ? classParts.join(CLASS_PART_SEPARATOR)\n : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR)\n const validatorsLength = validators.length\n\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i]!\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId\n }\n }\n\n return undefined\n}\n\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = (className: string): AnyClassGroupIds | undefined =>\n className.slice(1, -1).indexOf(':') === -1\n ? undefined\n : (() => {\n const content = className.slice(1, -1)\n const colonIndex = content.indexOf(':')\n const property = content.slice(0, colonIndex)\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined\n })()\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, classGroups } = config\n return processClassGroups(classGroups, theme)\n}\n\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (\n classGroups: Record<AnyClassGroupIds, ClassGroup<AnyThemeGroupIds>>,\n theme: ThemeObject<AnyThemeGroupIds>,\n): ClassPartObject => {\n const classMap = createClassPartObject()\n\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId]!\n processClassesRecursively(group, classMap, classGroupId, theme)\n }\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const len = classGroup.length\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i]!\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme)\n }\n}\n\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (\n classDefinition: ClassGroup<AnyThemeGroupIds>[number],\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId)\n return\n }\n\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme)\n return\n }\n\n processObjectDefinition(\n classDefinition as Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject,\n classGroupId,\n theme,\n )\n}\n\nconst processStringDefinition = (\n classDefinition: string,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n) => {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n}\n\nconst processFunctionDefinition = (\n classDefinition: Function,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme)\n return\n }\n\n if (classPartObject.validators === null) {\n classPartObject.validators = []\n }\n classPartObject.validators.push(\n createClassValidatorObject(classGroupId, classDefinition as ClassValidator),\n )\n}\n\nconst processObjectDefinition = (\n classDefinition: Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const entries = Object.entries(classDefinition)\n const len = entries.length\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i]!\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme)\n }\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string): ClassPartObject => {\n let current = classPartObject\n const parts = path.split(CLASS_PART_SEPARATOR)\n const len = parts.length\n\n for (let i = 0; i < len; i++) {\n const part = parts[i]!\n\n let next = current.nextPart.get(part)\n if (!next) {\n next = createClassPartObject()\n current.nextPart.set(part, next)\n }\n current = next\n }\n\n return current\n}\n\n// Type guard maintains monomorphic check\nconst isThemeGetter = (func: Function): func is ThemeGetter =>\n 'isThemeGetter' in func && (func as ThemeGetter).isThemeGetter === true\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key extends string, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache implementation using plain objects for simplicity\nexport const createLruCache = <Key extends string, Value>(\n maxCacheSize: number,\n): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache: Record<Key, Value> = Object.create(null)\n let previousCache: Record<Key, Value> = Object.create(null)\n\n const update = (key: Key, value: Value) => {\n cache[key] = value\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = Object.create(null)\n }\n }\n\n return {\n get(key) {\n let value = cache[key]\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nconst MODIFIER_SEPARATOR = ':'\nconst EMPTY_MODIFIERS: string[] = []\n\n// Pre-allocated result object shape for consistency\nconst createResultObject = (\n modifiers: string[],\n hasImportantModifier: boolean,\n baseClassName: string,\n maybePostfixModifierPosition?: number,\n isExternal?: boolean,\n): ParsedClassName => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal,\n})\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { prefix, experimentalParseClassName } = config\n\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = (className: string): ParsedClassName => {\n // Use simple array with push for better performance\n const modifiers: string[] = []\n\n let bracketDepth = 0\n let parenDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n const len = className.length\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index]!\n\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + 1\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') bracketDepth++\n else if (currentCharacter === ']') bracketDepth--\n else if (currentCharacter === '(') parenDepth++\n else if (currentCharacter === ')') parenDepth--\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.slice(modifierStart)\n\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier\n let hasImportantModifier = false\n\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1)\n hasImportantModifier = true\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n ) {\n baseClassName = baseClassNameWithImportantModifier.slice(1)\n hasImportantModifier = true\n }\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return createResultObject(\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n )\n }\n\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n className.startsWith(fullPrefix)\n ? parseClassNameOriginal(className.slice(fullPrefix.length))\n : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true)\n }\n\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n }\n\n return parseClassName\n}\n","import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map<string, number>()\n\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index) // High weights for sensitive mods\n })\n\n return (modifiers: readonly string[]): string[] => {\n const result: string[] = []\n let currentSegment: string[] = []\n\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i]!\n\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '['\n const isOrderSensitive = modifierWeights.has(modifier)\n\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n currentSegment = []\n }\n result.push(modifier)\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier)\n }\n }\n\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n }\n\n return result\n }\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = parseClassName(originalClassName)\n\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n let hasPostfixModifier = !!maybePostfixModifierPosition\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n // Fast path: skip sorting for empty or single modifier\n const variantModifier =\n modifiers.length === 0\n ? ''\n : modifiers.length === 1\n ? modifiers[0]!\n : sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport const twJoin = (...classLists: ClassNameValue[]): string => {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < classLists.length) {\n if ((argument = classLists[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string): string => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createTailwindMerge = (\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge => {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall: (classList: string) => string\n\n const initTailwindMerge = (classList: string) => {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n const tailwindMerge = (classList: string) => {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n functionToCall = initTailwindMerge\n\n return (...args: ClassNameValue[]) => functionToCall(twJoin(...args))\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nconst fallbackThemeArr: ThemeObject<DefaultThemeGroupIds>[DefaultThemeGroupIds] = []\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(\n key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>,\n): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || fallbackThemeArr\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryWeight = (value: string) => getIsArbitraryValue(value, isLabelWeight, isAny)\n\nexport const isArbitraryFamilyName = (value: string) =>\n getIsArbitraryValue(value, isLabelFamilyName, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n getIsArbitraryVariable(value, isLabelShadow, true)\n\nexport const isArbitraryVariableWeight = (value: string) =>\n getIsArbitraryVariable(value, isLabelWeight, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n value: string,\n testLabel: (label: string) => boolean,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst getIsArbitraryVariable = (\n value: string,\n testLabel: (label: string) => boolean,\n shouldMatchNoLabel = false,\n) => {\n const result = arbitraryVariableRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n return shouldMatchNoLabel\n }\n\n return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelWeight = (label: string) => label === 'number' || label === 'weight'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n\n const themeColor = fromTheme('color')\n const themeFont = fromTheme('font')\n const themeText = fromTheme('text')\n const themeFontWeight = fromTheme('font-weight')\n const themeTracking = fromTheme('tracking')\n const themeLeading = fromTheme('leading')\n const themeBreakpoint = fromTheme('breakpoint')\n const themeContainer = fromTheme('container')\n const themeSpacing = fromTheme('spacing')\n const themeRadius = fromTheme('radius')\n const themeShadow = fromTheme('shadow')\n const themeInsetShadow = fromTheme('inset-shadow')\n const themeTextShadow = fromTheme('text-shadow')\n const themeDropShadow = fromTheme('drop-shadow')\n const themeBlur = fromTheme('blur')\n const themePerspective = fromTheme('perspective')\n const themeAspect = fromTheme('aspect')\n const themeEase = fromTheme('ease')\n const themeAnimate = fromTheme('animate')\n\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n\n const scaleBreak = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const scalePosition = () =>\n [\n 'center',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top',\n 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top',\n 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom',\n 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom',\n ] as const\n const scalePositionWithArbitrary = () =>\n [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n const scaleUnambiguousSpacing = () =>\n [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n const scaleGridTemplateColsRows = () =>\n [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridColRowStartAndEnd = () =>\n [\n 'auto',\n { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleGridColRowStartOrEnd = () =>\n [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridAutoColsRows = () =>\n ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n const scaleAlignPrimaryAxis = () =>\n [\n 'start',\n 'end',\n 'center',\n 'between',\n 'around',\n 'evenly',\n 'stretch',\n 'baseline',\n 'center-safe',\n 'end-safe',\n ] as const\n const scaleAlignSecondaryAxis = () =>\n ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n const scaleSizing = () =>\n [\n isFraction,\n 'auto',\n 'full',\n 'dvw',\n 'dvh',\n 'lvw',\n 'lvh',\n 'svw',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingInline = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'dvw',\n 'lvw',\n 'svw',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingBlock = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'lh',\n 'dvh',\n 'lvh',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n const scaleBgPosition = () =>\n [\n ...scalePosition(),\n isArbitraryVariablePosition,\n isArbitraryPosition,\n { position: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n const scaleBgSize = () =>\n [\n 'auto',\n 'cover',\n 'contain',\n isArbitraryVariableSize,\n isArbitrarySize,\n { size: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleGradientStopPosition = () =>\n [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleRadius = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n 'full',\n themeRadius,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleBorderWidth = () =>\n ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n const scaleBlendMode = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const scaleMaskImagePosition = () =>\n [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n const scaleBlur = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeBlur,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n ],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [\n {\n aspect: [\n 'auto',\n 'square',\n isFraction,\n isArbitraryValue,\n isArbitraryVariable,\n themeAspect,\n ],\n },\n ],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [\n { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n ],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': scaleBreak() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': scaleBreak() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: scalePositionWithArbitrary() }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: scaleOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: scaleOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: scaleInset() }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': scaleInset() }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': scaleInset() }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [\n {\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset(),\n },\n ],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [\n {\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset(),\n },\n ],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{ 'inset-bs': scaleInset() }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{ 'inset-be': scaleInset() }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: scaleInset() }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: scaleInset() }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: scaleInset() }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: scaleInset() }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [\n {\n basis: [\n isFraction,\n 'full',\n 'auto',\n themeContainer,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [\n {\n order: [\n isInteger,\n 'first',\n 'last',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: scaleUnambiguousSpacing() }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [\n { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n ],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: scaleUnambiguousSpacing() }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: scaleUnambiguousSpacing() }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{ pbs: scaleUnambiguousSpacing() }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{ pbe: scaleUnambiguousSpacing() }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: scaleUnambiguousSpacing() }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: scaleUnambiguousSpacing() }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: scaleUnambiguousSpacing() }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: scaleUnambiguousSpacing() }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: scaleMargin() }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: scaleMargin() }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: scaleMargin() }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: scaleMargin() }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: scaleMargin() }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{ mbs: scaleMargin() }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{ mbe: scaleMargin() }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: scaleMargin() }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: scaleMargin() }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: scaleMargin() }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: scaleMargin() }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n\n // --------------\n // --- Sizing ---\n // --------------\n\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{ size: scaleSizing() }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{ inline: ['auto', ...scaleSizingInline()] }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{ 'min-inline': ['auto', ...scaleSizingInline()] }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{ 'max-inline': ['none', ...scaleSizingInline()] }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{ block: ['auto', ...scaleSizingBlock()] }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{ 'min-block': ['auto', ...scaleSizingBlock()] }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{ 'max-block': ['none', ...scaleSizingBlock()] }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [\n {\n 'min-w': [\n themeContainer,\n 'screen',\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none',\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n themeContainer,\n 'screen',\n 'none',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n { screen: [themeBreakpoint] },\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n // ------------------\n // --- Typography ---\n // ------------------\n\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [\n { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [\n {\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight],\n },\n ],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [\n {\n 'font-stretch': [\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n isPercent,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [\n { font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont] },\n ],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{ 'font-features': [isArbitraryValue] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [\n { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n ],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [\n { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: scaleColor() }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: scaleColor() }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n {\n decoration: [\n isNumber,\n 'from-font',\n 'auto',\n isArbitraryVariable,\n isArbitraryLength,\n ],\n },\n ],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: scaleColor() }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [\n { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: scaleUnambiguousSpacing() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // -------------------\n // --- Backgrounds ---\n // -------------------\n\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: scaleBgPosition() }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: scaleBgRepeat() }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: scaleBgSize() }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n {\n linear: [\n { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n },\n isArbitraryVariableImage,\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: scaleColor() }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: scaleColor() }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: scaleColor() }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: scaleColor() }],\n\n // ---------------\n // --- Borders ---\n // ---------------\n\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: scaleRadius() }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': scaleRadius() }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': scaleRadius() }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': scaleRadius() }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': scaleRadius() }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': scaleRadius() }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': scaleRadius() }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': scaleRadius() }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': scaleRadius() }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': scaleRadius() }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: scaleBorderWidth() }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{ 'border-bs': scaleBorderWidth() }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{ 'border-be': scaleBorderWidth() }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: scaleColor() }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': scaleColor() }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': scaleColor() }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': scaleColor() }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': scaleColor() }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{ 'border-bs': scaleColor() }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{ 'border-be': scaleColor() }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': scaleColor() }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': scaleColor() }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': scaleColor() }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': scaleColor() }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: scaleColor() }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [\n { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [\n { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: scaleColor() }],\n\n // ---------------\n // --- Effects ---\n // ---------------\n\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [\n {\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{ shadow: scaleColor() }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [\n {\n 'inset-shadow': [\n 'none',\n themeInsetShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{ ring: scaleBorderWidth() }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{ ring: scaleColor() }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [\n {\n 'text-shadow': [\n 'none',\n themeTextShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [\n { 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n 'mask-no-clip',\n ],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n 'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n 'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n 'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n 'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n 'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n 'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n 'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n 'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n 'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n 'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n 'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n 'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n 'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n 'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n 'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n 'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n 'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n 'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n 'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n 'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n 'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n 'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n 'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n 'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n 'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n 'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n 'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n 'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n 'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n 'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n 'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n 'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n 'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n 'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n 'mask-image-radial-size': [\n { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n ],\n 'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n 'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n 'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n 'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n 'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n 'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [\n { 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n ],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{ mask: scaleBgPosition() }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{ mask: scaleBgRepeat() }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{ mask: scaleBgSize() }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // ---------------\n // --- Filters ---\n // ---------------\n\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [\n {\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: scaleBlur() }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [\n {\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeDropShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [\n {\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [\n { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [\n { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [\n { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [\n { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [\n { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [\n { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [\n { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [\n { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n\n // --------------\n // --- Tables ---\n // --------------\n\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n '',\n 'all',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [\n { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------\n // --- Transforms ---\n // ------------------\n\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{ backface: ['hidden', 'visible'] }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [\n { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: scaleRotate() }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{ 'rotate-x': scaleRotate() }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{ 'rotate-y': scaleRotate() }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{ 'rotate-z': scaleRotate() }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: scaleScale() }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': scaleScale() }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': scaleScale() }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{ 'scale-z': scaleScale() }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{ skew: scaleSkew() }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': scaleSkew() }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': scaleSkew() }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [\n { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n ],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{ origin: scalePositionWithArbitrary() }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{ transform: ['3d', 'flat'] }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{ translate: scaleTranslate() }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': scaleTranslate() }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': scaleTranslate() }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{ 'translate-z': scaleTranslate() }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: scaleColor() }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: scaleColor() }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [\n { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n ],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', '', 'y', 'x'] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{ 'scroll-mbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{ 'scroll-mbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{ 'scroll-pbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{ 'scroll-pbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n {\n 'will-change': [\n 'auto',\n 'scroll',\n 'contents',\n 'transform',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n\n // -----------\n // --- SVG ---\n // -----------\n\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: ['none', ...scaleColor()] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [\n {\n stroke: [\n isNumber,\n isArbitraryVariableLength,\n isArbitraryLength,\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: [\n 'inset-x',\n 'inset-y',\n 'inset-bs',\n 'inset-be',\n 'start',\n 'end',\n 'top',\n 'right',\n 'bottom',\n 'left',\n ],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-x',\n 'border-w-y',\n 'border-w-s',\n 'border-w-e',\n 'border-w-bs',\n 'border-w-be',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-x',\n 'border-color-y',\n 'border-color-s',\n 'border-color-e',\n 'border-color-bs',\n 'border-color-be',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mbs',\n 'scroll-mbe',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pbs',\n 'scroll-pbe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n orderSensitiveModifiers: [\n '*',\n '**',\n 'after',\n 'backdrop',\n 'before',\n 'details-content',\n 'file',\n 'first-letter',\n 'first-line',\n 'marker',\n 'placeholder',\n 'selection',\n ],\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { AnyConfig, ConfigExtension, NoInfer } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: AnyConfig,\n {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n overrideConfigProperties(baseConfig.theme, override.theme)\n overrideConfigProperties(baseConfig.classGroups, override.classGroups)\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)\n overrideConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n override.conflictingClassGroupModifiers,\n )\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)\n\n mergeConfigProperties(baseConfig.theme, extend.theme)\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups)\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)\n mergeConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n extend.conflictingClassGroupModifiers,\n )\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key)\n }\n }\n}\n\nconst mergeArrayProperties = <Key extends string>(\n baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n key: Key,\n) => {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge class names with Tailwind CSS classes\n * Uses clsx for conditional classes and tailwind-merge to handle conflicts\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from 'react';\nimport type { ReactNode } from 'react';\nimport { Icon } from '@iconify/react';\nimport { cn } from '../../../lib/utils';\n\nexport interface FlowItem {\n icon: ReactNode;\n label: string;\n link?: string;\n}\n\nexport interface FlowSection {\n title: string;\n items: FlowItem[];\n moreLink?: string;\n}\n\nexport interface FlowColumn {\n title: string;\n sections: FlowSection[];\n}\n\nexport interface ArchitectureFlowProps {\n sources: FlowColumn;\n center: ReactNode;\n centerTitle?: string;\n destinations: FlowColumn;\n arrowRight?: ReactNode;\n arrowDown?: ReactNode;\n className?: string;\n}\n\nexport function ArchitectureFlow({\n sources,\n center,\n centerTitle,\n destinations,\n arrowRight = <Icon icon=\"mdi:arrow-right\" />,\n arrowDown = <Icon icon=\"mdi:arrow-down\" />,\n className,\n}: ArchitectureFlowProps) {\n return (\n <div className={cn('elb-architecture-flow', className)}>\n <div className=\"elb-architecture-flow__grid\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {sources.title}\n </span>\n <div className=\"elb-architecture-flow__spacer\" />\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {centerTitle}\n </span>\n <div className=\"elb-architecture-flow__spacer\" />\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {destinations.title}\n </span>\n\n <div className=\"elb-architecture-flow__column\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {sources.title}\n </span>\n <div className=\"elb-architecture-flow__sections\">\n {sources.sections.map((section) => (\n <FlowSectionBox key={section.title} section={section} />\n ))}\n </div>\n </div>\n\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--desktop\">\n {arrowRight}\n </div>\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--mobile\">\n {arrowDown}\n </div>\n\n <div className=\"elb-architecture-flow__center\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {centerTitle}\n </span>\n <div className=\"elb-architecture-flow__center-content\">{center}</div>\n </div>\n\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--desktop\">\n {arrowRight}\n </div>\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--mobile\">\n {arrowDown}\n </div>\n\n <div className=\"elb-architecture-flow__column\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {destinations.title}\n </span>\n <div className=\"elb-architecture-flow__sections\">\n {destinations.sections.map((section) => (\n <FlowSectionBox key={section.title} section={section} />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction FlowSectionBox({ section }: { section: FlowSection }) {\n return (\n <div className=\"elb-architecture-flow__section\">\n <span className=\"elb-architecture-flow__section-title\">\n {section.title}\n </span>\n <div className=\"elb-architecture-flow__items\">\n {section.items.map((item) => {\n const content = (\n <>\n <span className=\"elb-architecture-flow__item-icon\">\n {item.icon}\n </span>\n <span className=\"elb-architecture-flow__item-label\">\n {item.label}\n </span>\n </>\n );\n return item.link ? (\n <a\n key={item.label}\n href={item.link}\n className=\"elb-architecture-flow__item elb-architecture-flow__item--link\"\n >\n {content}\n </a>\n ) : (\n <div key={item.label} className=\"elb-architecture-flow__item\">\n {content}\n </div>\n );\n })}\n {section.moreLink ? (\n <a\n href={section.moreLink}\n className=\"elb-architecture-flow__more elb-architecture-flow__more--link\"\n >\n and more…\n </a>\n ) : (\n <span className=\"elb-architecture-flow__more\">and more…</span>\n )}\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Box } from '../atoms/box';\nimport type { editor } from 'monaco-editor';\nimport { CodeDiff, type CodeDiffSummary } from '../atoms/code-diff';\n\nconst ICON_PROPS = {\n width: 14,\n height: 14,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n};\n\nexport interface CodeDiffBoxProps {\n original: string;\n modified: string;\n language?: string;\n\n // Header (mirrors CodeBox)\n label?: string;\n header?: string;\n showHeader?: boolean;\n showTrafficLights?: boolean;\n\n // Actions\n /** Show copy-modified button in header. Default true. */\n showCopy?: boolean;\n /** Show split|inline toggle in header. Default true. */\n showViewToggle?: boolean;\n /** Show +N/-N/~N summary badges in header. Default false. */\n showSummary?: boolean;\n /** Initial view mode. Default 'split'. */\n defaultView?: 'split' | 'inline';\n\n // Layout (mirrors CodeBox)\n footer?: React.ReactNode;\n height?: string | number;\n style?: React.CSSProperties;\n className?: string;\n\n // Escape hatches\n onMount?: (diffEditor: editor.IStandaloneDiffEditor) => void;\n}\n\nfunction SummaryBadges({ summary }: { summary: CodeDiffSummary }) {\n return (\n <div className=\"flex items-center gap-1.5 text-xs font-medium tabular-nums\">\n <span className=\"text-green-600 dark:text-green-400\">\n +{summary.added}\n </span>\n <span className=\"text-red-600 dark:text-red-400\">-{summary.deleted}</span>\n <span className=\"text-zinc-500 dark:text-zinc-400\">\n ~{summary.modified}\n </span>\n </div>\n );\n}\n\nfunction ViewToggle({\n view,\n onChange,\n}: {\n view: 'split' | 'inline';\n onChange: (v: 'split' | 'inline') => void;\n}) {\n const base =\n 'px-2 py-0.5 text-xs font-medium rounded transition-colors cursor-pointer select-none';\n const active =\n 'bg-zinc-200 text-zinc-900 dark:bg-zinc-700 dark:text-zinc-100';\n const inactive =\n 'text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200';\n return (\n <div\n className=\"flex rounded bg-zinc-100 p-0.5 dark:bg-zinc-800\"\n aria-label=\"Diff view mode\"\n >\n <button\n type=\"button\"\n className={`${base} ${view === 'split' ? active : inactive}`}\n aria-pressed={view === 'split'}\n onClick={() => onChange('split')}\n >\n Split\n </button>\n <button\n type=\"button\"\n className={`${base} ${view === 'inline' ? active : inactive}`}\n aria-pressed={view === 'inline'}\n onClick={() => onChange('inline')}\n >\n Inline\n </button>\n </div>\n );\n}\n\nfunction CopyButton({ value }: { value: string }) {\n const [status, setStatus] = useState<'idle' | 'copied' | 'failed'>('idle');\n const timerRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const onClick = async () => {\n try {\n await navigator.clipboard.writeText(value);\n setStatus('copied');\n } catch {\n setStatus('failed');\n }\n if (timerRef.current !== null) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setStatus('idle'), 2000);\n };\n\n const label =\n status === 'copied'\n ? 'Copied!'\n : status === 'failed'\n ? 'Copy failed'\n : 'Copy modified to clipboard';\n\n return (\n <button\n type=\"button\"\n className=\"elb-explorer-btn\"\n onClick={onClick}\n title={label}\n aria-label=\"Copy modified content\"\n >\n <span className=\"sr-only\" aria-live=\"polite\">\n {status !== 'idle' ? label : ''}\n </span>\n {status === 'copied' ? (\n <svg {...ICON_PROPS}>\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg {...ICON_PROPS}>\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n );\n}\n\n/**\n * CodeDiffBox, read-only diff viewer with Box chrome.\n *\n * Generic: diffs any Monaco-supported language. Mirrors CodeBox's API where\n * overlapping. Use for flow.json diffs, inline TypeScript code diffs, or any\n * two strings of source.\n */\nexport function CodeDiffBox({\n original,\n modified,\n language = 'json',\n label,\n header,\n showHeader = true,\n showTrafficLights = false,\n showCopy = true,\n showViewToggle = true,\n showSummary = false,\n defaultView = 'split',\n footer,\n height,\n style,\n className,\n onMount,\n}: CodeDiffBoxProps) {\n const [view, setView] = useState<'split' | 'inline'>(defaultView);\n const [summary, setSummary] = useState<CodeDiffSummary>({\n added: 0,\n deleted: 0,\n modified: 0,\n });\n\n const summaryCb = useCallback((s: CodeDiffSummary) => setSummary(s), []);\n const boxHeader = header ?? label ?? 'Diff';\n\n const actions = (\n <div className=\"flex items-center gap-2\">\n {showSummary && <SummaryBadges summary={summary} />}\n {showViewToggle && <ViewToggle view={view} onChange={setView} />}\n {showCopy && <CopyButton value={modified} />}\n </div>\n );\n\n return (\n <Box\n header={boxHeader}\n headerActions={actions}\n showHeader={showHeader}\n showTrafficLights={showTrafficLights}\n footer={footer}\n height={height}\n style={style}\n className={className}\n >\n <CodeDiff\n original={original}\n modified={modified}\n language={language}\n renderSideBySide={view === 'split'}\n onSummaryChange={summaryCb}\n onMount={onMount}\n />\n </Box>\n );\n}\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n DiffEditor,\n type DiffOnMount,\n type Monaco,\n} from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport {\n ELB_THEME_DARK,\n ELB_THEME_LIGHT,\n registerAllThemes,\n} from '../../themes';\nimport { applyWalkerOSDecorations } from '../../utils/monaco-walkeros-decorations';\n\nexport interface CodeDiffSummary {\n /** Count of hunks that exist only in modified (pure additions). */\n added: number;\n /** Count of hunks that exist only in original (pure deletions). */\n deleted: number;\n /** Count of hunks where both sides have differing content. */\n modified: number;\n}\n\nexport interface CodeDiffProps {\n original: string;\n modified: string;\n /** Any Monaco language id. Default 'json'. */\n language?: string;\n /** Height value passed to DiffEditor. Defaults to '100%'. Parent must size. */\n height?: string | number;\n /** Split view on (default) or inline. Toggle by updating the prop. */\n renderSideBySide?: boolean;\n /** Fires on every Monaco diff update (debounced by Monaco). */\n onSummaryChange?: (summary: CodeDiffSummary) => void;\n /** Escape hatch. */\n beforeMount?: (monaco: Monaco) => void;\n /** Escape hatch — receives the diff editor instance. */\n onMount?: (diffEditor: editor.IStandaloneDiffEditor) => void;\n className?: string;\n}\n\nconst DIFF_OPTIONS: editor.IStandaloneDiffEditorConstructionOptions = {\n readOnly: true,\n domReadOnly: true,\n originalEditable: false,\n renderIndicators: true,\n renderMarginRevertIcon: false,\n renderGutterMenu: false,\n ignoreTrimWhitespace: false,\n diffAlgorithm: 'advanced',\n experimental: { showMoves: true, useTrueInlineView: true },\n hideUnchangedRegions: {\n enabled: true,\n revealLineCount: 20,\n minimumLineCount: 3,\n contextLineCount: 3,\n },\n useInlineViewWhenSpaceIsLimited: true,\n renderSideBySideInlineBreakpoint: 720,\n fixedOverflowWidgets: true,\n automaticLayout: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: 'on',\n lineNumbersMinChars: 3,\n glyphMargin: false,\n lineDecorationsWidth: 8,\n fontSize: 13,\n wordWrap: 'off',\n diffWordWrap: 'inherit',\n renderLineHighlight: 'none',\n overviewRulerLanes: 0,\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n alwaysConsumeMouseWheel: false,\n },\n};\n\n/** Detect the current [data-theme] value from the closest ancestor or document. */\nfunction detectDataTheme(el: HTMLElement | null): string | null {\n if (typeof document === 'undefined') return null;\n if (el) {\n const closest = el.closest('[data-theme]');\n if (closest) return closest.getAttribute('data-theme');\n }\n return document.documentElement.getAttribute('data-theme');\n}\n\n/**\n * CodeDiff — read-only Monaco DiffEditor atom.\n *\n * Generic: diffs any Monaco-supported language. Theme follows [data-theme].\n * Use <CodeDiffBox> for the full chrome (header, summary, toggle, copy).\n */\nexport function CodeDiff({\n original,\n modified,\n language = 'json',\n height = '100%',\n renderSideBySide = true,\n onSummaryChange,\n beforeMount,\n onMount,\n className,\n}: CodeDiffProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<editor.IStandaloneDiffEditor | null>(null);\n const decoCleanupRef = useRef<Array<() => void>>([]);\n const summaryCbRef = useRef(onSummaryChange);\n summaryCbRef.current = onSummaryChange;\n\n // Theme state follows [data-theme]\n const [themeName, setThemeName] = useState<string>(ELB_THEME_LIGHT);\n useEffect(() => {\n const read = () => {\n const dataTheme = detectDataTheme(containerRef.current);\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n setThemeName(isDark ? ELB_THEME_DARK : ELB_THEME_LIGHT);\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n mq.addEventListener('change', read);\n return () => {\n observer.disconnect();\n mq.removeEventListener('change', read);\n };\n }, []);\n\n // Keep renderSideBySide live — no remount on toggle\n useEffect(() => {\n editorRef.current?.updateOptions({ renderSideBySide });\n }, [renderSideBySide]);\n\n const handleBeforeMount = useCallback(\n (monaco: Monaco) => {\n registerAllThemes(monaco);\n beforeMount?.(monaco);\n },\n [beforeMount],\n );\n\n const handleMount: DiffOnMount = useCallback(\n (diffEditor, _monaco) => {\n editorRef.current = diffEditor;\n\n // Apply walkerOS decoration to all canonical references:\n // $var./$def./$env./$contract./$store./$secret./$code:\n // applyWalkerOSDecorations expects a single IStandaloneCodeEditor.\n decoCleanupRef.current.push(\n applyWalkerOSDecorations(diffEditor.getOriginalEditor()),\n );\n decoCleanupRef.current.push(\n applyWalkerOSDecorations(diffEditor.getModifiedEditor()),\n );\n\n // Summary: line-level counts. Fires after every diff recompute.\n const update = () => {\n const changes = diffEditor.getLineChanges() ?? [];\n let added = 0;\n let deleted = 0;\n let modifiedCount = 0;\n for (const c of changes) {\n if (c.originalEndLineNumber === 0) added++;\n else if (c.modifiedEndLineNumber === 0) deleted++;\n else modifiedCount++;\n }\n summaryCbRef.current?.({ added, deleted, modified: modifiedCount });\n };\n const sub = diffEditor.onDidUpdateDiff(update);\n decoCleanupRef.current.push(() => sub.dispose());\n\n onMount?.(diffEditor);\n },\n [onMount],\n );\n\n useEffect(() => {\n return () => {\n // Guard each cleanup — Monaco methods (deltaDecorations) throw if the\n // underlying editor was already disposed by @monaco-editor/react.\n for (const cleanup of decoCleanupRef.current) {\n try {\n cleanup();\n } catch {\n /* already disposed — ignore */\n }\n }\n decoCleanupRef.current = [];\n };\n }, []);\n\n const mergedOptions =\n useMemo<editor.IStandaloneDiffEditorConstructionOptions>(\n () => ({ ...DIFF_OPTIONS, renderSideBySide }),\n [renderSideBySide],\n );\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ height: '100%', width: '100%' }}\n >\n <DiffEditor\n language={language}\n original={original}\n modified={modified}\n theme={themeName}\n height={height}\n options={mergedOptions}\n beforeMount={handleBeforeMount}\n onMount={handleMount}\n />\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { CodeBox, type CodeBoxProps } from './code-box';\nimport { formatCode } from '../../utils/format-code';\n\nexport type CodeSnippetProps = Omit<CodeBoxProps, 'label' | 'showHeader'> & {\n format?: boolean;\n};\n\n/**\n * CodeSnippet - Prominent code display for snippets\n *\n * Wraps CodeBox with larger font size and generous padding.\n * Use this for showcasing code examples, one-liners, or small code blocks\n * where you want the code to be more visually prominent than in a standard editor.\n *\n * Always renders without a header. Use CodeBox if you need a header.\n *\n * Default behavior:\n * - Read-only (disabled=true)\n * - Copy button enabled (showCopy=true)\n * - Auto-height with sensible bounds (min: 20px, max: 600px)\n * - Auto-format on mount (format=true) - formats code once on initial load\n *\n * Auto-Formatting:\n * - Enabled by default (format=true)\n * - Runs once on component mount using Monaco's built-in formatters\n * - Supports: JavaScript, TypeScript, JSON, HTML, CSS\n * - Use format={false} to disable for special cases (pre-formatted code)\n *\n * Reuses all CodeBox functionality:\n * - Monaco Editor with syntax highlighting\n * - Grid height management and auto-height modes\n * - Copy button\n * - Theme integration\n *\n * @example\n * // Minimal usage - code auto-formats on load\n * <CodeSnippet\n * code=\"import { elb } from '@walkeros/core';\"\n * language=\"javascript\"\n * />\n *\n * @example\n * // Disable auto-formatting for pre-formatted code\n * <CodeSnippet\n * code={alreadyFormattedCode}\n * language=\"javascript\"\n * format={false}\n * />\n *\n * @example\n * // Override defaults if needed\n * <CodeSnippet\n * code={editableCode}\n * language=\"javascript\"\n * disabled={false}\n * showCopy={false}\n * autoHeight={{ min: 100, max: 800 }}\n * />\n */\nexport function CodeSnippet(props: CodeSnippetProps) {\n const {\n code,\n language = 'javascript',\n className,\n disabled = true,\n showCopy = true,\n autoHeight = { min: 20, max: 600 },\n fontSize = 15,\n format = true,\n ...rest\n } = props;\n const snippetClassName = `elb-code-snippet ${className || ''}`.trim();\n const [formattedCode, setFormattedCode] = useState(code);\n\n // Format code on mount\n useEffect(() => {\n if (format && code) {\n formatCode(code, language).then(setFormattedCode);\n } else {\n setFormattedCode(code);\n }\n }, [code, language, format]);\n\n return (\n <CodeBox\n {...rest}\n code={formattedCode}\n language={language}\n className={snippetClassName}\n showHeader={false}\n disabled={disabled}\n showCopy={showCopy}\n autoHeight={autoHeight}\n fontSize={fontSize}\n />\n );\n}\n","import React, { useEffect, useRef } from 'react';\nimport rough from 'roughjs';\nimport { Icon } from '@iconify/react';\n\n// ============================================\n// Helper Components for rough.js SVG rendering\n// ============================================\n\ninterface RoughRectProps {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke: string;\n}\n\n/**\n * RoughRect - Renders a hand-drawn rectangle using rough.js SVG mode\n * Uses a rounded rectangle path for softer corners\n */\nfunction RoughRect({\n x,\n y,\n width,\n height,\n fill,\n stroke,\n}: RoughRectProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n // Clear previous content\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const r = 8; // corner radius\n\n // Create rounded rectangle path\n const path = `M ${x + r} ${y}\n L ${x + width - r} ${y}\n Q ${x + width} ${y} ${x + width} ${y + r}\n L ${x + width} ${y + height - r}\n Q ${x + width} ${y + height} ${x + width - r} ${y + height}\n L ${x + r} ${y + height}\n Q ${x} ${y + height} ${x} ${y + height - r}\n L ${x} ${y + r}\n Q ${x} ${y} ${x + r} ${y}\n Z`;\n\n // Draw main rectangle\n const rectNode = rs.path(path, {\n fill,\n fillStyle: 'solid',\n stroke,\n strokeWidth: 1.5,\n roughness: 1.2,\n bowing: 1,\n });\n ref.current.appendChild(rectNode);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [x, y, width, height, fill, stroke]);\n\n return <g ref={ref} />;\n}\n\ninterface RoughCircleProps {\n cx: number;\n cy: number;\n diameter: number;\n fill: string;\n stroke: string;\n}\n\n/**\n * RoughCircle - Renders a hand-drawn circle using rough.js SVG mode\n */\nfunction RoughCircle({\n cx,\n cy,\n diameter,\n fill,\n stroke,\n}: RoughCircleProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const circleNode = rs.circle(cx, cy, diameter, {\n fill,\n fillStyle: 'solid',\n stroke,\n strokeWidth: 1.5,\n roughness: 0.8,\n });\n ref.current.appendChild(circleNode);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [cx, cy, diameter, fill, stroke]);\n\n return <g ref={ref} />;\n}\n\ninterface MarkerProps {\n x: number;\n y: number;\n text: string;\n}\n\n/**\n * Marker - Red circle with number/text inside\n */\nfunction Marker({ x, y, text }: MarkerProps): React.ReactElement {\n return (\n <g>\n <RoughCircle\n cx={x}\n cy={y}\n diameter={MARKER_SIZE}\n fill=\"var(--flow-marker-fill, #dc2626)\"\n stroke=\"var(--flow-marker-stroke, #991b1b)\"\n />\n <text\n x={x}\n y={y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"var(--flow-marker-text, #ffffff)\"\n fontSize={10}\n fontWeight={600}\n fontFamily=\"system-ui, -apple-system, sans-serif\"\n >\n {text}\n </text>\n </g>\n );\n}\n\ninterface RoughArrowProps {\n fromX: number;\n fromY: number;\n toX: number;\n toY: number;\n stroke: string;\n arrowSize?: number;\n centerY?: number;\n}\n\n/**\n * RoughArrow - Renders a hand-drawn curved arrow using rough.js SVG mode\n * Uses quadratic bezier curves for an organic feel.\n * Includes arrowhead that follows the curve's final angle.\n */\nfunction RoughArrow({\n fromX,\n fromY,\n toX,\n toY,\n stroke,\n arrowSize = 8,\n centerY,\n}: RoughArrowProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n // Clear previous content\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const strokeWidth = 1.5;\n const color = stroke;\n\n const dx = toX - fromX;\n const dy = toY - fromY;\n const length = Math.sqrt(dx * dx + dy * dy);\n\n // Calculate control point for quadratic bezier curve\n // For horizontal lines: slight upward curve\n // For diagonal lines: curve that exits horizontally then bends to target\n const midX = (fromX + toX) / 2;\n const midY = (fromY + toY) / 2;\n\n let controlX: number;\n let controlY: number;\n\n if (Math.abs(dy) < 2) {\n // Nearly horizontal: subtle upward curve\n controlX = midX;\n controlY = midY - Math.min(length * 0.08, 12);\n } else if (centerY !== undefined) {\n // Curve towards whichever endpoint is farther from center\n // This creates natural spreading for fan-in and fan-out\n const fromDistFromCenter = Math.abs(fromY - centerY);\n const toDistFromCenter = Math.abs(toY - centerY);\n\n controlX = fromX + dx * 0.5;\n\n if (fromDistFromCenter >= toDistFromCenter) {\n // Source is farther from center → curve towards source's side\n controlY =\n fromY < centerY\n ? midY - Math.abs(dy) * 0.3 // Source above center → curve UP\n : midY + Math.abs(dy) * 0.3; // Source below center → curve DOWN\n } else {\n // Target is farther from center → curve towards target's side\n controlY =\n toY < centerY\n ? midY - Math.abs(dy) * 0.3 // Target above center → curve UP\n : midY + Math.abs(dy) * 0.3; // Target below center → curve DOWN\n }\n } else {\n // Fallback when centerY not provided: simple direction-based curve\n controlX = fromX + dx * 0.5;\n controlY =\n dy > 0 ? fromY - Math.abs(dy) * 0.3 : fromY + Math.abs(dy) * 0.3;\n }\n\n // Calculate the angle at the end of the curve (tangent at t=1)\n // For quadratic bezier: tangent = 2(1-t)(P1-P0) + 2t(P2-P1) at t=1 = 2(P2-P1)\n const tangentX = toX - controlX;\n const tangentY = toY - controlY;\n const endAngle = Math.atan2(tangentY, tangentX);\n\n // Calculate where the curve should stop (before the arrowhead)\n const curveEndX = toX - Math.cos(endAngle) * arrowSize;\n const curveEndY = toY - Math.sin(endAngle) * arrowSize;\n\n // Draw curved line using SVG path with quadratic bezier\n const curvePath = `M ${fromX} ${fromY} Q ${controlX} ${controlY} ${curveEndX} ${curveEndY}`;\n const curveNode = rs.path(curvePath, {\n stroke: color,\n strokeWidth,\n roughness: 0.8,\n fill: 'none',\n });\n ref.current.appendChild(curveNode);\n\n // Draw arrowhead (two lines at angles from curve's end tangent)\n const arrowAngle = Math.PI / 6; // 30 degrees\n const arrowLength = 8;\n\n // Arrow head line 1 (upper)\n const arrow1EndX =\n curveEndX - Math.cos(endAngle - arrowAngle) * arrowLength;\n const arrow1EndY =\n curveEndY - Math.sin(endAngle - arrowAngle) * arrowLength;\n const arrowHead1 = rs.line(curveEndX, curveEndY, arrow1EndX, arrow1EndY, {\n stroke: color,\n strokeWidth,\n roughness: 0.5,\n });\n ref.current.appendChild(arrowHead1);\n\n // Arrow head line 2 (lower)\n const arrow2EndX =\n curveEndX - Math.cos(endAngle + arrowAngle) * arrowLength;\n const arrow2EndY =\n curveEndY - Math.sin(endAngle + arrowAngle) * arrowLength;\n const arrowHead2 = rs.line(curveEndX, curveEndY, arrow2EndX, arrow2EndY, {\n stroke: color,\n strokeWidth,\n roughness: 0.5,\n });\n ref.current.appendChild(arrowHead2);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [fromX, fromY, toX, toY, stroke, arrowSize, centerY]);\n\n return <g ref={ref} />;\n}\n\nexport type FlowMarkerPosition =\n // Stages (default = top-right, left/right variants)\n | 'source'\n | 'source-left'\n | 'source-right'\n | 'collector'\n | 'collector-left'\n | 'collector-right'\n | 'destination'\n | 'destination-left'\n | 'destination-right'\n // Named stages: source-{name}, destination-{name}\n | `source-${string}`\n | `source-${string}-left`\n | `source-${string}-right`\n | `destination-${string}`\n | `destination-${string}-left`\n | `destination-${string}-right`\n // Transformer positions: pre-{name}, post-{name}\n | `pre-${string}`\n | `pre-${string}-left`\n | `pre-${string}-right`\n | `post-${string}`\n | `post-${string}-left`\n | `post-${string}-right`\n // Context stages\n | 'stage-before'\n | 'stage-before-right'\n | 'stage-after'\n | 'stage-after-left'\n // Arrows (single position each)\n | 'incoming'\n | 'outgoing'\n | 'source-collector'\n | 'collector-destination'\n // Named source arrows: source-{name}-pre, source-{name}-collector\n | `source-${string}-pre`\n | `source-${string}-collector`\n // Pre-transformer chain arrows: pre-{name}-next, pre-collector\n | `pre-${string}-next`\n | 'pre-collector'\n // Post-transformer chain arrows: collector-post, post-{name}-next\n | 'collector-post'\n | `post-${string}-next`\n // Destination arrows: post-destination-{name}\n | `post-destination-${string}`\n // Context stage arrows\n | 'before-source'\n | 'destination-after';\n\nexport interface FlowMarker {\n position: FlowMarkerPosition;\n /** ID displayed inside the marker dot. Default: array index + 1 */\n id?: string;\n /** Legend text. If provided, marker appears in legend below diagram */\n text?: string;\n}\n\nexport interface FlowStageConfig {\n /** Iconify icon name to display before the label (e.g., 'simple-icons:google-analytics') */\n icon?: string;\n label?: string;\n text?: React.ReactNode; // Supports rich content (text, links, JSX)\n description?: React.ReactNode; // Supports rich content (text, links, JSX)\n highlight?: boolean;\n /** Makes box clickable. undefined = default URL, false = not clickable, string = custom URL */\n link?: false | string;\n}\n\nexport interface FlowSourceConfig extends FlowStageConfig {\n /** Name of pre-transformer to connect to. Omit to connect directly to collector. */\n next?: string;\n}\n\nexport interface FlowTransformerConfig extends FlowStageConfig {\n /** Name of next transformer in chain. Omit to connect to collector (pre) or destination (post). */\n next?: string;\n}\n\nexport interface FlowDestinationConfig extends FlowStageConfig {\n /** Name of post-transformer to receive from. Omit to receive directly from collector. */\n before?: string;\n /** Optional: stage after this destination (e.g., external platform). Overrides shared stageAfter. */\n after?: FlowStageConfig;\n}\n\nexport interface FlowLayoutConfig {\n labelSize: number;\n labelWeight: string;\n textSize: number;\n textWeight: string;\n boxHeight: number;\n descriptionSize: number;\n}\n\n// Default layout configuration\nexport const defaultLayout: FlowLayoutConfig = {\n labelSize: 13,\n labelWeight: '600',\n textSize: 12,\n textWeight: 'normal',\n boxHeight: 50,\n descriptionSize: 13,\n};\n\nexport interface FlowMapProps {\n /** Optional: stage before source (e.g., \"Browser\") */\n stageBefore?: FlowStageConfig;\n /** Sources with named keys. Each source can specify `next` to connect to a pre-transformer. */\n sources?: Record<string, FlowSourceConfig>;\n /** Pre-transformers between sources and collector. Chain via `next` property. */\n preTransformers?: Record<string, FlowTransformerConfig>;\n /** Optional: customize collector stage */\n collector?: FlowStageConfig;\n /** Post-transformers between collector and destinations. */\n postTransformers?: Record<string, FlowTransformerConfig>;\n /** Destinations with named keys. Each destination can specify `before` to receive from a post-transformer. */\n destinations?: Record<string, FlowDestinationConfig>;\n /** Optional: stage after destination (e.g., \"gtag\") */\n stageAfter?: FlowStageConfig;\n /** Optional: title above diagram */\n title?: string;\n /** Optional: layout configuration */\n layout?: FlowLayoutConfig;\n /** Optional: height of stage boxes (default: 50) */\n boxHeight?: number;\n /** Optional: height of description area below boxes (default: 30) */\n descriptionHeight?: number;\n /** Optional: additional CSS class */\n className?: string;\n /** Optional: array of markers to display */\n markers?: FlowMarker[];\n /** Optional: show two arrows per connection (forward → and return ←) with parallel offset */\n withReturn?: boolean;\n}\n\n// Layout constants\nconst STAGE_WIDTH = 120;\nconst STAGE_HEIGHT = 50;\nconst STAGE_GAP = 50; // Horizontal gap between stages\nconst VERTICAL_GAP = 12; // Vertical gap between stacked sources/destinations\nconst PADDING_X = 8;\nconst PADDING_Y = 8;\nconst EDGE_ARROW_LENGTH = 25; // Space for incoming/outgoing arrows\nconst TITLE_HEIGHT = 30;\nconst ARROW_SIZE = 8;\nconst ARROW_OFFSET = 6; // Vertical offset for parallel return arrows\n\n// Resolved transformer with its name\ninterface ResolvedTransformer {\n name: string;\n config: FlowTransformerConfig;\n}\n\n/**\n * Resolves a transformer chain by following `next` references.\n * Returns an ordered array of transformers from the starting key to the end.\n * Throws if a reference is invalid or circular.\n */\nfunction resolveTransformerChain(\n transformers: Record<string, FlowTransformerConfig> | undefined,\n startKey: string | undefined,\n): ResolvedTransformer[] {\n if (!transformers || !startKey) return [];\n\n const result: ResolvedTransformer[] = [];\n const visited = new Set<string>();\n let currentKey: string | undefined = startKey;\n\n while (currentKey) {\n if (visited.has(currentKey)) {\n throw new Error(\n `FlowMap: Circular reference detected in transformer chain at \"${currentKey}\"`,\n );\n }\n\n const config: FlowTransformerConfig | undefined = transformers[currentKey];\n if (!config) {\n throw new Error(\n `FlowMap: Invalid transformer reference \"${currentKey}\". Available transformers: ${Object.keys(transformers).join(', ') || 'none'}`,\n );\n }\n\n visited.add(currentKey);\n result.push({ name: currentKey, config });\n currentKey = config.next;\n }\n\n return result;\n}\n\n/**\n * Collects all unique transformers that are reachable from sources (pre) or destinations (post).\n * Returns them in chain order based on `next` references.\n * Finds the chain head (transformer not referenced by any other's `next`) and walks from there.\n */\nfunction collectReachableTransformers(\n transformers: Record<string, FlowTransformerConfig> | undefined,\n entryPoints: (string | undefined)[],\n): ResolvedTransformer[] {\n if (!transformers) return [];\n\n // Find all unique transformer names referenced by walking each entry point's chain\n const referencedNames = new Set<string>();\n for (const entry of entryPoints) {\n if (!entry || !transformers[entry]) continue;\n const chain = resolveTransformerChain(transformers, entry);\n chain.forEach((p) => referencedNames.add(p.name));\n }\n\n if (referencedNames.size === 0) return [];\n\n // Find chain head: transformer in our set that's not anyone's `next`\n const nextTargets = new Set<string>();\n for (const name of referencedNames) {\n const next = transformers[name]?.next;\n if (next && referencedNames.has(next)) {\n nextTargets.add(next);\n }\n }\n\n // Chain head = in referencedNames but not in nextTargets\n let chainHead: string | undefined;\n for (const name of referencedNames) {\n if (!nextTargets.has(name)) {\n chainHead = name;\n break;\n }\n }\n\n // Walk from chain head\n if (!chainHead) chainHead = [...referencedNames][0];\n return resolveTransformerChain(transformers, chainHead);\n}\n\n/**\n * Gets the index of a transformer in the transformer list.\n * Returns transformerList.length if not found (= connects directly to collector).\n */\nfunction getTransformerIndex(\n transformerName: string | undefined,\n transformerList: ResolvedTransformer[],\n): number {\n if (!transformerName) return transformerList.length;\n const idx = transformerList.findIndex((p) => p.name === transformerName);\n return idx >= 0 ? idx : transformerList.length;\n}\n\n// Dynamic width calculation function\nfunction calculateTotalWidth(\n stageCount: number,\n hasStageBefore: boolean,\n hasStageAfter: boolean,\n): number {\n const leftEdge = hasStageBefore ? 0 : EDGE_ARROW_LENGTH;\n const rightEdge = hasStageAfter ? 0 : EDGE_ARROW_LENGTH;\n return (\n leftEdge +\n STAGE_WIDTH * stageCount +\n STAGE_GAP * (stageCount - 1) +\n rightEdge\n );\n}\n\ninterface StagePosition {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst MARKER_SIZE = 16;\nconst MARKER_OFFSET = 4; // Offset from box edge\n\nfunction getMarkerPosition(\n position: FlowMarkerPosition,\n stages: { [key: string]: StagePosition },\n centerY: number,\n totalWidth: number,\n): { x: number; y: number } | null {\n const sourcePos = stages.source;\n const collectorPos = stages.collector;\n const destPos = stages.destination;\n const beforePos = stages.before;\n const afterPos = stages.after;\n\n // Helper to get box marker position (top corners)\n const getBoxMarker = (\n pos: StagePosition | undefined,\n variant?: string,\n ): { x: number; y: number } | null => {\n if (!pos) return null;\n if (variant === '-left') {\n return { x: pos.x + MARKER_OFFSET, y: pos.y - MARKER_OFFSET };\n }\n // Default and -right: top-right corner\n return {\n x: pos.x + pos.width - MARKER_OFFSET,\n y: pos.y - MARKER_OFFSET,\n };\n };\n\n // Helper to get arrow marker position (between stages)\n const getArrowMarker = (\n fromPos: StagePosition | undefined,\n ): { x: number; y: number } | null => {\n if (!fromPos) return null;\n const fromCenterY = fromPos.y + fromPos.height / 2;\n return {\n x: fromPos.x + fromPos.width + STAGE_GAP / 2 - 6,\n y: fromCenterY + MARKER_SIZE / 2 + 4,\n };\n };\n\n switch (position) {\n // Stage-before (only right side, no left)\n case 'stage-before':\n case 'stage-before-right':\n return getBoxMarker(beforePos);\n\n // Source stage (above box, top corners) - first source\n case 'source':\n case 'source-right':\n return getBoxMarker(sourcePos);\n case 'source-left':\n return getBoxMarker(sourcePos, '-left');\n\n // Collector stage (above box, top corners)\n case 'collector':\n case 'collector-right':\n return getBoxMarker(collectorPos);\n case 'collector-left':\n return getBoxMarker(collectorPos, '-left');\n\n // Destination stage (above box, top corners) - first destination\n case 'destination':\n case 'destination-right':\n return getBoxMarker(destPos);\n case 'destination-left':\n return getBoxMarker(destPos, '-left');\n\n // Stage-after (only left side, no right)\n case 'stage-after':\n case 'stage-after-left':\n return getBoxMarker(afterPos, '-left');\n\n // Edge arrows (in/out)\n case 'incoming':\n return { x: EDGE_ARROW_LENGTH / 2, y: centerY + MARKER_SIZE / 2 + 8 };\n case 'outgoing':\n return {\n x: totalWidth - EDGE_ARROW_LENGTH / 2,\n y: centerY + MARKER_SIZE / 2 + 8,\n };\n\n // Arrow between before and source\n case 'before-source':\n return getArrowMarker(beforePos);\n\n // Between-stage arrows (for simple flows without transformers)\n case 'source-collector':\n return getArrowMarker(sourcePos);\n case 'collector-destination':\n return getArrowMarker(collectorPos);\n\n // Arrow between destination and after\n case 'destination-after':\n return getArrowMarker(destPos);\n\n // Pre-transformer to collector arrow\n case 'pre-collector':\n // Find the last pre-transformer position\n const preKeys = Object.keys(stages).filter((k) => k.startsWith('pre-'));\n if (preKeys.length === 0) return null;\n const lastPrePos = stages[preKeys[preKeys.length - 1]];\n return getArrowMarker(lastPrePos);\n\n // Collector to post-transformer arrow\n case 'collector-post':\n return getArrowMarker(collectorPos);\n\n default: {\n // Handle named source markers: source-{name}, source-{name}-left, source-{name}-right\n const sourceNameMatch = position.match(/^source-([^-]+)(-left|-right)?$/);\n if (sourceNameMatch) {\n const name = sourceNameMatch[1];\n const variant = sourceNameMatch[2];\n const pos = stages[`source-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle named destination markers: destination-{name}, destination-{name}-left, destination-{name}-right\n const destNameMatch = position.match(\n /^destination-([^-]+)(-left|-right)?$/,\n );\n if (destNameMatch) {\n const name = destNameMatch[1];\n const variant = destNameMatch[2];\n const pos = stages[`destination-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle pre-transformer markers: pre-{name}, pre-{name}-left, pre-{name}-right\n const preMatch = position.match(/^pre-([^-]+)(-left|-right)?$/);\n if (preMatch) {\n const name = preMatch[1];\n const variant = preMatch[2];\n // Skip if this looks like a -next pattern\n if (name === 'collector') return null;\n const pos = stages[`pre-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle post-transformer markers: post-{name}, post-{name}-left, post-{name}-right\n const postMatch = position.match(/^post-([^-]+)(-left|-right)?$/);\n if (postMatch) {\n const name = postMatch[1];\n const variant = postMatch[2];\n const pos = stages[`post-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle source to pre-transformer arrow: source-{name}-pre\n const sourcePreMatch = position.match(/^source-([^-]+)-pre$/);\n if (sourcePreMatch) {\n const name = sourcePreMatch[1];\n const pos = stages[`source-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle source to collector arrow: source-{name}-collector\n const sourceCollectorMatch = position.match(/^source-([^-]+)-collector$/);\n if (sourceCollectorMatch) {\n const name = sourceCollectorMatch[1];\n const pos = stages[`source-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle pre-transformer chain arrow: pre-{name}-next\n const preNextMatch = position.match(/^pre-([^-]+)-next$/);\n if (preNextMatch) {\n const name = preNextMatch[1];\n const pos = stages[`pre-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle post-transformer chain arrow: post-{name}-next\n const postNextMatch = position.match(/^post-([^-]+)-next$/);\n if (postNextMatch) {\n const name = postNextMatch[1];\n const pos = stages[`post-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle post to destination arrow: post-destination-{name}\n const postDestMatch = position.match(/^post-destination-([^-]+)$/);\n if (postDestMatch) {\n const name = postDestMatch[1];\n // Find the last post-transformer position before this destination\n const postKeys = Object.keys(stages).filter((k) =>\n k.startsWith('post-'),\n );\n if (postKeys.length === 0) return getArrowMarker(collectorPos);\n const lastPostPos = stages[postKeys[postKeys.length - 1]];\n return getArrowMarker(lastPostPos);\n }\n\n return null;\n }\n }\n}\n\nexport function FlowMap({\n stageBefore,\n sources,\n preTransformers,\n collector,\n postTransformers,\n destinations,\n stageAfter,\n title,\n layout = defaultLayout,\n boxHeight: boxHeightProp,\n descriptionHeight: descriptionHeightProp,\n markers,\n className,\n withReturn,\n}: FlowMapProps): React.ReactElement {\n // Convert Record-based sources/destinations to arrays with names\n const sourceEntries = Object.entries(sources ?? { default: {} });\n const destinationEntries = Object.entries(destinations ?? { default: {} });\n\n // Collect pre-transformers reachable from sources\n const sourceNextValues = sourceEntries.map(([, config]) => config.next);\n const preTransformerList = collectReachableTransformers(\n preTransformers,\n sourceNextValues,\n );\n\n // Collect post-transformers reachable from destinations (via 'before')\n const destBeforeValues = destinationEntries.map(\n ([, config]) => config.before,\n );\n const postTransformerList = collectReachableTransformers(\n postTransformers,\n destBeforeValues,\n );\n\n // Sort sources by target transformer index to avoid edge crossings\n // Sources connecting to earlier transformers go on top\n const sortedSourceEntries = [...sourceEntries].sort(([, a], [, b]) => {\n const aIdx = getTransformerIndex(a.next, preTransformerList);\n const bIdx = getTransformerIndex(b.next, preTransformerList);\n return aIdx - bIdx;\n });\n\n // Sort destinations by source transformer index - ASCENDING (earlier transformer = top)\n // This mirrors source sorting behavior for symmetry\n const sortedDestinationEntries = [...destinationEntries].sort(\n ([, a], [, b]) => {\n const aIdx = getTransformerIndex(a.before, postTransformerList);\n const bIdx = getTransformerIndex(b.before, postTransformerList);\n return aIdx - bIdx; // ASCENDING: earlier transformer at top (mirrors sources)\n },\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Check if any stage has a description or link\n const hasDescription =\n stageBefore?.description ||\n sourceEntries.some(([, s]) => s.description) ||\n preTransformerList.some((p) => p.config.description) ||\n collector?.description ||\n postTransformerList.some((p) => p.config.description) ||\n destinationEntries.some(([, d]) => d.description) ||\n stageAfter?.description ||\n destinationEntries.some(([, d]) => d.after?.description);\n const hasLink =\n stageBefore?.link !== false ||\n sourceEntries.some(([, s]) => s.link !== false) ||\n preTransformerList.some((p) => p.config.link !== false) ||\n collector?.link !== false ||\n postTransformerList.some((p) => p.config.link !== false) ||\n destinationEntries.some(([, d]) => d.link !== false) ||\n stageAfter?.link !== false ||\n destinationEntries.some(([, d]) => d.after?.link !== false);\n\n // Check if markers need extra padding (top for stage markers, bottom for arrow markers)\n const stageMarkerPositions = [\n 'stage-before',\n 'stage-before-right',\n 'source',\n 'source-left',\n 'source-right',\n 'collector',\n 'collector-left',\n 'collector-right',\n 'destination',\n 'destination-left',\n 'destination-right',\n 'stage-after',\n 'stage-after-left',\n ];\n // Helper to check if a position is a stage marker (including named stages and transformers)\n const isStageMarker = (pos: string): boolean => {\n if (stageMarkerPositions.includes(pos)) return true;\n // Check patterns: source-{name}, destination-{name}, pre-{name}, post-{name}\n return /^(source|destination|pre|post)-[^-]+(-left|-right)?$/.test(pos);\n };\n const hasTopMarkers =\n markers?.some((m) => isStageMarker(m.position)) ?? false;\n const markerTopPadding = hasTopMarkers ? MARKER_SIZE / 2 + MARKER_OFFSET : 0;\n\n // Filter markers that have legend text\n const legendItems = markers?.filter((m) => m.text) ?? [];\n // Estimate total text length to determine how many lines we need\n const totalTextLength = legendItems.reduce(\n (sum, item) => sum + (item.text?.length ?? 0),\n 0,\n );\n // Rough estimate: ~5.5 chars per pixel at 11px font, available width ~450px = ~82 chars per line\n const LEGEND_LINE_HEIGHT = 18;\n const estimatedLines = Math.max(1, Math.ceil(totalTextLength / 70));\n const legendHeight =\n legendItems.length > 0 ? LEGEND_LINE_HEIGHT * estimatedLines + 8 : 0;\n\n // Use prop values if provided, otherwise use layout defaults\n const boxHeight = boxHeightProp ?? layout.boxHeight;\n const descriptionHeight = descriptionHeightProp ?? 30;\n const belowBoxHeight = hasDescription || hasLink ? descriptionHeight + 10 : 0; // Space for description/link content\n\n // Calculate max rows for multi-source/destination layout\n const maxRows = Math.max(sourceEntries.length, destinationEntries.length, 1);\n const stackedHeight = boxHeight * maxRows + VERTICAL_GAP * (maxRows - 1);\n\n // Check if any destination has an after stage or if shared stageAfter exists\n const hasAnyAfterStage =\n stageAfter || destinationEntries.some(([, d]) => d.after);\n\n // Calculate stage count and total width dynamically\n // Stages: stageBefore? + sources(1) + preTransformers + collector(1) + postTransformers + destinations(1) + afterStages?\n const stageCount =\n (stageBefore ? 1 : 0) +\n 1 + // sources column\n preTransformerList.length +\n 1 + // collector\n postTransformerList.length +\n 1 + // destinations column\n (hasAnyAfterStage ? 1 : 0);\n const totalWidth = calculateTotalWidth(\n stageCount,\n !!stageBefore,\n !!hasAnyAfterStage,\n );\n\n const baseHeight =\n PADDING_Y * 2 +\n stackedHeight +\n belowBoxHeight +\n markerTopPadding +\n legendHeight;\n const totalHeight = title ? baseHeight + TITLE_HEIGHT : baseHeight;\n\n // Calculate positions (declarative, no useEffect)\n const baseY = (title ? TITLE_HEIGHT : 0) + PADDING_Y + markerTopPadding;\n\n // Calculate the vertical center of the stacked area (for collector positioning)\n const stackedCenterY = baseY + stackedHeight / 2;\n\n // Helper to calculate Y positions for stacked items centered around stackedCenterY\n const getStackedY = (index: number, count: number): number => {\n const totalStackHeight = boxHeight * count + VERTICAL_GAP * (count - 1);\n const startY = stackedCenterY - totalStackHeight / 2;\n return startY + index * (boxHeight + VERTICAL_GAP);\n };\n\n // Build stage positions dynamically based on which stages are active\n // Start at 0 if stageBefore exists (no left edge arrow), otherwise leave space for arrow\n let currentX = stageBefore ? 0 : EDGE_ARROW_LENGTH;\n const stages: { [key: string]: StagePosition } = {};\n\n // Arrays to hold named source/destination positions\n const sourcePositions: Array<{ name: string; pos: StagePosition }> = [];\n const destinationPositions: Array<{ name: string; pos: StagePosition }> = [];\n\n if (stageBefore) {\n stages.before = {\n x: currentX,\n y: stackedCenterY - boxHeight / 2, // Center vertically\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n currentX += STAGE_WIDTH + STAGE_GAP;\n }\n\n // Position ALL sources in the source column (stacked vertically)\n const sourceX = currentX;\n sortedSourceEntries.forEach(([name], index) => {\n const pos: StagePosition = {\n x: sourceX,\n y: getStackedY(index, sortedSourceEntries.length),\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n sourcePositions.push({ name, pos });\n stages[`source-${name}`] = pos;\n });\n // Keep 'source' alias pointing to first source for backward compatibility\n if (sourcePositions.length > 0) {\n stages.source = sourcePositions[0].pos;\n }\n currentX += STAGE_WIDTH + STAGE_GAP;\n\n // Pre-transformer positions\n // Strategy: position at source Y if only ONE source connects, otherwise center\n // This keeps transformers aligned with their sources when there's no branching\n const preTransformerPositions: Array<{ name: string; pos: StagePosition }> =\n [];\n\n // Build map: transformer name → list of sources that connect to it (directly or via chain)\n const transformerIncomingSources = new Map<string, string[]>();\n sortedSourceEntries.forEach(([sourceName, config]) => {\n const targetTransformer = config.next;\n if (targetTransformer) {\n const existing = transformerIncomingSources.get(targetTransformer) ?? [];\n existing.push(sourceName);\n transformerIncomingSources.set(targetTransformer, existing);\n }\n });\n // Also track chain connections (transformer A → transformer B means B receives from A's sources too)\n preTransformerList.forEach(({ name, config }) => {\n if (config.next) {\n // This transformer's output goes to config.next\n // So config.next receives from all sources that this transformer receives from\n const mySources = transformerIncomingSources.get(name) ?? [];\n const nextSources = transformerIncomingSources.get(config.next) ?? [];\n // Mark that the next transformer receives from chain (we'll use this for positioning)\n transformerIncomingSources.set(config.next, [\n ...new Set([...nextSources, `chain:${name}`]),\n ]);\n }\n });\n\n preTransformerList.forEach(({ name }) => {\n const incomingSources = transformerIncomingSources.get(name) ?? [];\n // Filter to only direct sources (not chain connections)\n const directSources = incomingSources.filter(\n (s) => !s.startsWith('chain:'),\n );\n const hasChainInput = incomingSources.some((s) => s.startsWith('chain:'));\n\n let y: number;\n if (directSources.length === 1 && !hasChainInput) {\n // Only ONE direct source, no chain input → align with that source\n const sourcePos = stages[`source-${directSources[0]}`];\n y = sourcePos ? sourcePos.y : stackedCenterY - boxHeight / 2;\n } else {\n // Multiple sources or has chain input → center\n y = stackedCenterY - boxHeight / 2;\n }\n\n const pos: StagePosition = {\n x: currentX,\n y,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n preTransformerPositions.push({ name, pos });\n stages[`pre-${name}`] = pos;\n currentX += STAGE_WIDTH + STAGE_GAP;\n });\n\n // Collector position (single, centered)\n stages.collector = {\n x: currentX,\n y: stackedCenterY - boxHeight / 2,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n currentX += STAGE_WIDTH + STAGE_GAP;\n\n // Post-transformer positions\n // Strategy: position at destination Y if only ONE destination connects, otherwise center\n // This mirrors pre-transformer behavior for symmetry\n const postTransformerPositions: Array<{ name: string; pos: StagePosition }> =\n [];\n\n // Build map: transformer name → list of destinations that receive from it (directly or via chain)\n const transformerOutgoingDests = new Map<string, string[]>();\n sortedDestinationEntries.forEach(([destName, config]) => {\n const sourceTransformer = config.before;\n if (sourceTransformer) {\n const existing = transformerOutgoingDests.get(sourceTransformer) ?? [];\n existing.push(destName);\n transformerOutgoingDests.set(sourceTransformer, existing);\n }\n });\n // Also track chain connections (transformer A → transformer B means A sends to all of B's destinations)\n // Walk backwards through chain to propagate destination info\n for (let i = postTransformerList.length - 1; i >= 0; i--) {\n const { name, config } = postTransformerList[i];\n if (config.next) {\n // This transformer sends to config.next, so it indirectly sends to config.next's destinations\n const nextDests = transformerOutgoingDests.get(config.next) ?? [];\n const myDests = transformerOutgoingDests.get(name) ?? [];\n // Mark chain connection\n transformerOutgoingDests.set(name, [\n ...new Set([...myDests, `chain:${config.next}`]),\n ]);\n }\n }\n\n // First position destinations (we need their positions for smart post-transformer positioning)\n const destinationX =\n currentX + postTransformerList.length * (STAGE_WIDTH + STAGE_GAP);\n sortedDestinationEntries.forEach(([name], index) => {\n const pos: StagePosition = {\n x: destinationX,\n y: getStackedY(index, sortedDestinationEntries.length),\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n destinationPositions.push({ name, pos });\n stages[`destination-${name}`] = pos;\n });\n // Keep 'destination' alias pointing to first destination for backward compatibility\n if (destinationPositions.length > 0) {\n stages.destination = destinationPositions[0].pos;\n }\n\n // Now position post-transformers with smart Y-positioning (can now reference destination positions)\n postTransformerList.forEach(({ name }) => {\n const outgoingDests = transformerOutgoingDests.get(name) ?? [];\n // Filter to only direct destinations (not chain connections)\n const directDests = outgoingDests.filter((d) => !d.startsWith('chain:'));\n const hasChainOutput = outgoingDests.some((d) => d.startsWith('chain:'));\n\n let y: number;\n if (directDests.length === 1 && !hasChainOutput) {\n // Only ONE direct destination, no chain output → align with that destination\n const destPos = stages[`destination-${directDests[0]}`];\n y = destPos ? destPos.y : stackedCenterY - boxHeight / 2;\n } else if (directDests.length > 1 && !hasChainOutput) {\n // Multiple direct destinations → center between them (average of their Y positions)\n const destYPositions = directDests\n .map((d) => stages[`destination-${d}`]?.y)\n .filter((pos): pos is number => pos !== undefined);\n if (destYPositions.length > 0) {\n const avgY =\n destYPositions.reduce((sum, pos) => sum + pos, 0) /\n destYPositions.length;\n y = avgY;\n } else {\n y = stackedCenterY - boxHeight / 2;\n }\n } else {\n // Has chain output or no direct destinations → center\n y = stackedCenterY - boxHeight / 2;\n }\n\n const pos: StagePosition = {\n x: currentX,\n y,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n postTransformerPositions.push({ name, pos });\n stages[`post-${name}`] = pos;\n currentX += STAGE_WIDTH + STAGE_GAP;\n });\n\n // Position after stages (per-destination or shared)\n // Each destination with `after` or falling back to shared `stageAfter` gets its own box\n const afterPositions: Array<{\n name: string;\n pos: StagePosition;\n config: FlowStageConfig;\n }> = [];\n\n if (hasAnyAfterStage) {\n const afterX = currentX + STAGE_WIDTH + STAGE_GAP;\n\n sortedDestinationEntries.forEach(([destName, destConfig], index) => {\n // Use destination's after config, or fall back to shared stageAfter\n const afterConfig = destConfig.after ?? stageAfter;\n if (afterConfig) {\n const pos: StagePosition = {\n x: afterX,\n y: getStackedY(index, sortedDestinationEntries.length), // Same Y as destination\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n afterPositions.push({ name: destName, pos, config: afterConfig });\n stages[`after-${destName}`] = pos;\n }\n });\n\n // Keep 'after' alias pointing to first after position for backward compatibility\n if (afterPositions.length > 0) {\n stages.after = afterPositions[0].pos;\n }\n }\n\n // Calculate center Y for arrows (collector's center)\n const centerY = stackedCenterY;\n\n // Stage configurations with colors and default links\n const stageConfigs = [\n ...(stageBefore\n ? [\n {\n key: 'before',\n config: stageBefore,\n fillVar: '--flow-before-fill',\n strokeVar: '--flow-before-stroke',\n defaultLabel: 'Before',\n defaultLink: undefined as string | undefined,\n },\n ]\n : []),\n // Sources (named, sorted by target transformer)\n ...sortedSourceEntries.map(([name, sourceConfig]) => ({\n key: `source-${name}`,\n config: sourceConfig,\n fillVar: '--flow-source-fill',\n strokeVar: '--flow-source-stroke',\n defaultLabel: 'Source',\n defaultLink: '/docs/sources' as string | undefined,\n })),\n // Pre-transformers\n ...preTransformerList.map(({ name, config }) => ({\n key: `pre-${name}`,\n config,\n fillVar: '--flow-transformer-fill',\n strokeVar: '--flow-transformer-stroke',\n defaultLabel: name.charAt(0).toUpperCase() + name.slice(1),\n defaultLink: '/docs/transformers' as string | undefined,\n })),\n {\n key: 'collector',\n config: collector,\n fillVar: '--flow-collector-fill',\n strokeVar: '--flow-collector-stroke',\n defaultLabel: 'Collector',\n defaultLink: '/docs/collectors' as string | undefined,\n },\n // Post-transformers\n ...postTransformerList.map(({ name, config }) => ({\n key: `post-${name}`,\n config,\n fillVar: '--flow-transformer-fill',\n strokeVar: '--flow-transformer-stroke',\n defaultLabel: name.charAt(0).toUpperCase() + name.slice(1),\n defaultLink: '/docs/transformers' as string | undefined,\n })),\n // Destinations (named, sorted by source transformer)\n ...sortedDestinationEntries.map(([name, destConfig]) => ({\n key: `destination-${name}`,\n config: destConfig,\n fillVar: '--flow-destination-fill',\n strokeVar: '--flow-destination-stroke',\n defaultLabel: 'Destination',\n defaultLink: '/docs/destinations' as string | undefined,\n })),\n // After stages (per-destination)\n ...afterPositions.map(({ name: destName, config: afterConfig }) => ({\n key: `after-${destName}`,\n config: afterConfig,\n fillVar: '--flow-after-fill',\n strokeVar: '--flow-after-stroke',\n defaultLabel: 'External',\n defaultLink: undefined as string | undefined,\n })),\n ];\n\n return (\n <div\n ref={containerRef}\n className={`elb-explorer elb-flow-map ${className || ''}`}\n style={{\n width: '100%',\n maxWidth: totalWidth,\n }}\n >\n <svg\n viewBox={`0 0 ${totalWidth} ${totalHeight}`}\n style={{\n width: '100%',\n height: 'auto',\n display: 'block',\n }}\n >\n {/* Title */}\n {title && (\n <text\n x={totalWidth / 2}\n y={18}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill=\"var(--color-text, #f3f4f6)\"\n fontSize={14}\n fontWeight={600}\n fontFamily=\"system-ui, -apple-system, sans-serif\"\n >\n {title}\n </text>\n )}\n\n {/* Arrows (rendered first so boxes appear on top) */}\n {(() => {\n const collectorPos = stages.collector;\n const collectorCenterY = collectorPos.y + boxHeight / 2;\n\n // Helper to spread connection points vertically on an edge\n const getSpreadY = (\n idx: number,\n count: number,\n baseY: number,\n ): number => {\n if (count <= 1) return baseY;\n const spread = Math.min(boxHeight * 0.6, (count - 1) * 12);\n const step = spread / (count - 1);\n return baseY - spread / 2 + idx * step;\n };\n\n // Find target position for a source (either pre-transformer or collector)\n const getSourceTarget = (\n sourceName: string,\n sourceConfig: FlowSourceConfig,\n ): StagePosition => {\n if (sourceConfig.next && preTransformers?.[sourceConfig.next]) {\n return stages[`pre-${sourceConfig.next}`];\n }\n // No pre-transformer, connect to first pre-transformer or collector\n if (preTransformerList.length > 0) {\n return stages[`pre-${preTransformerList[0].name}`];\n }\n return collectorPos;\n };\n\n // Find source position for a destination (either post-transformer or collector)\n const getDestinationSource = (\n destName: string,\n destConfig: FlowDestinationConfig,\n ): StagePosition => {\n if (destConfig.before && postTransformers?.[destConfig.before]) {\n return stages[`post-${destConfig.before}`];\n }\n // No 'before' specified - connect directly from collector\n return collectorPos;\n };\n\n return (\n <>\n {/* Incoming arrow - only show if no stageBefore and single source */}\n {!stageBefore && sourceEntries.length === 1 && (\n <RoughArrow\n fromX={0}\n fromY={centerY}\n toX={stages.source.x}\n toY={centerY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n\n {/* Before -> first source arrow (only if stageBefore exists) */}\n {stageBefore && (\n <RoughArrow\n fromX={stages.before.x + STAGE_WIDTH}\n fromY={centerY}\n toX={stages.source.x}\n toY={stages.source.y + boxHeight / 2}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n\n {/* Source -> PreTransformer/Collector arrows */}\n {/* Group sources by target to apply spread only for same-target connections */}\n {(() => {\n // Build map: targetKey -> list of sources connecting to it\n const sourcesByTarget = new Map<\n string,\n Array<{ name: string; pos: StagePosition; sortIndex: number }>\n >();\n sourcePositions.forEach(({ name, pos }, sortIndex) => {\n const sourceConfig = sources?.[name] ?? {};\n const targetKey = sourceConfig.next\n ? `pre-${sourceConfig.next}`\n : preTransformerList.length > 0\n ? `pre-${preTransformerList[0].name}`\n : 'collector';\n\n const existing = sourcesByTarget.get(targetKey) ?? [];\n existing.push({ name, pos, sortIndex });\n sourcesByTarget.set(targetKey, existing);\n });\n\n return sourcePositions.map(({ name, pos: sourcePos }) => {\n const sourceConfig = sources?.[name] ?? {};\n const targetPos = getSourceTarget(name, sourceConfig);\n const sourceCenterY = sourcePos.y + boxHeight / 2;\n const targetCenterY = targetPos.y + boxHeight / 2;\n\n // Find sources connecting to the same target\n const targetKey = sourceConfig.next\n ? `pre-${sourceConfig.next}`\n : preTransformerList.length > 0\n ? `pre-${preTransformerList[0].name}`\n : 'collector';\n const sourcesToSameTarget =\n sourcesByTarget.get(targetKey) ?? [];\n const indexWithinTarget = sourcesToSameTarget.findIndex(\n (s) => s.name === name,\n );\n\n // Only spread if multiple sources connect to same target\n const spreadY = getSpreadY(\n indexWithinTarget,\n sourcesToSameTarget.length,\n targetCenterY,\n );\n\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`source-${name}-arrows`}>\n <RoughArrow\n fromX={sourcePos.x + STAGE_WIDTH}\n fromY={sourceCenterY - offset}\n toX={targetPos.x}\n toY={spreadY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={spreadY + offset}\n toX={sourcePos.x + STAGE_WIDTH}\n toY={sourceCenterY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n });\n })()}\n\n {/* Pre-transformer chain arrows */}\n {preTransformerPositions.map(({ name, pos }, index) => {\n const procConfig = preTransformers?.[name] ?? {};\n // Find next target: next transformer in chain, or collector\n let targetPos: StagePosition;\n if (procConfig.next && preTransformers?.[procConfig.next]) {\n targetPos = stages[`pre-${procConfig.next}`];\n } else {\n targetPos = collectorPos;\n }\n\n const fromY = pos.y + boxHeight / 2;\n const toY = targetPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`pre-${name}-chain`}>\n <RoughArrow\n fromX={pos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={targetPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={toY + offset}\n toX={pos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* PostTransformer/Collector -> Destination arrows */}\n {destinationPositions.map(({ name, pos: destPos }) => {\n const destConfig = destinations?.[name] ?? {};\n const sourcePos = getDestinationSource(name, destConfig);\n const destCenterY = destPos.y + boxHeight / 2;\n const sourceCenterY = sourcePos.y + boxHeight / 2;\n\n // Draw straight horizontal arrow (post-transformers are already at destination Y)\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`destination-${name}-arrows`}>\n <RoughArrow\n fromX={sourcePos.x + STAGE_WIDTH}\n fromY={sourceCenterY - offset}\n toX={destPos.x}\n toY={destCenterY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={destPos.x}\n fromY={destCenterY + offset}\n toX={sourcePos.x + STAGE_WIDTH}\n toY={sourceCenterY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Post-transformer chain arrows (between post-transformers only) */}\n {postTransformerPositions\n .slice(0, -1)\n .map(({ name, pos }, index) => {\n const procConfig = postTransformers?.[name] ?? {};\n // Find next target: next transformer in chain\n const nextProc = postTransformerPositions[index + 1];\n if (!nextProc) return null;\n\n const targetPos = nextProc.pos;\n const fromY = pos.y + boxHeight / 2;\n const toY = targetPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`post-${name}-chain`}>\n <RoughArrow\n fromX={pos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={targetPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={toY + offset}\n toX={pos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Collector -> first PostTransformer arrow (if post-transformers exist) */}\n {postTransformerList.length > 0 &&\n (() => {\n const firstPostPos =\n stages[`post-${postTransformerList[0].name}`];\n const fromY = collectorCenterY;\n const toY = firstPostPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <>\n <RoughArrow\n fromX={collectorPos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={firstPostPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={firstPostPos.x}\n fromY={toY + offset}\n toX={collectorPos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </>\n );\n })()}\n\n {/* Destination -> After arrows (per-destination) */}\n {afterPositions.map(({ name: destName, pos: afterPos }) => {\n const destPos = stages[`destination-${destName}`];\n if (!destPos) return null;\n const destCenterY = destPos.y + boxHeight / 2;\n const afterCenterY = afterPos.y + boxHeight / 2;\n\n return (\n <RoughArrow\n key={`dest-${destName}-after`}\n fromX={destPos.x + STAGE_WIDTH}\n fromY={destCenterY}\n toX={afterPos.x}\n toY={afterCenterY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n );\n })}\n\n {/* Outgoing arrow - only show if no after stages and single destination */}\n {!hasAnyAfterStage && destinationEntries.length === 1 && (\n <RoughArrow\n fromX={stages.destination.x + STAGE_WIDTH}\n fromY={centerY}\n toX={totalWidth}\n toY={centerY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </>\n );\n })()}\n\n {/* Stages */}\n {stageConfigs.map(\n ({ key, config, fillVar, strokeVar, defaultLabel, defaultLink }) => {\n const pos = stages[key];\n const icon = config?.icon;\n const label = config?.label || defaultLabel;\n const text = config?.text;\n const description = config?.description;\n const link = config?.link;\n const stageHighlight = config?.highlight !== false;\n\n // Calculate label Y position\n // When text exists: label at ~25% from top, text fills remaining space centered\n const labelY = text\n ? pos.y + pos.height * 0.28\n : pos.y + pos.height / 2;\n\n // Resolve link URL: undefined = default, false = none, string = custom\n const linkUrl =\n link === false\n ? null\n : typeof link === 'string'\n ? link\n : defaultLink;\n\n // Content to render (box, label, text, description)\n const stageContent = (\n <>\n {/* Box */}\n <RoughRect\n x={pos.x}\n y={pos.y}\n width={pos.width}\n height={pos.height}\n fill={`var(${fillVar}, #6b7280)`}\n stroke={\n stageHighlight\n ? `var(${strokeVar}, #6b7280)`\n : 'var(--flow-edge-stroke, #9ca3af)'\n }\n />\n\n {/* Label (with optional icon) */}\n <foreignObject\n x={pos.x + 4}\n y={labelY - layout.labelSize / 2 - 2}\n width={pos.width - 8}\n height={layout.labelSize + 4}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n height: '100%',\n fontSize: layout.labelSize,\n fontWeight: layout.labelWeight,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: 'var(--color-text)',\n }}\n >\n {icon && <Icon icon={icon} width={14} height={14} />}\n <span>{label}</span>\n </div>\n </foreignObject>\n\n {/* Text (inside box, below label - supports ReactNode) */}\n {text && (\n <foreignObject\n x={pos.x + 4}\n y={pos.y + pos.height * 0.34}\n width={pos.width - 8}\n height={pos.height * 0.62}\n >\n <div\n style={{\n fontSize: layout.textSize,\n fontWeight: layout.textWeight,\n color: 'var(--color-text)',\n textAlign: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: 1.3,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {text}\n </div>\n </foreignObject>\n )}\n\n {/* Description (below box, using foreignObject for rich content) */}\n {description && (\n <foreignObject\n x={pos.x}\n y={pos.y + pos.height + 8}\n width={STAGE_WIDTH}\n height={descriptionHeight}\n >\n <div\n style={{\n fontSize: layout.descriptionSize,\n color: 'var(--color-text-muted)',\n textAlign: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: 1.3,\n }}\n >\n {description}\n </div>\n </foreignObject>\n )}\n </>\n );\n\n // Wrap in link if URL is set\n return linkUrl ? (\n <a\n key={key}\n href={linkUrl}\n style={{ cursor: 'pointer', textDecoration: 'none' }}\n >\n {stageContent}\n </a>\n ) : (\n <g key={key}>{stageContent}</g>\n );\n },\n )}\n\n {/* Markers */}\n {markers?.map((marker, index) => {\n const pos = getMarkerPosition(\n marker.position,\n stages,\n centerY,\n totalWidth,\n );\n // Skip markers for stages that don't exist\n if (!pos) return null;\n const id = marker.id ?? String(index + 1);\n return (\n <Marker key={`marker-${index}`} x={pos.x} y={pos.y} text={id} />\n );\n })}\n\n {/* Legend */}\n {legendItems.length > 0 && (\n <foreignObject\n x={PADDING_X}\n y={baseY + stackedHeight + belowBoxHeight + 4}\n width={totalWidth - PADDING_X * 2}\n height={LEGEND_LINE_HEIGHT * estimatedLines}\n >\n <div\n style={{\n fontSize: 11,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: 'var(--color-text-muted)',\n lineHeight: 1.6,\n }}\n >\n {legendItems.map((item, index) => {\n const id =\n item.id ?? String((markers?.indexOf(item) ?? index) + 1);\n return (\n <span key={`legend-${index}`}>\n <span\n style={{\n width: 12,\n height: 12,\n borderRadius: '50%',\n background: 'var(--flow-marker-fill, #dc2626)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 8,\n fontWeight: 600,\n color: 'var(--flow-marker-text, #ffffff)',\n verticalAlign: 'middle',\n marginRight: 4,\n position: 'relative',\n top: -1,\n }}\n >\n {id}\n </span>\n <span style={{ marginRight: 10 }}>{item.text}</span>\n </span>\n );\n })}\n </div>\n </foreignObject>\n )}\n </svg>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport type { RJSFSchema } from '@rjsf/utils';\n\nexport interface PropertyTableProps {\n schema: RJSFSchema;\n className?: string;\n /** Message to display when the schema has no properties. Default: 'No specific properties available.' */\n emptyMessage?: string;\n}\n\n// Mapping of type titles (from $ref targets' `title` meta) to doc links.\n// If a title isn't listed here, it's still rendered — just without a link.\nconst TYPE_LINKS: Record<string, string> = {\n 'Mapping.Value': '/docs/mapping/value',\n 'Mapping.Rule': '/docs/mapping/rule',\n 'WalkerOS.Consent': '/docs/guides/consent',\n};\n\ninterface TypeRef {\n title: string;\n href?: string;\n}\n\ninterface Property {\n name: string;\n type: string;\n typeRefs?: TypeRef[]; // if set, renderer shows links instead of plain type\n description: string;\n default?: string;\n required?: boolean;\n example?: string;\n}\n\ntype SchemaNode = Record<string, unknown>;\n\nfunction resolveRef(ref: string, root: SchemaNode): SchemaNode | undefined {\n // Only handle local refs like #/definitions/Foo or #/$defs/Foo\n if (!ref.startsWith('#/')) return undefined;\n const parts = ref.slice(2).split('/');\n let cur: unknown = root;\n for (const p of parts) {\n if (cur && typeof cur === 'object' && p in (cur as SchemaNode)) {\n cur = (cur as SchemaNode)[p];\n } else {\n return undefined;\n }\n }\n return cur as SchemaNode | undefined;\n}\n\nfunction refTitle(refNode: SchemaNode | undefined, fallback: string): string {\n if (refNode && typeof refNode.title === 'string') return refNode.title;\n return fallback;\n}\n\nfunction titleFromRefString(ref: string): string {\n const idx = ref.lastIndexOf('/');\n return idx >= 0 ? ref.slice(idx + 1) : ref;\n}\n\n// Detect $ref presence inside a property and build a display label + refs.\n// Returns undefined if no $ref involvement.\nfunction detectTypeRefs(\n prop: SchemaNode,\n root: SchemaNode,\n): { type: string; typeRefs: TypeRef[] } | undefined {\n const getRefInfo = (refStr: string): TypeRef => {\n const target = resolveRef(refStr, root);\n const title = refTitle(target, titleFromRefString(refStr));\n return { title, href: TYPE_LINKS[title] };\n };\n\n // Direct $ref\n if (typeof prop.$ref === 'string') {\n const info = getRefInfo(prop.$ref);\n return { type: info.title, typeRefs: [info] };\n }\n\n // allOf: [ { $ref } ] — treat as a simple single ref\n if (Array.isArray(prop.allOf)) {\n const allOf = prop.allOf as SchemaNode[];\n const refs = allOf\n .map((n) => (typeof n.$ref === 'string' ? (n.$ref as string) : undefined))\n .filter((r): r is string => !!r);\n if (refs.length === 1 && allOf.length === 1) {\n const info = getRefInfo(refs[0]);\n return { type: info.title, typeRefs: [info] };\n }\n }\n\n // anyOf: [ { $ref: X }, { type: 'array', items: { $ref: X } } ]\n if (Array.isArray(prop.anyOf)) {\n const anyOf = prop.anyOf as SchemaNode[];\n const refs: string[] = [];\n let arrayRef: string | undefined;\n let directRef: string | undefined;\n for (const branch of anyOf) {\n if (typeof branch.$ref === 'string') {\n directRef = branch.$ref as string;\n refs.push(directRef);\n } else if (\n branch.type === 'array' &&\n branch.items &&\n typeof (branch.items as SchemaNode).$ref === 'string'\n ) {\n arrayRef = (branch.items as SchemaNode).$ref as string;\n refs.push(arrayRef);\n }\n }\n if (anyOf.length === 2 && directRef && arrayRef && directRef === arrayRef) {\n const info = getRefInfo(directRef);\n return {\n type: `${info.title} | ${info.title}[]`,\n typeRefs: [info],\n };\n }\n if (refs.length > 0 && refs.length === anyOf.length) {\n const infos = refs.map(getRefInfo);\n return {\n type: infos.map((i) => i.title).join(' | '),\n typeRefs: infos,\n };\n }\n }\n\n // array with $ref items\n if (\n prop.type === 'array' &&\n prop.items &&\n typeof (prop.items as SchemaNode).$ref === 'string'\n ) {\n const info = getRefInfo((prop.items as SchemaNode).$ref as string);\n return { type: `${info.title}[]`, typeRefs: [info] };\n }\n\n // object with additionalProperties: { $ref }\n if (\n prop.type === 'object' &&\n prop.additionalProperties &&\n typeof (prop.additionalProperties as SchemaNode).$ref === 'string'\n ) {\n const info = getRefInfo(\n (prop.additionalProperties as SchemaNode).$ref as string,\n );\n return {\n type: `Record<string, ${info.title}>`,\n typeRefs: [info],\n };\n }\n\n return undefined;\n}\n\ninterface PropertyModalProps {\n property: Property | null;\n isOpen: boolean;\n onClose: () => void;\n}\n\nfunction schemaToProperties(schema: RJSFSchema): Property[] {\n const properties: Property[] = [];\n const root = schema as SchemaNode;\n\n // Resolve top-level indirection: allOf: [ { $ref: ... } ] should be\n // unwrapped so we render the underlying object's properties.\n let target: SchemaNode = schema as SchemaNode;\n if (\n Array.isArray(target.allOf) &&\n (target.allOf as SchemaNode[]).length === 1 &&\n typeof (target.allOf as SchemaNode[])[0].$ref === 'string'\n ) {\n const ref = (target.allOf as SchemaNode[])[0].$ref as string;\n const resolved = resolveRef(ref, root);\n if (resolved) target = resolved;\n }\n\n const required = (target.required as string[]) || [];\n\n if (!target.properties) {\n return properties;\n }\n\n for (const [name, prop] of Object.entries(\n target.properties as Record<string, unknown>,\n )) {\n const property = prop as SchemaNode;\n\n // $ref-aware type detection first\n const refInfo = detectTypeRefs(property, root);\n\n let type: string;\n let typeRefs: TypeRef[] | undefined;\n\n if (refInfo) {\n type = refInfo.type;\n typeRefs = refInfo.typeRefs;\n } else {\n type = (property.type as string) || 'any';\n\n if (property.enum) {\n type = (property.enum as unknown[])\n .map((v: unknown) => `'${v}'`)\n .join(' | ');\n }\n\n if (type === 'array' && property.items) {\n const items = property.items as Record<string, unknown>;\n if (items.enum) {\n type = `Array<${(items.enum as unknown[]).map((v: unknown) => `'${v}'`).join(' | ')}>`;\n } else {\n type = `Array<${(items.type as string) || 'any'}>`;\n }\n }\n\n if (type === 'object' && property.additionalProperties) {\n const addProps = property.additionalProperties as Record<\n string,\n unknown\n >;\n const valueType = (addProps.type as string) || 'any';\n type = `Record<string, ${valueType}>`;\n }\n\n if (property.anyOf || property.oneOf) {\n const variants = (property.anyOf || property.oneOf) as Array<\n Record<string, unknown>\n >;\n type = variants.map((v) => (v.type as string) || 'any').join(' | ');\n }\n }\n\n let description = (property.description as string) || '';\n let example: string | undefined;\n\n const exampleMatch = description.match(/\\(like\\s+(.+?)\\)$/);\n if (exampleMatch) {\n example = exampleMatch[1];\n description = description.replace(/\\s*\\(like\\s+.+?\\)$/, '');\n }\n\n if (type === 'any' && description.toLowerCase().includes('function')) {\n type = 'function';\n }\n\n properties.push({\n name,\n type,\n typeRefs,\n description,\n required: required.includes(name),\n default:\n property.default !== undefined ? String(property.default) : undefined,\n example,\n });\n }\n\n return properties;\n}\n\nfunction PropertyModal({ property, isOpen, onClose }: PropertyModalProps) {\n if (!isOpen || !property) return null;\n\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n };\n\n return (\n <div\n className=\"elb-property-table__modal-backdrop\"\n onClick={handleBackdropClick}\n >\n <div className=\"elb-property-table__modal-content\">\n <div className=\"elb-property-table__modal-header\">\n <h3 className=\"elb-property-table__modal-title\">\n <code className=\"elb-property-table__modal-property-name\">\n {property.name}\n </code>\n {property.required && (\n <span className=\"elb-property-table__required-icon\">*</span>\n )}\n </h3>\n <button\n className=\"elb-property-table__close-button\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <div className=\"elb-property-table__modal-body\">\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Type:</span>\n <code className=\"elb-property-table__modal-type elb-property-table__modal-type--wrap\">\n {property.type}\n </code>\n </div>\n {property.description && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">\n Description:\n </span>\n <p className=\"elb-property-table__modal-description\">\n {property.description}\n </p>\n </div>\n )}\n {property.default && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Default:</span>\n <code className=\"elb-property-table__modal-default\">\n {property.default}\n </code>\n </div>\n )}\n {property.example && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Example:</span>\n <code className=\"elb-property-table__modal-example\">\n {property.example}\n </code>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction renderTypeWithRefs(type: string, refs: TypeRef[]): React.ReactNode {\n // Split the type string by each ref title, replacing occurrences with\n // either a link or the plain title if no href is mapped.\n // Build a single alternation regex from unique titles.\n const uniqueTitles = Array.from(new Set(refs.map((r) => r.title)));\n if (uniqueTitles.length === 0) return type;\n\n // Sort longer first so \"Mapping.Value\" matches before any hypothetical\n // shorter prefix.\n uniqueTitles.sort((a, b) => b.length - a.length);\n const escaped = uniqueTitles.map((t) =>\n t.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n );\n const re = new RegExp(`(${escaped.join('|')})`, 'g');\n\n const titleToHref: Record<string, string | undefined> = {};\n for (const r of refs) titleToHref[r.title] = r.href;\n\n const parts = type.split(re);\n return parts.map((part, i) => {\n if (uniqueTitles.includes(part)) {\n const href = titleToHref[part];\n if (href) {\n return (\n <a key={i} href={href} className=\"elb-property-table__type-link\">\n {part}\n </a>\n );\n }\n return <span key={i}>{part}</span>;\n }\n return <span key={i}>{part}</span>;\n });\n}\n\nexport function PropertyTable({\n schema,\n className,\n emptyMessage,\n}: PropertyTableProps) {\n const [selectedProperty, setSelectedProperty] = useState<Property | null>(\n null,\n );\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const properties = schemaToProperties(schema);\n\n if (properties.length === 0) {\n return (\n <div\n className={`elb-explorer elb-property-table__empty ${className || ''}`}\n role=\"note\"\n >\n {emptyMessage ?? 'No specific properties available.'}\n </div>\n );\n }\n\n const hasRequiredProperties = properties.some(\n (property) => property.required,\n );\n\n const TYPE_MAX_LENGTH = 30;\n\n const isTruncated = (type: string) => type.length > TYPE_MAX_LENGTH;\n\n const truncateType = (type: string) => {\n if (type.length <= TYPE_MAX_LENGTH) return type;\n return type.slice(0, TYPE_MAX_LENGTH);\n };\n\n const openModal = (property: Property) => {\n setSelectedProperty(property);\n setIsModalOpen(true);\n };\n\n const closeModal = () => {\n setIsModalOpen(false);\n setSelectedProperty(null);\n };\n\n return (\n <div className={`elb-explorer ${className || ''}`}>\n <div className=\"elb-property-table__container\">\n <table className=\"elb-property-table\">\n <thead>\n <tr>\n <th>Property</th>\n <th>Type</th>\n <th>Description</th>\n <th>More</th>\n </tr>\n </thead>\n <tbody>\n {properties.map((property: Property, index: number) => (\n <tr key={index}>\n <td\n className=\"elb-property-table__property-cell\"\n data-label=\"Property\"\n >\n <code className=\"elb-property-table__property-name\">\n {property.name}\n {property.required && (\n <span className=\"elb-property-table__required-icon\">\n *\n </span>\n )}\n </code>\n </td>\n <td className=\"elb-property-table__type-cell\" data-label=\"Type\">\n {property.typeRefs && property.typeRefs.length > 0 ? (\n <code className=\"elb-property-table__property-type\">\n {renderTypeWithRefs(property.type, property.typeRefs)}\n </code>\n ) : isTruncated(property.type) ? (\n <button\n className=\"elb-property-table__type-button\"\n onClick={() => openModal(property)}\n aria-label={`View full type for ${property.name}`}\n >\n <code className=\"elb-property-table__property-type elb-property-table__property-type--truncated\">\n {truncateType(property.type)}\n </code>\n </button>\n ) : (\n <code className=\"elb-property-table__property-type\">\n {property.type}\n </code>\n )}\n </td>\n <td\n className=\"elb-property-table__description\"\n data-label=\"Description\"\n >\n {property.description}\n </td>\n <td\n className=\"elb-property-table__action-cell\"\n data-label=\"More\"\n >\n <button\n className=\"elb-property-table__more-button\"\n onClick={() => openModal(property)}\n aria-label={`More info about ${property.name}`}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {hasRequiredProperties && (\n <div className=\"elb-property-table__required-notice\">\n <span className=\"elb-property-table__required-icon\">*</span> Required\n fields\n </div>\n )}\n <PropertyModal\n property={selectedProperty}\n isOpen={isModalOpen}\n onClose={closeModal}\n />\n </div>\n );\n}\n","import React from 'react';\n\nexport interface DropdownProps {\n /** Trigger element (button, link, etc.) */\n trigger: React.ReactNode;\n /** Whether dropdown is open (controlled) */\n isOpen: boolean;\n /** Toggle handler */\n onToggle: () => void;\n /** Dropdown content */\n children: React.ReactNode;\n /** Alignment of dropdown panel */\n align?: 'left' | 'right';\n /** ARIA label for accessibility */\n ariaLabel?: string;\n /** Additional CSS class */\n className?: string;\n}\n\nexport interface DropdownItemProps {\n /** Item content */\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Visual variant */\n variant?: 'default' | 'danger';\n /** Additional CSS class */\n className?: string;\n}\n\nexport interface DropdownDividerProps {\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Dropdown - Generic dropdown container (UI only)\n *\n * Pure UI component for dropdown menus.\n * Click-outside and keyboard handling should be implemented in the parent\n * via hooks like useDropdown.\n *\n * @example\n * <Dropdown\n * trigger={<button>Menu</button>}\n * isOpen={isOpen}\n * onToggle={toggle}\n * align=\"right\"\n * >\n * <DropdownItem onClick={handleAction}>Action</DropdownItem>\n * <DropdownDivider />\n * <DropdownItem onClick={handleLogout} variant=\"danger\">Logout</DropdownItem>\n * </Dropdown>\n */\nexport function Dropdown({\n trigger,\n isOpen,\n onToggle,\n children,\n align = 'left',\n ariaLabel,\n className = '',\n}: DropdownProps) {\n return (\n <div className={`elb-dropdown ${className}`.trim()}>\n <div\n className=\"elb-dropdown__trigger\"\n onClick={onToggle}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-label={ariaLabel}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n }}\n >\n {trigger}\n </div>\n {isOpen && (\n <div\n className={`elb-dropdown__panel elb-dropdown__panel--${align}`}\n role=\"menu\"\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * DropdownItem - Menu item within a dropdown\n *\n * @example\n * <DropdownItem onClick={handleClick}>Action</DropdownItem>\n */\nexport function DropdownItem({\n children,\n onClick,\n disabled = false,\n variant = 'default',\n className = '',\n}: DropdownItemProps) {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n className={`elb-dropdown__item elb-dropdown__item--${variant} ${disabled ? 'elb-dropdown__item--disabled' : ''} ${className}`.trim()}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}\n\n/**\n * DropdownDivider - Visual separator between menu items\n *\n * @example\n * <DropdownDivider />\n */\nexport function DropdownDivider({ className = '' }: DropdownDividerProps) {\n return (\n <div\n className={`elb-dropdown__divider ${className}`.trim()}\n role=\"separator\"\n />\n );\n}\n","import React, { useState, useCallback } from 'react';\nimport { Box } from '../atoms/box';\nimport { CodeStatic } from '../atoms/code-static';\n\n/**\n * Tab with code content for CodeView\n */\nexport interface CodeViewTab {\n id: string;\n label: string;\n code: string;\n language?: string; // Optional, defaults to CodeView's language prop\n}\n\nexport interface CodeViewProps {\n // Single code mode\n code?: string;\n language?: string;\n\n // Tabs mode\n tabs?: CodeViewTab[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n defaultTab?: string;\n\n // Header\n label?: string;\n header?: string;\n showHeader?: boolean;\n showTrafficLights?: boolean;\n\n // Actions\n showCopy?: boolean;\n\n // Layout\n footer?: React.ReactNode;\n height?: string | number;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * CodeView - Read-only code rendered with the same visual chrome as CodeBox.\n *\n * Composes Box + CodeStatic. Use for non-interactive code blocks where Monaco\n * would be overkill but you want visual parity with `<CodeBox disabled>`.\n *\n * @example\n * <CodeView code={snippet} language=\"typescript\" label=\"Setup\" />\n *\n * @example\n * <CodeView\n * tabs={[\n * { id: 'js', label: 'JavaScript', code: jsCode, language: 'javascript' },\n * { id: 'ts', label: 'TypeScript', code: tsCode, language: 'typescript' },\n * ]}\n * showTrafficLights\n * />\n */\nexport function CodeView({\n code,\n language = 'javascript',\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n label,\n header,\n showHeader = true,\n showTrafficLights = false,\n showCopy = true,\n footer,\n height,\n className,\n style,\n}: CodeViewProps) {\n const [copied, setCopied] = useState(false);\n\n // Track active tab so the copy button copies the right code\n const [currentTabId, setCurrentTabId] = useState(\n controlledActiveTab ?? defaultTab ?? tabs?.[0]?.id ?? '',\n );\n\n const effectiveTabId = controlledActiveTab ?? currentTabId;\n\n const handleTabChange = useCallback(\n (tabId: string) => {\n setCurrentTabId(tabId);\n onTabChange?.(tabId);\n },\n [onTabChange],\n );\n\n const activeTabData = tabs?.find((t) => t.id === effectiveTabId);\n const currentCode = activeTabData?.code ?? code ?? '';\n const currentLanguage = activeTabData?.language ?? language;\n\n const boxHeader = header ?? label ?? 'Code';\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(currentCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard write failed silently\n }\n };\n\n const actions = showCopy ? (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n <button\n className=\"elb-explorer-btn\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy to clipboard'}\n >\n {copied ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n </div>\n ) : undefined;\n\n const boxTabs = tabs?.map((tab) => ({\n id: tab.id,\n label: tab.label,\n content: <CodeStatic code={tab.code} language={tab.language ?? language} />,\n }));\n\n return (\n <Box\n header={boxHeader}\n headerActions={actions}\n showHeader={showHeader}\n tabs={boxTabs}\n defaultTab={defaultTab}\n activeTab={controlledActiveTab}\n onTabChange={handleTabChange}\n showTrafficLights={showTrafficLights}\n footer={footer}\n height={height}\n style={style}\n className={className}\n >\n {!tabs && <CodeStatic code={code ?? ''} language={currentLanguage} />}\n </Box>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n createHighlighter,\n type Highlighter,\n type BundledLanguage,\n} from 'shiki';\nimport { palenightTheme } from '../../themes/palenight';\nimport { lighthouseTheme } from '../../themes/lighthouse';\nimport { monacoThemeToShiki } from '../../themes/shiki-adapter';\nimport { ELB_THEME_DARK, ELB_THEME_LIGHT } from '../../themes/names';\n\nexport interface CodeStaticProps {\n code: string;\n language?: string;\n className?: string;\n /** Force theme. If omitted, auto-detected from <html> data-theme / class. */\n theme?: 'light' | 'dark';\n}\n\n// Pinned language set. Extend here when docs need a new language.\nconst LANGS: readonly BundledLanguage[] = [\n 'json',\n 'javascript',\n 'typescript',\n 'tsx',\n 'jsx',\n 'bash',\n 'html',\n 'css',\n 'markdown',\n];\n\n// Derive Shiki themes from the same Monaco theme objects CodeBox uses,\n// so CodeView (Shiki) and CodeBox (Monaco) render identical colors.\n// Names match Monaco's `monaco.editor.setTheme(...)` keys.\nconst ELB_SHIKI_LIGHT = monacoThemeToShiki(lighthouseTheme, {\n name: ELB_THEME_LIGHT,\n type: 'light',\n defaultBackground: '#ffffff',\n defaultForeground: '#24292E',\n});\n\nconst ELB_SHIKI_DARK = monacoThemeToShiki(palenightTheme, {\n name: ELB_THEME_DARK,\n type: 'dark',\n defaultBackground: '#292d3e',\n defaultForeground: '#bfc7d5',\n});\n\nlet highlighterPromise: Promise<Highlighter> | null = null;\n\nfunction getHighlighter(): Promise<Highlighter> {\n if (!highlighterPromise) {\n highlighterPromise = createHighlighter({\n themes: [ELB_SHIKI_LIGHT, ELB_SHIKI_DARK],\n langs: [...LANGS],\n });\n }\n return highlighterPromise;\n}\n\nfunction detectTheme(): 'light' | 'dark' {\n if (typeof document === 'undefined') return 'dark';\n const html = document.documentElement;\n if (html.dataset.theme === 'dark') return 'dark';\n if (html.classList.contains('dark')) return 'dark';\n return 'light';\n}\n\nfunction resolveLang(language: string | undefined): BundledLanguage | 'text' {\n if (!language) return 'json';\n return (LANGS as readonly string[]).includes(language)\n ? (language as BundledLanguage)\n : 'text';\n}\n\nexport function CodeStatic({\n code,\n language,\n className,\n theme,\n}: CodeStaticProps): React.ReactElement {\n const [html, setHtml] = useState<string>('');\n const [activeTheme, setActiveTheme] = useState<'light' | 'dark'>(\n theme ?? detectTheme(),\n );\n\n // Track host theme changes when not explicitly overridden.\n useEffect(() => {\n if (theme) {\n setActiveTheme(theme);\n return;\n }\n setActiveTheme(detectTheme());\n const observer = new MutationObserver(() => setActiveTheme(detectTheme()));\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n return () => observer.disconnect();\n }, [theme]);\n\n useEffect(() => {\n let cancelled = false;\n getHighlighter().then((highlighter) => {\n if (cancelled) return;\n const rendered = highlighter.codeToHtml(code, {\n lang: resolveLang(language),\n theme: activeTheme === 'dark' ? ELB_THEME_DARK : ELB_THEME_LIGHT,\n });\n setHtml(rendered);\n });\n return () => {\n cancelled = true;\n };\n }, [code, language, activeTheme]);\n\n const wrapperClass = `elb-code-static${className ? ` ${className}` : ''}`;\n\n return (\n <div className={wrapperClass} dangerouslySetInnerHTML={{ __html: html }} />\n );\n}\n","/**\n * Monaco → Shiki theme adapter\n *\n * Converts a Monaco IStandaloneThemeData into Shiki's TextMate-format\n * ThemeRegistrationRaw so CodeStatic (Shiki) and Code (Monaco) use the\n * same walkerOS token colors (`elbTheme-dark` / `elbTheme-light`).\n *\n * Monaco token names are already TextMate-compatible scopes (e.g.\n * `string.quoted`, `entity.name.function`). The main differences:\n * - Shiki colors need a leading `#` prefix\n * - Shiki uses `tokenColors[]` instead of `rules[]`\n * - Shiki needs a `name` and `type` ('light' | 'dark')\n */\nimport type { editor } from 'monaco-editor';\nimport type { ThemeRegistrationRaw } from 'shiki';\n\nfunction normalizeColor(hex: string | undefined): string | undefined {\n if (!hex) return undefined;\n return hex.startsWith('#') ? hex : `#${hex}`;\n}\n\nfunction normalizeColors(\n colors: Record<string, string> | undefined,\n): Record<string, string> {\n if (!colors) return {};\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(colors)) {\n const normalized = normalizeColor(v);\n if (normalized) out[k] = normalized;\n }\n return out;\n}\n\nexport interface MonacoToShikiOptions {\n name: string;\n type: 'light' | 'dark';\n /** Fallback foreground if the Monaco theme didn't set editor.foreground. */\n defaultForeground?: string;\n /** Fallback background if the Monaco theme uses a transparent one. */\n defaultBackground?: string;\n}\n\n/**\n * Convert a Monaco theme to a Shiki ThemeRegistrationRaw.\n */\nexport function monacoThemeToShiki(\n monaco: editor.IStandaloneThemeData,\n options: MonacoToShikiOptions,\n): ThemeRegistrationRaw {\n const tokenColors = monaco.rules.map((rule) => {\n const settings: { foreground?: string; fontStyle?: string } = {};\n const fg = normalizeColor(rule.foreground);\n if (fg) settings.foreground = fg;\n if (rule.fontStyle) settings.fontStyle = rule.fontStyle;\n return {\n scope: rule.token,\n settings,\n };\n });\n\n const colors = normalizeColors(monaco.colors);\n\n // Shiki requires an opaque background and a foreground. Monaco themes use\n // transparent backgrounds (`#00000000`) so CSS can theme the box — replace\n // those with the caller-provided fallback.\n const isTransparent = (c: string | undefined) =>\n !c || c === '#00000000' || /^#[0-9a-f]{6}00$/i.test(c);\n\n const bg = isTransparent(colors['editor.background'])\n ? (options.defaultBackground ??\n (options.type === 'dark' ? '#292d3e' : '#ffffff'))\n : colors['editor.background'];\n\n const fg =\n colors['editor.foreground'] ??\n options.defaultForeground ??\n (options.type === 'dark' ? '#bfc7d5' : '#24292E');\n\n // Shiki's ThemeRegistrationRaw requires a `settings` array (TextMate format).\n // First entry sets global defaults; remaining entries are the token rules.\n const settings = [\n { settings: { foreground: fg, background: bg } },\n ...tokenColors,\n ];\n\n return {\n name: options.name,\n type: options.type,\n bg,\n fg,\n colors: {\n ...colors,\n 'editor.background': bg,\n 'editor.foreground': fg,\n },\n settings,\n tokenColors,\n };\n}\n","import React from 'react';\n\nexport interface FooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Footer - Footer atom component for boxes\n *\n * Provides a fixed-height footer area at the bottom of a box.\n * Pairs with Header component for consistent box structure.\n *\n * @example\n * <Box header=\"Preview\">\n * <Preview ... />\n * <Footer>\n * <ButtonGroup buttons={...} />\n * </Footer>\n * </Box>\n */\nexport function Footer({ children, className = '' }: FooterProps) {\n return <div className={`elb-explorer-footer ${className}`}>{children}</div>;\n}\n","import React from 'react';\n\nexport interface ButtonLinkProps {\n variant?: 'default' | 'primary' | 'secondary';\n size?: 'md' | 'lg';\n href?: string;\n onClick?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nexport function ButtonLink({\n variant = 'default',\n size = 'md',\n href,\n onClick,\n children,\n className = '',\n disabled = false,\n}: ButtonLinkProps) {\n const baseClass = 'elb-button-link';\n const classes =\n `${baseClass} ${baseClass}-${variant} ${baseClass}-${size} ${className}`.trim();\n\n if (href && !disabled) {\n return (\n <a href={href} className={classes}>\n {children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}\n","import React from 'react';\n\nexport interface SpinnerProps {\n /** Size of the spinner */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Spinner - Loading indicator\n *\n * Pure UI component for showing loading state.\n * No internal state - controlled via parent.\n *\n * @example\n * <Spinner size=\"md\" />\n */\nexport function Spinner({ size = 'md', className = '' }: SpinnerProps) {\n return (\n <span\n className={`elb-spinner elb-spinner--${size} ${className}`.trim()}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n","import { addIcon } from '@iconify/react';\n\naddIcon('walkeros:piwik-pro', {\n body: '<g fill=\"none\" fill-rule=\"evenodd\"><path fill=\"#231F20\" d=\"M0 0h90v90H0z\"/><path d=\"M50.792 57.21v.044H37.99v8.675c0 3.38-2.652 6.07-6.006 6.07a5.917 5.917 0 0 1-4.243-1.77 6.073 6.073 0 0 1-1.74-4.3v-38.88C26 23.67 28.65 21 31.983 21H50.79v.022c9.58.4 17.209 8.341 17.209 18.104 0 9.764-7.628 17.704-17.209 18.083h.001Zm-2.148-25.29H37.99v14.57h10.872c3.88-.112 6.993-3.337 6.993-7.274a7.347 7.347 0 0 0-2.114-5.16 7.16 7.16 0 0 0-5.098-2.134Z\" fill=\"#FFF\" fill-rule=\"nonzero\"/></g>',\n width: 90,\n height: 90,\n});\n\naddIcon('walkeros:snowplow', {\n body: '<path d=\"M328.55 135.473L259.662 14.399a31.246 31.246 0 0 0-10.654-10.224 30.715 30.715 0 0 0-14.09-4.123h-51.362c-.47-.07-.948-.07-1.419 0H97.061a30.545 30.545 0 0 0-14.086 4.136A31.074 31.074 0 0 0 72.36 14.45L3.45 135.473A32.012 32.012 0 0 0 0 149.939c0 5.031 1.183 9.99 3.45 14.465L72.38 285.539a31.203 31.203 0 0 0 10.607 10.279A30.68 30.68 0 0 0 97.06 300h137.857a30.669 30.669 0 0 0 14.087-4.178 31.19 31.19 0 0 0 10.616-10.283l68.929-121.135a32.018 32.018 0 0 0 3.45-14.465c0-5.032-1.183-9.991-3.45-14.466zM251.086 19.439l25.159 44.225-44.074 76.53-28.848-50.129a4.973 4.973 0 0 0-1.804-1.814 4.884 4.884 0 0 0-2.454-.665h-57.261l43.851-77.506h49.263a21.061 21.061 0 0 1 9.12 2.79 21.41 21.41 0 0 1 7.008 6.548l.04.021zm-81.954 125.887l-27.47-47.722h54.585l27.491 47.712-54.606.01zm-8.971 4.844l-27.155 47.197-27.258-47.423l27.146-47.198 27.267 47.424zm8.687 5.245h54.302l-26.974 46.91h-54.514l27.186-46.91zM80.985 19.439a21.263 21.263 0 0 1 6.988-6.505 20.922 20.922 0 0 1 9.088-2.751h77.129l-43.8 77.403H42.202L80.985 19.44zM12.056 140.512l24.399-42.908h87.924l-28.686 49.789a5.065 5.065 0 0 0 0 5.071l28.686 49.85H36.455l-24.43-42.867a22.01 22.01 0 0 1-2.13-9.452c0-3.273.729-6.504 2.13-9.452l.031-.031zm85.005 149.419a21.067 21.067 0 0 1-9.136-2.841 21.415 21.415 0 0 1-6.99-6.611l-38.803-68.137h87.924l44.236 77.589h-77.23zm153.974-9.452a21.41 21.41 0 0 1-6.986 6.609 21.071 21.071 0 0 1-9.131 2.843h-49.152l-44.246-77.62h57.474c.861 0 1.707-.229 2.454-.664a4.973 4.973 0 0 0 1.804-1.814l28.625-49.697 44.013 76.705-24.855 43.638zm68.929-121.135l-38.336 67.428-43.851-76.468 44.205-76.664 38.053 66.852a22.014 22.014 0 0 1 2.131 9.452c0 3.273-.729 6.504-2.131 9.452\" fill=\"#9E62DD\"/>',\n width: 332,\n height: 300,\n});\n","/**\n * @import {MDXComponents} from 'mdx/types.js'\n * @import {Component, ReactElement, ReactNode} from 'react'\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {ReactElement}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","import React, { type FC, type PropsWithChildren, Children } from 'react';\nimport { CodeBox } from '../molecules/code-box';\n\ninterface MDXCodeProps {\n className?: string;\n}\n\n/**\n * MDXCode - Code component for MDX files\n *\n * Automatically detects and renders inline vs block code:\n * - Inline code: `example` → <code className=\"elb-code-inline\">\n * - Block code: ```language\\ncode\\n``` → Uses CodeBox with Monaco editor\n *\n * Language detection:\n * - Extracts language from className (e.g., \"language-typescript\")\n * - Maps common MDX language names to Monaco language IDs\n *\n * Block code features (via CodeBox):\n * - Full Monaco editor with syntax highlighting\n * - Theme-aware (Palenight dark, VS Light)\n * - Copy to clipboard button\n * - Auto-height to fit content\n * - Read-only mode\n *\n * @example\n * // In MDX files (no import needed with MDXProvider):\n * Inline `code` example\n *\n * ```typescript\n * const block = \"code\";\n * ```\n */\nexport const MDXCode: FC<PropsWithChildren<MDXCodeProps>> = ({\n className,\n children,\n}) => {\n // Detect if this is block code based on:\n // 1. Has className (markdown sets \"language-*\" for code blocks)\n // 2. Content contains newlines\n const childrenArray = Children.toArray(children);\n const hasClassName = typeof className === 'string';\n\n // Check if content has newlines (block code)\n const hasNewlines = childrenArray.some((child) => {\n if (typeof child === 'string') {\n return child.match(/[\\n\\r]/g);\n }\n return false;\n });\n\n // Inline code: no className or no newlines\n if (!hasClassName || !hasNewlines) {\n return <code className=\"elb-code-inline\">{children}</code>;\n }\n\n // Block code: extract language from className\n // Format: \"language-typescript\" → \"typescript\"\n const mdxLanguage = className.replace(/^language-/, '');\n\n // Map MDX language names to Monaco language IDs\n const languageMap: Record<string, string> = {\n js: 'javascript',\n ts: 'typescript',\n jsx: 'javascript',\n tsx: 'typescript',\n bash: 'shell',\n sh: 'shell',\n yml: 'yaml',\n md: 'markdown',\n };\n\n const monacoLanguage = languageMap[mdxLanguage] || mdxLanguage;\n\n // Extract code string from children\n const code = childrenArray\n .map((child) => (typeof child === 'string' ? child : ''))\n .join('')\n .trim();\n\n return (\n <CodeBox\n code={code}\n language={monacoLanguage}\n disabled\n showCopy\n showHeader={false}\n autoHeight={{ min: 100, max: 600 }}\n />\n );\n};\n","import React, { type FC, type PropsWithChildren } from 'react';\nimport { MDXProvider as BaseMDXProvider } from '@mdx-js/react';\nimport { MDXCode } from '../components/atoms/mdx-code';\nimport { CodeBox } from '../components/molecules/code-box';\nimport { PropertyTable } from '../components/molecules/property-table';\n\n/**\n * MDXProvider - Makes components available in MDX files without explicit imports\n *\n * This provider wraps MDX content and injects React components for HTML elements.\n * Components are automatically used when rendering markdown/MDX content.\n *\n * Key features:\n * - No imports needed in MDX files\n * - Consistent styling across all documentation\n * - Theme-aware (respects data-theme attribute)\n * - Automatic inline vs block code detection\n *\n * Available components (no import needed):\n * - CodeBox: Monaco editor for code display (also auto-used for ```code blocks)\n * - PropertyTable: Display schema-based property documentation\n *\n * @example\n * // Wrap your app\n * <MDXProvider>\n * <App />\n * </MDXProvider>\n *\n * @example\n * // Then in any .mdx file, no imports needed:\n * # Documentation\n *\n * Inline `code` and markdown blocks:\n * ```typescript\n * const example = \"Hello\";\n * ```\n *\n * Or use components directly:\n * <CodeBox code=\"const x = 1;\" language=\"javascript\" />\n * <PropertyTable schema={mySchema} />\n */\nexport const MDXProvider: FC<PropsWithChildren> = ({ children }) => {\n const components = {\n // Markdown element mappings\n code: MDXCode, // Auto-handles ```code blocks\n\n // Explorer components (no import needed in MDX)\n CodeBox,\n PropertyTable,\n };\n\n return <BaseMDXProvider components={components}>{children}</BaseMDXProvider>;\n};\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDropdownReturn {\n /** Whether dropdown is currently open */\n isOpen: boolean;\n /** Toggle dropdown open/closed */\n toggle: () => void;\n /** Open the dropdown */\n open: () => void;\n /** Close the dropdown */\n close: () => void;\n /** Ref to attach to the container element for click-outside detection */\n containerRef: RefObject<HTMLDivElement | null>;\n}\n\n/**\n * useDropdown - Manages dropdown open/close state with click-outside and keyboard handling\n *\n * Provides:\n * - Open/close state management\n * - Click-outside detection to close\n * - Escape key handling to close\n *\n * @example\n * const { isOpen, toggle, close, containerRef } = useDropdown();\n *\n * return (\n * <div ref={containerRef}>\n * <Dropdown isOpen={isOpen} onToggle={toggle}>\n * ...\n * </Dropdown>\n * </div>\n * );\n */\nexport function useDropdown(): UseDropdownReturn {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const toggle = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Close on Escape key\n useEffect(() => {\n if (!isOpen) return;\n\n function handleEscape(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen]);\n\n return {\n isOpen,\n toggle,\n open,\n close,\n containerRef,\n };\n}\n","export interface MonacoSchemaExtension {\n defaultSnippets?: Array<{\n label: string;\n description?: string;\n markdownDescription?: string;\n body?: unknown;\n bodyText?: string;\n }>;\n markdownDescription?: string;\n enumDescriptions?: string[];\n markdownEnumDescriptions?: string[];\n deprecationMessage?: string;\n errorMessage?: string;\n patternErrorMessage?: string;\n doNotSuggest?: boolean;\n suggestSortText?: string;\n}\n\ntype EnrichmentMap = Record<string, MonacoSchemaExtension>;\n\n/**\n * Deep-merges Monaco-specific JSON Schema extensions into a base schema.\n * Keys in the enrichment map are dot-paths (e.g., 'properties.sources').\n * Empty string '' targets the root. Does not mutate the original.\n */\nexport function enrichSchema<T extends Record<string, unknown>>(\n baseSchema: T,\n enrichments: EnrichmentMap,\n): T {\n const schema: T = JSON.parse(JSON.stringify(baseSchema));\n\n for (const [path, extensions] of Object.entries(enrichments)) {\n const target = path === '' ? schema : getNestedObject(schema, path);\n if (target && typeof target === 'object') {\n Object.assign(target, extensions);\n }\n }\n\n return schema;\n}\n\nfunction getNestedObject(\n obj: Record<string, unknown>,\n path: string,\n): Record<string, unknown> | undefined {\n const keys = path.split('.');\n let current: unknown = obj;\n for (const key of keys) {\n if (\n current &&\n typeof current === 'object' &&\n key in (current as Record<string, unknown>)\n ) {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n return current as Record<string, unknown> | undefined;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\n/**\n * Takes the base Flow.Json JSON Schema (from @walkeros/core z.toJSONSchema())\n * and returns an enriched version with Monaco-specific extensions.\n *\n * The actual schema uses { allOf: [{ $ref: '#/definitions/FlowJson' }], definitions: {...} }.\n * Root walkeros.config.json properties live under definitions.FlowJson.properties.\n * Per-flow properties live under definitions.Flow.properties.\n */\nexport function enrichFlowConfigSchema(baseSchema: AnySchema): AnySchema {\n // Deep clone to avoid mutating the input.\n const schema = JSON.parse(JSON.stringify(baseSchema));\n\n const root = schema.definitions?.FlowJson;\n const flowDef = schema.definitions?.Flow;\n const flowConfigDef = schema.definitions?.FlowConfig;\n\n if (!root?.properties) return schema;\n\n const props = root.properties;\n const flowProps = flowDef?.properties;\n const flowConfigProps = flowConfigDef?.properties;\n\n // Enrich version\n if (props.version) {\n props.version.markdownDescription =\n 'Schema version number. Use `4` for the current format.\\n\\n```json\\n\"version\": 4\\n```';\n }\n\n // Enrich $schema\n if (props.$schema) {\n props.$schema.markdownDescription =\n 'JSON Schema URI for IDE validation.\\n\\n```json\\n\"$schema\": \"https://walkeros.io/schema/flow/v4.json\"\\n```';\n }\n\n // Enrich include\n if (props.include) {\n props.include.markdownDescription =\n 'Folders to include in the bundle output.\\n\\n```json\\n\"include\": [\"./src\", \"./lib\"]\\n```';\n }\n\n // Enrich variables\n if (props.variables) {\n props.variables.markdownDescription =\n 'Shared variables for `$var.name` interpolation across all flows.\\n\\n' +\n '```json\\n\"variables\": {\\n \"measurementId\": \"G-XXXXXXXXXX\",\\n \"debug\": false\\n}\\n```\\n\\n' +\n 'Reference in any config value: `\"$var.measurementId\"`';\n props.variables.defaultSnippets = [\n {\n label: 'Add variable',\n description: 'New key-value variable',\n body: { '${1:name}': '${2:value}' },\n },\n ];\n }\n\n // Enrich definitions\n if (props.definitions) {\n props.definitions.markdownDescription =\n 'Reusable configuration fragments for `$def.name` references.\\n\\n' +\n '```json\\n\"definitions\": {\\n \"gaConfig\": {\\n \"measurementId\": \"$var.trackingId\"\\n }\\n}\\n```\\n\\n' +\n 'Reference in any config: `\"$def.gaConfig\"`';\n props.definitions.defaultSnippets = [\n {\n label: 'Add definition',\n description: 'New reusable config fragment',\n body: { '${1:name}': { '${2:key}': '${3:value}' } },\n },\n ];\n }\n\n // Enrich flows with scaffolding snippets\n if (props.flows) {\n props.flows.markdownDescription =\n 'Flow configurations keyed by name. Each flow defines a complete event pipeline.\\n\\n' +\n '```json\\n\"flows\": {\\n \"myFlow\": {\\n \"config\": { \"platform\": \"web\" },\\n \"sources\": { ... },\\n \"destinations\": { ... }\\n }\\n}\\n```';\n props.flows.defaultSnippets = [\n {\n label: 'Web flow (basic)',\n description: 'Minimal web flow with browser source',\n body: {\n '${1:myFlow}': {\n config: { platform: 'web' },\n sources: {\n browser: { package: '@walkeros/web-source-browser' },\n },\n destinations: {},\n },\n },\n },\n {\n label: 'Server flow (basic)',\n description: 'Minimal server flow with Express source',\n body: {\n '${1:myFlow}': {\n config: { platform: 'server' },\n sources: {\n express: { package: '@walkeros/server-source-express' },\n },\n destinations: {},\n },\n },\n },\n {\n label: 'Web + GA4 flow',\n description: 'Web flow with browser source and GA4 destination',\n body: {\n '${1:myFlow}': {\n config: { platform: 'web' },\n sources: {\n browser: { package: '@walkeros/web-source-browser' },\n },\n destinations: {\n ga4: {\n package: '@walkeros/web-destination-gtag',\n config: {\n measurementId: '$var.${2:measurementId}',\n },\n },\n },\n },\n },\n },\n ];\n }\n\n // Enrich per-Flow sub-properties (definitions.Flow.properties)\n if (flowProps) {\n if (flowProps.config) {\n flowProps.config.markdownDescription =\n 'Per-flow configuration: platform identity, optional public URL, free-form settings, bundle.\\n\\n' +\n '```json\\n\"config\": {\\n \"platform\": \"web\",\\n \"settings\": {\\n \"windowCollector\": \"collector\"\\n }\\n}\\n```';\n flowProps.config.defaultSnippets = [\n {\n label: 'Web platform config',\n description: 'Browser-based flow configuration',\n body: { platform: 'web' },\n },\n {\n label: 'Server platform config',\n description: 'Node.js flow configuration',\n body: { platform: 'server' },\n },\n ];\n }\n\n if (flowProps.sources) {\n flowProps.sources.markdownDescription =\n 'Source configurations for data capture, keyed by step name.\\n\\n' +\n '```json\\n\"sources\": {\\n \"browser\": { \"package\": \"@walkeros/web-source-browser\" }\\n}\\n```';\n flowProps.sources.defaultSnippets = [\n {\n label: 'Add web source',\n description: 'Browser source for web tracking',\n body: {\n '${1:browser}': {\n package: '@walkeros/web-source-browser',\n },\n },\n },\n {\n label: 'Add server source',\n description: 'Express source for server tracking',\n body: {\n '${1:express}': {\n package: '@walkeros/server-source-express',\n },\n },\n },\n ];\n }\n\n if (flowProps.destinations) {\n flowProps.destinations.markdownDescription =\n 'Destination configurations for data output, keyed by step name.\\n\\n' +\n '```json\\n\"destinations\": {\\n \"ga4\": {\\n \"package\": \"@walkeros/web-destination-ga4\",\\n \"config\": { \"measurementId\": \"$var.trackingId\" }\\n }\\n}\\n```';\n flowProps.destinations.defaultSnippets = [\n {\n label: 'Add GA4 destination',\n description: 'Google Analytics 4 destination',\n body: {\n '${1:ga4}': {\n package: '@walkeros/web-destination-gtag',\n config: {\n measurementId: '$var.${2:measurementId}',\n },\n },\n },\n },\n {\n label: 'Add custom destination',\n description: 'Custom destination with inline code',\n body: {\n '${1:custom}': {\n code: {\n push: '$code:(event) => { ${2:// handle event} }',\n },\n },\n },\n },\n ];\n }\n\n if (flowProps.transformers) {\n flowProps.transformers.markdownDescription =\n 'Transformer configurations for event transformation, keyed by step name.\\n\\n' +\n '```json\\n\"transformers\": {\\n \"validator\": {\\n \"code\": { \"push\": \"$code:(event) => event\" }\\n }\\n}\\n```';\n flowProps.transformers.defaultSnippets = [\n {\n label: 'Add transformer',\n description: 'Inline transformer with code',\n body: {\n '${1:transformer}': {\n code: {\n push: '$code:(event) => { ${2:return event;} }',\n },\n },\n },\n },\n ];\n }\n }\n\n // Enrich Flow.Config sub-properties (definitions.FlowConfig.properties)\n if (flowConfigProps) {\n if (flowConfigProps.platform) {\n flowConfigProps.platform.markdownDescription =\n 'Platform identity for this flow.\\n\\n' +\n '- `web` builds to IIFE format, ES2020 target, browser platform.\\n' +\n '- `server` builds to ESM format, Node18 target, node platform.\\n\\n' +\n '```json\\n\"platform\": \"web\"\\n```';\n }\n\n if (flowConfigProps.url) {\n flowConfigProps.url.markdownDescription =\n 'Public URL where this flow is reachable. Used for cross-flow `$flow.X.url` references.\\n\\n' +\n '```json\\n\"url\": \"https://collect.example.com\"\\n```';\n }\n\n if (flowConfigProps.settings) {\n flowConfigProps.settings.markdownDescription =\n 'Free-form key-value settings consumed by the platform runtime.\\n\\n' +\n 'For web: typical keys include `windowCollector`, `windowElb`.\\n\\n' +\n '```json\\n\"settings\": {\\n \"windowCollector\": \"collector\",\\n \"windowElb\": \"elb\"\\n}\\n```';\n }\n\n if (flowConfigProps.bundle) {\n flowConfigProps.bundle.markdownDescription =\n 'Bundle configuration: NPM packages to include and transitive dependency overrides.\\n\\n' +\n '```json\\n\"bundle\": {\\n \"packages\": {\\n \"@walkeros/web-source-browser\": { \"version\": \"^2.0.0\" }\\n }\\n}\\n```';\n }\n }\n\n return schema;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\n/**\n * Returns an enriched JSON Schema for the walkerOS Contract editor.\n * Structure: { $tagging: number, entity: { action: JSONSchema } }\n */\nexport function getEnrichedContractSchema(): AnySchema {\n return {\n type: 'object',\n markdownDescription:\n 'walkerOS Data Contract. Defines entity→action schemas for event validation.\\n\\n' +\n '```json\\n{\\n \"$tagging\": 1,\\n \"page\": {\\n' +\n ' \"view\": {\\n \"type\": \"object\",\\n \"properties\": {\\n' +\n ' \"title\": { \"type\": \"string\" }\\n }\\n }\\n }\\n}\\n```',\n properties: {\n $tagging: {\n type: 'number',\n markdownDescription:\n 'Contract version number. Increment when making breaking changes.\\n\\n```json\\n\"$tagging\": 1\\n```',\n },\n },\n additionalProperties: {\n type: 'object',\n markdownDescription: 'Entity name. Contains action→schema mappings.',\n additionalProperties: {\n type: 'object',\n markdownDescription:\n 'Action schema (JSON Schema). Defines valid event data for this entity+action.\\n\\n' +\n '```json\\n{\\n \"type\": \"object\",\\n \"properties\": {\\n' +\n ' \"name\": { \"type\": \"string\" },\\n \"price\": { \"type\": \"number\" }\\n' +\n ' },\\n \"required\": [\"name\"]\\n}\\n```',\n defaultSnippets: [\n {\n label: 'Object schema',\n description: 'Schema with typed properties',\n body: {\n type: 'object',\n properties: {\n '${1:name}': { type: '${2:string}' },\n },\n },\n },\n ],\n },\n defaultSnippets: [\n {\n label: 'Add action',\n description: 'Action with event data schema',\n body: {\n '${1:action}': {\n type: 'object',\n properties: {\n '${2:property}': { type: '${3:string}' },\n },\n },\n },\n },\n ],\n },\n defaultSnippets: [\n {\n label: 'Entity with action',\n description: 'New entity with one action and properties',\n body: {\n '${1:entity}': {\n '${2:action}': {\n type: 'object',\n properties: {\n '${3:property}': { type: '${4:string}' },\n },\n },\n },\n },\n },\n ],\n };\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\nexport function getVariablesSchema(): AnySchema {\n return {\n type: 'object',\n markdownDescription:\n 'Flow variables for `$var.name` interpolation. Values must be string, number, or boolean.\\n\\n' +\n '```json\\n{\\n \"measurementId\": \"G-XXXXXXXXXX\",\\n \"debug\": false,\\n \"batchSize\": 10\\n}\\n```\\n\\n' +\n 'Reference in any config value: `\"$var.measurementId\"`',\n additionalProperties: {\n oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],\n },\n defaultSnippets: [\n {\n label: 'Add string variable',\n body: { '${1:name}': '${2:value}' },\n },\n {\n label: 'Add boolean variable',\n body: { '${1:name}': '${2|true,false|}' },\n },\n {\n label: 'Add number variable',\n body: { '${1:name}': 0 },\n },\n ],\n };\n}\n","import {\n REF_VAR,\n REF_DEF,\n REF_ENV,\n REF_FLOW,\n REF_STORE,\n REF_SECRET,\n} from '@walkeros/core';\nimport type { IntelliSenseContext } from '../types/intellisense';\n\nexport interface ValidationIssue {\n message: string;\n severity: 'error' | 'warning' | 'info';\n startIndex: number;\n endIndex: number;\n}\n\n/**\n * Build an inline global regex from any REF_* source. The shared REF_*\n * constants include `^`/`$` anchors for whole-value matches; for global\n * text scanning we need a non-anchored global variant. We also bound the\n * trailing optional `.+` path group to `[\\w.]+` so it doesn't greedily\n * swallow characters past the reference token. A fresh clone per call\n * keeps `lastIndex` state local.\n */\nfunction inlineGlobal(pattern: RegExp): RegExp {\n const src = pattern.source\n .replace(/^\\^/, '')\n .replace(/\\$$/, '')\n .replace(/\\(\\.\\+\\)\\?$/, '([\\\\w.]+)?');\n return new RegExp(src, 'g');\n}\n\n/**\n * Validate walkerOS references in JSON text against the current context.\n * Returns issues for dangling references and invalid cross-references.\n */\nexport function validateWalkerOSReferences(\n text: string,\n context: Partial<IntelliSenseContext>,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n // Check $var. references\n if (context.variables) {\n const varRegex = inlineGlobal(REF_VAR);\n let match: RegExpExecArray | null;\n while ((match = varRegex.exec(text)) !== null) {\n if (!(match[1] in context.variables)) {\n issues.push({\n message: `Unknown variable \"$var.${match[1]}\". Defined variables: ${Object.keys(context.variables).join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $def. references\n if (context.definitions) {\n const defRegex = inlineGlobal(REF_DEF);\n let match: RegExpExecArray | null;\n while ((match = defRegex.exec(text)) !== null) {\n if (!(match[1] in context.definitions)) {\n issues.push({\n message: `Unknown definition \"$def.${match[1]}\". Defined: ${Object.keys(context.definitions).join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $secret. references\n if (context.secrets) {\n const secretRegex = inlineGlobal(REF_SECRET);\n let match: RegExpExecArray | null;\n while ((match = secretRegex.exec(text)) !== null) {\n if (!context.secrets.includes(match[1])) {\n issues.push({\n message: `Unknown secret \"$secret.${match[1]}\". Available: ${context.secrets.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $store. references (always when stores inventory is present)\n if (context.stores) {\n const storeRegex = inlineGlobal(REF_STORE);\n let match: RegExpExecArray | null;\n while ((match = storeRegex.exec(text)) !== null) {\n if (!context.stores.includes(match[1])) {\n issues.push({\n message: `Unknown store \"$store.${match[1]}\". Available: ${context.stores.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $flow. references (only when flows inventory is present)\n if (context.flows) {\n const flowRegex = inlineGlobal(REF_FLOW);\n let match: RegExpExecArray | null;\n while ((match = flowRegex.exec(text)) !== null) {\n if (!context.flows.includes(match[1])) {\n issues.push({\n message: `Unknown flow \"$flow.${match[1]}\". Available: ${context.flows.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $env. references (only when envNames inventory is provided)\n if (context.envNames) {\n const envRegex = inlineGlobal(REF_ENV);\n let match: RegExpExecArray | null;\n while ((match = envRegex.exec(text)) !== null) {\n if (!context.envNames.includes(match[1])) {\n issues.push({\n message: `Unknown env var \"$env.${match[1]}\". Known: ${context.envNames.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check next/before cross-references across scalar, array, and Route[] forms\n issues.push(...validateChainRefs(text, context.stepNames?.transformers));\n\n return issues;\n}\n\n// TODO: precise source offsets for chain-ref markers (currently path-only).\nfunction validateChainRefs(\n text: string,\n stepNamesInput: string[] | undefined,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n if (!stepNamesInput) return issues;\n // Local const so nested closures see the narrowed non-undefined type.\n const stepNames: string[] = stepNamesInput;\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return issues;\n }\n\n function collectRefs(value: unknown): string[] {\n if (typeof value === 'string') return [value];\n if (Array.isArray(value)) {\n const out: string[] = [];\n for (const item of value) {\n if (typeof item === 'string') out.push(item);\n else if (item && typeof item === 'object' && 'next' in item) {\n out.push(...collectRefs((item as { next: unknown }).next));\n }\n }\n return out;\n }\n return [];\n }\n\n function walk(node: unknown, path: (string | number)[]): void {\n if (!node || typeof node !== 'object') return;\n if (Array.isArray(node)) {\n node.forEach((item, i) => walk(item, [...path, i]));\n return;\n }\n for (const [key, value] of Object.entries(node)) {\n const p = [...path, key];\n if (key === 'next' || key === 'before') {\n // collectRefs handles scalar/array/Route[] uniformly. Do NOT walk\n // into the value afterwards — a Route[] item's inner `next` would\n // otherwise be re-detected on the recursive descent.\n for (const ref of collectRefs(value)) {\n if (!stepNames.includes(ref)) {\n // v1: path-only diagnostic with index 0,0; offset tracking is a\n // follow-up (see TODO above).\n issues.push({\n message: `Unknown transformer \"${ref}\" in ${p.join('.')}. Available: ${stepNames.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: 0,\n endIndex: 0,\n });\n }\n }\n continue;\n }\n walk(value, p);\n }\n }\n\n walk(parsed, []);\n return issues;\n}\n","import type { IntelliSenseContext, PackageInfo } from '../types/intellisense';\n\n/**\n * Extract IntelliSense context from a Flow.Json JSON string.\n *\n * Parses the JSON, walks root → flow → steps, and collects\n * all discoverable variables, definitions, step names, packages,\n * platform, and contract entities.\n *\n * Returns `{}` for invalid JSON or non-Flow structures.\n * Pure function, no side effects, no state.\n */\nexport function extractFlowIntelliSenseContext(\n json: string,\n): Partial<IntelliSenseContext> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch {\n return {};\n }\n\n if (!isFlowConfig(parsed)) return {};\n\n const variables: Record<string, string | number | boolean> = {};\n const definitions: Record<string, unknown> = {};\n const sources: string[] = [];\n const destinations: string[] = [];\n const transformers: string[] = [];\n const stores: string[] = [];\n const packages: PackageInfo[] = [];\n const contractEntities: Array<{ entity: string; actions: string[] }> = [];\n const contractRaw: Record<string, unknown> = {};\n let platform: 'web' | 'server' | undefined;\n\n // Config-level\n mergeVars(variables, parsed.variables);\n mergeDefs(definitions, parsed.definitions);\n extractContract(contractEntities, parsed.contract);\n if (isObject(parsed.contract)) Object.assign(contractRaw, parsed.contract);\n\n // Walk each flow settings\n for (const settings of Object.values(parsed.flows)) {\n if (!isObject(settings)) continue;\n\n // Platform detection (first match wins) - reads config.platform in v4\n if (!platform && isObject(settings.config)) {\n const p = settings.config.platform;\n if (p === 'web' || p === 'server') platform = p;\n }\n\n // Settings-level variables/definitions/contract\n mergeVars(variables, settings.variables);\n mergeDefs(definitions, settings.definitions);\n extractContract(contractEntities, settings.contract);\n if (isObject(settings.contract))\n Object.assign(contractRaw, settings.contract);\n\n // Sources\n if (isObject(settings.sources)) {\n for (const [name, ref] of Object.entries(settings.sources)) {\n sources.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n mergeDefs(definitions, ref.definitions);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'source',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Destinations\n if (isObject(settings.destinations)) {\n for (const [name, ref] of Object.entries(settings.destinations)) {\n destinations.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n mergeDefs(definitions, ref.definitions);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'destination',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Transformers\n if (isObject(settings.transformers)) {\n for (const [name, ref] of Object.entries(settings.transformers)) {\n transformers.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n mergeDefs(definitions, ref.definitions);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'transformer',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Stores — collect IDs and cascade their variables/definitions\n if (isObject(settings.stores)) {\n for (const [name, ref] of Object.entries(settings.stores)) {\n stores.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n mergeDefs(definitions, ref.definitions);\n }\n }\n }\n }\n\n const result: Partial<IntelliSenseContext> = {\n variables,\n definitions,\n stepNames: { sources, destinations, transformers },\n };\n\n if (platform) result.platform = platform;\n if (packages.length > 0) result.packages = packages;\n if (contractEntities.length > 0) result.contract = contractEntities;\n if (Object.keys(contractRaw).length > 0) result.contractRaw = contractRaw;\n if (stores.length > 0) result.stores = stores;\n\n return result;\n}\n\n// --- Helpers ---\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n}\n\nfunction isFlowConfig(v: unknown): v is {\n version: number;\n flows: Record<string, unknown>;\n [k: string]: unknown;\n} {\n return isObject(v) && 'version' in v && 'flows' in v && isObject(v.flows);\n}\n\nfunction isPrimitive(v: unknown): v is string | number | boolean {\n return (\n typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean'\n );\n}\n\nfunction mergeVars(\n target: Record<string, string | number | boolean>,\n source: unknown,\n): void {\n if (!isObject(source)) return;\n for (const [k, v] of Object.entries(source)) {\n if (isPrimitive(v)) target[k] = v;\n }\n}\n\nfunction mergeDefs(target: Record<string, unknown>, source: unknown): void {\n if (!isObject(source)) return;\n for (const [k, v] of Object.entries(source)) {\n target[k] = v;\n }\n}\n\nfunction extractContract(\n target: Array<{ entity: string; actions: string[] }>,\n contract: unknown,\n): void {\n if (!isObject(contract)) return;\n for (const [key, value] of Object.entries(contract)) {\n if (key.startsWith('$') || !isObject(value)) continue;\n // Avoid duplicates when merging config + settings contracts\n const existing = target.find((e) => e.entity === key);\n const actions = Object.keys(value);\n if (existing) {\n for (const a of actions) {\n if (!existing.actions.includes(a)) existing.actions.push(a);\n }\n } else {\n target.push({ entity: key, actions });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAopBO,SAAS,gBACd,aACQ;AACR,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAjqBA,IAiBa,kBA+MA,yBAyOA;AAzcb;AAAA;AAAA;AAiBO,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+MzB,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyOhC,IAAM,yBAAyB;AAAA;AAA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","names":["MDXProvider","import_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","C","TOKEN_GROUPS","regex","import_core","regex","prettierBabel","prettierEstree","prettierTypescript","prettierHtml","import_react","import_jsx_runtime","handleChange","loadPackageTypes","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_core","prettier","import_babel","import_estree","import_typescript","import_html","prettierBabel","prettierEstree","prettierTypescript","prettierHtml","import_jsx_runtime","format","import_react","import_collector","import_jsx_runtime","import_react","storage","storage","isNumber","storage","idCounter","simpleNames","send","props","mounted","name","data","concatArrays","array1","array2","combinedArray","Array","length","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","Map","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","startsWith","endsWith","getGroupIdForArbitraryProperty","classParts","split","startIndex","getGroupRecursive","getConflictingClassGroupIds","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","classPathsLength","currentClassPart","nextClassPartObject","get","result","undefined","classRest","join","slice","validatorsLength","validatorObj","indexOf","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","entries","Object","key","value","path","current","parts","part","next","set","func","createLruCache","maxCacheSize","cacheSize","cache","create","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","orderSensitiveModifiers","forEach","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","has","sort","createConfigUtils","sortModifiers","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","originalClassName","substring","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","test","isNumber","Number","isNaN","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryWeight","isLabelWeight","isArbitraryFamilyName","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","exec","shouldMatchNoLabel","label","getDefaultConfig","themeColor","fromTheme","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","isArbitraryVariable","isArbitraryValue","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","isFraction","scaleGridTemplateColsRows","isInteger","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","isArbitraryVariablePosition","isArbitraryPosition","position","scaleBgRepeat","repeat","scaleBgSize","isArbitraryVariableSize","isArbitrarySize","size","scaleGradientStopPosition","isPercent","isArbitraryVariableLength","isArbitraryLength","scaleRadius","scaleBorderWidth","isNumber","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","cacheSize","theme","animate","aspect","blur","isTshirtSize","breakpoint","color","isAny","container","ease","font","isAnyNonArbitrary","leading","perspective","radius","shadow","spacing","text","tracking","classGroups","columns","box","display","sr","float","clear","isolation","object","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","content","items","baseline","self","p","px","py","ps","pe","pbs","pbe","pt","pr","pb","pl","m","mx","my","ms","me","mbs","mbe","mt","mr","mb","ml","inline","block","w","screen","h","isArbitraryVariableWeight","isArbitraryWeight","isArbitraryVariableFamilyName","isArbitraryFamilyName","isArbitraryNumber","list","placeholder","decoration","indent","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","isArbitraryVariableImage","isArbitraryImage","from","via","rounded","border","divide","outline","isArbitraryVariableShadow","isArbitraryShadow","ring","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","conflictingClassGroups","conflictingClassGroupModifiers","orderSensitiveModifiers","twMerge","createTailwindMerge","getDefaultConfig","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","format","import_react","import_jsx_runtime","rough","r","pos","baseY","React","import_react","import_jsx_runtime","r","import_jsx_runtime","import_react","import_react","settings","fg","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","React","import_react","import_jsx_runtime","import_jsx_runtime","MDXProvider","import_react","import_core","inlineGlobal"]}
1
+ {"version":3,"sources":["../src/utils/monaco-context-types.ts","walkeros-types:virtual:walkeros-core-types","../src/utils/monaco-types.ts","../src/index.ts","../src/components/demos/PromotionPlayground.tsx","../src/components/atoms/grid.tsx","../src/contexts/GridHeightContext.tsx","../src/components/molecules/preview.tsx","../src/components/atoms/box.tsx","../src/components/atoms/header.tsx","../src/components/atoms/preview-footer.tsx","../src/components/organisms/browser-box.tsx","../src/components/atoms/button.tsx","../src/components/atoms/button-group.tsx","../src/components/atoms/code.tsx","../src/themes/names.ts","../src/themes/token-groups.ts","../src/themes/palenight.ts","../src/themes/lighthouse.ts","../src/themes/index.ts","../src/utils/monaco-decorators.ts","../src/utils/monaco-walkeros-decorations.ts","../src/utils/monaco-walkeros-providers.ts","../src/utils/contract-path-walker.ts","../src/utils/monaco-walkeros-completions.ts","../src/utils/monaco-json-path.ts","../src/utils/mapping-context-detector.ts","../src/utils/monaco-chain-ref-detector.ts","../src/utils/monaco-formatters.ts","../src/utils/monaco-json-schema.ts","../src/hooks/useMonacoHeight.ts","../src/utils/is-monaco-cancellation.ts","../src/components/molecules/code-box.tsx","../src/helpers/destinations.ts","../src/components/organisms/live-code.tsx","../src/utils/format-code.ts","../src/components/organisms/collector-box.tsx","../../../node_modules/@iconify/react/dist/iconify.js","../../../node_modules/clsx/dist/clsx.mjs","../../../node_modules/tailwind-merge/src/lib/utils.ts","../../../node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../node_modules/tailwind-merge/src/lib/sort-modifiers.ts","../../../node_modules/tailwind-merge/src/lib/config-utils.ts","../../../node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../node_modules/tailwind-merge/src/lib/tw-join.ts","../../../node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/from-theme.ts","../../../node_modules/tailwind-merge/src/lib/validators.ts","../../../node_modules/tailwind-merge/src/lib/default-config.ts","../../../node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../node_modules/tailwind-merge/src/lib/tw-merge.ts","../src/lib/utils.ts","../src/components/molecules/architecture-flow/ArchitectureFlow.tsx","../src/components/molecules/code-diff-box.tsx","../src/components/atoms/code-diff.tsx","../src/components/molecules/code-snippet.tsx","../src/components/molecules/flow-map/FlowMap.tsx","../src/components/molecules/property-table.tsx","../src/components/molecules/dropdown.tsx","../src/components/molecules/code-view.tsx","../src/components/atoms/code-static.tsx","../src/themes/shiki-adapter.ts","../src/components/atoms/footer.tsx","../src/components/atoms/button-link.tsx","../src/components/atoms/spinner.tsx","../src/components/atoms/icons/icons.tsx","../../../node_modules/@mdx-js/react/lib/index.js","../src/components/atoms/mdx-code.tsx","../src/providers/MDXProvider.tsx","../src/hooks/useDropdown.ts","../src/utils/monaco-schema-enrichment.ts","../src/utils/monaco-schema-flow-config.ts","../src/utils/monaco-schema-contract.ts","../src/utils/monaco-schema-variables.ts","../src/utils/monaco-walkeros-markers.ts","../src/utils/monaco-intellisense-flow-extractor.ts"],"sourcesContent":["/**\n * Monaco Editor Context Type Templates\n *\n * Hand-crafted global namespace declarations for function contexts.\n * These provide full TypeScript IntelliSense in Monaco Editor without\n * requiring import statements.\n *\n * Extracted from @walkeros/core types and simplified for editor use.\n */\n\n/**\n * Type template for 'fn' context (transformation functions)\n *\n * Provides types for:\n * - value: WalkerOS.DeepPartialEvent | unknown\n * - context: Mapping.Context (event, mapping, collector, logger, consent?)\n */\nexport const FN_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Source\n type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n version?: string;\n schema?: string;\n count?: number;\n trace?: string;\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n type Values = Array<Value>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n type Map = { [key: string]: Value };\n\n interface Context {\n event: WalkerOS.DeepPartialEvent;\n mapping: Value | Rule;\n collector: Collector.Instance;\n logger: Logger.Instance;\n consent?: WalkerOS.Consent;\n }\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (\n value: unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n interface Rule {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n name?: string;\n ignore?: boolean;\n silent?: boolean;\n }\n}\n\ndeclare namespace Logger {\n interface Instance {\n error: (msg: string, ...args: unknown[]) => void;\n warn: (msg: string, ...args: unknown[]) => void;\n info: (msg: string, ...args: unknown[]) => void;\n debug: (msg: string, ...args: unknown[]) => void;\n }\n}\n\n// Collector Types (minimal for fn context)\ndeclare namespace Collector {\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: any;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n globals: WalkerOS.Properties;\n group: string;\n queue: any[];\n round: number;\n session: any;\n timing: number;\n user: WalkerOS.User;\n version: string;\n [key: string]: any;\n }\n}\n\n// Parameter declarations for fn context\ndeclare const value: WalkerOS.DeepPartialEvent | unknown;\ndeclare const context: Mapping.Context;\n`;\n\n/**\n * Type template for 'condition' context (conditional functions)\n *\n * Provides types for:\n * - value: WalkerOS.DeepPartialEvent | unknown\n * - context: Mapping.Context (event, mapping, collector, logger, consent?)\n */\nexport const CONDITION_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Source\n type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n version?: string;\n schema?: string;\n count?: number;\n trace?: string;\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n type Values = Array<Value>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n type Map = { [key: string]: Value };\n\n interface Context {\n event: WalkerOS.DeepPartialEvent;\n mapping: Value | Rule;\n collector: Collector.Instance;\n logger: Logger.Instance;\n consent?: WalkerOS.Consent;\n }\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (\n value: unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n interface Rule {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n name?: string;\n ignore?: boolean;\n silent?: boolean;\n }\n}\n\ndeclare namespace Logger {\n interface Instance {\n error: (msg: string, ...args: unknown[]) => void;\n warn: (msg: string, ...args: unknown[]) => void;\n info: (msg: string, ...args: unknown[]) => void;\n debug: (msg: string, ...args: unknown[]) => void;\n }\n}\n\n// Collector Types (full interface for condition context)\ndeclare namespace Collector {\n interface SessionData extends WalkerOS.Properties {\n isStart: boolean;\n storage: boolean;\n id?: string;\n start?: number;\n marketing?: true;\n updated?: number;\n isNew?: boolean;\n device?: string;\n count?: number;\n runs?: number;\n }\n\n interface Config {\n run?: boolean;\n tagging: number;\n globalsStatic: WalkerOS.Properties;\n sessionStatic: Partial<SessionData>;\n verbose: boolean;\n onError?: any;\n onLog?: any;\n }\n\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: Config;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n sources: any;\n destinations: any;\n globals: WalkerOS.Properties;\n group: string;\n hooks: any;\n on: any;\n queue: any[];\n round: number;\n session: undefined | SessionData;\n timing: number;\n user: WalkerOS.User;\n version: string;\n }\n}\n\n// Parameter declarations for condition context\ndeclare const value: WalkerOS.DeepPartialEvent | unknown;\ndeclare const context: Mapping.Context;\n`;\n\n/**\n * Type template for 'validate' context (validation functions)\n *\n * Provides types for:\n * - value: unknown\n * - context: Mapping.Context (event, mapping, collector, logger, consent?)\n */\nexport const VALIDATE_CONTEXT_TYPES = `\n// WalkerOS Core Types\ndeclare namespace WalkerOS {\n // Utility types\n type DeepPartial<T> = {\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\n };\n\n type PromiseOrValue<T> = T | Promise<T>;\n\n // Property types\n type PropertyType = boolean | string | number | {\n [key: string]: Property;\n };\n\n type Property = PropertyType | Array<PropertyType>;\n\n interface Properties {\n [key: string]: Property | undefined;\n }\n\n interface OrderedProperties {\n [key: string]: [Property, number] | undefined;\n }\n\n // Consent\n interface Consent {\n [name: string]: boolean;\n }\n\n // User\n interface User extends Properties {\n id?: string;\n device?: string;\n session?: string;\n hash?: string;\n address?: string;\n email?: string;\n phone?: string;\n userAgent?: string;\n browser?: string;\n browserVersion?: string;\n deviceType?: string;\n language?: string;\n country?: string;\n region?: string;\n city?: string;\n zip?: string;\n timezone?: string;\n os?: string;\n osVersion?: string;\n screenSize?: string;\n ip?: string;\n internal?: boolean;\n }\n\n // Source\n type SourcePlatform =\n | 'web'\n | 'server'\n | 'app'\n | 'ios'\n | 'android'\n | 'terminal'\n | string;\n\n interface Source extends Properties {\n type: string;\n platform?: SourcePlatform;\n version?: string;\n schema?: string;\n count?: number;\n trace?: string;\n url?: string;\n referrer?: string;\n tool?: string;\n command?: string;\n }\n\n // Entity\n type Entities = Array<Entity>;\n\n interface Entity {\n entity: string;\n data: Properties;\n nested?: Entities;\n context?: OrderedProperties;\n }\n\n // Event\n interface Event {\n name: string;\n data: Properties;\n context: OrderedProperties;\n globals: Properties;\n custom: Properties;\n user: User;\n nested: Entities;\n consent: Consent;\n id: string;\n trigger: string;\n entity: string;\n action: string;\n timestamp: number;\n timing: number;\n source: Source;\n }\n\n type DeepPartialEvent = DeepPartial<Event>;\n}\n\n// Mapping Types\ndeclare namespace Mapping {\n type ValueType = string | ValueConfig;\n type Value = ValueType | Array<ValueType>;\n type Values = Array<Value>;\n\n interface ValueConfig {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n fn?: Fn;\n key?: string;\n loop?: Loop;\n map?: Map;\n set?: Value[];\n validate?: Validate;\n value?: WalkerOS.PropertyType;\n }\n\n type Loop = [Value, Value];\n type Map = { [key: string]: Value };\n\n interface Context {\n event: WalkerOS.DeepPartialEvent;\n mapping: Value | Rule;\n collector: Collector.Instance;\n logger: Logger.Instance;\n consent?: WalkerOS.Consent;\n }\n\n type Condition = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n type Fn = (\n value: WalkerOS.DeepPartialEvent | unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<WalkerOS.Property | unknown>;\n\n type Validate = (\n value: unknown,\n context: Context,\n ) => WalkerOS.PromiseOrValue<boolean>;\n\n interface Rule {\n condition?: Condition;\n consent?: WalkerOS.Consent;\n name?: string;\n ignore?: boolean;\n silent?: boolean;\n }\n}\n\ndeclare namespace Logger {\n interface Instance {\n error: (msg: string, ...args: unknown[]) => void;\n warn: (msg: string, ...args: unknown[]) => void;\n info: (msg: string, ...args: unknown[]) => void;\n debug: (msg: string, ...args: unknown[]) => void;\n }\n}\n\n// Collector Types (minimal for validate context)\ndeclare namespace Collector {\n interface Instance {\n push: any;\n command: any;\n allowed: boolean;\n config: any;\n consent: WalkerOS.Consent;\n count: number;\n custom: WalkerOS.Properties;\n globals: WalkerOS.Properties;\n group: string;\n queue: any[];\n round: number;\n session: any;\n timing: number;\n user: WalkerOS.User;\n version: string;\n [key: string]: any;\n }\n}\n\n// Parameter declarations for validate context\ndeclare const value: unknown;\ndeclare const context: Mapping.Context;\n`;\n\n/**\n * Get the type template for a specific function context\n */\nexport function getContextTypes(\n contextType: 'fn' | 'condition' | 'validate',\n): string {\n switch (contextType) {\n case 'fn':\n return FN_CONTEXT_TYPES;\n case 'condition':\n return CONDITION_CONTEXT_TYPES;\n case 'validate':\n return VALIDATE_CONTEXT_TYPES;\n default:\n return '';\n }\n}\n","export default \"type MatchExpression = MatchCondition | {\\n and: MatchExpression[];\\n} | {\\n or: MatchExpression[];\\n};\\ninterface MatchCondition {\\n key: string;\\n operator: MatchOperator;\\n value: string;\\n not?: boolean;\\n}\\ntype MatchOperator = 'eq' | 'contains' | 'prefix' | 'suffix' | 'regex' | 'gt' | 'lt' | 'exists';\\ntype CompiledMatcher = (context: Record<string, unknown>) => boolean;\\n\\ntype matcher_CompiledMatcher = CompiledMatcher;\\ntype matcher_MatchCondition = MatchCondition;\\ntype matcher_MatchExpression = MatchExpression;\\ntype matcher_MatchOperator = MatchOperator;\\ndeclare namespace matcher {\\n export type { matcher_CompiledMatcher as CompiledMatcher, matcher_MatchCondition as MatchCondition, matcher_MatchExpression as MatchExpression, matcher_MatchOperator as MatchOperator };\\n}\\n\\n/**\\n * Shared mapping configuration interface.\\n * Used by both Source.Config and Destination.Config.\\n */\\ninterface Config$7<T = unknown> {\\n consent?: Consent;\\n data?: Value | Values;\\n include?: string[];\\n mapping?: Rules<Rule<T>>;\\n policy?: Policy$1;\\n}\\ninterface Policy$1 {\\n [key: string]: Value;\\n}\\ninterface Rules<T = Rule> {\\n [entity: string]: Record<string, T | Array<T>> | undefined;\\n}\\ninterface Rule<Settings = unknown> {\\n batch?: number;\\n batchFn?: (destination: Instance$5, collector: Instance$6) => void;\\n batched?: Batch<Settings>;\\n condition?: Condition;\\n consent?: Consent;\\n settings?: Settings;\\n data?: Data$1;\\n include?: string[];\\n ignore?: boolean;\\n silent?: boolean;\\n name?: string;\\n policy?: Policy$1;\\n}\\ninterface Result$2 {\\n eventMapping?: Rule;\\n mappingKey?: string;\\n}\\ntype Data$1 = Value | Values;\\ntype Value = ValueType | Array<ValueType>;\\ntype Values = Array<Value>;\\ntype ValueType = string | ValueConfig;\\ninterface ValueConfig {\\n condition?: Condition;\\n consent?: Consent;\\n fn?: Fn$4;\\n key?: string;\\n loop?: Loop;\\n map?: Map;\\n set?: Value[];\\n validate?: Validate;\\n value?: PropertyType;\\n}\\ninterface Context$6 {\\n event: DeepPartialEvent;\\n /** The surrounding mapping config: a Value (value-level) or a Rule (rule-level). */\\n mapping: Value | Rule;\\n collector: Instance$6;\\n logger: Instance$4;\\n consent?: Consent;\\n}\\ntype Fn$4 = (value: unknown, context: Context$6) => PromiseOrValue<Property | unknown>;\\ntype Condition = (value: unknown, context: Context$6) => PromiseOrValue<boolean>;\\ntype Validate = (value: unknown, context: Context$6) => PromiseOrValue<boolean>;\\ntype Loop = [Value, Value];\\ntype Map = {\\n [key: string]: Value;\\n};\\n\\ntype mapping_Condition = Condition;\\ntype mapping_Loop = Loop;\\ntype mapping_Map = Map;\\ntype mapping_Rule<Settings = unknown> = Rule<Settings>;\\ntype mapping_Rules<T = Rule> = Rules<T>;\\ntype mapping_Validate = Validate;\\ntype mapping_Value = Value;\\ntype mapping_ValueConfig = ValueConfig;\\ntype mapping_ValueType = ValueType;\\ntype mapping_Values = Values;\\ndeclare namespace mapping {\\n export type { mapping_Condition as Condition, Config$7 as Config, Context$6 as Context, Data$1 as Data, Fn$4 as Fn, mapping_Loop as Loop, mapping_Map as Map, Policy$1 as Policy, Result$2 as Result, mapping_Rule as Rule, mapping_Rules as Rules, mapping_Validate as Validate, mapping_Value as Value, mapping_ValueConfig as ValueConfig, mapping_ValueType as ValueType, mapping_Values as Values };\\n}\\n\\ninterface CacheRule {\\n match: MatchExpression | '*';\\n key: string[];\\n ttl: number;\\n update?: Record<string, Value>;\\n}\\ninterface Cache {\\n full?: boolean;\\n store?: string;\\n rules: CacheRule[];\\n}\\n\\ntype cache_Cache = Cache;\\ntype cache_CacheRule = CacheRule;\\ndeclare namespace cache {\\n export type { cache_Cache as Cache, cache_CacheRule as CacheRule };\\n}\\n\\n/**\\n * Options for responding to an HTTP request.\\n * Same interface for web and server — sources implement the handler.\\n */\\ninterface RespondOptions {\\n /** Response body. Objects are JSON-serialized by source. */\\n body?: unknown;\\n /** HTTP status code (default: 200). Server-only, ignored by web sources. */\\n status?: number;\\n /** HTTP response headers. Server-only, ignored by web sources. */\\n headers?: Record<string, string>;\\n}\\n/**\\n * Standardized response function available on env for every step.\\n * Idempotent: first call wins, subsequent calls are no-ops.\\n * Created by sources via createRespond(), consumed by any step.\\n */\\ntype RespondFn = (options?: RespondOptions) => void;\\n/**\\n * Creates an idempotent respond function.\\n * The sender callback is source-specific (Express wraps res, Fetch wraps Response, etc.).\\n *\\n * @param sender - Platform-specific function that actually sends the response\\n * @returns Idempotent respond function (first call wins)\\n */\\ndeclare function createRespond(sender: (options: RespondOptions) => void): RespondFn;\\n\\n/**\\n * Metadata managed by the runtime. Do not overwrite from step code.\\n * The _ prefix signals \\\"runtime-managed.\\\"\\n */\\ninterface IngestMeta {\\n /** Number of steps this data has passed through. */\\n hops: number;\\n /** Ordered list of step IDs visited. path[0] is always the source ID. */\\n path: string[];\\n /** Current chain context, e.g., \\\"destination.ga4.before\\\" or \\\"source.web.next\\\". */\\n chainPath?: string;\\n}\\n/**\\n * Mutable shared context that accumulates knowledge as data flows through the graph.\\n *\\n * Event = strict schema (analytics data).\\n * Ingest = wild west (pipeline context).\\n *\\n * Any step can read and write arbitrary keys. The `_meta` section is\\n * managed by the runtime — increment hops and append to path before each step.\\n */\\ninterface Ingest {\\n [key: string]: unknown;\\n _meta: IngestMeta;\\n}\\n/** Create a fresh Ingest for a new pipeline invocation. */\\ndeclare function createIngest(sourceId: string): Ingest;\\n\\n/**\\n * Core collector configuration interface\\n */\\ninterface Config$6 {\\n /** Whether to run collector automatically */\\n run?: boolean;\\n /** Static global properties even on a new run */\\n globalsStatic: Properties;\\n /** Static session data even on a new run */\\n sessionStatic: Partial<SessionData>;\\n /** Logger configuration */\\n logger?: Config$4;\\n}\\n/**\\n * Initialization configuration that extends Config with initial state\\n */\\ninterface InitConfig extends Partial<Config$6> {\\n /** Initial consent state */\\n consent?: Consent;\\n /** Initial user data */\\n user?: User;\\n /** Initial global properties */\\n globals?: Properties;\\n /** Source configurations */\\n sources?: InitSources;\\n /** Destination configurations */\\n destinations?: InitDestinations;\\n /** Transformer configurations */\\n transformers?: InitTransformers;\\n /** Store configurations */\\n stores?: InitStores;\\n /** Initial custom properties */\\n custom?: Properties;\\n /** Hooks for pipeline observation and interception */\\n hooks?: Functions;\\n}\\ninterface SessionData extends Properties {\\n isStart: boolean;\\n storage: boolean;\\n id?: string;\\n start?: number;\\n marketing?: true;\\n updated?: number;\\n isNew?: boolean;\\n device?: string;\\n count?: number;\\n runs?: number;\\n}\\ninterface Status {\\n startedAt: number;\\n in: number;\\n out: number;\\n failed: number;\\n sources: Record<string, SourceStatus>;\\n destinations: Record<string, DestinationStatus>;\\n}\\ninterface SourceStatus {\\n count: number;\\n lastAt?: number;\\n duration: number;\\n}\\ninterface DestinationStatus {\\n count: number;\\n failed: number;\\n lastAt?: number;\\n duration: number;\\n}\\ninterface Sources {\\n [id: string]: Instance$2;\\n}\\ninterface Destinations$1 {\\n [id: string]: Instance$5;\\n}\\ninterface Transformers$1 {\\n [id: string]: Instance$3;\\n}\\ninterface Stores$1 {\\n [id: string]: Instance$1;\\n}\\ntype CommandType = 'action' | 'config' | 'consent' | 'context' | 'destination' | 'elb' | 'globals' | 'hook' | 'init' | 'link' | 'run' | 'user' | 'walker' | string;\\n/**\\n * Options passed to collector.push() from sources.\\n * NOT a Context - just push metadata.\\n */\\ninterface PushOptions {\\n id?: string;\\n ingest?: Ingest;\\n respond?: RespondFn;\\n mapping?: Config$7;\\n preChain?: string[];\\n include?: string[];\\n exclude?: string[];\\n}\\n/**\\n * Push function signature - handles events only\\n */\\ninterface PushFn$1 {\\n (event: DeepPartialEvent, options?: PushOptions): Promise<PushResult>;\\n}\\n/**\\n * Command function signature - handles walker commands only\\n */\\ninterface CommandFn {\\n (command: 'config', config: Partial<Config$6>): Promise<PushResult>;\\n (command: 'consent', consent: Consent): Promise<PushResult>;\\n <T extends Types$4>(command: 'destination', destination: Init$3<T> | Instance$5<T>, config?: Config$5<T>): Promise<PushResult>;\\n <K extends keyof Functions>(command: 'hook', name: K, hookFn: Functions[K]): Promise<PushResult>;\\n (command: 'on', type: Types$3, rules: SingleOrArray<Subscription>): Promise<PushResult>;\\n (command: 'user', user: User): Promise<PushResult>;\\n (command: 'run', runState?: {\\n consent?: Consent;\\n user?: User;\\n globals?: Properties;\\n custom?: Properties;\\n }): Promise<PushResult>;\\n (command: string, data?: unknown, options?: unknown): Promise<PushResult>;\\n}\\ninterface Instance$6 {\\n push: PushFn$1;\\n command: CommandFn;\\n allowed: boolean;\\n config: Config$6;\\n consent: Consent;\\n custom: Properties;\\n sources: Sources;\\n destinations: Destinations$1;\\n transformers: Transformers$1;\\n stores: Stores$1;\\n globals: Properties;\\n hooks: Functions;\\n logger: Instance$4;\\n on: OnConfig;\\n queue: Events;\\n round: number;\\n session: undefined | SessionData;\\n status: Status;\\n timing: number;\\n user: User;\\n pending: {\\n sources: InitSources;\\n destinations: InitDestinations;\\n };\\n}\\n\\ntype collector_CommandFn = CommandFn;\\ntype collector_CommandType = CommandType;\\ntype collector_DestinationStatus = DestinationStatus;\\ntype collector_InitConfig = InitConfig;\\ntype collector_PushOptions = PushOptions;\\ntype collector_SessionData = SessionData;\\ntype collector_SourceStatus = SourceStatus;\\ntype collector_Sources = Sources;\\ntype collector_Status = Status;\\ndeclare namespace collector {\\n export type { collector_CommandFn as CommandFn, collector_CommandType as CommandType, Config$6 as Config, collector_DestinationStatus as DestinationStatus, Destinations$1 as Destinations, collector_InitConfig as InitConfig, Instance$6 as Instance, PushFn$1 as PushFn, collector_PushOptions as PushOptions, collector_SessionData as SessionData, collector_SourceStatus as SourceStatus, collector_Sources as Sources, collector_Status as Status, Stores$1 as Stores, Transformers$1 as Transformers };\\n}\\n\\n/**\\n * Base context interface for walkerOS stages.\\n * Sources, Transformers, and Destinations extend this.\\n */\\ninterface Base<C = unknown, E = unknown> {\\n collector: Instance$6;\\n logger: Instance$4;\\n config: C;\\n env: E;\\n}\\n\\ntype context_Base<C = unknown, E = unknown> = Base<C, E>;\\ndeclare namespace context {\\n export type { context_Base as Base };\\n}\\n\\n/**\\n * Shared context for one-shot lifecycle hooks (setup, destroy).\\n * No event pipeline machinery — just config, env, logger, and id.\\n */\\ninterface LifecycleContext<C = unknown, E = unknown> {\\n id: string;\\n config: C;\\n env: E;\\n logger: Instance$4;\\n}\\n/**\\n * Setup function signature. Called once via `walker setup <kind>.<name>`.\\n * Packages own idempotency and error semantics. Return value (if any) is\\n * JSON-stringified to stdout by the CLI for scripting use.\\n */\\ntype SetupFn<C = unknown, E = unknown> = (context: LifecycleContext<C, E>) => Promise<unknown>;\\n/**\\n * Destroy function signature for step lifecycle cleanup.\\n */\\ntype DestroyFn<C = unknown, E = unknown> = (context: LifecycleContext<C, E>) => PromiseOrValue<void>;\\n/**\\n * @deprecated Use `LifecycleContext` instead. Kept as alias for one minor cycle.\\n */\\ntype DestroyContext<C = unknown, E = unknown> = LifecycleContext<C, E>;\\n\\ntype lifecycle_DestroyContext<C = unknown, E = unknown> = DestroyContext<C, E>;\\ntype lifecycle_DestroyFn<C = unknown, E = unknown> = DestroyFn<C, E>;\\ntype lifecycle_LifecycleContext<C = unknown, E = unknown> = LifecycleContext<C, E>;\\ntype lifecycle_SetupFn<C = unknown, E = unknown> = SetupFn<C, E>;\\ndeclare namespace lifecycle {\\n export type { lifecycle_DestroyContext as DestroyContext, lifecycle_DestroyFn as DestroyFn, lifecycle_LifecycleContext as LifecycleContext, lifecycle_SetupFn as SetupFn };\\n}\\n\\n/**\\n * Base environment requirements interface for walkerOS destinations\\n *\\n * This defines the core interface that destinations can use to declare\\n * their runtime environment requirements. Platform-specific extensions\\n * should extend this interface.\\n */\\ninterface BaseEnv$3 {\\n /**\\n * Generic global properties that destinations may require\\n * Platform-specific implementations can extend this interface\\n */\\n [key: string]: unknown;\\n}\\n/**\\n * Type bundle for destination generics.\\n * Groups Settings, InitSettings, Mapping, Env, and Setup into a single type parameter.\\n */\\ninterface Types$4<S = unknown, M = unknown, E = BaseEnv$3, I = S, U = unknown> {\\n settings: S;\\n initSettings: I;\\n mapping: M;\\n env: E;\\n setup: U;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access\\n */\\ntype TypesGeneric$3 = {\\n settings: any;\\n initSettings: any;\\n mapping: any;\\n env: any;\\n setup: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle\\n */\\ntype Settings$3<T extends TypesGeneric$3 = Types$4> = T['settings'];\\ntype InitSettings$3<T extends TypesGeneric$3 = Types$4> = T['initSettings'];\\ntype Mapping$1<T extends TypesGeneric$3 = Types$4> = T['mapping'];\\ntype Env$3<T extends TypesGeneric$3 = Types$4> = T['env'];\\ntype SetupOptions$2<T extends TypesGeneric$3 = Types$4> = T['setup'];\\n/**\\n * Inference helper: Extract Types from Instance\\n */\\ntype TypesOf$3<I> = I extends Instance$5<infer T> ? T : never;\\ninterface Instance$5<T extends TypesGeneric$3 = Types$4> {\\n config: Config$5<T>;\\n queuePush?: Events;\\n queueOn?: Array<{\\n type: Types$3;\\n data?: unknown;\\n }>;\\n dlq?: DLQ;\\n batches?: BatchRegistry<Mapping$1<T>>;\\n type?: string;\\n env?: Env$3<T>;\\n setup?: SetupFn<Config$5<T>, Env$3<T>>;\\n init?: InitFn$2<T>;\\n push: PushFn<T>;\\n pushBatch?: PushBatchFn<T>;\\n on?: OnFn;\\n destroy?: DestroyFn<Config$5<T>, Env$3<T>>;\\n}\\ninterface Config$5<T extends TypesGeneric$3 = Types$4> {\\n /** Required consent states to push events; queues events when not granted. */\\n consent?: Consent;\\n /** Implementation-specific configuration passed to the init function. */\\n settings?: InitSettings$3<T>;\\n /** Global data transformation applied to all events; result passed as context.data to push. */\\n data?: Value | Values;\\n /** Event sections to flatten into context.data. */\\n include?: string[];\\n /** Runtime dependencies merged from code and config env; extensible per destination. */\\n env?: Env$3<T>;\\n /** Destination identifier; auto-generated if not provided. */\\n id?: string;\\n /** Whether the destination has been initialized; prevents re-initialization. */\\n init?: boolean;\\n /** Whether to load external scripts (e.g., gtag.js); destination-specific behavior. */\\n loadScript?: boolean;\\n /** Logger configuration (level, handler) to override the collector's defaults. */\\n logger?: Config$4;\\n /** Entity-action rules to filter, rename, transform, and batch events for this destination. */\\n mapping?: Rules<Rule<Mapping$1<T>>>;\\n /** Pre-processing rules applied to all events before mapping; modifies events in-place. */\\n policy?: Policy;\\n /** Whether to queue events when consent is not granted; defaults to true. */\\n queue?: boolean;\\n /** Defer destination initialization until these collector events fire (e.g., `['consent']`). */\\n require?: string[];\\n /**\\n * Provisioning options for `walker setup`. `boolean | object`.\\n * Triggered only by explicit CLI invocation; never automatic.\\n */\\n setup?: boolean | SetupOptions$2<T>;\\n /** Transformer chain to run after collector processing but before this destination. */\\n before?: Next;\\n /** Transformer chain to run after destination push completes. Push response available at ingest._response. */\\n next?: Next;\\n /** Cache configuration for deduplication (step-level: skip push on HIT). */\\n cache?: Cache;\\n /** Completely skip this destination — no init, no push, no queuing. */\\n disabled?: boolean;\\n /** Return this value instead of calling push(). Uses !== undefined check to support falsy values. */\\n mock?: unknown;\\n}\\ntype PartialConfig$2<T extends TypesGeneric$3 = Types$4> = Config$5<Types$4<Partial<Settings$3<T>> | Settings$3<T>, Partial<Mapping$1<T>> | Mapping$1<T>, Env$3<T>, InitSettings$3<T>, SetupOptions$2<T>>>;\\ninterface Policy {\\n [key: string]: Value;\\n}\\ntype Code$1<T extends TypesGeneric$3 = Types$4> = Instance$5<T>;\\ntype Init$3<T extends TypesGeneric$3 = Types$4> = {\\n code: Code$1<T>;\\n config?: Partial<Config$5<T>>;\\n env?: Partial<Env$3<T>>;\\n before?: Next;\\n next?: Next;\\n cache?: Cache;\\n};\\ninterface InitDestinations {\\n [key: string]: Init$3<any>;\\n}\\ninterface Destinations {\\n [key: string]: Instance$5;\\n}\\n/**\\n * Context provided to destination functions.\\n * Extends base context with destination-specific properties.\\n */\\ninterface Context$5<T extends TypesGeneric$3 = Types$4> extends Base<Config$5<T>, Env$3<T>> {\\n id: string;\\n data?: Data;\\n}\\ninterface PushContext<T extends TypesGeneric$3 = Types$4> extends Context$5<T> {\\n ingest: Ingest;\\n rule?: Rule<Mapping$1<T>>;\\n}\\ninterface PushBatchContext<T extends TypesGeneric$3 = Types$4> extends Context$5<T> {\\n ingest: Ingest;\\n rule?: Rule<Mapping$1<T>>;\\n}\\ntype InitFn$2<T extends TypesGeneric$3 = Types$4> = (context: Context$5<T>) => PromiseOrValue<void | false | Config$5<T>>;\\ntype PushFn<T extends TypesGeneric$3 = Types$4> = (event: Event, context: PushContext<T>) => PromiseOrValue<void | unknown>;\\ntype PushBatchFn<T extends TypesGeneric$3 = Types$4> = (batch: Batch<Mapping$1<T>>, context: PushBatchContext<T>) => void;\\ntype PushEvent<Mapping = unknown> = {\\n event: Event;\\n mapping?: Rule<Mapping>;\\n};\\ntype PushEvents<Mapping = unknown> = Array<PushEvent<Mapping>>;\\ninterface Batch<Mapping> {\\n key: string;\\n events: Events;\\n data: Array<Data>;\\n mapping?: Rule<Mapping>;\\n}\\ninterface BatchRegistry<Mapping> {\\n [mappingKey: string]: {\\n batched: Batch<Mapping>;\\n batchFn: () => void;\\n };\\n}\\ntype Data = Property | undefined | Array<Property | undefined>;\\ninterface Ref {\\n type: string;\\n data?: unknown;\\n error?: unknown;\\n}\\ntype Push$1 = {\\n queuePush?: Events;\\n error?: unknown;\\n};\\ntype DLQ = Array<[Event, unknown]>;\\n\\ntype destination_Batch<Mapping> = Batch<Mapping>;\\ntype destination_BatchRegistry<Mapping> = BatchRegistry<Mapping>;\\ntype destination_DLQ = DLQ;\\ntype destination_Data = Data;\\ntype destination_Destinations = Destinations;\\ntype destination_InitDestinations = InitDestinations;\\ntype destination_Policy = Policy;\\ntype destination_PushBatchContext<T extends TypesGeneric$3 = Types$4> = PushBatchContext<T>;\\ntype destination_PushBatchFn<T extends TypesGeneric$3 = Types$4> = PushBatchFn<T>;\\ntype destination_PushContext<T extends TypesGeneric$3 = Types$4> = PushContext<T>;\\ntype destination_PushEvent<Mapping = unknown> = PushEvent<Mapping>;\\ntype destination_PushEvents<Mapping = unknown> = PushEvents<Mapping>;\\ntype destination_PushFn<T extends TypesGeneric$3 = Types$4> = PushFn<T>;\\ntype destination_Ref = Ref;\\ndeclare namespace destination {\\n export type { BaseEnv$3 as BaseEnv, destination_Batch as Batch, destination_BatchRegistry as BatchRegistry, Code$1 as Code, Config$5 as Config, Context$5 as Context, destination_DLQ as DLQ, destination_Data as Data, destination_Destinations as Destinations, Env$3 as Env, Init$3 as Init, destination_InitDestinations as InitDestinations, InitFn$2 as InitFn, InitSettings$3 as InitSettings, Instance$5 as Instance, Mapping$1 as Mapping, PartialConfig$2 as PartialConfig, destination_Policy as Policy, Push$1 as Push, destination_PushBatchContext as PushBatchContext, destination_PushBatchFn as PushBatchFn, destination_PushContext as PushContext, destination_PushEvent as PushEvent, destination_PushEvents as PushEvents, destination_PushFn as PushFn, destination_Ref as Ref, Settings$3 as Settings, SetupOptions$2 as SetupOptions, Types$4 as Types, TypesGeneric$3 as TypesGeneric, TypesOf$3 as TypesOf };\\n}\\n\\ninterface EventFn<R = Promise<PushResult>> {\\n (partialEvent: DeepPartialEvent): R;\\n (event: string): R;\\n (event: string, data: Properties): R;\\n}\\ninterface Fn$3<R = Promise<PushResult>, Config = unknown> extends EventFn<R>, WalkerCommands<R, Config> {\\n}\\ninterface WalkerCommands<R = Promise<PushResult>, Config = unknown> {\\n (event: 'walker config', config: Partial<Config>): R;\\n (event: 'walker consent', consent: Consent): R;\\n <T extends Types$4>(event: 'walker destination', destination: Init$3<T> | Instance$5<T>, config?: Config$5<T>): R;\\n <K extends keyof Functions>(event: 'walker hook', name: K, hookFn: Functions[K]): R;\\n (event: 'walker on', type: Types$3, rules: SingleOrArray<Subscription>): R;\\n (event: 'walker user', user: User): R;\\n (event: 'walker run', runState: {\\n consent?: Consent;\\n user?: User;\\n globals?: Properties;\\n custom?: Properties;\\n }): R;\\n}\\ntype Event$1<R = Promise<PushResult>> = (partialEvent: DeepPartialEvent) => R;\\ntype PushData<Config = unknown> = DeepPartial<Config> | Consent | User | Properties;\\ninterface PushResult {\\n ok: boolean;\\n event?: Event;\\n done?: Record<string, Ref>;\\n queued?: Record<string, Ref>;\\n failed?: Record<string, Ref>;\\n}\\ntype Layer = Array<IArguments | DeepPartialEvent | unknown[]>;\\n\\ntype elb_EventFn<R = Promise<PushResult>> = EventFn<R>;\\ntype elb_Layer = Layer;\\ntype elb_PushData<Config = unknown> = PushData<Config>;\\ntype elb_PushResult = PushResult;\\ntype elb_WalkerCommands<R = Promise<PushResult>, Config = unknown> = WalkerCommands<R, Config>;\\ndeclare namespace elb {\\n export type { Event$1 as Event, elb_EventFn as EventFn, Fn$3 as Fn, elb_Layer as Layer, elb_PushData as PushData, elb_PushResult as PushResult, elb_WalkerCommands as WalkerCommands };\\n}\\n\\n/**\\n * Single flow configuration.\\n *\\n * Represents one deployment target (e.g., web_prod, server_stage).\\n * Platform is determined by `config.platform` ('web' | 'server').\\n *\\n * Variables cascade: source/destination > flow > root config.\\n */\\ninterface Flow {\\n /** Per-flow configuration: platform, url, settings, bundle. */\\n config?: Flow.Config;\\n /**\\n * Source configurations (data capture).\\n *\\n * Sources capture events from various origins:\\n * - Browser DOM interactions (clicks, page views)\\n * - DataLayer pushes\\n * - HTTP requests (server-side)\\n * - Cloud function triggers\\n *\\n * Key = unique source identifier (arbitrary)\\n * Value = source reference with package and config\\n */\\n sources?: Record<string, Flow.Source>;\\n /**\\n * Destination configurations (data output).\\n *\\n * Destinations send processed events to external services:\\n * - Google Analytics (gtag)\\n * - Meta Pixel (fbq)\\n * - Custom APIs\\n * - Data warehouses\\n *\\n * Key = unique destination identifier (arbitrary)\\n * Value = destination reference with package and config\\n */\\n destinations?: Record<string, Flow.Destination>;\\n /**\\n * Transformer configurations (event transformation).\\n *\\n * Pre-collector (source.next) or post-collector (destination.before).\\n *\\n * Key = unique transformer identifier (referenced by source.next or destination.before)\\n * Value = transformer reference with package and config\\n */\\n transformers?: Record<string, Flow.Transformer>;\\n /**\\n * Store configurations (key-value storage).\\n *\\n * Stores provide key-value storage consumed by sources, transformers,\\n * and destinations via env injection. Referenced using $store.storeId\\n * prefix in env values.\\n *\\n * Key = unique store identifier (arbitrary)\\n * Value = store reference with package and config\\n */\\n stores?: Record<string, Flow.Store>;\\n /**\\n * Collector configuration (event processing).\\n *\\n * The collector is the central event processing engine.\\n * Configuration includes consent management, global properties,\\n * user identification, and processing rules.\\n */\\n collector?: InitConfig;\\n /**\\n * Flow-level variables.\\n * Override root variables; overridden by source/destination variables.\\n */\\n variables?: Flow.Variables;\\n}\\ndeclare namespace Flow {\\n /**\\n * Complete multi-flow configuration.\\n * Root type for walkeros.config.json files.\\n *\\n * If only one flow exists, it's auto-selected without --flow flag.\\n * Convention: use \\\"default\\\" as the flow name for single-flow configs.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"version\\\": 4,\\n * \\\"$schema\\\": \\\"https://walkeros.io/schema/flow/v4.json\\\",\\n * \\\"variables\\\": { \\\"CURRENCY\\\": \\\"USD\\\" },\\n * \\\"flows\\\": {\\n * \\\"default\\\": { \\\"config\\\": { \\\"platform\\\": \\\"web\\\" } }\\n * }\\n * }\\n * ```\\n */\\n interface Json {\\n /** Configuration schema version. */\\n version: 4;\\n /**\\n * JSON Schema reference for IDE validation.\\n * @example \\\"https://walkeros.io/schema/flow/v4.json\\\"\\n */\\n $schema?: string;\\n /**\\n * Folders to include in the bundle output.\\n * Copied to dist/ during bundle, available at runtime for both local and Docker execution.\\n *\\n * Use for credential files, configuration, or other runtime assets.\\n * Paths are relative to the config file location.\\n * Default: `[\\\"./shared\\\"]` if the folder exists, otherwise `[]`.\\n */\\n include?: string[];\\n /**\\n * Shared variables for interpolation.\\n * Resolution: destination/source > flow > root.\\n * Syntax: $var.name\\n */\\n variables?: Variables;\\n /**\\n * Data contract definition.\\n * Entity → action keyed JSON Schema with additive inheritance.\\n */\\n contract?: Contract;\\n /**\\n * Named flow configurations.\\n * If only one flow exists, it's auto-selected.\\n */\\n flows: Record<string, Flow>;\\n }\\n /**\\n * Per-flow configuration block.\\n *\\n * Groups platform identity, optional public URL, arbitrary settings bag,\\n * and bundle (build-time) configuration.\\n */\\n interface Config {\\n /**\\n * Platform identity for this flow.\\n * - `web` builds to IIFE format, ES2020 target, browser platform.\\n * - `server` builds to ESM format, Node18 target, node platform.\\n */\\n platform: 'web' | 'server';\\n /**\\n * Public URL where this flow is reachable (for cross-flow `$flow.X.url` references).\\n * Set explicitly by the user; the deployment process does not auto-populate it.\\n */\\n url?: string;\\n /**\\n * Arbitrary key-value settings consumed by the platform runtime.\\n *\\n * For web: typical keys include `windowCollector`, `windowElb`.\\n * For server: reserved for future server-specific options.\\n *\\n * This is a free-form bag — type promotion happens later if patterns emerge.\\n */\\n settings?: Settings;\\n /**\\n * Bundle configuration: NPM packages to include, transitive dependency overrides.\\n * Consumed by the CLI bundler at build time.\\n */\\n bundle?: Bundle;\\n }\\n /**\\n * Reusable values referenced via `$var.name` (with optional deep paths).\\n * Whole-string references preserve native type; inline interpolation requires scalars.\\n */\\n type Variables = Record<string, unknown>;\\n /**\\n * Free-form settings bag inside `Flow.Config.settings`.\\n * Mirrors the package settings convention (arbitrary keys).\\n */\\n type Settings = Record<string, unknown>;\\n /**\\n * Bundle configuration for a flow.\\n *\\n * Groups all build-time bundling concerns: NPM packages to include and\\n * transitive dependency overrides. Consumed by the CLI bundler.\\n */\\n interface Bundle {\\n /** NPM packages to bundle, keyed by package name. */\\n packages?: Record<string, BundlePackage>;\\n /**\\n * Transitive dependency version pins.\\n *\\n * Maps package name → version spec. Applied during bundle package install\\n * to force transitive dependencies to a specific version. Useful for\\n * resolving conflicts between packages that depend on incompatible\\n * versions of a shared dependency.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"@amplitude/analytics-types\\\": \\\"2.11.1\\\"\\n * }\\n * ```\\n */\\n overrides?: Record<string, string>;\\n }\\n /**\\n * Single bundle package entry.\\n */\\n interface BundlePackage {\\n /** Version specifier (e.g., 'latest', '^2.0.0', '2.1.3'). */\\n version?: string;\\n /** Named imports to expose from the package. */\\n imports?: string[];\\n /** Local path to package directory (takes precedence over version). */\\n path?: string;\\n }\\n /**\\n * Inline code definition for sources/destinations/transformers/stores.\\n * Used instead of `package` when defining inline functions.\\n */\\n interface Code {\\n /** \\\"$code:...\\\" function (required). */\\n push: string;\\n /** Optional instance type identifier. */\\n type?: string;\\n /** Optional \\\"$code:...\\\" init function. */\\n init?: string;\\n }\\n /**\\n * Source reference with inline package syntax.\\n *\\n * References a source package and provides configuration.\\n * The package is automatically downloaded and imported during build.\\n * Alternatively, use `code` (string or inline Code) for inline code execution.\\n */\\n interface Source {\\n /**\\n * Package specifier with optional version.\\n *\\n * Formats:\\n * - `\\\"@walkeros/web-source-browser\\\"` - latest\\n * - `\\\"@walkeros/web-source-browser@2.0.0\\\"` - exact\\n * - `\\\"@walkeros/web-source-browser@^2.0.0\\\"` - semver range\\n *\\n * Optional when `code` is used for inline code execution.\\n */\\n package?: string;\\n /**\\n * Resolved import variable name (string) or inline code definition (Code).\\n *\\n * - String: auto-resolved from packages[package].imports[0] during getFlowSettings(),\\n * or provided explicitly for advanced use cases.\\n * - Code: object with type, push, and optional init for inline code definition.\\n */\\n code?: string | Code;\\n /**\\n * Source-specific configuration. Structure depends on the source package.\\n * Passed to the source's initialization function.\\n */\\n config?: unknown;\\n /**\\n * Source environment configuration.\\n * Environment-specific settings merged with default source environment.\\n */\\n env?: unknown;\\n /**\\n * Mark as primary source (provides main ELB).\\n *\\n * The primary source's ELB function is returned by `startFlow()`.\\n * Only one source should be marked as primary per flow.\\n *\\n * @default false\\n */\\n primary?: boolean;\\n /**\\n * First transformer in pre-source chain (consent-exempt).\\n *\\n * Runs before source.next chain. Consent-exempt because no analytics\\n * event exists yet - these transformers handle transport-level preprocessing\\n * (decode, validate, authenticate, normalize raw input).\\n * Raw request data is available in context.ingest.\\n */\\n before?: string | string[];\\n /**\\n * First transformer in pre-collector chain.\\n *\\n * Name of the transformer to execute after this source captures an event.\\n * Creates a pre-collector transformer chain. Chain ends at the collector.\\n * If omitted, events route directly to the collector.\\n * Can be an array for explicit chain control (bypasses transformer.next resolution).\\n */\\n next?: string | string[];\\n /** Cache configuration for this source. */\\n cache?: Cache;\\n /**\\n * Source-level variables (highest priority in cascade).\\n * Overrides flow and root variables.\\n */\\n variables?: Variables;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution (not included in bundles).\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Destination reference with inline package syntax.\\n *\\n * References a destination package and provides configuration.\\n * Structure mirrors `Flow.Source` for consistency.\\n */\\n interface Destination {\\n /** Package specifier with optional version. Optional when `code` is provided. */\\n package?: string;\\n /** Resolved import variable name (string) or inline code definition (Code). */\\n code?: string | Code;\\n /**\\n * Destination-specific configuration. Typically includes:\\n * - settings: API keys, IDs, endpoints\\n * - mapping: Event transformation rules\\n * - consent: Required consent states\\n * - policy: Processing rules\\n */\\n config?: unknown;\\n /** Destination environment configuration, merged with default destination environment. */\\n env?: unknown;\\n /**\\n * First transformer in post-collector chain.\\n *\\n * Name of the transformer to execute before sending events to this destination.\\n * If omitted, events are sent directly from the collector.\\n * Can be an array for explicit chain control.\\n */\\n before?: string | string[];\\n /**\\n * First transformer in post-push chain.\\n *\\n * Runs after destination.push completes. The push response is available\\n * at context.ingest._response. Consent is inherited from the destination\\n * gate - no separate consent check needed.\\n */\\n next?: string | string[];\\n /** Cache configuration for this destination. */\\n cache?: Cache;\\n /** Destination-level variables (highest priority in cascade). */\\n variables?: Variables;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution.\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Transformer reference with inline package syntax.\\n *\\n * Transformers transform events in the pipeline between sources and destinations.\\n * Alternatively, use `code` for inline code execution.\\n */\\n interface Transformer {\\n /** Package specifier with optional version. Optional when `code` is provided. */\\n package?: string;\\n /** Resolved import variable name (string) or inline code definition (Code). */\\n code?: string | Code;\\n /** Transformer-specific configuration. Structure depends on the package. */\\n config?: unknown;\\n /** Transformer environment configuration. */\\n env?: unknown;\\n /**\\n * Pre-transformer chain.\\n *\\n * Runs before this transformer's push function.\\n * Enables pre-processing or context loading before the main transform.\\n * Uses the same chain resolution as source.next and destination.before.\\n */\\n before?: string | string[];\\n /**\\n * Next transformer in chain.\\n *\\n * Name of the next transformer to execute after this one.\\n * In a pre-collector chain (source.next), terminates at the collector.\\n * In a post-collector chain (destination.before), terminates at the destination.\\n * If omitted, the chain ends and control passes to the next pipeline stage.\\n * Array values define an explicit chain (no walking). Circular references\\n * are safely detected at runtime by `walkChain()`.\\n */\\n next?: string | string[];\\n /** Cache configuration for this transformer. */\\n cache?: Cache;\\n /** Transformer-level variables (highest priority in cascade). */\\n variables?: Variables;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution.\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Store reference with inline package syntax.\\n *\\n * Stores provide key-value storage consumed by other components via env.\\n * Unlike sources/transformers/destinations, stores have no chain properties\\n * (no `next` or `before`) - they are passive infrastructure.\\n */\\n interface Store {\\n /** Package specifier with optional version. Optional when `code` is provided. */\\n package?: string;\\n /** Resolved import variable name (string) or inline code definition (Code). */\\n code?: string | Code;\\n /** Store-specific configuration. */\\n config?: unknown;\\n /** Store environment configuration. */\\n env?: unknown;\\n /** Store-level variables (highest priority in cascade). */\\n variables?: Variables;\\n /**\\n * Named examples for testing and documentation.\\n * Stripped during flow resolution.\\n */\\n examples?: StepExamples;\\n }\\n /**\\n * Named contract map.\\n * Each key is a contract name, each value is a contract rule.\\n *\\n * @example\\n * ```json\\n * {\\n * \\\"default\\\": { \\\"globals\\\": { ... }, \\\"consent\\\": { ... } },\\n * \\\"web\\\": { \\\"extends\\\": \\\"default\\\", \\\"events\\\": { ... } },\\n * \\\"server\\\": { \\\"extends\\\": \\\"default\\\", \\\"events\\\": { ... } }\\n * }\\n * ```\\n */\\n type Contract = Record<string, ContractRule>;\\n /**\\n * A single named contract rule.\\n *\\n * All sections are optional. Sections mirror WalkerOS.Event fields:\\n * globals, context, custom, user, consent.\\n * Entity-action schemas live under `events`.\\n *\\n * Use `extends` to inherit from another named contract (additive merge).\\n */\\n interface ContractRule {\\n /** Inherit from another named contract (additive merge). */\\n extends?: string;\\n /** Tagging level (used by validators / runtime tagging policy). */\\n tagging?: number;\\n /** Human-readable description of the contract. */\\n description?: string;\\n /** JSON Schema for event.globals. */\\n globals?: ContractSchema;\\n /** JSON Schema for event.context. */\\n context?: ContractSchema;\\n /** JSON Schema for event.custom. */\\n custom?: ContractSchema;\\n /** JSON Schema for event.user. */\\n user?: ContractSchema;\\n /** JSON Schema for event.consent. */\\n consent?: ContractSchema;\\n /** Entity-action event schemas. */\\n events?: ContractEvents;\\n }\\n /**\\n * JSON Schema object for contract rule validation.\\n * Standard JSON Schema with description/examples annotations.\\n * Compatible with AJV for runtime validation.\\n */\\n type ContractSchema = Record<string, unknown>;\\n /**\\n * Contract action entries keyed by action name.\\n * Each value is a JSON Schema describing the expected WalkerOS.Event shape.\\n * Use \\\"*\\\" as wildcard for all actions of an entity.\\n */\\n type ContractActions = Record<string, ContractSchema>;\\n /**\\n * Entity-action event map used inside contracts.\\n * Keyed by entity name, each value is an action map.\\n * Use \\\"*\\\" as wildcard for all entities or all actions.\\n */\\n type ContractEvents = Record<string, ContractActions>;\\n /**\\n * Walker command names that a step example can invoke instead of pushing\\n * its `in` as a regular event. Mirrors the `elb('walker <command>', ...)`\\n * surface in `WalkerCommands` (see types/elb.ts).\\n *\\n * - `config` - update collector config (maps to `elb('walker config', in)`)\\n * - `consent` - update consent state (maps to `elb('walker consent', in)`)\\n * - `user` - update user identification (maps to `elb('walker user', in)`)\\n * - `run` - fire run state (maps to `elb('walker run', in)`)\\n *\\n * Note: `walker destination`, `walker hook`, and `walker on` are\\n * intentionally excluded - they configure wiring, not test data.\\n */\\n type StepCommand = 'config' | 'consent' | 'user' | 'run';\\n /** One observable effect: function/method call (`[callable, ...args]`) or return value (`['return', value]`). */\\n type StepEffect = readonly [callable: string, ...args: unknown[]];\\n /** The effects a step produces, in execution order. Empty = no observable effect (filtered, passthrough). */\\n type StepOut = readonly StepEffect[];\\n /**\\n * Named example pair for a step.\\n * `in` is the input to the step, `out` is the expected output.\\n *\\n * When `command` is set, the test runner invokes\\n * `elb('walker <command>', in)` instead of pushing `in` as a regular event.\\n * When `command` is absent (default), `in` is pushed as a normal event via\\n * `elb(event)`.\\n */\\n interface StepExample {\\n /** Human-readable title (overrides camelCase-to-spaced default heading in docs). */\\n title?: string;\\n description?: string;\\n /**\\n * Whether this example is meant for public consumption (docs, UI, MCP default output).\\n * Defaults to `true`. Set to `false` for test-only fixtures that should stay out of\\n * user-facing surfaces but still run in test suites and remain available to\\n * `flow_simulate` / CLI `--simulate`.\\n */\\n public?: boolean;\\n in?: unknown;\\n /** Trigger metadata for sources - type and options for the trigger call. */\\n trigger?: {\\n /** Which mechanism to activate (e.g., 'click', 'POST', 'load'). */\\n type?: string;\\n /** Mechanism-specific options (e.g., CSS selector, threshold). */\\n options?: unknown;\\n };\\n mapping?: unknown;\\n out?: StepOut;\\n /**\\n * Invoke a walker command with `in` instead of pushing `in` as an event.\\n * When set, the test runner calls `elb('walker <command>', in)`.\\n * When absent (default), `in` is pushed as a regular event.\\n */\\n command?: StepCommand;\\n }\\n /** Named step examples keyed by scenario name. */\\n type StepExamples = Record<string, StepExample>;\\n}\\n\\ntype AnyFunction$1<P extends unknown[] = never[], R = unknown> = (...args: P) => R;\\ntype Functions = {\\n [key: string]: AnyFunction$1;\\n};\\ninterface Parameter<P extends unknown[], R> {\\n fn: (...args: P) => R;\\n result?: R;\\n}\\ntype HookFn<T extends AnyFunction$1> = (params: Parameter<Parameters<T>, ReturnType<T>>, ...args: Parameters<T>) => ReturnType<T>;\\n\\ntype hooks_Functions = Functions;\\ntype hooks_HookFn<T extends AnyFunction$1> = HookFn<T>;\\ndeclare namespace hooks {\\n export type { AnyFunction$1 as AnyFunction, hooks_Functions as Functions, hooks_HookFn as HookFn };\\n}\\n\\n/**\\n * Log levels from most to least severe\\n */\\ndeclare enum Level {\\n ERROR = 0,\\n WARN = 1,\\n INFO = 2,\\n DEBUG = 3\\n}\\n/**\\n * Normalized error context extracted from Error objects\\n */\\ninterface ErrorContext {\\n message: string;\\n name: string;\\n stack?: string;\\n cause?: unknown;\\n}\\n/**\\n * Context passed to log handlers\\n * If an Error was passed, it's normalized into the error property\\n */\\ninterface LogContext {\\n [key: string]: unknown;\\n error?: ErrorContext;\\n}\\n/**\\n * Log message function signature\\n * Accepts string or Error as message, with optional context\\n */\\ntype LogFn = (message: string | Error, context?: unknown | Error) => void;\\n/**\\n * Throw function signature - logs error then throws\\n * Returns never as it always throws\\n */\\ntype ThrowFn = (message: string | Error, context?: unknown) => never;\\n/**\\n * Default handler function (passed to custom handlers for chaining)\\n */\\ntype DefaultHandler = (level: Level, message: string, context: LogContext, scope: string[]) => void;\\n/**\\n * Custom log handler function\\n * Receives originalHandler to allow middleware-style chaining\\n */\\ntype Handler = (level: Level, message: string, context: LogContext, scope: string[], originalHandler: DefaultHandler) => void;\\n/**\\n * Logger instance with scoping support\\n * All logs automatically include trace path from scoping\\n */\\ninterface Instance$4 {\\n /**\\n * Log an error message (always visible unless silenced)\\n */\\n error: LogFn;\\n /**\\n * Log a warning (degraded state, config issues, transient failures)\\n */\\n warn: LogFn;\\n /**\\n * Log an informational message\\n */\\n info: LogFn;\\n /**\\n * Log a debug message\\n */\\n debug: LogFn;\\n /**\\n * Log an error message and throw an Error\\n * Combines logging and throwing in one call\\n */\\n throw: ThrowFn;\\n /**\\n * Output structured JSON data\\n */\\n json: (data: unknown) => void;\\n /**\\n * Create a scoped child logger with automatic trace path\\n * @param name - Scope name (e.g., destination type, destination key)\\n * @returns A new logger instance with the scope applied\\n */\\n scope: (name: string) => Instance$4;\\n}\\n/**\\n * Logger configuration options\\n */\\ninterface Config$4 {\\n /**\\n * Minimum log level to display\\n * @default Level.ERROR\\n */\\n level?: Level | keyof typeof Level;\\n /**\\n * Custom log handler function\\n * Receives originalHandler to preserve default behavior\\n */\\n handler?: Handler;\\n /** Custom handler for json() output. Default: console.log(JSON.stringify(data, null, 2)) */\\n jsonHandler?: (data: unknown) => void;\\n}\\n/**\\n * Internal config with resolved values and scope\\n */\\ninterface InternalConfig {\\n level: Level;\\n handler?: Handler;\\n jsonHandler?: (data: unknown) => void;\\n scope: string[];\\n}\\n/**\\n * Logger factory function type\\n */\\ntype Factory = (config?: Config$4) => Instance$4;\\n\\ntype logger_DefaultHandler = DefaultHandler;\\ntype logger_ErrorContext = ErrorContext;\\ntype logger_Factory = Factory;\\ntype logger_Handler = Handler;\\ntype logger_InternalConfig = InternalConfig;\\ntype logger_Level = Level;\\ndeclare const logger_Level: typeof Level;\\ntype logger_LogContext = LogContext;\\ntype logger_LogFn = LogFn;\\ntype logger_ThrowFn = ThrowFn;\\ndeclare namespace logger {\\n export { type Config$4 as Config, type logger_DefaultHandler as DefaultHandler, type logger_ErrorContext as ErrorContext, type logger_Factory as Factory, type logger_Handler as Handler, type Instance$4 as Instance, type logger_InternalConfig as InternalConfig, logger_Level as Level, type logger_LogContext as LogContext, type logger_LogFn as LogFn, type logger_ThrowFn as ThrowFn };\\n}\\n\\n/** Collector state mapping for the `on` actions. */\\ntype Config$3 = {\\n config?: Array<GenericFn>;\\n consent?: Array<ConsentRule>;\\n custom?: Array<GenericFn>;\\n globals?: Array<GenericFn>;\\n ready?: Array<ReadyFn>;\\n run?: Array<RunFn>;\\n session?: Array<SessionFn>;\\n user?: Array<UserFn>;\\n};\\n/** Allow arbitrary string events via `(string & {})`. */\\ntype Types$3 = keyof Config$3 | (string & {});\\n/** Map each event type to its expected data payload type. */\\ninterface EventDataMap {\\n config: Partial<Config$6>;\\n consent: Consent;\\n custom: Properties;\\n globals: Properties;\\n ready: void;\\n run: void;\\n session: SessionData | undefined;\\n user: User;\\n}\\n/** Extract the data type for a specific event. */\\ntype EventData<T extends keyof EventDataMap> = EventDataMap[T];\\n/** Union of all possible data types. */\\ntype AnyEventData = EventDataMap[keyof EventDataMap];\\n/**\\n * Context provided to every `on` callback.\\n * Same posture as Mapping.Context: collector + logger only;\\n * subscriptions are a collector-level concern, not a stage-level one.\\n */\\ninterface Context$4 {\\n collector: Instance$6;\\n logger: Instance$4;\\n}\\n/** Unified subscription callback shape. */\\ntype Fn$2<TData = unknown> = (data: TData, context: Context$4) => PromiseOrValue<void>;\\n/** Typed-data variants for readability and IntelliSense. All reduce to Fn<TData>. */\\ntype ConsentFn = Fn$2<Consent>;\\ntype GenericFn = Fn$2<unknown>;\\ntype ReadyFn = Fn$2<void>;\\ntype RunFn = Fn$2<void>;\\ntype SessionFn = Fn$2<SessionData | undefined>;\\ntype UserFn = Fn$2<User>;\\n/**\\n * Consent rule: a record of `{ [consentKey]: ConsentFn }`.\\n * Only the consent action uses this shape (per-key handler dispatch).\\n */\\ninterface ConsentRule {\\n [key: string]: ConsentFn;\\n}\\n/** Anything registerable via `walker.on(action, X)`: a typed callback or a consent rule record. */\\ntype Subscription = ConsentRule | GenericFn | ReadyFn | RunFn | SessionFn | UserFn;\\ninterface OnConfig {\\n config?: GenericFn[];\\n consent?: ConsentRule[];\\n custom?: GenericFn[];\\n globals?: GenericFn[];\\n ready?: ReadyFn[];\\n run?: RunFn[];\\n session?: SessionFn[];\\n user?: UserFn[];\\n [key: string]: ConsentRule[] | GenericFn[] | ReadyFn[] | RunFn[] | SessionFn[] | UserFn[] | undefined;\\n}\\n/**\\n * Destination `on` handler: receives the action type and a destination context.\\n * Already context-style; kept for compatibility with the destination interface.\\n */\\ntype OnFn<T extends TypesGeneric$3 = Types$4> = (type: Types$3, context: Context$5<T>) => PromiseOrValue<void>;\\ntype OnFnRuntime = (type: Types$3, context: Context$5) => PromiseOrValue<void>;\\n\\ntype on_AnyEventData = AnyEventData;\\ntype on_ConsentFn = ConsentFn;\\ntype on_ConsentRule = ConsentRule;\\ntype on_EventData<T extends keyof EventDataMap> = EventData<T>;\\ntype on_EventDataMap = EventDataMap;\\ntype on_GenericFn = GenericFn;\\ntype on_OnConfig = OnConfig;\\ntype on_OnFn<T extends TypesGeneric$3 = Types$4> = OnFn<T>;\\ntype on_OnFnRuntime = OnFnRuntime;\\ntype on_ReadyFn = ReadyFn;\\ntype on_RunFn = RunFn;\\ntype on_SessionFn = SessionFn;\\ntype on_Subscription = Subscription;\\ntype on_UserFn = UserFn;\\ndeclare namespace on {\\n export type { on_AnyEventData as AnyEventData, Config$3 as Config, on_ConsentFn as ConsentFn, on_ConsentRule as ConsentRule, Context$4 as Context, on_EventData as EventData, on_EventDataMap as EventDataMap, Fn$2 as Fn, on_GenericFn as GenericFn, on_OnConfig as OnConfig, on_OnFn as OnFn, on_OnFnRuntime as OnFnRuntime, on_ReadyFn as ReadyFn, on_RunFn as RunFn, on_SessionFn as SessionFn, on_Subscription as Subscription, Types$3 as Types, on_UserFn as UserFn };\\n}\\n\\ninterface NextRule {\\n match: MatchExpression | '*';\\n next: Next;\\n}\\ntype Next = string | string[] | NextRule[];\\n/**\\n * Base environment interface for walkerOS transformers.\\n *\\n * Minimal like Destination - just an extensible object.\\n * Transformers receive dependencies through context, not env.\\n */\\ninterface BaseEnv$2 {\\n [key: string]: unknown;\\n}\\n/**\\n * Type bundle for transformer generics.\\n * Groups Settings, InitSettings, and Env into a single type parameter.\\n * Follows the Source/Destination pattern.\\n *\\n * @template S - Settings configuration type\\n * @template E - Environment type\\n * @template I - InitSettings configuration type (user input)\\n */\\ninterface Types$2<S = unknown, E = BaseEnv$2, I = S> {\\n settings: S;\\n initSettings: I;\\n env: E;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access.\\n */\\ntype TypesGeneric$2 = {\\n settings: any;\\n initSettings: any;\\n env: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle.\\n */\\ntype Settings$2<T extends TypesGeneric$2 = Types$2> = T['settings'];\\ntype InitSettings$2<T extends TypesGeneric$2 = Types$2> = T['initSettings'];\\ntype Env$2<T extends TypesGeneric$2 = Types$2> = T['env'];\\n/**\\n * Inference helper: Extract Types from Instance.\\n */\\ntype TypesOf$2<I> = I extends Instance$3<infer T> ? T : never;\\n/**\\n * Transformer configuration.\\n */\\ninterface Config$2<T extends TypesGeneric$2 = Types$2> {\\n settings?: InitSettings$2<T>;\\n env?: Env$2<T>;\\n id?: string;\\n logger?: Config$4;\\n before?: Next;\\n next?: Next;\\n cache?: Cache;\\n init?: boolean;\\n disabled?: boolean;\\n /** Return this value instead of calling push(). Global mock for all chains. */\\n mock?: unknown;\\n /** Path-specific mock values keyed by chain path (e.g., \\\"destination.ga4.before\\\"). Takes precedence over global mock. */\\n chainMocks?: Record<string, unknown>;\\n}\\n/**\\n * Context provided to transformer functions.\\n * Extends base context with transformer-specific properties.\\n */\\ninterface Context$3<T extends TypesGeneric$2 = Types$2> extends Base<Config$2<T>, Env$2<T>> {\\n id: string;\\n ingest: Ingest;\\n}\\n/**\\n * Unified result type for transformer functions.\\n * Replaces the old union return type with a structured object.\\n *\\n * @field event - Modified event to continue with\\n * @field respond - Wrapped respond function for downstream transformers\\n * @field next - Branch to a different chain (replaces BranchResult)\\n */\\ninterface Result$1<E = DeepPartialEvent> {\\n event?: E;\\n respond?: RespondFn;\\n next?: Next;\\n}\\n/**\\n * Result of running a transformer chain.\\n * Returns the processed event (singular, fan-out array, or null if dropped)\\n * alongside the potentially wrapped respond function.\\n */\\ninterface ChainResult {\\n event: DeepPartialEvent | DeepPartialEvent[] | null;\\n respond?: RespondFn;\\n}\\n/**\\n * The main transformer function.\\n *\\n * Pre-collector transformers use default E = DeepPartialEvent.\\n * Post-collector transformers can use E = Event for type-safe access.\\n * A transformer written for DeepPartialEvent works in both positions\\n * because Event is a subtype of DeepPartialEvent.\\n *\\n * @returns Result - structured result with event, respond, next\\n * @returns Result[] - fan-out: each Result continues independently through remaining chain\\n * @returns void - continue with current event unchanged (passthrough)\\n * @returns false - stop chain, cancel further processing\\n */\\ntype Fn$1<T extends TypesGeneric$2 = Types$2, E = DeepPartialEvent> = (event: E, context: Context$3<T>) => PromiseOrValue<Result$1<E> | Result$1<E>[] | false | void>;\\n/**\\n * Optional initialization function.\\n * Called once before first push.\\n *\\n * @param context - Transformer context\\n * @returns void - initialization successful\\n * @returns false - initialization failed, skip this transformer\\n * @returns Config<T> - return updated config\\n */\\ntype InitFn$1<T extends TypesGeneric$2 = Types$2> = (context: Context$3<T>) => PromiseOrValue<void | false | Config$2<T>>;\\n/**\\n * Transformer instance returned by Init function.\\n */\\ninterface Instance$3<T extends TypesGeneric$2 = Types$2> {\\n type: string;\\n config: Config$2<T>;\\n push: Fn$1<T>;\\n init?: InitFn$1<T>;\\n destroy?: DestroyFn<Config$2<T>, Env$2<T>>;\\n}\\n/**\\n * Transformer initialization function.\\n * Creates a transformer instance from context.\\n */\\ntype Init$2<T extends TypesGeneric$2 = Types$2> = (context: Context$3<Types$2<Partial<Settings$2<T>>, Env$2<T>, InitSettings$2<T>>>) => Instance$3<T> | Promise<Instance$3<T>>;\\n/**\\n * Configuration for initializing a transformer.\\n * Used in collector registration.\\n */\\ntype InitTransformer<T extends TypesGeneric$2 = Types$2> = {\\n code: Init$2<T>;\\n config?: Partial<Config$2<T>>;\\n env?: Partial<Env$2<T>>;\\n before?: Next;\\n next?: Next;\\n cache?: Cache;\\n};\\n/**\\n * Transformers configuration for collector.\\n * Maps transformer IDs to their initialization configurations.\\n */\\ninterface InitTransformers {\\n [transformerId: string]: InitTransformer<any>;\\n}\\n/**\\n * Active transformer instances registry.\\n */\\ninterface Transformers {\\n [transformerId: string]: Instance$3;\\n}\\n\\ntype transformer_ChainResult = ChainResult;\\ntype transformer_InitTransformer<T extends TypesGeneric$2 = Types$2> = InitTransformer<T>;\\ntype transformer_InitTransformers = InitTransformers;\\ntype transformer_Next = Next;\\ntype transformer_NextRule = NextRule;\\ntype transformer_Transformers = Transformers;\\ndeclare namespace transformer {\\n export type { BaseEnv$2 as BaseEnv, transformer_ChainResult as ChainResult, Config$2 as Config, Context$3 as Context, Env$2 as Env, Fn$1 as Fn, Init$2 as Init, InitFn$1 as InitFn, InitSettings$2 as InitSettings, transformer_InitTransformer as InitTransformer, transformer_InitTransformers as InitTransformers, Instance$3 as Instance, transformer_Next as Next, transformer_NextRule as NextRule, Result$1 as Result, Settings$2 as Settings, transformer_Transformers as Transformers, Types$2 as Types, TypesGeneric$2 as TypesGeneric, TypesOf$2 as TypesOf };\\n}\\n\\ninterface Context$2 {\\n city?: string;\\n country?: string;\\n encoding?: string;\\n hash?: string;\\n ip?: string;\\n language?: string;\\n origin?: string;\\n region?: string;\\n userAgent?: string;\\n [key: string]: string | undefined;\\n}\\n\\ndeclare namespace request {\\n export type { Context$2 as Context };\\n}\\n\\n/**\\n * Base Env interface for dependency injection into sources.\\n *\\n * Sources receive all their dependencies through this environment object,\\n * making them platform-agnostic and easily testable.\\n */\\ninterface BaseEnv$1 {\\n [key: string]: unknown;\\n push: PushFn$1;\\n command: CommandFn;\\n sources?: Sources;\\n elb: Fn$3;\\n logger: Instance$4;\\n}\\n/**\\n * Type bundle for source generics.\\n * Groups Settings, Mapping, Push, Env, InitSettings, and Setup into a single type parameter.\\n *\\n * @template S - Settings configuration type\\n * @template M - Mapping configuration type\\n * @template P - Push function signature (flexible to support HTTP handlers, etc.)\\n * @template E - Environment dependencies type\\n * @template I - InitSettings configuration type (user input)\\n * @template U - Setup options type (provisioning options for `walker setup`)\\n */\\ninterface Types$1<S = unknown, M = unknown, P = Fn$3, E = BaseEnv$1, I = S, U = unknown> {\\n settings: S;\\n initSettings: I;\\n mapping: M;\\n push: P;\\n env: E;\\n setup: U;\\n}\\n/**\\n * Generic constraint for Types - ensures T has required properties for indexed access\\n */\\ntype TypesGeneric$1 = {\\n settings: any;\\n initSettings: any;\\n mapping: any;\\n push: any;\\n env: any;\\n setup: any;\\n};\\n/**\\n * Type extractors for consistent usage with Types bundle\\n */\\ntype Settings$1<T extends TypesGeneric$1 = Types$1> = T['settings'];\\ntype InitSettings$1<T extends TypesGeneric$1 = Types$1> = T['initSettings'];\\ntype Mapping<T extends TypesGeneric$1 = Types$1> = T['mapping'];\\ntype Push<T extends TypesGeneric$1 = Types$1> = T['push'];\\ntype Env$1<T extends TypesGeneric$1 = Types$1> = T['env'];\\ntype SetupOptions$1<T extends TypesGeneric$1 = Types$1> = T['setup'];\\n/**\\n * Inference helper: Extract Types from Instance\\n */\\ntype TypesOf$1<I> = I extends Instance$2<infer T> ? T : never;\\ninterface Config$1<T extends TypesGeneric$1 = Types$1> extends Config$7<Mapping<T>> {\\n /** Implementation-specific configuration passed to the init function. */\\n settings?: InitSettings$1<T>;\\n /** Runtime dependencies injected by the collector (push, command, logger, etc.). */\\n env?: Env$1<T>;\\n /** Source identifier; defaults to the InitSources object key. */\\n id?: string;\\n /** Logger configuration (level, handler) to override the collector's defaults. */\\n logger?: Config$4;\\n /** Mark as primary source; its push function becomes the exported `elb` from startFlow. */\\n primary?: boolean;\\n /** Defer source initialization until these collector events fire (e.g., `['consent']`). */\\n require?: string[];\\n /**\\n * Provisioning options for `walker setup`. `boolean | object`.\\n * Triggered only by explicit CLI invocation; never automatic.\\n */\\n setup?: boolean | SetupOptions$1<T>;\\n /**\\n * Ingest metadata extraction mapping.\\n * Extracts values from raw request objects (Express req, Lambda event, etc.)\\n * using walkerOS mapping syntax. Extracted data flows to transformers/destinations.\\n *\\n * @example\\n * ingest: {\\n * ip: 'req.ip',\\n * ua: 'req.headers.user-agent',\\n * origin: 'req.headers.origin'\\n * }\\n */\\n ingest?: Data$1;\\n /** Completely skip this source — no init, no event capture. */\\n disabled?: boolean;\\n}\\ntype PartialConfig$1<T extends TypesGeneric$1 = Types$1> = Config$1<Types$1<Partial<Settings$1<T>> | Settings$1<T>, Partial<Mapping<T>> | Mapping<T>, Push<T>, Env$1<T>, InitSettings$1<T>, SetupOptions$1<T>>>;\\ninterface Instance$2<T extends TypesGeneric$1 = Types$1> {\\n type: string;\\n config: Config$1<T>;\\n setup?: SetupFn<Config$1<T>, Env$1<T>>;\\n push: Push<T>;\\n destroy?: DestroyFn<Config$1<T>, Env$1<T>>;\\n on?(event: Types$3, context?: unknown): void | boolean | Promise<void | boolean>;\\n}\\n/**\\n * Context provided to source init function.\\n * Extends base context with source-specific properties.\\n */\\ninterface Context$1<T extends TypesGeneric$1 = Types$1> extends Base<Partial<Config$1<T>>, Env$1<T>> {\\n id: string;\\n /**\\n * Sets ingest metadata for the current request.\\n * Extracts values from the raw request using config.ingest mapping.\\n * The extracted data is passed through to transformers and destinations.\\n *\\n * @param value - Raw request object (Express req, Lambda event, etc.)\\n */\\n setIngest: (value: unknown) => Promise<void>;\\n /** Sets respond function for the current request. Called by source per-request. */\\n setRespond: (fn: RespondFn | undefined) => void;\\n}\\ntype Init$1<T extends TypesGeneric$1 = Types$1> = (context: Context$1<T>) => Instance$2<T> | Promise<Instance$2<T>>;\\ntype InitSource<T extends TypesGeneric$1 = Types$1> = {\\n code: Init$1<T>;\\n config?: Partial<Config$1<T>>;\\n env?: Partial<Env$1<T>>;\\n primary?: boolean;\\n next?: Next;\\n before?: Next;\\n cache?: Cache;\\n};\\n/**\\n * Sources configuration for collector.\\n * Maps source IDs to their initialization configurations.\\n */\\ninterface InitSources {\\n [sourceId: string]: InitSource<any>;\\n}\\n/**\\n * Renderer hint for source simulation UI.\\n * - 'browser': Source needs a real DOM (iframe with live preview)\\n * - 'codebox': Source uses a JSON/code editor (default)\\n */\\ntype Renderer = 'browser' | 'codebox';\\n\\ntype source_InitSource<T extends TypesGeneric$1 = Types$1> = InitSource<T>;\\ntype source_InitSources = InitSources;\\ntype source_Mapping<T extends TypesGeneric$1 = Types$1> = Mapping<T>;\\ntype source_Push<T extends TypesGeneric$1 = Types$1> = Push<T>;\\ntype source_Renderer = Renderer;\\ndeclare namespace source {\\n export type { BaseEnv$1 as BaseEnv, Config$1 as Config, Context$1 as Context, Env$1 as Env, Init$1 as Init, InitSettings$1 as InitSettings, source_InitSource as InitSource, source_InitSources as InitSources, Instance$2 as Instance, source_Mapping as Mapping, PartialConfig$1 as PartialConfig, source_Push as Push, source_Renderer as Renderer, Settings$1 as Settings, SetupOptions$1 as SetupOptions, Types$1 as Types, TypesGeneric$1 as TypesGeneric, TypesOf$1 as TypesOf };\\n}\\n\\ninterface BaseEnv {\\n [key: string]: unknown;\\n}\\ninterface Types<S = unknown, E = BaseEnv, I = S, U = unknown> {\\n settings: S;\\n initSettings: I;\\n env: E;\\n setup: U;\\n}\\ntype TypesGeneric = {\\n settings: any;\\n initSettings: any;\\n env: any;\\n setup: any;\\n};\\ntype Settings<T extends TypesGeneric = Types> = T['settings'];\\ntype InitSettings<T extends TypesGeneric = Types> = T['initSettings'];\\ntype Env<T extends TypesGeneric = Types> = T['env'];\\ntype SetupOptions<T extends TypesGeneric = Types> = T['setup'];\\ntype TypesOf<I> = I extends Instance$1<infer T> ? T : never;\\ninterface Config<T extends TypesGeneric = Types> {\\n settings?: InitSettings<T>;\\n env?: Env<T>;\\n id?: string;\\n logger?: Config$4;\\n /**\\n * Provisioning options for `walker setup`. `boolean | object`.\\n * Triggered only by explicit CLI invocation; never automatic.\\n */\\n setup?: boolean | SetupOptions<T>;\\n}\\ntype PartialConfig<T extends TypesGeneric = Types> = Config<Types<Partial<Settings<T>> | Settings<T>, Env<T>, InitSettings<T>, SetupOptions<T>>>;\\ninterface Context<T extends TypesGeneric = Types> extends Base<Config<T>, Env<T>> {\\n id: string;\\n}\\ntype GetFn<T = unknown> = (key: string) => T | undefined | Promise<T | undefined>;\\ntype SetFn<T = unknown> = (key: string, value: T, ttl?: number) => void | Promise<void>;\\ntype DeleteFn = (key: string) => void | Promise<void>;\\ninterface Instance$1<T extends TypesGeneric = Types> {\\n type: string;\\n config: Config<T>;\\n get: GetFn;\\n set: SetFn;\\n delete: DeleteFn;\\n setup?: SetupFn<Config<T>, Env<T>>;\\n destroy?: DestroyFn<Config<T>, Env<T>>;\\n}\\ntype Init<T extends TypesGeneric = Types> = (context: Context<Types<Partial<Settings<T>>, Env<T>, InitSettings<T>>>) => Instance$1<T> | Promise<Instance$1<T>>;\\ntype InitFn<T extends TypesGeneric = Types> = (context: Context<T>) => PromiseOrValue<void | false | Config<T>>;\\ntype InitStore<T extends TypesGeneric = Types> = {\\n code: Init<T>;\\n config?: Partial<Config<T>>;\\n env?: Partial<Env<T>>;\\n};\\ninterface InitStores {\\n [storeId: string]: InitStore<any>;\\n}\\ninterface Stores {\\n [storeId: string]: Instance$1;\\n}\\n\\ntype store_BaseEnv = BaseEnv;\\ntype store_Config<T extends TypesGeneric = Types> = Config<T>;\\ntype store_Context<T extends TypesGeneric = Types> = Context<T>;\\ntype store_DeleteFn = DeleteFn;\\ntype store_Env<T extends TypesGeneric = Types> = Env<T>;\\ntype store_GetFn<T = unknown> = GetFn<T>;\\ntype store_Init<T extends TypesGeneric = Types> = Init<T>;\\ntype store_InitFn<T extends TypesGeneric = Types> = InitFn<T>;\\ntype store_InitSettings<T extends TypesGeneric = Types> = InitSettings<T>;\\ntype store_InitStore<T extends TypesGeneric = Types> = InitStore<T>;\\ntype store_InitStores = InitStores;\\ntype store_PartialConfig<T extends TypesGeneric = Types> = PartialConfig<T>;\\ntype store_SetFn<T = unknown> = SetFn<T>;\\ntype store_Settings<T extends TypesGeneric = Types> = Settings<T>;\\ntype store_SetupOptions<T extends TypesGeneric = Types> = SetupOptions<T>;\\ntype store_Stores = Stores;\\ntype store_Types<S = unknown, E = BaseEnv, I = S, U = unknown> = Types<S, E, I, U>;\\ntype store_TypesGeneric = TypesGeneric;\\ntype store_TypesOf<I> = TypesOf<I>;\\ndeclare namespace store {\\n export type { store_BaseEnv as BaseEnv, store_Config as Config, store_Context as Context, store_DeleteFn as DeleteFn, store_Env as Env, store_GetFn as GetFn, store_Init as Init, store_InitFn as InitFn, store_InitSettings as InitSettings, store_InitStore as InitStore, store_InitStores as InitStores, Instance$1 as Instance, store_PartialConfig as PartialConfig, store_SetFn as SetFn, store_Settings as Settings, store_SetupOptions as SetupOptions, store_Stores as Stores, store_Types as Types, store_TypesGeneric as TypesGeneric, store_TypesOf as TypesOf };\\n}\\n\\n/**\\n * Trigger — unified interface for invoking any walkerOS step in simulation\\n * and testing. Every package exports a `createTrigger` factory from its\\n * examples that conforms to `Trigger.CreateFn`.\\n *\\n * Usage:\\n * const { flow, trigger } = await createTrigger(initConfig);\\n * const result = await trigger(type?, options?)(content);\\n *\\n * @packageDocumentation\\n */\\n\\n/** Flow access handle returned by createTrigger. */\\ninterface FlowHandle {\\n /** The collector instance created by startFlow. */\\n collector: Instance$6;\\n /** The elb push function for direct event injection. */\\n elb: Fn$3;\\n}\\n/** What createTrigger returns — a flow handle (lazy) and a trigger function. */\\ninterface Instance<TContent = unknown, TResult = unknown> {\\n /** Flow handle — undefined until first trigger() call, then stable. */\\n readonly flow: FlowHandle | undefined;\\n trigger: Fn<TContent, TResult>;\\n}\\n/**\\n * Curried trigger function — always async.\\n *\\n * First call selects mechanism (type) and configures it (options).\\n * Second call fires with content and returns result.\\n *\\n * @example\\n * // Browser source — click trigger\\n * trigger('click', 'button.cta')('<button data-elb=\\\"cta\\\">Sign Up</button>')\\n *\\n * // Express source — POST request\\n * trigger('POST')({ path: '/collect', body: { name: 'page view' } })\\n *\\n * // DataLayer — default mechanism\\n * trigger()(['event', 'purchase', { value: 25.42 }])\\n */\\ntype Fn<TContent = unknown, TResult = unknown> = (type?: string, options?: unknown) => (content: TContent) => Promise<TResult>;\\n/**\\n * Factory function exported by each package's examples.\\n *\\n * Receives full Collector.InitConfig. Does NOT call startFlow eagerly —\\n * startFlow is deferred to the first trigger() invocation (lazy init).\\n * The flow property uses a getter to read the closure variable live.\\n * createTrigger itself stays async for consistency (other packages may\\n * need await during setup). Config is passed through UNMODIFIED —\\n * validation is startFlow's job.\\n *\\n * @example\\n * // Package exports:\\n * export const createTrigger: Trigger.CreateFn<HTMLContent, void> = async (config) => {\\n * let flow: Trigger.FlowHandle | undefined;\\n *\\n * const trigger: Trigger.Fn<HTMLContent, void> = (type?, options?) => async (content) => {\\n * // Pre-startFlow work (e.g., inject HTML for browser source)\\n * // ...\\n *\\n * // Lazy init — only on first call\\n * if (!flow) flow = await startFlow(config);\\n *\\n * // Post-startFlow work (e.g., dispatch click event)\\n * // ...\\n * };\\n *\\n * return {\\n * get flow() { return flow; },\\n * trigger,\\n * };\\n * };\\n */\\ntype CreateFn<TContent = unknown, TResult = unknown> = (config: InitConfig, options?: unknown) => Promise<Instance<TContent, TResult>>;\\n\\ntype trigger_CreateFn<TContent = unknown, TResult = unknown> = CreateFn<TContent, TResult>;\\ntype trigger_FlowHandle = FlowHandle;\\ntype trigger_Fn<TContent = unknown, TResult = unknown> = Fn<TContent, TResult>;\\ntype trigger_Instance<TContent = unknown, TResult = unknown> = Instance<TContent, TResult>;\\ndeclare namespace trigger {\\n export type { trigger_CreateFn as CreateFn, trigger_FlowHandle as FlowHandle, trigger_Fn as Fn, trigger_Instance as Instance };\\n}\\n\\ntype AnyObject<T = unknown> = Record<string, T>;\\ntype Elb = Fn$3;\\ntype AnyFunction = (...args: unknown[]) => unknown;\\ntype SingleOrArray<T> = T | Array<T>;\\ntype Events = Array<Event>;\\ntype PartialEvent = Partial<Event>;\\ntype DeepPartialEvent = DeepPartial<Event>;\\ninterface Event {\\n name: string;\\n data: Properties;\\n context: OrderedProperties;\\n globals: Properties;\\n custom: Properties;\\n user: User;\\n nested: Entities;\\n consent: Consent;\\n id: string;\\n trigger: string;\\n entity: string;\\n action: string;\\n timestamp: number;\\n timing: number;\\n source: Source;\\n}\\ninterface Consent {\\n [name: string]: boolean;\\n}\\ninterface User extends Properties {\\n id?: string;\\n device?: string;\\n session?: string;\\n hash?: string;\\n address?: string;\\n email?: string;\\n phone?: string;\\n userAgent?: string;\\n browser?: string;\\n browserVersion?: string;\\n deviceType?: string;\\n language?: string;\\n country?: string;\\n region?: string;\\n city?: string;\\n zip?: string;\\n timezone?: string;\\n os?: string;\\n osVersion?: string;\\n screenSize?: string;\\n ip?: string;\\n internal?: boolean;\\n}\\ntype SourcePlatform = 'web' | 'server' | 'app' | 'ios' | 'android' | 'terminal' | string;\\n/**\\n * SourceMap is the discriminated-union registry for source kinds.\\n * Each source package augments this interface via `declare module\\n * '@walkeros/core'` to register its own `type` literal and any\\n * source-specific fields. Conflicting declarations cause compile errors,\\n * intentional, to surface naming collisions early.\\n */\\ninterface SourceMap {\\n collector: {\\n type: 'collector';\\n };\\n}\\ninterface Source extends Properties {\\n type: string;\\n platform?: SourcePlatform;\\n /** Deployment version of the source emitter (string). */\\n version?: string;\\n /** Event-model spec version. Collector defaults to \\\"4\\\". */\\n schema?: string;\\n /** Emission sequence per run (was: event.count). */\\n count?: number;\\n /** W3C traceparent full string; set when the emission is part of a chained trace. */\\n trace?: string;\\n /** Walker-controlled standard suggestions (sources may set). */\\n url?: string;\\n referrer?: string;\\n tool?: string;\\n command?: string;\\n}\\ntype PropertyType = boolean | string | number | {\\n [key: string]: Property;\\n};\\ntype Property = PropertyType | Array<PropertyType>;\\ninterface Properties {\\n [key: string]: Property | undefined;\\n}\\ninterface OrderedProperties {\\n [key: string]: [Property, number] | undefined;\\n}\\ntype Entities = Array<Entity>;\\ninterface Entity {\\n entity: string;\\n data: Properties;\\n nested?: Entities;\\n context?: OrderedProperties;\\n}\\ntype ConsentHandler = Record<string, AnyFunction>;\\ntype ActionHandler = AnyFunction;\\ntype DeepPartial<T> = {\\n [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];\\n};\\ntype PromiseOrValue<T> = T | Promise<T>;\\n\\ntype walkeros_ActionHandler = ActionHandler;\\ntype walkeros_AnyFunction = AnyFunction;\\ntype walkeros_AnyObject<T = unknown> = AnyObject<T>;\\ntype walkeros_Consent = Consent;\\ntype walkeros_ConsentHandler = ConsentHandler;\\ntype walkeros_DeepPartial<T> = DeepPartial<T>;\\ntype walkeros_DeepPartialEvent = DeepPartialEvent;\\ntype walkeros_Elb = Elb;\\ntype walkeros_Entities = Entities;\\ntype walkeros_Entity = Entity;\\ntype walkeros_Event = Event;\\ntype walkeros_Events = Events;\\ntype walkeros_OrderedProperties = OrderedProperties;\\ntype walkeros_PartialEvent = PartialEvent;\\ntype walkeros_PromiseOrValue<T> = PromiseOrValue<T>;\\ntype walkeros_Properties = Properties;\\ntype walkeros_Property = Property;\\ntype walkeros_PropertyType = PropertyType;\\ntype walkeros_SingleOrArray<T> = SingleOrArray<T>;\\ntype walkeros_Source = Source;\\ntype walkeros_SourceMap = SourceMap;\\ntype walkeros_SourcePlatform = SourcePlatform;\\ntype walkeros_User = User;\\ndeclare namespace walkeros {\\n export type { walkeros_ActionHandler as ActionHandler, walkeros_AnyFunction as AnyFunction, walkeros_AnyObject as AnyObject, walkeros_Consent as Consent, walkeros_ConsentHandler as ConsentHandler, walkeros_DeepPartial as DeepPartial, walkeros_DeepPartialEvent as DeepPartialEvent, walkeros_Elb as Elb, walkeros_Entities as Entities, walkeros_Entity as Entity, walkeros_Event as Event, walkeros_Events as Events, walkeros_OrderedProperties as OrderedProperties, walkeros_PartialEvent as PartialEvent, walkeros_PromiseOrValue as PromiseOrValue, walkeros_Properties as Properties, walkeros_Property as Property, walkeros_PropertyType as PropertyType, walkeros_SingleOrArray as SingleOrArray, walkeros_Source as Source, walkeros_SourceMap as SourceMap, walkeros_SourcePlatform as SourcePlatform, walkeros_User as User };\\n}\\n\\n/**\\n * A recorded function call made during simulation.\\n * Captures what a destination called on its env (e.g., window.gtag).\\n */\\ninterface Call {\\n /** Dot-path of the function called: \\\"window.gtag\\\", \\\"dataLayer.push\\\" */\\n fn: string;\\n /** Arguments passed to the function */\\n args: unknown[];\\n /** Unix timestamp in ms */\\n ts: number;\\n}\\n/**\\n * Result of simulating a single step.\\n * Same shape for source, transformer, and destination.\\n */\\ninterface Result {\\n /** Which step type was simulated */\\n step: 'source' | 'transformer' | 'destination';\\n /** Step name, e.g. \\\"gtag\\\", \\\"dataLayer\\\", \\\"enricher\\\" */\\n name: string;\\n /**\\n * Output events:\\n * - source: captured pre-collector events\\n * - transformer: [transformed event] or [] if filtered\\n * - destination: [] (destinations don't produce events)\\n */\\n events: DeepPartialEvent[];\\n /** Intercepted env calls. Populated for destinations, empty [] for others. */\\n calls: Call[];\\n /** Execution time in ms */\\n duration: number;\\n /** Error if the step threw */\\n error?: Error;\\n}\\n\\ntype simulation_Call = Call;\\ntype simulation_Result = Result;\\ndeclare namespace simulation {\\n export type { simulation_Call as Call, simulation_Result as Result };\\n}\\n\\ninterface Code {\\n lang?: string;\\n code: string;\\n}\\ninterface Hint {\\n text: string;\\n code?: Array<Code>;\\n}\\ntype Hints = Record<string, Hint>;\\n\\ntype hint_Code = Code;\\ntype hint_Hint = Hint;\\ntype hint_Hints = Hints;\\ndeclare namespace hint {\\n export type { hint_Code as Code, hint_Hint as Hint, hint_Hints as Hints };\\n}\\n\\ntype StorageType = 'local' | 'session' | 'cookie';\\ndeclare const Const: {\\n readonly Utils: {\\n readonly Storage: {\\n readonly Local: \\\"local\\\";\\n readonly Session: \\\"session\\\";\\n readonly Cookie: \\\"cookie\\\";\\n };\\n };\\n};\\n\\ntype SendDataValue = Property | Properties;\\ntype SendHeaders = {\\n [key: string]: string;\\n};\\ninterface SendResponse {\\n ok: boolean;\\n data?: unknown;\\n error?: string;\\n}\\n\\n/**\\n * Creates a TransformerResult for dynamic chain routing.\\n * Use this in transformer push functions to redirect the chain.\\n */\\ndeclare function branch(event: DeepPartialEvent, next: Next): Result$1;\\n\\n/**\\n * Anonymizes an IPv4 address by setting the last octet to 0.\\n *\\n * @param ip The IP address to anonymize.\\n * @returns The anonymized IP address or an empty string if the IP is invalid.\\n */\\ndeclare function anonymizeIP(ip: string): string;\\n\\n/**\\n * Flow Configuration Utilities\\n *\\n * Functions for resolving and processing Flow configurations.\\n *\\n * @packageDocumentation\\n */\\n\\n/** Sentinel prefix for deferred $env resolution. Shared with CLI bundler. */\\ndeclare const ENV_MARKER_PREFIX = \\\"__WALKEROS_ENV:\\\";\\ninterface ResolveOptions {\\n deferred?: boolean;\\n /**\\n * When false, unresolved `$flow.X.Y` refs (unknown flow, missing key,\\n * empty value) trigger {@link onWarning} and the original `$flow…` string\\n * is left in place. Cycles always throw regardless of this flag.\\n * Default: true (strict — throws as today).\\n */\\n strictFlowRefs?: boolean;\\n /** Called for each unresolved $flow ref when {@link strictFlowRefs} is false. */\\n onWarning?: (message: string) => void;\\n}\\n/**\\n * Walk a dot-separated path into a value.\\n * Throws if any intermediate segment is missing or not an object.\\n */\\ndeclare function walkPath(value: unknown, path: string, refPrefix: string): unknown;\\n/**\\n * Resolver callback for `$flow.X.Y` references.\\n *\\n * Given a sibling flow name, returns its fully resolved `Flow.Config` block\\n * (with `$env`/`$var`/`$contract` already resolved) as `unknown` so that\\n * {@link walkPath} can traverse it. Returns `undefined` if the flow does\\n * not exist. Implementations are responsible for cycle detection across\\n * recursive calls.\\n */\\ntype FlowConfigResolver = (flowName: string) => unknown;\\n/**\\n * Convert package name to valid JavaScript variable name.\\n * Used for deterministic default import naming.\\n * @example\\n * packageNameToVariable('@walkeros/server-destination-api')\\n * // → '_walkerosServerDestinationApi'\\n */\\ndeclare function packageNameToVariable(packageName: string): string;\\n/**\\n * Get resolved flow for a named flow.\\n *\\n * Resolution pass order:\\n * 1. `$env` / `$var` resolve per-flow in isolation (no cross-flow context).\\n * `$var` resolves recursively (variables may reference other variables,\\n * `$env`, `$contract`, or `$flow`); cycles are detected via a visiting set.\\n * 2. `$flow.X.Y` resolves against pass-1 outputs of sibling flows (so `$env`/`$var`\\n * inside the referenced flow are already resolved when `$flow` reads it).\\n * 3. `$contract` resolves last (with `$flow` results available).\\n *\\n * In practice these passes are interleaved by the resolver: when `$flow.X.Y`\\n * is encountered, the sibling flow X's `Flow.Config` block is recursively\\n * resolved on demand (with all its own `$env`/`$var`/`$contract` references\\n * resolved first), then the deep path is walked. Cycles are detected via a\\n * visiting set.\\n *\\n * @param config - The complete Flow.Json (root multi-flow config)\\n * @param flowName - Flow name (auto-selected if only one exists)\\n * @param options - Resolution options\\n * @returns Resolved {@link Flow} with $var, $env, $contract, and $flow patterns resolved\\n * @throws Error if flow selection is required but not specified, or flow not found\\n * @throws Error if a `$flow.X.Y` reference forms a cycle\\n *\\n * @example\\n * ```typescript\\n * import { getFlowSettings } from '@walkeros/core';\\n *\\n * const config = JSON.parse(fs.readFileSync('walkeros.config.json', 'utf8'));\\n *\\n * // Auto-select if only one flow\\n * const flow = getFlowSettings(config);\\n *\\n * // Or specify flow\\n * const prodFlow = getFlowSettings(config, 'production');\\n * ```\\n */\\ndeclare function getFlowSettings(config: Flow.Json, flowName?: string, options?: ResolveOptions): Flow;\\n/**\\n * Get the platform of a flow ('web' or 'server').\\n *\\n * Reads from `flow.config.platform`.\\n *\\n * @param flow - Resolved flow (output of {@link getFlowSettings})\\n * @returns \\\"web\\\" or \\\"server\\\"\\n * @throws Error if `config.platform` is missing\\n *\\n * @example\\n * ```typescript\\n * import { getPlatform } from '@walkeros/core';\\n *\\n * const platform = getPlatform(flow);\\n * // Returns \\\"web\\\" or \\\"server\\\"\\n * ```\\n */\\ndeclare function getPlatform(flow: Flow): 'web' | 'server';\\n\\n/**\\n * @interface Assign\\n * @description Options for the assign function.\\n * @property merge - Merge array properties instead of overriding them.\\n * @property shallow - Create a shallow copy instead of updating the target object.\\n * @property extend - Extend the target with new properties instead of only updating existing ones.\\n */\\ninterface Assign {\\n merge?: boolean;\\n shallow?: boolean;\\n extend?: boolean;\\n}\\n/**\\n * Merges objects with advanced options.\\n *\\n * @template T, U\\n * @param target - The target object to merge into.\\n * @param obj - The source object to merge from.\\n * @param options - Options for merging.\\n * @returns The merged object.\\n */\\ndeclare function assign<T extends object, U extends object>(target: T, obj?: U, options?: Assign): T & U;\\n\\n/**\\n * Gets a value from an object by a dot-notation string.\\n * Supports wildcards for arrays.\\n *\\n * @example\\n * getByPath({ data: { id: 1 } }, \\\"data.id\\\") // Returns 1\\n *\\n * @param event - The object to get the value from.\\n * @param key - The dot-notation string.\\n * @param defaultValue - The default value to return if the key is not found.\\n * @returns The value from the object or the default value.\\n */\\ndeclare function getByPath(event: unknown, key?: string, defaultValue?: unknown): unknown;\\n/**\\n * Sets a value in an object by a dot-notation string.\\n *\\n * @param obj - The object to set the value in.\\n * @param key - The dot-notation string.\\n * @param value - The value to set.\\n * @returns A new object with the updated value.\\n */\\ndeclare function setByPath<T = unknown>(obj: T, key: string, value: unknown): T;\\n\\ndeclare function flattenIncludeSections(event: DeepPartialEvent, sections: string[]): Record<string, unknown>;\\n\\n/**\\n * Casts a value to a specific type.\\n *\\n * @param value The value to cast.\\n * @returns The casted value.\\n */\\ndeclare function castValue(value: unknown): PropertyType;\\n\\n/**\\n * Creates a deep clone of a value.\\n * Supports primitive values, objects, arrays, dates, and regular expressions.\\n * Handles circular references.\\n *\\n * @template T\\n * @param org - The value to clone.\\n * @param visited - A map of visited objects to handle circular references.\\n * @returns The cloned value.\\n */\\ndeclare function clone<T>(org: T, visited?: WeakMap<object, unknown>): T;\\n\\n/**\\n * Checks if the required consent is granted.\\n *\\n * @param required - The required consent states.\\n * @param state - The current consent states.\\n * @param individual - Individual consent states to prioritize.\\n * @returns The granted consent states or false if not granted.\\n */\\ndeclare function getGrantedConsent(required: Consent | undefined, state?: Consent, individual?: Consent): false | Consent;\\n\\n/**\\n * Creates a new destination instance by merging a base destination with additional configuration.\\n *\\n * This utility enables elegant destination configuration while avoiding config side-effects\\n * that could occur when reusing destination objects across multiple collector instances.\\n *\\n * @param baseDestination - The base destination to extend\\n * @param config - Additional configuration to merge with the base destination's config\\n * @returns A new destination instance with merged configuration\\n *\\n * @example\\n * ```typescript\\n * // Types are inferred automatically from destinationGtag\\n * elb('walker destination', createDestination(destinationGtag, {\\n * settings: { ga4: { measurementId: 'G-123' } }\\n * }));\\n * ```\\n */\\ndeclare function createDestination<I extends Instance$5>(baseDestination: I, config: Partial<Config$5<TypesOf$3<I>>>): I;\\n\\n/**\\n * Deep merges source into target, mutating target in-place.\\n * Recurses into plain objects; everything else is a leaf (replaced).\\n * Skips undefined source values; null overwrites.\\n */\\ndeclare function deepMerge<T extends Record<string, unknown>>(target: T, source: Record<string, unknown>): T;\\n\\n/**\\n * Creates a complete event with default values.\\n * Used for testing and debugging.\\n *\\n * @param props - Properties to override the default values.\\n * @returns A complete event.\\n */\\ndeclare function createEvent(props?: DeepPartialEvent): Event;\\n/**\\n * Creates a complete event with default values based on the event name.\\n * Used for testing and debugging.\\n *\\n * @param name - The name of the event to create.\\n * @param props - Properties to override the default values.\\n * @returns A complete event.\\n */\\ndeclare function getEvent(name?: string, props?: DeepPartialEvent): Event;\\n\\n/**\\n * Generates a random string of a given length.\\n *\\n * @param length - The length of the random string.\\n * @param charset - Optional custom charset. Defaults to base-36 (0-9a-z).\\n * @returns The random string.\\n */\\ndeclare function getId(length?: number, charset?: string): string;\\n\\n/**\\n * W3C span_id: 8 random bytes encoded as 16 lowercase hex characters.\\n * Reference: W3C Trace Context (W3C Recommendation, January 2020).\\n */\\ndeclare function getSpanId(): string;\\n\\ninterface MarketingParameters {\\n [key: string]: string;\\n}\\n/**\\n * Click-ID registry entry — maps a URL parameter name to a canonical platform.\\n *\\n * Runtime shape only; the corresponding Zod schema lives in\\n * `@walkeros/core/dev` (schemas/marketing.ts) for dev tooling that needs\\n * validation or JSON Schema generation.\\n */\\ninterface ClickIdEntry {\\n param: string;\\n platform: string;\\n}\\n/**\\n * Default click-ID registry.\\n *\\n * Ordered by priority: when a URL contains multiple click IDs, the entry\\n * appearing earlier wins as the resolved `clickId` / `platform`. All matched\\n * raw values are still preserved on the result.\\n *\\n * Extend via the third argument to {@link getMarketingParameters} or the\\n * `clickIds` field in the session source settings.\\n */\\ndeclare const defaultClickIds: ClickIdEntry[];\\n/**\\n * Extracts marketing parameters from a URL.\\n *\\n * - UTM and custom params are mapped to friendly names (`utm_source` → `source`).\\n * - Known click IDs are detected case-insensitively; each raw value is stored\\n * under its canonical lowercase param name.\\n * - `clickId` and `platform` reference the highest-priority match (first entry\\n * in the registry present in the URL).\\n * - Custom `clickIds` override default platforms by `param` in place and\\n * append new params at the end of the priority list.\\n */\\ndeclare function getMarketingParameters(url: URL, custom?: MarketingParameters, clickIds?: ClickIdEntry[]): Properties;\\n\\n/**\\n * Creates a debounced function that delays invoking `fn` until after `wait`\\n * milliseconds have elapsed since the last time the debounced function was\\n * invoked. The debounced function comes with a `cancel` method to cancel\\n * delayed `fn` invocations and a `flush` method to immediately invoke them.\\n *\\n * @template P, R\\n * @param fn The function to debounce.\\n * @param wait The number of milliseconds to delay.\\n * @param immediate Trigger the function on the leading edge, instead of the trailing.\\n * @returns The new debounced function.\\n */\\ndeclare function debounce<P extends unknown[], R>(fn: (...args: P) => R, wait?: number, immediate?: boolean): (...args: P) => Promise<R>;\\ndeclare function throttle<P extends unknown[], R>(fn: (...args: P) => R | undefined, delay?: number): (...args: P) => R | undefined;\\n\\n/**\\n * Checks if a value is an arguments object.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an arguments object, false otherwise.\\n */\\ndeclare function isArguments(value: unknown): value is IArguments;\\n/**\\n * Checks if a value is an array.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an array, false otherwise.\\n */\\ndeclare function isArray<T>(value: unknown): value is T[];\\n/**\\n * Checks if a value is a boolean.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a boolean, false otherwise.\\n */\\ndeclare function isBoolean(value: unknown): value is boolean;\\n/**\\n * Checks if an entity is a walker command.\\n *\\n * @param entity The entity to check.\\n * @returns True if the entity is a walker command, false otherwise.\\n */\\ndeclare function isCommand(entity: string): entity is \\\"walker\\\";\\n/**\\n * Checks if a value is defined.\\n *\\n * @param value The value to check.\\n * @returns True if the value is defined, false otherwise.\\n */\\ndeclare function isDefined<T>(val: T | undefined): val is T;\\n/**\\n * Checks if a value is an element or the document.\\n *\\n * @param elem The value to check.\\n * @returns True if the value is an element or the document, false otherwise.\\n */\\ndeclare function isElementOrDocument(elem: unknown): elem is Element;\\n/**\\n * Checks if a value is a function.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a function, false otherwise.\\n */\\ndeclare function isFunction(value: unknown): value is Function;\\n/**\\n * Checks if a value is a number.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a number, false otherwise.\\n */\\ndeclare function isNumber(value: unknown): value is number;\\n/**\\n * Checks if a value is an object.\\n *\\n * @param value The value to check.\\n * @returns True if the value is an object, false otherwise.\\n */\\ndeclare function isObject(value: unknown): value is AnyObject;\\n/**\\n * Checks if two variables have the same type.\\n *\\n * @param variable The first variable.\\n * @param type The second variable.\\n * @returns True if the variables have the same type, false otherwise.\\n */\\ndeclare function isSameType<T>(variable: unknown, type: T): variable is typeof type;\\n/**\\n * Checks if a value is a string.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a string, false otherwise.\\n */\\ndeclare function isString(value: unknown): value is string;\\n\\n/**\\n * Create a logger instance\\n *\\n * @param config - Logger configuration\\n * @returns Logger instance with all log methods and scoping support\\n *\\n * @example\\n * ```typescript\\n * // Basic usage\\n * const logger = createLogger({ level: 'DEBUG' });\\n * logger.info('Hello world');\\n *\\n * // With scoping\\n * const destLogger = logger.scope('gtag').scope('myInstance');\\n * destLogger.debug('Processing event'); // DEBUG [gtag:myInstance] Processing event\\n *\\n * // With custom handler\\n * const logger = createLogger({\\n * handler: (level, message, context, scope, originalHandler) => {\\n * // Custom logic (e.g., send to Sentry)\\n * originalHandler(level, message, context, scope);\\n * }\\n * });\\n * ```\\n *\\n * // TODO: Consider compile-time stripping of debug logs in production builds\\n * // e.g., if (__DEV__) { logger.debug(...) }\\n */\\ndeclare function createLogger(config?: Config$4): Instance$4;\\n\\n/**\\n * Gets the mapping for an event.\\n *\\n * @param event The event to get the mapping for (can be partial or full).\\n * @param mapping The mapping rules.\\n * @param collector Required to evaluate rule-level conditions against the unified Context. Legacy callers may omit; rule-level conditions then run with `undefined as never` (defensive).\\n * @returns The mapping result.\\n */\\ndeclare function getMappingEvent(event: DeepPartialEvent | PartialEvent | Event, mapping?: Rules, collector?: Instance$6): Promise<Result$2>;\\n/**\\n * Gets a value from a mapping.\\n *\\n * @param value The value to get the mapping from.\\n * @param data The mapping data.\\n * @param options The mapping options.\\n * @returns The mapped value.\\n */\\ndeclare function getMappingValue(value: DeepPartialEvent | unknown | undefined, data?: Data$1, context?: Partial<Context$6>): Promise<Property | undefined>;\\n/**\\n * Processes an event through mapping configuration.\\n *\\n * This is the unified mapping logic used by both sources and destinations.\\n * It applies transformations in this order:\\n * 1. Config-level policy - modifies the event itself (global rules)\\n * 2. Mapping rules - finds matching rule based on entity-action\\n * 3. Event-level policy - modifies the event based on specific mapping rule\\n * 4. Data transformation - creates context data\\n * 5. Ignore check and name override\\n *\\n * Sources can pass partial events, destinations pass full events.\\n * getMappingValue works with both partial and full events.\\n *\\n * @param event - The event to process (can be partial or full, will be mutated by policies)\\n * @param config - Mapping configuration (mapping, data, policy, consent)\\n * @param collector - Collector instance for context\\n * @returns Object with transformed event, data, mapping rule, and ignore flag\\n */\\ndeclare function processEventMapping<T extends DeepPartialEvent | Event>(event: T, config: Config$7, collector: Instance$6): Promise<{\\n event: T;\\n data?: Property;\\n mapping?: Rule;\\n mappingKey?: string;\\n ignore: boolean;\\n silent: boolean;\\n}>;\\n\\n/**\\n * Environment mocking utilities for walkerOS destinations\\n *\\n * Provides standardized tools for intercepting function calls in environment objects,\\n * enabling consistent testing patterns across all destinations.\\n */\\ntype InterceptorFn = (path: string[], args: unknown[], original?: Function) => unknown;\\n/**\\n * Creates a proxied environment that intercepts function calls\\n *\\n * Uses Proxy to wrap environment objects and capture all function calls,\\n * allowing for call recording, mocking, or simulation.\\n *\\n * @param env - The environment object to wrap\\n * @param interceptor - Function called for each intercepted call\\n * @returns Proxied environment with interceptor applied\\n *\\n * @example\\n * ```typescript\\n * const calls: Array<{ path: string[]; args: unknown[] }> = [];\\n *\\n * const testEnv = mockEnv(env.push, (path, args) => {\\n * calls.push({ path, args });\\n * });\\n *\\n * // Use testEnv with destination\\n * await destination.push(event, { env: testEnv });\\n *\\n * // Analyze captured calls\\n * expect(calls).toContainEqual({\\n * path: ['window', 'gtag'],\\n * args: ['event', 'purchase', { value: 99.99 }]\\n * });\\n * ```\\n */\\ndeclare function mockEnv<T extends object>(env: T, interceptor: InterceptorFn): T;\\n/**\\n * Traverses environment object and replaces values using a replacer function\\n *\\n * Alternative to mockEnv for environments where Proxy is not suitable.\\n * Performs deep traversal and allows value transformation at each level.\\n *\\n * @param env - The environment object to traverse\\n * @param replacer - Function to transform values during traversal\\n * @returns New environment object with transformed values\\n *\\n * @example\\n * ```typescript\\n * const recordedCalls: APICall[] = [];\\n *\\n * const recordingEnv = traverseEnv(originalEnv, (value, path) => {\\n * if (typeof value === 'function') {\\n * return (...args: unknown[]) => {\\n * recordedCalls.push({\\n * path: path.join('.'),\\n * args: structuredClone(args)\\n * });\\n * return value(...args);\\n * };\\n * }\\n * return value;\\n * });\\n * ```\\n */\\ndeclare function traverseEnv<T extends object>(env: T, replacer: (value: unknown, path: string[]) => unknown): T;\\n\\n/**\\n * Create a mock context for testing transformers and destinations.\\n *\\n * Provides sensible defaults for all required fields. Override only\\n * what the test cares about. When context signatures change, only\\n * this factory needs updating — not every test file.\\n *\\n * @example\\n * ```typescript\\n * // Transformer test — only specify config\\n * const ctx = createMockContext({ config: { settings: { strict: true } } });\\n * const result = await transformer.push(event, ctx);\\n *\\n * // Destination test — specify config and custom env\\n * const ctx = createMockContext({ config: { settings: { url } }, env: { sendWeb } });\\n * await destination.push(event, ctx);\\n *\\n * // With custom ingest data\\n * const ctx = createMockContext({ ingest: { ...createIngest('test'), path: '/api' } });\\n * ```\\n */\\ndeclare function createMockContext<T extends TypesGeneric$2 = Types$2>(overrides?: Partial<Omit<Context$3<T>, 'config' | 'ingest'> & {\\n config?: Config$2<T> | Config$5<TypesGeneric$3>;\\n ingest?: Ingest | (Record<string, unknown> & {\\n _meta: Ingest['_meta'];\\n });\\n data?: unknown;\\n rule?: unknown;\\n}>): Context$3<T> & PushContext<TypesGeneric$3>;\\n\\n/**\\n * Mock logger instance for testing\\n * Includes all logger methods as jest.fn() plus tracking of scoped loggers\\n * Extends Instance to ensure type compatibility\\n */\\ninterface MockLogger extends Instance$4 {\\n error: jest.Mock;\\n warn: jest.Mock;\\n info: jest.Mock;\\n debug: jest.Mock;\\n throw: jest.Mock<never, [string | Error, unknown?]>;\\n json: jest.Mock;\\n scope: jest.Mock<MockLogger, [string]>;\\n /**\\n * Array of all scoped loggers created by this logger\\n * Useful for asserting on scoped logger calls in tests\\n */\\n scopedLoggers: MockLogger[];\\n}\\n/**\\n * Create a mock logger for testing\\n * All methods are jest.fn() that can be used for assertions\\n *\\n * @example\\n * ```typescript\\n * const mockLogger = createMockLogger();\\n *\\n * // Use in code under test\\n * someFunction(mockLogger);\\n *\\n * // Assert on calls\\n * expect(mockLogger.error).toHaveBeenCalledWith('error message');\\n *\\n * // Assert on scoped logger\\n * const scoped = mockLogger.scopedLoggers[0];\\n * expect(scoped.debug).toHaveBeenCalledWith('debug in scope');\\n * ```\\n */\\ndeclare function createMockLogger(): MockLogger;\\n\\n/**\\n * Checks if a value is a valid property type.\\n *\\n * @param value The value to check.\\n * @returns True if the value is a valid property type, false otherwise.\\n */\\ndeclare function isPropertyType(value: unknown): value is PropertyType;\\n/**\\n * Filters a value to only include valid property types.\\n *\\n * @param value The value to filter.\\n * @returns The filtered value or undefined.\\n */\\ndeclare function filterValues(value: unknown): Property | undefined;\\n/**\\n * Casts a value to a valid property type.\\n *\\n * @param value The value to cast.\\n * @returns The casted value or undefined.\\n */\\ndeclare function castToProperty(value: unknown): Property | undefined;\\n\\n/**\\n * Converts a request string to a data object.\\n *\\n * @param parameter The request string to convert.\\n * @returns The data object or undefined.\\n */\\ndeclare function requestToData(parameter: unknown): AnyObject | undefined;\\n/**\\n * Converts a data object to a request string.\\n *\\n * @param data The data object to convert.\\n * @returns The request string.\\n */\\ndeclare function requestToParameter(data: AnyObject | PropertyType): string;\\n\\n/**\\n * Transforms data to a string.\\n *\\n * @param data The data to transform.\\n * @returns The transformed data.\\n */\\ndeclare function transformData(data?: SendDataValue): string | undefined;\\n/**\\n * Gets the headers for a request.\\n *\\n * @param headers The headers to merge with the default headers.\\n * @returns The merged headers.\\n */\\ndeclare function getHeaders(headers?: SendHeaders): SendHeaders;\\n\\n/**\\n * Normalize `config.setup` into a concrete options object, or null when disabled.\\n *\\n * - `false` / `undefined` → null (no setup)\\n * - `true` → `defaults` as-is\\n * - object → shallow merge of defaults and overrides (overrides win)\\n */\\ndeclare function resolveSetup<T extends object>(value: boolean | T | undefined, defaults: T): T | null;\\n\\n/**\\n * Throws an error.\\n *\\n * @param error The error to throw.\\n */\\ndeclare function throwError(error: unknown): never;\\n\\n/**\\n * Trims quotes and whitespaces from a string.\\n *\\n * @param str The string to trim.\\n * @returns The trimmed string.\\n */\\ndeclare function trim(str: string): string;\\n\\n/**\\n * A utility function that wraps a function in a try-catch block.\\n *\\n * @template P, R, S\\n * @param fn The function to wrap.\\n * @param onError A function to call when an error is caught.\\n * @param onFinally A function to call in the finally block.\\n * @returns The wrapped function.\\n */\\ndeclare function tryCatch<P extends unknown[], R, S>(fn: (...args: P) => R | undefined, onError: (err: unknown) => S, onFinally?: () => void): (...args: P) => R | S;\\ndeclare function tryCatch<P extends unknown[], R>(fn: (...args: P) => R | undefined, onError?: undefined, onFinally?: () => void): (...args: P) => R | undefined;\\n/**\\n * A utility function that wraps an async function in a try-catch block.\\n *\\n * @template P, R, S\\n * @param fn The async function to wrap.\\n * @param onError A function to call when an error is caught.\\n * @param onFinally A function to call in the finally block.\\n * @returns The wrapped async function.\\n */\\ndeclare function tryCatchAsync<P extends unknown[], R, S>(fn: (...args: P) => R, onError: (err: unknown) => S, onFinally?: () => void | Promise<void>): (...args: P) => Promise<R | S>;\\ndeclare function tryCatchAsync<P extends unknown[], R>(fn: (...args: P) => R, onError?: undefined, onFinally?: () => void | Promise<void>): (...args: P) => Promise<R | undefined>;\\n\\n/**\\n * A utility function that wraps a function with hooks.\\n *\\n * Pre/post hooks are user-supplied and may throw. A throwing hook must not\\n * crash the surrounding pipeline — on failure, fall back to calling the\\n * original function (pre-hook) or keep the original result (post-hook).\\n *\\n * @template P, R\\n * @param fn The function to wrap.\\n * @param name The name of the function.\\n * @param hooks The hooks to use.\\n * @param logger Optional logger for hook failure warnings. Falls back to\\n * `console.warn` when not provided.\\n * @returns The wrapped function.\\n */\\ndeclare function useHooks<P extends unknown[], R>(fn: (...args: P) => R, name: string, hooks: Functions, logger?: Instance$4): (...args: P) => R;\\n\\n/**\\n * Parses a user agent string to extract browser, OS, and device information.\\n *\\n * @param userAgent The user agent string to parse.\\n * @returns An object containing the parsed user agent information.\\n */\\ndeclare function parseUserAgent(userAgent?: string): User;\\n/**\\n * Gets the browser name from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The browser name or undefined.\\n */\\ndeclare function getBrowser(userAgent: string): string | undefined;\\n/**\\n * Gets the browser version from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The browser version or undefined.\\n */\\ndeclare function getBrowserVersion(userAgent: string): string | undefined;\\n/**\\n * Gets the OS name from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The OS name or undefined.\\n */\\ndeclare function getOS(userAgent: string): string | undefined;\\n/**\\n * Gets the OS version from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The OS version or undefined.\\n */\\ndeclare function getOSVersion(userAgent: string): string | undefined;\\n/**\\n * Gets the device type from a user agent string.\\n *\\n * @param userAgent The user agent string.\\n * @returns The device type or undefined.\\n */\\ndeclare function getDeviceType(userAgent: string): string | undefined;\\n\\n/**\\n * Inline Code Wrapping Utilities\\n *\\n * Converts inline code strings to executable functions for the three mapping\\n * callbacks: condition, fn, validate. All three share a single signature:\\n *\\n * (value, context) => result\\n *\\n * Inside the inline body, the available bindings are:\\n * - value: unknown - the value being mapped/validated/checked\\n * - context: Mapping.Context with these fields:\\n * event: WalkerOS.DeepPartialEvent\\n * mapping: Mapping.Value | Mapping.Rule\\n * collector: Collector.Instance\\n * logger: Logger.Instance\\n * consent?: WalkerOS.Consent\\n *\\n * If the body has no explicit `return`, it is auto-wrapped with `return`.\\n *\\n * @packageDocumentation\\n */\\n\\n/**\\n * Wrap inline code as a Mapping.Condition.\\n *\\n * @example\\n * ```ts\\n * const c = wrapCondition('context.consent?.marketing === true');\\n * c(value, context); // boolean\\n * ```\\n */\\ndeclare function wrapCondition(code: string): Condition;\\n/**\\n * Wrap inline code as a Mapping.Fn.\\n *\\n * @example\\n * ```ts\\n * const fn = wrapFn('value.user.email.split(\\\"@\\\")[1]');\\n * fn(value, context); // domain\\n * ```\\n */\\ndeclare function wrapFn(code: string): Fn$4;\\n/**\\n * Wrap inline code as a Mapping.Validate.\\n *\\n * @example\\n * ```ts\\n * const v = wrapValidate('typeof value === \\\"string\\\" && value.length > 0');\\n * v(value, context); // boolean\\n * ```\\n */\\ndeclare function wrapValidate(code: string): Validate;\\n\\ninterface ExampleSummary {\\n name: string;\\n description?: string;\\n}\\ninterface WalkerOSPackageMeta {\\n packageName: string;\\n version: string;\\n description?: string;\\n type?: string;\\n platform?: string | string[];\\n}\\ninterface WalkerOSPackageInfo {\\n packageName: string;\\n version: string;\\n type?: string;\\n platform?: string | string[];\\n schemas: Record<string, unknown>;\\n examples: Record<string, unknown>;\\n hints?: Record<string, unknown>;\\n}\\ninterface WalkerOSPackage extends WalkerOSPackageInfo {\\n description?: string;\\n docs?: string;\\n source?: string;\\n hintKeys: string[];\\n exampleSummaries: ExampleSummary[];\\n}\\ndeclare function fetchPackage(packageName: string, options?: {\\n version?: string;\\n timeout?: number;\\n baseUrl?: string;\\n client?: string;\\n}): Promise<WalkerOSPackage>;\\n/**\\n * @deprecated Use fetchPackage instead.\\n * Still used by: entry.ts (validator), package-schemas.ts (MCP resource).\\n */\\ndeclare function fetchPackageSchema(packageName: string, options?: {\\n version?: string;\\n timeout?: number;\\n baseUrl?: string;\\n client?: string;\\n}): Promise<WalkerOSPackageInfo>;\\n\\n/**\\n * Resolve all named contracts: process extends chains, expand wildcards,\\n * strip annotations from event schemas.\\n *\\n * Returns a fully resolved map where each contract entry has inherited\\n * properties merged in and wildcards expanded into concrete actions.\\n */\\ndeclare function resolveContracts(contracts: Flow.Contract): Record<string, Flow.ContractRule>;\\n/**\\n * Deep merge two JSON Schema objects with additive semantics.\\n * - `required` arrays: union (deduplicated)\\n * - `properties`: deep merge (child wins on conflict for scalars)\\n * - Scalars: child overrides parent\\n */\\ndeclare function mergeContractSchemas(parent: Record<string, unknown>, child: Record<string, unknown>): Record<string, unknown>;\\n\\ndeclare function mcpResult(result: unknown, hints?: {\\n next?: string[];\\n warnings?: string[];\\n}): {\\n content: {\\n type: \\\"text\\\";\\n text: string;\\n }[];\\n structuredContent: Record<string, unknown>;\\n};\\ndeclare function mcpError(error: unknown, hint?: string): {\\n content: {\\n type: \\\"text\\\";\\n text: string;\\n }[];\\n structuredContent: Record<string, unknown>;\\n isError: true;\\n};\\n\\n/**\\n * Compiles a match expression into a closure for fast runtime evaluation.\\n * Regex patterns are compiled once. Numeric comparisons are parsed once.\\n * Runtime evaluation is pure function calls with short-circuit logic.\\n */\\ndeclare function compileMatcher(expr: MatchExpression | '*'): CompiledMatcher;\\n\\ninterface CompiledRoute {\\n match: CompiledMatcher;\\n next: CompiledNext;\\n}\\ntype CompiledNext = {\\n type: 'static';\\n value: string;\\n} | {\\n type: 'chain';\\n value: string[];\\n} | {\\n type: 'routes';\\n routes: CompiledRoute[];\\n};\\ndeclare function isRouteArray(next: Next): next is NextRule[];\\ndeclare function compileNext(next: Next | undefined): CompiledNext | undefined;\\ndeclare function resolveNext(compiled: CompiledNext | undefined, context?: Record<string, unknown>): string | string[] | undefined;\\n\\ninterface CompiledCacheRule {\\n match: CompiledMatcher;\\n key: string[];\\n ttl: number;\\n update?: CacheRule['update'];\\n}\\ninterface CompiledCache {\\n full: boolean;\\n storeId?: string;\\n rules: CompiledCacheRule[];\\n}\\ninterface CacheResult {\\n status: 'HIT' | 'MISS';\\n key: string;\\n value?: unknown;\\n rule: CompiledCacheRule;\\n}\\n/**\\n * Builds a structured context object for cache and routing operations.\\n * Normalizes ingest (defaulting to {}) and optionally includes event.\\n */\\ndeclare function buildCacheContext(ingest?: unknown, event?: unknown): Record<string, unknown>;\\ndeclare function compileCache(cache: Cache): CompiledCache;\\ndeclare function checkCache(compiled: CompiledCache, store: Instance$1, context: Record<string, unknown>, namespace: string): CacheResult | null;\\ndeclare function storeCache(store: Instance$1, key: string, value: unknown, ttlSeconds: number): void;\\ndeclare function applyUpdate(value: unknown, update: Record<string, unknown> | undefined, context: Record<string, unknown>, collector: Instance$6): Promise<unknown>;\\n\\ntype StepOut = Flow.StepOut;\\n/**\\n * Format a step example's `out` as readable code for docs/app rendering.\\n *\\n * - Empty `out` → `// no output`.\\n * - `['return', value]` → `return <value>` (no parentheses).\\n * - `[callable, ...args]` → `callable(<args>)`.\\n * - Primitive args render as JSON (strings quoted, numbers/booleans/null bare).\\n * - `undefined` renders as the literal token `undefined`.\\n * - Objects/arrays render as `JSON.stringify(v, null, 2)`.\\n * - Functions render as `[Function]` (rare in outs; safe fallback).\\n *\\n * Pure function. No runtime dependencies. Used by the website\\n * `<StepExample>` renderer and the app `OutputPanel` for a single source of truth.\\n */\\ndeclare function formatOut(out: StepOut): string;\\n\\n/**\\n * walkerOS reference-syntax regex constants — single source of truth.\\n *\\n * Rule:\\n * - `.` = key or path (resolver walks it)\\n * - `:` = literal value or raw-code payload (resolver uses it verbatim)\\n *\\n * Every tool that recognizes references (core resolver, CLI bundler,\\n * app secrets service, explorer IntelliSense) imports these — no\\n * inline regexes elsewhere.\\n */\\ndeclare const REF_VAR_FULL: RegExp;\\ndeclare const REF_VAR_INLINE: RegExp;\\ndeclare const REF_ENV: RegExp;\\ndeclare const REF_CONTRACT: RegExp;\\n/** Whole-string `$flow.<name>(.<path>)?`: cross-flow value reference. */\\ndeclare const REF_FLOW: RegExp;\\ndeclare const REF_STORE: RegExp;\\ndeclare const REF_SECRET: RegExp;\\ndeclare const REF_CODE_PREFIX = \\\"$code:\\\";\\n\\nexport { cache as Cache, type CacheResult, type ClickIdEntry, collector as Collector, type CompiledCache, type CompiledNext, type CompiledRoute, Const, context as Context, destination as Destination, type DestroyContext, type DestroyFn, ENV_MARKER_PREFIX, elb as Elb, type ExampleSummary, Flow, type FlowConfigResolver, hint as Hint, hooks as Hooks, type Ingest, type IngestMeta, Level, lifecycle as Lifecycle, type LifecycleContext, logger as Logger, mapping as Mapping, type MarketingParameters, matcher as Matcher, type MockLogger, on as On, REF_CODE_PREFIX, REF_CONTRACT, REF_ENV, REF_FLOW, REF_SECRET, REF_STORE, REF_VAR_FULL, REF_VAR_INLINE, request as Request, type ResolveOptions, type RespondFn, type RespondOptions, type SendDataValue, type SendHeaders, type SendResponse, type SetupFn, simulation as Simulation, source as Source, type StorageType, store as Store, transformer as Transformer, trigger as Trigger, walkeros as WalkerOS, type WalkerOSPackage, type WalkerOSPackageInfo, type WalkerOSPackageMeta, anonymizeIP, applyUpdate, assign, branch, buildCacheContext, castToProperty, castValue, checkCache, clone, compileCache, compileMatcher, compileNext, createDestination, createEvent, createIngest, createLogger, createMockContext, createMockLogger, createRespond, debounce, deepMerge, defaultClickIds, fetchPackage, fetchPackageSchema, filterValues, flattenIncludeSections, formatOut, getBrowser, getBrowserVersion, getByPath, getDeviceType, getEvent, getFlowSettings, getGrantedConsent, getHeaders, getId, getMappingEvent, getMappingValue, getMarketingParameters, getOS, getOSVersion, getPlatform, getSpanId, isArguments, isArray, isBoolean, isCommand, isDefined, isElementOrDocument, isFunction, isNumber, isObject, isPropertyType, isRouteArray, isSameType, isString, mcpError, mcpResult, mergeContractSchemas, mockEnv, packageNameToVariable, parseUserAgent, processEventMapping, requestToData, requestToParameter, resolveContracts, resolveNext, resolveSetup, setByPath, storeCache, throttle, throwError, transformData, traverseEnv, trim, tryCatch, tryCatchAsync, useHooks, walkPath, wrapCondition, wrapFn, wrapValidate };\\n\"","/**\n * Monaco Editor TypeScript Type Management\n *\n * This utility manages TypeScript type definitions in Monaco Editor for:\n * 1. Static walkerOS core types (bundled at build time via Vite ?raw import)\n * 2. Dynamic destination types (loaded on-the-fly when destinations are added)\n * 3. Context-specific function signatures (condition, fn, validate)\n *\n * Architecture:\n * - Uses monaco.languages.typescript.typescriptDefaults.addExtraLib()\n * - Each type definition gets a unique file path (e.g., 'file:///destinations/gtag.d.ts')\n * - Types can be added/removed dynamically without page reload\n * - Core types are bundled for offline support and predictable versioning\n */\n\nimport type { Monaco } from '@monaco-editor/react';\nimport { getContextTypes } from './monaco-context-types';\n\n// This import will be replaced by tsup plugin with actual TypeScript content\nimport walkerosCoreTypesBundled from 'virtual:walkeros-core-types';\n\n/**\n * Type library entry - tracks loaded type definitions\n */\ninterface TypeLibrary {\n uri: string; // Unique identifier (e.g., 'file:///walkeros-core.d.ts')\n content: string; // TypeScript definition content\n disposable?: { dispose: () => void }; // Monaco disposable for cleanup\n}\n\n/**\n * Registry of loaded type libraries\n */\nconst typeLibraries = new Map<string, TypeLibrary>();\n\n// One-shot guards. Monaco's `setCompilerOptions` and `addExtraLib` invalidate\n// all existing TypeScript workers and cancel their in-flight operations —\n// those cancellations surface as unhandled rejections in the dev overlay.\n// Every CodeBox mount would re-trigger this, so we guard per-monaco-instance.\nconst configuredMonacos = new WeakSet<Monaco>();\nconst ambientsRegistered = new WeakSet<Monaco>();\n\n/**\n * Configuration for TypeScript compiler options\n */\nexport function configureMonacoTypeScript(monaco: Monaco) {\n if (configuredMonacos.has(monaco)) return;\n configuredMonacos.add(monaco);\n monaco.languages.typescript.javascriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2022 ?? 9, // 9 = ES2022\n lib: ['es2022', 'dom'],\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.ESNext,\n moduleDetection: 3, // ModuleDetectionKind.Force — Monaco does not expose the enum. Auto=1, Legacy=2, Force=3.\n noEmit: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n skipLibCheck: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n allowJs: true,\n checkJs: false,\n strict: false,\n noImplicitAny: false,\n strictNullChecks: false,\n });\n\n monaco.languages.typescript.javascriptDefaults.setDiagnosticsOptions({\n noSemanticValidation: false,\n noSyntaxValidation: false,\n diagnosticCodesToIgnore: [1108, 1005],\n });\n\n monaco.languages.typescript.typescriptDefaults.setCompilerOptions({\n target: monaco.languages.typescript.ScriptTarget.ES2022 ?? 9, // 9 = ES2022\n lib: ['es2022', 'dom'],\n allowNonTsExtensions: true,\n moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs,\n module: monaco.languages.typescript.ModuleKind.ESNext,\n moduleDetection: 3, // ModuleDetectionKind.Force — Monaco does not expose the enum. Auto=1, Legacy=2, Force=3.\n noEmit: true,\n esModuleInterop: true,\n allowSyntheticDefaultImports: true,\n skipLibCheck: true,\n jsx: monaco.languages.typescript.JsxEmit.React,\n allowJs: true,\n strict: false,\n noImplicitAny: false,\n });\n}\n\n/**\n * Add a type library from a string\n *\n * @param monaco - Monaco instance\n * @param uri - Unique identifier (e.g., 'file:///destinations/gtag.d.ts')\n * @param content - TypeScript definition content\n * @returns True if added, false if already exists\n */\nexport function addTypeLibrary(\n monaco: Monaco,\n uri: string,\n content: string,\n): boolean {\n // Check if already loaded\n if (typeLibraries.has(uri)) {\n return false;\n }\n\n // Add to both JavaScript and TypeScript language services\n // This ensures types work whether the editor is in JS or TS mode\n const jsDisposable =\n monaco.languages.typescript.javascriptDefaults.addExtraLib(content, uri);\n\n const tsDisposable =\n monaco.languages.typescript.typescriptDefaults.addExtraLib(content, uri);\n\n // Track in registry (store both disposables)\n typeLibraries.set(uri, {\n uri,\n content,\n disposable: {\n dispose: () => {\n jsDisposable.dispose();\n tsDisposable.dispose();\n },\n },\n });\n\n return true;\n}\n\n/**\n * Remove a type library\n *\n * @param uri - URI to remove\n * @returns True if removed, false if not found\n */\nexport function removeTypeLibrary(uri: string): boolean {\n const lib = typeLibraries.get(uri);\n if (!lib) {\n return false;\n }\n\n // Dispose Monaco resource\n lib.disposable?.dispose();\n\n // Remove from registry\n typeLibraries.delete(uri);\n\n return true;\n}\n\n/**\n * Update a type library (remove + add)\n *\n * @param monaco - Monaco instance\n * @param uri - URI to update\n * @param content - New content\n */\nexport function updateTypeLibrary(\n monaco: Monaco,\n uri: string,\n content: string,\n) {\n removeTypeLibrary(uri);\n addTypeLibrary(monaco, uri, content);\n}\n\n/**\n * Load type definitions from a URL\n *\n * @param monaco - Monaco instance\n * @param url - URL to .d.ts file\n * @param uri - Optional custom URI (defaults to URL)\n */\nexport async function loadTypeLibraryFromURL(\n monaco: Monaco,\n url: string,\n uri?: string,\n): Promise<boolean> {\n try {\n const response = await fetch(url);\n if (!response.ok) {\n return false;\n }\n\n const content = await response.text();\n const typeUri = uri || `file:///${url}`;\n\n return addTypeLibrary(monaco, typeUri, content);\n } catch {\n return false;\n }\n}\n\n/**\n * Strip problematic imports from type definition content\n *\n * Removes import statements that Monaco can't resolve, while preserving:\n * - Type declarations\n * - Export statements\n * - Re-export statements (export * from / export { } from)\n *\n * Uses multiple strategies for robustness:\n * 1. Simple single-line imports (fast path)\n * 2. Multi-line imports (comprehensive)\n * 3. Import type assertions\n *\n * Does NOT remove:\n * - export { } from 'module' (re-exports)\n * - export * from 'module' (re-exports)\n * - Triple-slash directives (/// <reference types=\"...\" />)\n *\n * @param content - Raw .d.ts file content\n * @returns Cleaned content safe for Monaco\n */\nfunction stripExternalImports(content: string): string {\n // Strategy 1: Remove simple single-line imports\n // Matches: import ... from '...';\n // Handles: import type, import *, import { }, default imports\n let cleaned = content.replace(\n /^import\\s+(?:type\\s+)?(?:\\*\\s+as\\s+\\w+|\\{[^}]*\\}|[\\w$]+)(?:\\s*,\\s*(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+))?\\s+from\\s+['\"][^'\"]+['\"];?\\s*$/gm,\n '',\n );\n\n // Strategy 2: Remove multi-line imports (more aggressive)\n // Matches imports that span multiple lines\n cleaned = cleaned.replace(\n /^import\\s+(?:type\\s+)?(?:\\{[^}]*\\}|\\*\\s+as\\s+\\w+|[\\w$]+)\\s+from\\s+['\"][^'\"]+['\"];?\\s*$/gms,\n '',\n );\n\n // Strategy 3: Remove import type assertions\n // Matches: import('module')\n cleaned = cleaned.replace(/import\\s*\\(\\s*['\"][^'\"]+['\"]\\s*\\)/g, 'any');\n\n // Clean up excessive blank lines (more than 2 consecutive)\n cleaned = cleaned.replace(/\\n{3,}/g, '\\n\\n');\n\n return cleaned;\n}\n\n/**\n * Options for loading package types dynamically\n */\nexport interface LoadPackageTypesOptions {\n /** Package name (e.g., '@walkeros/destination-gtag') */\n package: string;\n /** Version to load (e.g., '0.1.0', 'latest') */\n version?: string;\n}\n\n/**\n * Configurable base URL for package types fetching.\n *\n * When unset (default), `loadPackageTypes` fetches `.d.ts` directly from\n * jsdelivr — keeping the explorer self-contained for docs and standalone use.\n *\n * When set, callers route requests through their own origin (e.g. an app's\n * `/api/packages/[name]/types` proxy) so CSP and caching can be controlled\n * by the host. The base URL must NOT include a trailing slash; the resolver\n * inserts one. Pass `undefined` to reset to the default.\n */\nlet packageTypesBaseUrl: string | undefined;\n\nexport function setPackageTypesBaseUrl(url: string | undefined): void {\n packageTypesBaseUrl = url;\n}\n\nexport function resolveTypesUrl(packageName: string, version: string): string {\n return packageTypesBaseUrl\n ? `${packageTypesBaseUrl}/${encodeURIComponent(packageName)}/types?version=${encodeURIComponent(version)}`\n : `https://cdn.jsdelivr.net/npm/${packageName}@${version}/dist/index.d.ts`;\n}\n\nexport async function loadPackageTypes(\n monaco: Monaco,\n options: LoadPackageTypesOptions,\n): Promise<boolean> {\n const { package: packageName, version = 'latest' } = options;\n const uri = `file:///node_modules/${packageName}/index.d.ts`;\n\n if (typeLibraries.has(uri)) {\n return true;\n }\n\n const url = resolveTypesUrl(packageName, version);\n\n try {\n const response = await fetch(url);\n if (!response.ok) {\n return false;\n }\n\n let content = await response.text();\n content = stripExternalImports(content);\n\n const moduleContent = `declare module '${packageName}' {\\n${content}\\n}`;\n const success = addTypeLibrary(monaco, uri, moduleContent);\n\n return success;\n } catch {\n return false;\n }\n}\n\n/**\n * Load walkerOS core types (bundled at build time)\n *\n * Uses bundled types imported via Vite's ?raw import.\n * This ensures types are always available offline and match the installed version.\n */\nexport function loadWalkerOSCoreTypes(monaco: Monaco): boolean {\n const uri = 'file:///node_modules/@walkeros/core/index.d.ts';\n\n // Check if already loaded\n if (typeLibraries.has(uri)) {\n return true;\n }\n\n // Clean the types using the same robust stripping function\n const cleanedTypes = stripExternalImports(walkerosCoreTypesBundled);\n\n // Wrap in module declaration\n const moduleContent = `declare module '@walkeros/core' {\n${cleanedTypes}\n}`;\n\n return addTypeLibrary(monaco, uri, moduleContent);\n}\n\n/**\n * Type of function context (fn, condition, validate)\n */\nexport type FunctionType = 'condition' | 'fn' | 'validate';\n\n/**\n * Add context-specific globals for function editors\n *\n * Provides type definitions for inline function parameters without imports.\n * All three function types share the same signature:\n * - fn: (value, context) => Property | unknown\n * - condition: (value, context) => boolean\n * - validate: (value, context) => boolean\n */\nexport interface FunctionContext {\n type: FunctionType;\n valueType?: string; // Optional: Custom type for 'value' parameter\n}\n\nexport function addFunctionContextTypes(\n monaco: Monaco,\n context: FunctionContext,\n) {\n const uri = `file:///context/${context.type}.d.ts`;\n\n // Use hand-crafted type templates from monaco-context-types\n const contextTypes = getContextTypes(context.type);\n\n // Update or add\n updateTypeLibrary(monaco, uri, contextTypes);\n}\n\n/**\n * Add destination-specific types dynamically\n *\n * @param monaco - Monaco instance\n * @param destinationId - Unique destination identifier (e.g., 'gtag', 'fbq')\n * @param typeDefinition - TypeScript definition for destination's custom config/event\n *\n * @example\n * ```typescript\n * addDestinationType(monaco, 'gtag', `\n * declare namespace Gtag {\n * interface Settings {\n * measurementId: string;\n * sendPageView?: boolean;\n * }\n *\n * interface EventParams {\n * event_category?: string;\n * event_label?: string;\n * value?: number;\n * }\n * }\n *\n * // Extend WalkerOS namespace\n * declare namespace WalkerOS {\n * namespace Destination {\n * interface ConfigMap {\n * gtag: Gtag.Settings;\n * }\n * }\n * }\n * `);\n * ```\n */\nexport function addDestinationType(\n monaco: Monaco,\n destinationId: string,\n typeDefinition: string,\n) {\n const uri = `file:///destinations/${destinationId}.d.ts`;\n updateTypeLibrary(monaco, uri, typeDefinition);\n}\n\n/**\n * Remove destination types when destination is removed\n */\nexport function removeDestinationType(destinationId: string) {\n const uri = `file:///destinations/${destinationId}.d.ts`;\n removeTypeLibrary(uri);\n}\n\n/**\n * Simple helper to register only walkerOS core types\n *\n * Use this for basic scenarios where you just need @walkeros/core types.\n * For advanced usage (destinations, function contexts), use initializeMonacoTypes.\n *\n * @param monaco - Monaco editor instance\n *\n * @example\n * ```typescript\n * const handleBeforeMount = (monaco: Monaco) => {\n * registerWalkerOSTypes(monaco);\n * };\n * ```\n */\nexport function registerWalkerOSTypes(monaco: Monaco): void {\n configureMonacoTypeScript(monaco);\n loadWalkerOSCoreTypes(monaco);\n registerWalkerOSAmbients(monaco);\n}\n\n/**\n * Register walkerOS runtime globals so snippets can reference them without\n * imports. Uses Monaco's official `addExtraLib` API — the documented way to\n * inject ambient TypeScript declarations into the editor.\n *\n * Globals declared here:\n * - getMappingEvent, getMappingValue: pure mapping helpers from @walkeros/core\n * - elb: the walker push function bound by startFlow\n */\nexport function registerWalkerOSAmbients(monaco: Monaco): void {\n if (ambientsRegistered.has(monaco)) return;\n ambientsRegistered.add(monaco);\n\n // Re-alias real exports from @walkeros/core as globals — no duplication,\n // signatures stay in sync with the package.\n const ambients = `\n import type {\n getMappingEvent as _getMappingEvent,\n getMappingValue as _getMappingValue,\n WalkerOS,\n } from '@walkeros/core';\n\n declare global {\n const getMappingEvent: typeof _getMappingEvent;\n const getMappingValue: typeof _getMappingValue;\n const elb: WalkerOS.Elb;\n }\n\n export {};\n `;\n\n const uri = 'file:///node_modules/@walkeros/_ambient/index.d.ts';\n\n monaco.languages.typescript.typescriptDefaults.addExtraLib(ambients, uri);\n monaco.languages.typescript.javascriptDefaults.addExtraLib(ambients, uri);\n}\n\n/**\n * Initialize Monaco with walkerOS types (full setup)\n *\n * Call this once in CodeBox's beforeMount handler.\n * Includes core types, TypeScript config, and default function context.\n *\n * @param monaco - Monaco editor instance\n *\n * @example\n * ```typescript\n * const handleBeforeMount = (monaco: Monaco) => {\n * initializeMonacoTypes(monaco);\n * };\n * ```\n */\nexport function initializeMonacoTypes(monaco: Monaco): void {\n // Configure compiler\n configureMonacoTypeScript(monaco);\n\n // Load core types (now synchronous with bundled types)\n loadWalkerOSCoreTypes(monaco);\n\n // Add default function context (condition)\n addFunctionContextTypes(monaco, { type: 'condition' });\n}\n\n/**\n * Get all loaded type libraries (for debugging)\n */\nexport function getLoadedTypeLibraries(): string[] {\n return Array.from(typeLibraries.keys());\n}\n\n/**\n * Clear all type libraries (for testing)\n */\nexport function clearAllTypeLibraries() {\n for (const lib of typeLibraries.values()) {\n lib.disposable?.dispose();\n }\n typeLibraries.clear();\n}\n","// Ready-to-use demos\nexport { PromotionPlayground } from './components/demos/PromotionPlayground';\nexport type { PromotionPlaygroundProps } from './components/demos/PromotionPlayground';\n\n// Organisms\nexport { LiveCode } from './components/organisms/live-code';\nexport { CollectorBox } from './components/organisms/collector-box';\nexport { BrowserBox } from './components/organisms/browser-box';\nexport type { LiveCodeProps } from './components/organisms/live-code';\nexport type { CollectorBoxProps } from './components/organisms/collector-box';\nexport type { BrowserBoxProps } from './components/organisms/browser-box';\n\n// Molecules\nexport { ArchitectureFlow } from './components/molecules/architecture-flow';\nexport { CodeBox } from './components/molecules/code-box';\nexport { CodeDiffBox } from './components/molecules/code-diff-box';\nexport type { CodeDiffBoxProps } from './components/molecules/code-diff-box';\nexport { CodeSnippet } from './components/molecules/code-snippet';\nexport { FlowMap } from './components/molecules/flow-map';\nexport { PropertyTable } from './components/molecules/property-table';\nexport {\n Dropdown,\n DropdownItem,\n DropdownDivider,\n} from './components/molecules/dropdown';\nexport type {\n ArchitectureFlowProps,\n FlowColumn,\n FlowSection,\n FlowItem,\n} from './components/molecules/architecture-flow';\nexport type { CodeBoxProps, CodeBoxTab } from './components/molecules/code-box';\nexport { CodeView } from './components/molecules/code-view';\nexport type {\n CodeViewProps,\n CodeViewTab,\n} from './components/molecules/code-view';\nexport type { CodeSnippetProps } from './components/molecules/code-snippet';\nexport type {\n FlowMapProps,\n FlowStageConfig,\n} from './components/molecules/flow-map';\nexport type { PropertyTableProps } from './components/molecules/property-table';\nexport type {\n DropdownProps,\n DropdownItemProps,\n DropdownDividerProps,\n} from './components/molecules/dropdown';\n\nexport { Preview } from './components/molecules/preview';\nexport type { PreviewProps } from './components/molecules/preview';\n\n// Atoms\nexport { Code } from './components/atoms/code';\nexport { CodeDiff } from './components/atoms/code-diff';\nexport { CodeStatic } from './components/atoms/code-static';\nexport { Box } from './components/atoms/box';\nexport { Grid } from './components/atoms/grid';\nexport { Header } from './components/atoms/header';\nexport { Footer } from './components/atoms/footer';\nexport { Button } from './components/atoms/button';\nexport { ButtonGroup } from './components/atoms/button-group';\nexport { ButtonLink } from './components/atoms/button-link';\nexport { Spinner } from './components/atoms/spinner';\n\nexport { Icon } from './components/atoms/icons';\nexport type { CodeProps } from './components/atoms/code';\nexport type {\n CodeDiffProps,\n CodeDiffSummary,\n} from './components/atoms/code-diff';\nexport type { CodeStaticProps } from './components/atoms/code-static';\nexport type { BoxProps, BoxTab } from './components/atoms/box';\nexport type { GridProps } from './components/atoms/grid';\nexport type { HeaderProps } from './components/atoms/header';\nexport type { FooterProps } from './components/atoms/footer';\nexport type { ButtonProps } from './components/atoms/button';\nexport type { ButtonGroupProps } from './components/atoms/button-group';\nexport type { ButtonLinkProps } from './components/atoms/button-link';\nexport type { SpinnerProps } from './components/atoms/spinner';\n\n// Utils\nexport { isMonacoCancellation } from './utils/is-monaco-cancellation';\n\n// MDX Integration\nexport { MDXProvider } from './providers/MDXProvider';\nexport { MDXCode } from './components/atoms/mdx-code';\n\n// Utility\nexport { cn } from './lib/utils';\n\n// Hooks\nexport { useDropdown } from './hooks/useDropdown';\nexport type { UseDropdownReturn } from './hooks/useDropdown';\n\n// Monaco Editor themes\nexport {\n palenightTheme,\n lighthouseTheme,\n registerPalenightTheme,\n registerLighthouseTheme,\n registerAllThemes,\n} from './themes';\nexport type { ExplorerTheme } from './themes';\n\n// Monaco Editor type (re-exported for consumers of callbacks that receive a\n// Monaco instance — e.g. `CodeBox.beforeMount(monaco)`. Raw `Editor` / `DiffEditor`\n// components stay private — use CodeBox / CodeDiffBox molecules instead).\nexport type { Monaco } from '@monaco-editor/react';\n\n// Monaco Editor type registration\nexport {\n registerWalkerOSTypes,\n initializeMonacoTypes,\n loadPackageTypes,\n loadTypeLibraryFromURL,\n setPackageTypesBaseUrl,\n resolveTypesUrl,\n} from './utils/monaco-types';\nexport type { LoadPackageTypesOptions } from './utils/monaco-types';\n\n// Monaco JSON Schema registry\nexport {\n registerJsonSchema,\n unregisterJsonSchema,\n generateModelPath,\n} from './utils/monaco-json-schema';\n\n// Schema enrichment\nexport {\n enrichSchema,\n type MonacoSchemaExtension,\n} from './utils/monaco-schema-enrichment';\nexport { enrichFlowConfigSchema } from './utils/monaco-schema-flow-config';\nexport { getEnrichedContractSchema } from './utils/monaco-schema-contract';\nexport { getVariablesSchema } from './utils/monaco-schema-variables';\n\n// walkerOS reference decorations\nexport {\n findWalkerOSReferences,\n applyWalkerOSDecorations,\n registerWalkerOSDecorationStyles,\n REFERENCE_PATTERNS,\n} from './utils/monaco-walkeros-decorations';\n\n// IntelliSense types\nexport type { IntelliSenseContext, PackageInfo } from './types/intellisense';\n\n// IntelliSense providers\nexport {\n registerWalkerOSProviders,\n disposeWalkerOSProviders,\n setIntelliSenseContext,\n removeIntelliSenseContext,\n} from './utils/monaco-walkeros-providers';\nexport { validateWalkerOSReferences } from './utils/monaco-walkeros-markers';\nexport { extractFlowIntelliSenseContext } from './utils/monaco-intellisense-flow-extractor';\n\n// Destination helpers\nexport {\n createGtagDestination,\n createFbqDestination,\n createPlausibleDestination,\n} from './helpers/destinations';\n","import React, {\n useState,\n useEffect,\n useRef,\n useCallback,\n useMemo,\n} from 'react';\nimport type { WalkerOS, Elb, Collector } from '@walkeros/core';\nimport { startFlow } from '@walkeros/collector';\nimport { Grid } from '../atoms/grid';\nimport { Preview } from '../molecules/preview';\nimport { BrowserBox } from '../organisms/browser-box';\nimport { CodeBox } from '../molecules/code-box';\nimport {\n createGtagDestination,\n type DestinationCode,\n} from '../../helpers/destinations';\n\nexport interface PromotionPlaygroundProps {\n initialHtml?: string;\n initialCss?: string;\n initialJs?: string;\n initialMapping?: string;\n labelCode?: string;\n labelPreview?: string;\n labelEvents?: string;\n labelMapping?: string;\n labelResult?: string;\n destination?: DestinationCode;\n}\n\nconst defaultHtml = `<div\n data-elb=\"product\"\n data-elbaction=\"load:view\"\n data-elbcontext=\"stage:inspire\"\n class=\"product-card\"\n>\n <figure class=\"product-figure\">\n <div class=\"product-badge-container\">\n <div data-elb-product=\"badge:delicious\" class=\"product-badge\">delicious</div>\n </div>\n </figure>\n <div class=\"product-body\">\n <h3 data-elb-product=\"name:#innerText\" class=\"product-title\">\n Everyday Ruck Snack\n </h3>\n <div class=\"form-control\">\n <label class=\"form-label\">Taste</label>\n <select\n data-elb-product=\"taste:#value\"\n class=\"form-select\"\n >\n <option value=\"sweet\">Sweet</option>\n <option value=\"spicy\">Spicy</option>\n </select>\n </div>\n <p data-elb-product=\"price:2.50\" class=\"product-price\">\n € 2.50 <span data-elb-product=\"old_price:3.14\" class=\"product-old-price\">€ 3.14</span>\n </p>\n <div data-elbcontext=\"stage:hooked\" class=\"product-actions\">\n <button\n data-elbaction=\"click:save\"\n class=\"btn btn-secondary\"\n >\n Maybe later\n </button>\n <button\n data-elbaction=\"click:add\"\n class=\"btn btn-primary\"\n >\n Add to Cart\n </button>\n </div>\n </div>\n</div>`;\n\nconst defaultCss = `* {\n box-sizing: border-box;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif;\n}\n\n.product-card {\n width: 100%;\n max-width: 400px;\n margin: 0 auto;\n background: #ffffff;\n border-radius: 16px;\n box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n overflow: hidden;\n}\n\n.product-figure {\n position: relative;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 160px;\n background:\n linear-gradient(135deg, rgba(243, 244, 246, 0.9) 0%, rgba(229, 231, 235, 0.9) 100%),\n repeating-linear-gradient(\n 45deg,\n #f9fafb,\n #f9fafb 10px,\n #f3f4f6 10px,\n #f3f4f6 20px\n );\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.product-figure::before {\n content: '🍟';\n font-size: 8rem;\n opacity: 0.8;\n}\n\n.product-badge-container {\n position: absolute;\n top: 0.5rem;\n right: 0.5rem;\n}\n\n.product-badge {\n background: #01b5e2;\n color: white;\n padding: 0.25rem 0.75rem;\n border-radius: 9999px;\n font-size: 0.75rem;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.025em;\n}\n\n.product-body {\n padding: 1.5rem;\n}\n\n.product-title {\n font-size: 1.125rem;\n font-weight: 700;\n margin: 0 0 1rem 0;\n color: #111827;\n}\n\n.form-control {\n margin-bottom: 1rem;\n}\n\n.form-label {\n display: block;\n font-size: 0.875rem;\n font-weight: 500;\n color: #6b7280;\n margin-bottom: 0.5rem;\n}\n\n.form-select {\n width: 100%;\n padding: 0.5rem 0.75rem;\n border: 1px solid #d1d5db;\n border-radius: 8px;\n font-size: 0.875rem;\n color: #111827;\n background: white;\n cursor: pointer;\n transition: border-color 0.2s;\n}\n\n.form-select:hover {\n border-color: #9ca3af;\n}\n\n.form-select:focus {\n outline: none;\n border-color: #01b5e2;\n box-shadow: 0 0 0 3px rgba(1, 181, 226, 0.1);\n}\n\n.product-price {\n font-size: 1.25rem;\n font-weight: 700;\n color: #111827;\n margin: 0 0 1rem 0;\n}\n\n.product-old-price {\n font-size: 1rem;\n font-weight: 400;\n color: #9ca3af;\n text-decoration: line-through;\n margin-left: 0.5rem;\n}\n\n.product-actions {\n display: flex;\n justify-content: space-between;\n gap: 0.5rem;\n}\n\n.btn {\n flex: 1;\n padding: 0.75rem 1rem;\n border: none;\n border-radius: 8px;\n font-size: 0.875rem;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.2s;\n text-align: center;\n}\n\n.btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n}\n\n.btn:active {\n transform: translateY(0);\n}\n\n.btn-primary {\n background: #01b5e2;\n color: white;\n}\n\n.btn-primary:hover {\n background: #0195b8;\n}\n\n.btn-secondary {\n background: #ffffff;\n color: #01b5e2;\n border: 1px solid #01b5e2;\n}\n\n.btn-secondary:hover {\n background: #01b5e2;\n color: #ffffff;\n}`;\n\nconst defaultMapping = `{\n \"product\": {\n \"view\": {\n \"name\": \"view_item\",\n \"data\": {\n \"map\": {\n \"event\": \"name\",\n \"price\": \"data.price\",\n \"stage\": \"context.stage.0\"\n }\n }\n },\n \"add\": {\n \"name\": \"add_to_cart\",\n \"data\": {\n \"map\": {\n \"event\": \"event\",\n \"price\": \"data.price\",\n \"user\": {\n \"consent\": { \"marketing\": true },\n \"key\": \"user.session\"\n },\n \"isSale\": {\n \"fn\": \"(e) => !!e.data.old_price\"\n }\n }\n }\n },\n \"save\": {\n \"data\": {\n \"map\": {\n \"event\": \"event\",\n \"data\": \"data\"\n }\n }\n }\n }\n}`;\n\n/**\n * PromotionPlayground - Full walkerOS demonstration with live code editing\n *\n * Shows the complete chain:\n * 1. Code Editor - Edit HTML/CSS/JS with walkerOS data attributes\n * 2. Preview - Live rendered output that captures real events\n * 3. Events - Real events captured from preview interactions\n * 4. Mapping - Apply transformations and see destination output\n * 5. Result - Final destination function calls\n *\n * Uses a single unified collector flow:\n * - PromotionPlayground owns the collector with destinations\n * - Preview initializes browser source using parent's elb\n * - Events flow through one collector to all destinations\n */\nexport function PromotionPlayground({\n initialHtml = defaultHtml,\n initialCss = defaultCss,\n initialJs = '',\n initialMapping = defaultMapping,\n labelCode = 'Code',\n labelPreview = 'Preview',\n labelEvents = 'Events',\n labelMapping = 'Mapping',\n labelResult = 'Result',\n destination: destinationProp,\n}: PromotionPlaygroundProps) {\n // Memoize destination to prevent useEffect re-runs on every render\n // Default prop values create new objects each render, breaking effect dependencies\n const destination = useMemo(\n () => destinationProp ?? createGtagDestination(),\n [destinationProp],\n );\n const [html, setHtml] = useState(initialHtml);\n const [css, setCss] = useState(initialCss);\n const [js, setJs] = useState(initialJs);\n const [mappingInput, setMappingInput] = useState(initialMapping);\n const [eventJson, setEventJson] = useState<string>(\n '// Click elements in the preview to see events',\n );\n const [outputString, setOutputString] = useState<string>(\n '// Click elements in the preview to see function call',\n );\n\n const collectorRef = useRef<Collector.Instance | null>(null);\n const elbRef = useRef<Elb.Fn | null>(null);\n const lastEventRef = useRef<WalkerOS.Event | null>(null);\n const [isReady, setIsReady] = useState(false);\n\n // Initialize collector once on mount\n useEffect(() => {\n let mounted = true;\n\n const init = async () => {\n try {\n const parsedMapping = JSON.parse(initialMapping);\n\n const { collector, elb } = await startFlow({\n destinations: {\n // Capture raw events for display in Events column\n rawCapture: {\n code: {\n type: 'rawCapture',\n config: {},\n push: async (event: WalkerOS.Event) => {\n if (!mounted) return;\n lastEventRef.current = event;\n setEventJson(JSON.stringify(event, null, 2));\n },\n },\n },\n // Transform and display formatted output in Result column\n gtag: {\n code: destination,\n config: {\n mapping: parsedMapping,\n },\n env: {\n elb: (output: string) => {\n if (!mounted) return;\n setOutputString(output);\n },\n },\n },\n },\n consent: { functional: true, marketing: true },\n user: { session: 'playground' },\n });\n\n if (!mounted) return;\n\n collectorRef.current = collector;\n elbRef.current = elb;\n setIsReady(true);\n } catch {\n // Initialization failed - component will show placeholder\n }\n };\n\n init();\n\n return () => {\n mounted = false;\n // Cleanup collector\n if (collectorRef.current) {\n // Sources cleanup would happen here if needed\n }\n };\n }, [initialMapping, destination]);\n\n // Handle mapping changes - update collector destination config\n const handleMappingChange = useCallback((newMapping: string) => {\n setMappingInput(newMapping);\n\n // Debounced update to collector\n const timeoutId = setTimeout(() => {\n try {\n const parsed = JSON.parse(newMapping);\n // Update destination config directly\n if (collectorRef.current?.destinations?.gtag?.config) {\n collectorRef.current.destinations.gtag.config.mapping = parsed;\n }\n // Re-process last event to update Result column\n if (lastEventRef.current && collectorRef.current) {\n collectorRef.current.push(lastEventRef.current);\n }\n } catch {\n // Invalid JSON - don't update\n }\n }, 500);\n\n return () => clearTimeout(timeoutId);\n }, []);\n\n return (\n <Grid columns={5} rowHeight={600}>\n {/* Column 1: Code Editor with HTML/CSS/JS tabs */}\n <BrowserBox\n label={labelCode}\n html={html}\n css={css}\n js={js}\n onHtmlChange={setHtml}\n onCssChange={setCss}\n onJsChange={setJs}\n showPreview={false}\n initialTab=\"html\"\n lineNumbers={false}\n wordWrap\n />\n\n {/* Column 2: Preview - uses parent's elb for event capture */}\n <Preview\n label={labelPreview}\n html={html}\n css={css}\n elb={isReady ? (elbRef.current ?? undefined) : undefined}\n />\n\n {/* Column 3: Events - raw captured events */}\n <CodeBox\n label={labelEvents}\n code={eventJson}\n onChange={setEventJson}\n language=\"json\"\n wordWrap\n />\n\n {/* Column 4: Mapping - editable transformation rules */}\n <CodeBox\n label={labelMapping}\n code={mappingInput}\n onChange={handleMappingChange}\n language=\"json\"\n wordWrap\n />\n\n {/* Column 5: Result - transformed destination output */}\n <CodeBox\n label={labelResult}\n code={outputString}\n language=\"javascript\"\n disabled\n wordWrap\n />\n </Grid>\n );\n}\n","import React, {\n useRef,\n useState,\n useEffect,\n useCallback,\n useMemo,\n} from 'react';\nimport {\n GridHeightContext,\n type GridHeightContextValue,\n} from '../../contexts/GridHeightContext';\n\nexport interface GridProps {\n children: React.ReactNode;\n columns?: number;\n minBoxWidth?: number | string;\n gap?: number | string;\n rowHeight?: 'auto' | 'equal' | 'synced' | number;\n maxRowHeight?: number | string | 'none';\n showScrollButtons?: boolean;\n className?: string;\n}\n\n/**\n * Grid - Horizontal scrolling layout component for arranging boxes\n *\n * Provides consistent grid layout for box components with horizontal\n * scrolling when content exceeds available space. Boxes maintain minimum\n * width and never wrap to new rows.\n *\n * @example\n * // 5 boxes with default 350px minimum width\n * <Grid columns={5}>\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom minimum box width\n * <Grid columns={3} minBoxWidth={400}>\n * <BrowserBox ... />\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom row height\n * <Grid columns={2} rowHeight={300}>\n * <CodeBox ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Auto row height (no minimum)\n * <Grid columns={3} rowHeight=\"auto\">\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Unlimited row height (no max constraint)\n * <Grid columns={2} maxRowHeight=\"none\">\n * <PropertyTable ... />\n * <CodeBox ... />\n * </Grid>\n *\n * @example\n * // Custom max row height\n * <Grid columns={2} maxRowHeight={800}>\n * <PropertyTable ... />\n * <CodeBox ... />\n * </Grid>\n */\nexport function Grid({\n children,\n columns,\n minBoxWidth,\n gap,\n rowHeight = 'equal',\n maxRowHeight,\n showScrollButtons = true,\n className = '',\n}: GridProps) {\n const gridRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const [boxHeights, setBoxHeights] = useState<Map<number, number>>(new Map());\n const boxIdCounter = useRef(0);\n\n const getBoxId = useCallback(() => boxIdCounter.current++, []);\n\n const registerBox = useCallback((id: number, height: number) => {\n setBoxHeights((prev) => {\n const next = new Map(prev);\n next.set(id, height);\n return next;\n });\n }, []);\n\n const unregisterBox = useCallback((id: number) => {\n setBoxHeights((prev) => {\n const next = new Map(prev);\n next.delete(id);\n return next;\n });\n }, []);\n\n const syncedHeight = useMemo(() => {\n if (rowHeight !== 'synced' || boxHeights.size === 0) return null;\n return Math.min(600, Math.max(...Array.from(boxHeights.values())));\n }, [boxHeights, rowHeight]);\n\n const contextValue: GridHeightContextValue = useMemo(\n () => ({\n registerBox,\n unregisterBox,\n getBoxId,\n syncedHeight,\n enabled: rowHeight === 'synced',\n }),\n [registerBox, unregisterBox, getBoxId, syncedHeight, rowHeight],\n );\n\n const classNames = ['elb-explorer-grid'];\n const gridStyle: React.CSSProperties = {};\n\n // Row height modifiers\n if (rowHeight === 'auto') {\n classNames.push('elb-explorer-grid--row-auto');\n } else if (rowHeight === 'equal') {\n classNames.push('elb-explorer-grid--row-equal');\n } else if (rowHeight === 'synced') {\n classNames.push('elb-explorer-grid--row-synced');\n } else if (typeof rowHeight === 'number') {\n // Apply custom row height via CSS variable\n (gridStyle as Record<string, string>)['--grid-row-min-height'] =\n `${rowHeight}px`;\n (gridStyle as Record<string, string>)['--grid-row-max-height'] =\n `${rowHeight}px`;\n }\n\n // Add custom className\n if (className) {\n classNames.push(className);\n }\n\n // Apply custom gap if provided\n if (gap !== undefined) {\n gridStyle.gap = typeof gap === 'number' ? `${gap}px` : gap;\n }\n\n // Apply custom minimum box width if provided\n if (minBoxWidth !== undefined) {\n (gridStyle as Record<string, string>)['--grid-min-box-width'] =\n typeof minBoxWidth === 'number' ? `${minBoxWidth}px` : minBoxWidth;\n }\n\n if (maxRowHeight !== undefined) {\n // Warn about dangerous configuration that can cause infinite growth\n (gridStyle as Record<string, string>)['--grid-row-max-height'] =\n maxRowHeight === 'none'\n ? 'none'\n : typeof maxRowHeight === 'number'\n ? `${maxRowHeight}px`\n : maxRowHeight;\n }\n\n // Check scroll state\n const updateScrollState = useCallback(() => {\n const el = gridRef.current;\n if (!el) return;\n\n const hasOverflow = el.scrollWidth > el.clientWidth;\n const isAtStart = el.scrollLeft <= 1;\n const isAtEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 1;\n\n setCanScrollLeft(hasOverflow && !isAtStart);\n setCanScrollRight(hasOverflow && !isAtEnd);\n }, []);\n\n // Scroll handlers\n const scrollLeft = () => {\n if (!gridRef.current) return;\n const scrollAmount = gridRef.current.clientWidth * 0.8;\n gridRef.current.scrollBy({ left: -scrollAmount, behavior: 'smooth' });\n };\n\n const scrollRight = () => {\n if (!gridRef.current) return;\n const scrollAmount = gridRef.current.clientWidth * 0.8;\n gridRef.current.scrollBy({ left: scrollAmount, behavior: 'smooth' });\n };\n\n // Update scroll state on mount, scroll, and resize\n useEffect(() => {\n const el = gridRef.current;\n if (!el || !showScrollButtons) return;\n\n updateScrollState();\n\n el.addEventListener('scroll', updateScrollState);\n window.addEventListener('resize', updateScrollState);\n\n return () => {\n el.removeEventListener('scroll', updateScrollState);\n window.removeEventListener('resize', updateScrollState);\n };\n }, [updateScrollState, showScrollButtons]);\n\n return (\n <GridHeightContext.Provider value={contextValue}>\n <div className=\"elb-explorer elb-explorer-grid-wrapper\">\n {showScrollButtons && canScrollLeft && (\n <button\n className=\"elb-explorer-grid-scroll-button elb-explorer-grid-scroll-button--left\"\n onClick={scrollLeft}\n aria-label=\"Scroll left\"\n type=\"button\"\n >\n ‹\n </button>\n )}\n\n <div ref={gridRef} className={classNames.join(' ')} style={gridStyle}>\n {children}\n </div>\n\n {showScrollButtons && canScrollRight && (\n <button\n className=\"elb-explorer-grid-scroll-button elb-explorer-grid-scroll-button--right\"\n onClick={scrollRight}\n aria-label=\"Scroll right\"\n type=\"button\"\n >\n ›\n </button>\n )}\n </div>\n </GridHeightContext.Provider>\n );\n}\n","import { createContext, useContext, useRef } from 'react';\n\nexport interface GridHeightContextValue {\n registerBox: (id: number, height: number) => void;\n unregisterBox: (id: number) => void;\n getBoxId: () => number;\n syncedHeight: number | null;\n enabled: boolean;\n}\n\nexport const GridHeightContext = createContext<GridHeightContextValue | null>(\n null,\n);\n\nexport function useGridHeight(): GridHeightContextValue | null {\n return useContext(GridHeightContext);\n}\n\nlet nextBoxId = 0;\nexport function useBoxId(): number {\n const idRef = useRef<number | null>(null);\n if (idRef.current === null) {\n idRef.current = nextBoxId++;\n }\n return idRef.current;\n}\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport type { Elb, Source, Logger, Collector, Lifecycle } from '@walkeros/core';\nimport {\n sourceBrowser,\n type SourceBrowser,\n} from '@walkeros/web-source-browser';\n\ninterface SourceHandle {\n instance: Source.Instance<SourceBrowser.Types>;\n destroyContext: Lifecycle.DestroyContext<\n SourceBrowser.Config,\n SourceBrowser.Env\n >;\n}\nimport { Box } from '../atoms/box';\nimport { PreviewFooter } from '../atoms/preview-footer';\n\nexport interface PreviewProps {\n html: string;\n css?: string;\n elb?: Elb.Fn;\n label?: string;\n}\n\n/**\n * Preview - HTML preview wrapped in a Box with highlight buttons\n *\n * Renders HTML in an isolated iframe with highlight buttons footer.\n * When elb is provided, initializes walkerOS browser source in iframe\n * that pushes events to the parent collector.\n *\n * @example\n * // Read-only preview\n * <Preview html={html} css={css} label=\"Preview\" />\n *\n * // Interactive preview with event capture (elb from parent collector)\n * <Preview html={html} css={css} elb={elb} label=\"Preview\" />\n */\nexport function Preview({\n html,\n css = '',\n elb,\n label = 'Preview',\n}: PreviewProps) {\n const [highlights, setHighlights] = useState<Set<string>>(new Set());\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const updateTimeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n const elbRef = useRef(elb);\n const sourceRef = useRef<SourceHandle | null>(null);\n\n // Keep elbRef in sync\n useEffect(() => {\n elbRef.current = elb;\n }, [elb]);\n\n const toggleHighlight = (type: string) => {\n setHighlights((prev) => {\n const next = new Set(prev);\n if (next.has(type)) {\n next.delete(type);\n } else {\n next.add(type);\n }\n return next;\n });\n };\n\n const autoMarkProperties = useCallback(\n (container: HTMLElement | Document) => {\n const entities = container.querySelectorAll('[data-elb]');\n entities.forEach((entity) => {\n const entityName = entity.getAttribute('data-elb');\n if (!entityName) return;\n\n const propertySelector = `[data-elb-${entityName}]`;\n entity.querySelectorAll(propertySelector).forEach((el) => {\n el.setAttribute('data-elbproperty', '');\n });\n });\n },\n [],\n );\n\n useEffect(() => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n updateTimeoutRef.current = setTimeout(() => {\n const iframe = iframeRef.current;\n if (!iframe || !iframe.contentDocument) return;\n\n const doc = iframe.contentDocument;\n const highlightClasses = Array.from(highlights)\n .map((type) => `highlight-${type}`)\n .join(' ');\n\n doc.open();\n doc.write(`\n <!DOCTYPE html>\n <html>\n <head>\n <meta charset=\"utf-8\">\n <style>\n /* Reset */\n * { margin: 0; padding: 0; box-sizing: border-box; }\n body {\n padding: 1.5rem;\n background: #f9fafb;\n color: #111827;\n min-height: 100vh;\n }\n\n @media (prefers-color-scheme: dark) {\n body {\n background: #1f2937;\n color: #e5e7eb;\n }\n }\n\n /* User CSS */\n ${css}\n\n /* Highlight CSS - imported from highlight styles */\n :root {\n --highlight-globals: #4fc3f7cc;\n --highlight-context: #ffbd44cc;\n --highlight-entity: #00ca4ecc;\n --highlight-property: #ff605ccc;\n --highlight-action: #9900ffcc;\n }\n\n body.elb-highlight.highlight-entity [data-elb] {\n box-shadow: 0 0 0 2px var(--highlight-entity);\n }\n\n body.elb-highlight.highlight-context [data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-context);\n }\n\n body.elb-highlight.highlight-property [data-elbproperty] {\n box-shadow: 0 0 0 2px var(--highlight-property);\n }\n\n body.elb-highlight.highlight-action [data-elbaction] {\n box-shadow: 0 0 0 2px var(--highlight-action);\n }\n\n /* Combined highlights */\n body.elb-highlight.highlight-entity.highlight-action [data-elb][data-elbaction] {\n box-shadow: 0 0 0 2px var(--highlight-action), 0 0 0 4px var(--highlight-entity);\n }\n\n body.elb-highlight.highlight-entity.highlight-context [data-elb][data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-entity), 0 0 0 4px var(--highlight-context);\n }\n\n body.elb-highlight.highlight-action.highlight-context [data-elbaction][data-elbcontext] {\n box-shadow: 0 0 0 2px var(--highlight-action), 0 0 0 4px var(--highlight-context);\n }\n </style>\n </head>\n <body class=\"elb-highlight ${highlightClasses}\">\n ${html}\n </body>\n </html>\n `);\n doc.close();\n\n autoMarkProperties(doc);\n\n // Initialize browser source in iframe with parent's elb\n if (elbRef.current && iframe.contentWindow && iframe.contentDocument) {\n setTimeout(async () => {\n // Cleanup previous source instance\n if (sourceRef.current) {\n try {\n await sourceRef.current.instance.destroy?.(\n sourceRef.current.destroyContext,\n );\n } catch {\n // Ignore cleanup errors\n }\n }\n\n try {\n if (\n !iframe.contentWindow ||\n !iframe.contentDocument ||\n !elbRef.current\n ) {\n return;\n }\n\n // Create a noop logger that satisfies the Logger.Instance interface\n const createNoopLogger = (): Logger.Instance => ({\n error: () => {},\n warn: () => {},\n info: () => {},\n debug: () => {},\n json: () => {},\n throw: (msg: string | Error): never => {\n throw msg instanceof Error ? msg : new Error(msg);\n },\n scope: () => createNoopLogger(),\n });\n const noopLogger = createNoopLogger();\n\n // Create a noop push function for env\n const noopPush: Collector.PushFn = async () => ({\n ok: true,\n destination: {},\n });\n\n // Initialize browser source directly with parent's elb\n // This connects the iframe's DOM events to the parent collector\n const config: SourceBrowser.Config = {\n settings: {\n pageview: false,\n prefix: 'data-elb',\n elb: 'elb',\n elbLayer: 'elbLayer',\n // Use body as scope - trigger.ts compares `scope !== document` against\n // main page's document, so iframe.contentDocument fails the Element cast\n scope: iframe.contentDocument.body,\n },\n };\n const env: SourceBrowser.Env = {\n elb: elbRef.current,\n push: noopPush,\n command: async () => ({ ok: true, destination: {} }),\n logger: noopLogger,\n window: iframe.contentWindow as Window & typeof globalThis,\n document: iframe.contentDocument,\n };\n\n const instance = await sourceBrowser({\n id: 'preview',\n collector: {} as Collector.Instance, // Not used when elb is provided directly\n logger: noopLogger,\n setIngest: async () => {},\n setRespond: () => {},\n config,\n env,\n });\n\n sourceRef.current = {\n instance,\n destroyContext: {\n id: 'preview',\n config,\n env,\n logger: noopLogger,\n },\n };\n } catch {\n // sourceBrowser init failed - events won't be captured\n }\n }, 50);\n }\n }, 200);\n\n return () => {\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n // Cleanup source\n if (sourceRef.current) {\n sourceRef.current.instance.destroy?.(sourceRef.current.destroyContext);\n }\n };\n }, [html, css, highlights, autoMarkProperties, elb]);\n\n return (\n <Box\n header={label}\n footer={\n <PreviewFooter highlights={highlights} onToggle={toggleHighlight} />\n }\n >\n <div className=\"elb-preview-content\">\n <iframe\n ref={iframeRef}\n className=\"elb-preview-iframe\"\n title=\"HTML Preview\"\n />\n </div>\n </Box>\n );\n}\n","import React, { useState } from 'react';\nimport { Header } from './header';\nimport { useGridHeight } from '../../contexts/GridHeightContext';\n\nexport interface BoxTab {\n id: string;\n label: string;\n content?: React.ReactNode;\n}\n\nexport interface BoxProps {\n header?: string;\n headerActions?: React.ReactNode;\n footer?: React.ReactNode;\n children?: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n // Height management\n height?: number | string;\n minHeight?: number | string;\n maxHeight?: number | string;\n tiny?: boolean;\n resizable?: boolean;\n showHeader?: boolean; // Hide header (default: true)\n // Tabs support\n tabs?: BoxTab[];\n activeTab?: string; // Controlled mode\n onTabChange?: (id: string) => void;\n defaultTab?: string; // Uncontrolled default\n // Mac style\n showTrafficLights?: boolean;\n}\n\n/**\n * Box - Container atom component\n *\n * Provides a consistent box container with header and content area.\n * Used across all explorer components for consistent styling.\n *\n * Height behavior:\n * - Default: minHeight 100px, grows as needed\n * - tiny prop: sets minHeight to 100px explicitly\n * - Custom minHeight/maxHeight: override defaults\n * - In Grid: fills row height (equal heights per row)\n *\n * @example\n * <Box header=\"Preview\">\n * <Preview html={html} css={css} />\n * </Box>\n *\n * @example\n * <Box header=\"Code\" minHeight={200} maxHeight={600}>\n * <CodeBox ... />\n * </Box>\n */\nfunction TrafficLights() {\n return (\n <div className=\"elb-explorer-traffic-lights\">\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--red\" />\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--yellow\" />\n <span className=\"elb-explorer-traffic-light elb-explorer-traffic-light--green\" />\n </div>\n );\n}\n\nexport function Box({\n header,\n headerActions,\n footer,\n children,\n className = '',\n style,\n height,\n minHeight,\n maxHeight,\n tiny = false,\n resizable = false,\n showHeader = true,\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n showTrafficLights = false,\n}: BoxProps) {\n // Grid context for synchronized heights\n const gridContext = useGridHeight();\n\n // Uncontrolled tab state\n const [internalActiveTab, setInternalActiveTab] = useState(\n defaultTab || (tabs?.[0]?.id ?? ''),\n );\n\n // Controlled vs uncontrolled\n const isControlled = controlledActiveTab !== undefined;\n const activeTabId = isControlled ? controlledActiveTab : internalActiveTab;\n\n const handleTabClick = (tabId: string) => {\n if (onTabChange) {\n onTabChange(tabId);\n }\n if (!isControlled) {\n setInternalActiveTab(tabId);\n }\n };\n\n // Height management: explicit > grid synced > default\n const boxStyle: React.CSSProperties = { ...style };\n\n if (height !== undefined) {\n boxStyle.height = typeof height === 'number' ? `${height}px` : height;\n } else if (gridContext?.syncedHeight) {\n boxStyle.height = `${gridContext.syncedHeight}px`;\n }\n\n if (tiny) {\n boxStyle.height = 'auto';\n boxStyle.minHeight =\n minHeight !== undefined\n ? typeof minHeight === 'number'\n ? `${minHeight}px`\n : minHeight\n : '100px';\n } else if (minHeight !== undefined) {\n boxStyle.minHeight =\n typeof minHeight === 'number' ? `${minHeight}px` : minHeight;\n }\n\n if (maxHeight !== undefined) {\n boxStyle.maxHeight =\n typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n }\n\n if (resizable) {\n boxStyle.resize = 'vertical';\n boxStyle.overflow = 'auto';\n }\n\n // Auto-height class for grid context\n const useContentHeight = !!gridContext?.enabled;\n const autoHeightClass = useContentHeight ? 'elb-box--auto-height' : '';\n\n // Determine content: tab content (if available) or children\n const activeTabContent = tabs?.find((t) => t.id === activeTabId)?.content;\n const content = activeTabContent ?? children;\n\n // Render tabs header or regular header\n const hasTabs = tabs && tabs.length > 0;\n const showRegularHeader = showHeader && header && !hasTabs;\n\n return (\n <div\n className={`elb-explorer elb-explorer-box ${autoHeightClass} ${className}`.trim()}\n style={boxStyle}\n >\n {hasTabs && (\n <div className=\"elb-explorer-tabs\">\n {showTrafficLights && <TrafficLights />}\n {tabs.map((tab) => (\n <button\n key={tab.id}\n type=\"button\"\n className={`elb-explorer-tab ${activeTabId === tab.id ? 'elb-explorer-tab--active' : ''}`}\n onClick={() => handleTabClick(tab.id)}\n >\n {tab.label}\n </button>\n ))}\n {headerActions && (\n <div className=\"elb-explorer-tab-actions\">{headerActions}</div>\n )}\n </div>\n )}\n {showRegularHeader && <Header label={header}>{headerActions}</Header>}\n <div className=\"elb-explorer-content\">{content}</div>\n {footer && <div className=\"elb-explorer-footer\">{footer}</div>}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface HeaderProps {\n label: string;\n children?: React.ReactNode;\n}\n\nexport function Header({ label, children }: HeaderProps) {\n return (\n <div className=\"elb-explorer-header\">\n <span className=\"elb-explorer-label\">{label}</span>\n {children}\n </div>\n );\n}\n","import React from 'react';\n\nexport interface PreviewFooterButton {\n type: string;\n label: string;\n highlightClass: string;\n}\n\nexport interface PreviewFooterProps {\n highlights: Set<string>;\n onToggle: (type: string) => void;\n buttons?: PreviewFooterButton[];\n}\n\nconst defaultButtons: PreviewFooterButton[] = [\n { type: 'context', label: 'Context', highlightClass: 'highlight-context' },\n { type: 'entity', label: 'Entity', highlightClass: 'highlight-entity' },\n { type: 'property', label: 'Property', highlightClass: 'highlight-property' },\n { type: 'action', label: 'Action', highlightClass: 'highlight-action' },\n];\n\n/**\n * PreviewFooter - Footer with highlight toggle buttons\n *\n * Renders a set of buttons to toggle highlighting of walkerOS data attributes.\n * Designed to be used with Box footer prop for preview components.\n *\n * @example\n * const [highlights, setHighlights] = useState<Set<string>>(new Set());\n * const handleToggle = (type: string) => {\n * setHighlights(prev => {\n * const next = new Set(prev);\n * next.has(type) ? next.delete(type) : next.add(type);\n * return next;\n * });\n * };\n *\n * <Box footer={<PreviewFooter highlights={highlights} onToggle={handleToggle} />}>\n * Preview content\n * </Box>\n */\nexport function PreviewFooter({\n highlights,\n onToggle,\n buttons = defaultButtons,\n}: PreviewFooterProps) {\n return (\n <div className=\"elb-preview-footer\">\n {buttons.map((button) => (\n <button\n key={button.type}\n className={`elb-preview-btn ${\n highlights.has(button.type) ? button.highlightClass : ''\n }`}\n onClick={() => onToggle(button.type)}\n type=\"button\"\n >\n {button.label}\n </button>\n ))}\n </div>\n );\n}\n","import React, { useState, useMemo } from 'react';\nimport { Box } from '../atoms/box';\nimport { ButtonGroup } from '../atoms/button-group';\nimport { Preview } from '../molecules/preview';\nimport { Code } from '../atoms/code';\n\nexport interface BrowserBoxProps {\n html?: string;\n css?: string;\n js?: string;\n onHtmlChange?: (value: string) => void;\n onCssChange?: (value: string) => void;\n onJsChange?: (value: string) => void;\n showPreview?: boolean;\n label?: string;\n className?: string;\n initialTab?: 'preview' | 'html' | 'css' | 'js';\n lineNumbers?: boolean;\n wordWrap?: boolean;\n}\n\n/**\n * BrowserBox - Code editor with HTML/CSS/JS toggle\n *\n * Displays code editor with button group to switch between HTML, CSS, and JavaScript.\n * Only shows tabs for content that is provided.\n *\n * @example\n * <BrowserBox\n * html={htmlCode}\n * css={cssCode}\n * onHtmlChange={setHtml}\n * onCssChange={setCss}\n * label=\"Code\"\n * />\n */\nexport function BrowserBox({\n html,\n css,\n js,\n onHtmlChange,\n onCssChange,\n onJsChange,\n showPreview = true,\n label = 'Code',\n className = '',\n initialTab,\n lineNumbers = false,\n wordWrap = false,\n}: BrowserBoxProps) {\n // Determine available tabs\n const availableTabs = useMemo(() => {\n const tabs: Array<{ label: string; value: string }> = [];\n if (showPreview && html !== undefined)\n tabs.push({ label: 'Preview', value: 'preview' });\n if (html !== undefined) tabs.push({ label: 'HTML', value: 'html' });\n if (css !== undefined) tabs.push({ label: 'CSS', value: 'css' });\n if (js !== undefined) tabs.push({ label: 'JS', value: 'js' });\n return tabs;\n }, [html, css, js, showPreview]);\n\n // Set initial active tab\n const [activeTab, setActiveTab] = useState<string>(() => {\n if (initialTab && availableTabs.some((t) => t.value === initialTab)) {\n return initialTab;\n }\n return availableTabs[0]?.value || 'preview';\n });\n\n // Get current content and language\n const { content, language, onChange } = useMemo(() => {\n switch (activeTab) {\n case 'html':\n return {\n content: html || '',\n language: 'html' as const,\n onChange: onHtmlChange,\n };\n case 'css':\n return {\n content: css || '',\n language: 'css' as const,\n onChange: onCssChange,\n };\n case 'js':\n return {\n content: js || '',\n language: 'javascript' as const,\n onChange: onJsChange,\n };\n default:\n return {\n content: '',\n language: 'text' as const,\n onChange: undefined,\n };\n }\n }, [activeTab, html, css, js, onHtmlChange, onCssChange, onJsChange]);\n\n // Build button group data\n const buttons = useMemo(\n () =>\n availableTabs.map((tab) => ({\n label: tab.label,\n value: tab.value,\n active: activeTab === tab.value,\n })),\n [availableTabs, activeTab],\n );\n\n return (\n <Box\n header={label}\n headerActions={\n availableTabs.length > 1 ? (\n <ButtonGroup buttons={buttons} onButtonClick={setActiveTab} />\n ) : null\n }\n className={className}\n >\n {activeTab === 'preview' ? (\n <Preview html={html || ''} css={css || ''} />\n ) : (\n <Code\n code={content}\n language={language}\n onChange={onChange}\n disabled={!onChange}\n lineNumbers={lineNumbers}\n wordWrap={wordWrap}\n />\n )}\n </Box>\n );\n}\n","import React from 'react';\n\nexport interface ButtonProps {\n active?: boolean;\n onClick?: () => void;\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Button - Button component for headers and controls\n *\n * Used in button groups or standalone in headers.\n * Follows atomic design principles as a base atom.\n */\nexport function Button({\n active = false,\n onClick,\n children,\n className = '',\n}: ButtonProps) {\n return (\n <button\n className={`elb-explorer-btn ${active ? 'active' : ''} ${className}`}\n onClick={onClick}\n type=\"button\"\n >\n {children}\n </button>\n );\n}\n","import React from 'react';\nimport { Button } from './button';\n\nexport interface ButtonGroupProps {\n buttons: Array<{\n label: string;\n value: string;\n active?: boolean;\n }>;\n onButtonClick: (value: string) => void;\n className?: string;\n}\n\n/**\n * ButtonGroup - Segmented control for headers\n *\n * Displays multiple buttons in a grouped segmented control style.\n * Commonly used for tab switching (HTML/CSS/JS, etc.)\n */\nexport function ButtonGroup({\n buttons,\n onButtonClick,\n className = '',\n}: ButtonGroupProps) {\n return (\n <div className={`elb-explorer-button-group ${className}`}>\n {buttons.map((button) => (\n <Button\n key={button.value}\n active={button.active}\n onClick={() => onButtonClick(button.value)}\n >\n {button.label}\n </Button>\n ))}\n </div>\n );\n}\n","import React, {\n type ComponentType,\n useEffect,\n useState,\n useRef,\n useCallback,\n} from 'react';\nimport { Editor, loader } from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport {\n registerAllThemes,\n ELB_THEME_DARK,\n ELB_THEME_LIGHT,\n} from '../../themes';\nimport {\n configureMonacoTypeScript,\n registerWalkerOSAmbients,\n registerWalkerOSTypes,\n} from '../../utils/monaco-types';\nimport {\n applyDataElbDecorations,\n registerDataElbStyles,\n} from '../../utils/monaco-decorators';\nimport {\n applyWalkerOSDecorations,\n registerWalkerOSDecorationStyles,\n} from '../../utils/monaco-walkeros-decorations';\nimport {\n registerWalkerOSProviders,\n setIntelliSenseContext,\n removeIntelliSenseContext,\n} from '../../utils/monaco-walkeros-providers';\nimport { registerFormatters } from '../../utils/monaco-formatters';\nimport {\n generateModelPath,\n initMonacoJson,\n registerJsonSchema,\n unregisterJsonSchema,\n} from '../../utils/monaco-json-schema';\nimport { useMonacoHeight } from '../../hooks/useMonacoHeight';\nimport { useGridHeight } from '../../contexts/GridHeightContext';\nimport { isMonacoCancellation } from '../../utils/is-monaco-cancellation';\n\n// Monaco Editor configuration\n// NOTE: MonacoEnvironment.getWorker and loader.config() should be configured\n// by the consuming application. See examples in the explorer app's main.tsx\nimport type * as monaco from 'monaco-editor';\nimport type { IntelliSenseContext } from '../../types/intellisense';\n\n// Suppress Monaco loader cancellation rejections at the window level. See\n// `isMonacoCancellation` for the full rationale. ES modules evaluate once, so\n// the listener registers once per module graph. HMR re-execution may add a\n// duplicate in dev, which is harmless (preventDefault on an already-prevented\n// event is a no-op).\nif (typeof window !== 'undefined') {\n window.addEventListener('unhandledrejection', (event) => {\n if (isMonacoCancellation(event.reason)) {\n event.preventDefault();\n }\n });\n}\n\n// Run Monaco base setup exactly once at module load — before any <Editor>\n// mounts. Doing this during `beforeMount` of an editor invalidates any\n// in-flight TypeScript worker operations from sibling editors mounted in\n// parallel, which leak as `{ type: 'cancelation' }` unhandled rejections.\nif (typeof window !== 'undefined') {\n loader\n .init()\n .then((m) => {\n configureMonacoTypeScript(m);\n registerWalkerOSAmbients(m);\n })\n .catch((err) => {\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[walkerOS] Monaco loader.init() failed:', err);\n }\n });\n}\n\nexport interface CodeProps {\n code: string;\n language?: string;\n onChange?: (code: string) => void;\n disabled?: boolean;\n lineNumbers?: boolean;\n minimap?: boolean;\n folding?: boolean;\n wordWrap?: boolean;\n className?: string;\n beforeMount?: (monaco: typeof import('monaco-editor')) => void;\n onMount?: (editor: editor.IStandaloneCodeEditor) => void;\n autoHeight?: boolean | { min?: number; max?: number };\n fontSize?: number;\n packages?: string[];\n sticky?: boolean; // Enable sticky scroll (default: true)\n ide?: boolean; // Enable IDE features: hover, validation, etc. (default: false)\n /** JSON Schema (Draft 7) for validation and IntelliSense in JSON mode */\n jsonSchema?: Record<string, unknown>;\n /** Context data for dynamic IntelliSense (variable names, secrets, etc.) */\n intellisenseContext?: IntelliSenseContext;\n /** Validation function — called on content change, results rendered as Monaco markers */\n validate?: (code: string) => {\n valid: boolean;\n errors: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n endLine?: number;\n endColumn?: number;\n }>;\n warnings: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n endLine?: number;\n endColumn?: number;\n }>;\n };\n /** Callback when Monaco marker counts change */\n onMarkerCounts?: (info: {\n errors: number;\n warnings: number;\n markers: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n }>;\n }) => void;\n}\n\n/**\n * Code - Pure Monaco editor atom\n *\n * Height Management:\n * Two modes controlled by `autoHeight` prop:\n *\n * 1. Default (autoHeight=false): height=\"100%\" - fills parent container\n * - Uses flex: 1 + min-height: 0 for proper flex overflow containment\n * - Monaco set to height=\"100%\" to fill container\n * - automaticLayout: true + ResizeObserver for reliable resize detection\n * - Use in Grid (equal heights) and Flex contexts (fill parent)\n *\n * 2. Auto-height (autoHeight=true): Dynamically sizes to content\n * - Uses Monaco's getContentHeight() API for accurate content measurement\n * - Respects min/max boundaries (default: 100-600px)\n * - Updates automatically when content changes\n * - Use in standalone contexts (docs) to eliminate blank space\n *\n * @example\n * // Grid context - use default height=\"100%\" for equal row heights\n * <Grid columns={3}>\n * <CodeBox code={event} />\n * <CodeBox code={mapping} />\n * </Grid>\n *\n * @example\n * // Standalone context - use autoHeight to fit content\n * <CodeBox\n * code={shortExample}\n * autoHeight={{ min: 100, max: 600 }}\n * />\n */\nexport function Code({\n code,\n language = 'javascript',\n onChange,\n disabled = false,\n lineNumbers = false,\n minimap = false,\n folding = false,\n wordWrap = false,\n className,\n beforeMount,\n onMount,\n autoHeight,\n fontSize = 13,\n packages,\n sticky = true,\n ide = false,\n jsonSchema,\n intellisenseContext,\n validate,\n onMarkerCounts,\n}: CodeProps) {\n // Track if component has mounted (client-side hydration complete)\n const [isMounted, setIsMounted] = useState(false);\n // Use a consistent default theme for SSR - only update after mount\n const [monacoTheme, setMonacoTheme] = useState('vs-light');\n const decorationsCleanupRef = useRef<Array<() => void>>([]);\n const monacoRef = useRef<typeof import('monaco-editor') | null>(null);\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const gridContext = useGridHeight();\n const boxIdRef = useRef<number | null>(null);\n\n if (gridContext?.enabled && boxIdRef.current === null) {\n boxIdRef.current = gridContext.getBoxId();\n }\n\n const handleHeightChange = useCallback(\n (height: number) => {\n if (gridContext?.enabled && boxIdRef.current !== null) {\n gridContext.registerBox(boxIdRef.current, height);\n }\n },\n [gridContext],\n );\n\n useEffect(() => {\n return () => {\n if (gridContext?.enabled && boxIdRef.current !== null) {\n gridContext.unregisterBox(boxIdRef.current);\n }\n };\n }, [gridContext]);\n\n const heightConfig = typeof autoHeight === 'object' ? autoHeight : {};\n const [calculatedHeight, registerEditor] = useMonacoHeight({\n enabled: !!autoHeight || !!gridContext?.enabled,\n minHeight: heightConfig.min ?? (gridContext?.enabled ? 1 : 20),\n maxHeight: heightConfig.max ?? 600,\n defaultHeight: gridContext?.enabled ? 250 : 400,\n onHeightChange: handleHeightChange,\n });\n\n // Register data-elb styles on mount\n useEffect(() => {\n registerDataElbStyles();\n }, []);\n\n // Helper: Find data-theme attribute from closest ancestor or document\n // Returns null during SSR (no document available)\n const getDataTheme = useCallback((): string | null => {\n if (typeof document === 'undefined') return null;\n\n // Check container ref first (closest to Monaco)\n if (containerRef.current) {\n const closest = containerRef.current.closest('[data-theme]');\n if (closest) {\n return closest.getAttribute('data-theme');\n }\n }\n\n // Fall back to document root\n return document.documentElement.getAttribute('data-theme');\n }, []);\n\n // Mark component as mounted (hydration complete)\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n // Theme detection - only runs after mount to prevent hydration mismatch\n useEffect(() => {\n if (!isMounted) return;\n\n const checkTheme = () => {\n const dataTheme = getDataTheme();\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n const newTheme = isDark ? ELB_THEME_DARK : ELB_THEME_LIGHT;\n\n setMonacoTheme(newTheme);\n };\n\n checkTheme();\n\n const observer = new MutationObserver(() => {\n checkTheme();\n });\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handleChange = () => {\n checkTheme();\n };\n mediaQuery.addEventListener('change', handleChange);\n\n return () => {\n observer.disconnect();\n mediaQuery.removeEventListener('change', handleChange);\n };\n }, [isMounted, getDataTheme]);\n\n // ResizeObserver for container size changes\n // Complements automaticLayout: true for more reliable detection\n // Handles cases where Grid constraints change or parent container resizes\n useEffect(() => {\n const editor = editorRef.current;\n const container = containerRef.current;\n\n if (!editor || !container) return;\n\n const resizeObserver = new ResizeObserver(() => {\n // Debounce layout calls to prevent excessive updates\n requestAnimationFrame(() => {\n editor.layout();\n });\n });\n\n resizeObserver.observe(container);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // JSON Schema registration for IntelliSense\n const modelPathRef = useRef<string | null>(null);\n const intellisenseContextRef = useRef(intellisenseContext);\n intellisenseContextRef.current = intellisenseContext;\n const validateRef = useRef(validate);\n validateRef.current = validate;\n const onMarkerCountsRef = useRef(onMarkerCounts);\n onMarkerCountsRef.current = onMarkerCounts;\n\n // Always generate a stable model path with a language-appropriate extension.\n // Monaco's TypeScript worker uses the extension to decide TS vs TSX vs JS\n // parsing. Without this, all snippets default to `.json` paths and TS\n // diagnostics misbehave on any non-JSON content.\n if (!modelPathRef.current) {\n modelPathRef.current = generateModelPath(language);\n }\n\n // Register/update JSON schema when it changes\n useEffect(() => {\n if (!jsonSchema || !modelPathRef.current) return;\n\n registerJsonSchema(modelPathRef.current, jsonSchema);\n\n return () => {\n if (modelPathRef.current) {\n unregisterJsonSchema(modelPathRef.current);\n }\n };\n }, [jsonSchema]);\n\n // Sync intellisenseContext with provider registry\n useEffect(() => {\n if (intellisenseContext && modelPathRef.current) {\n setIntelliSenseContext(modelPathRef.current, intellisenseContext);\n return () => {\n if (modelPathRef.current) {\n removeIntelliSenseContext(modelPathRef.current);\n }\n };\n }\n }, [intellisenseContext]);\n\n const handleChange = (value: string | undefined) => {\n if (onChange && value !== undefined) {\n onChange(value);\n }\n };\n\n const handleBeforeMount = async (monaco: typeof import('monaco-editor')) => {\n monacoRef.current = monaco;\n\n // Initialize JSON schema registry with this monaco instance\n initMonacoJson(monaco);\n\n // Always run built-in setup\n registerAllThemes(monaco);\n registerFormatters(monaco);\n\n // Monaco base setup (compiler options + ambient globals) runs once at\n // module load via `loader.init()`. The WeakSet guards inside those\n // functions make them no-ops here even if called again.\n\n if (packages && packages.length > 0) {\n registerWalkerOSTypes(monaco);\n\n const { loadPackageTypes } = await import('../../utils/monaco-types');\n for (const pkg of packages) {\n if (pkg !== '@walkeros/core') {\n await loadPackageTypes(monaco, { package: pkg }).catch(() => {});\n }\n }\n }\n\n const dataTheme = getDataTheme();\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n const themeName = isDark ? ELB_THEME_DARK : ELB_THEME_LIGHT;\n monaco.editor.setTheme(themeName);\n\n // Register walkerOS IntelliSense providers for JSON\n if (language === 'json') {\n registerWalkerOSProviders(monaco);\n }\n\n // Call user's beforeMount AFTER built-in setup\n if (beforeMount) {\n beforeMount(monaco);\n }\n };\n\n const MonacoEditor = Editor as ComponentType<{\n height: string;\n language: string;\n value: string;\n onChange: (value: string | undefined) => void;\n beforeMount?: (monaco: typeof import('monaco-editor')) => void;\n onMount?: (editor: editor.IStandaloneCodeEditor) => void;\n theme: string;\n options: Record<string, unknown>;\n path?: string; // Model URI for JSON schema fileMatch\n }>;\n\n const handleEditorMount = (monacoEditor: editor.IStandaloneCodeEditor) => {\n editorRef.current = monacoEditor;\n\n // Register with height hook if auto-height or grid context is enabled\n if (autoHeight || gridContext?.enabled) {\n registerEditor(monacoEditor);\n }\n\n // Apply data-elb decorations for HTML\n if (language === 'html' && monacoRef.current) {\n decorationsCleanupRef.current.push(\n applyDataElbDecorations(monacoEditor, monacoRef.current),\n );\n }\n\n // Apply walkerOS reference decorations for JSON\n if (language === 'json') {\n registerWalkerOSDecorationStyles();\n decorationsCleanupRef.current.push(\n applyWalkerOSDecorations(monacoEditor),\n );\n }\n\n // Run validation from validate prop (replaces internal walkerOS markers)\n if (validateRef.current && monacoRef.current) {\n const monacoInstance = monacoRef.current;\n let validateTimer: ReturnType<typeof setTimeout>;\n\n const runValidation = () => {\n const model = monacoEditor.getModel();\n if (!model) return;\n const text = model.getValue();\n const fn = validateRef.current;\n if (!fn) return;\n\n const result = fn(text);\n const allIssues = [...result.errors, ...result.warnings];\n\n monacoInstance.editor.setModelMarkers(\n model,\n 'validate',\n allIssues.map((issue) => ({\n severity: issue.severity === 'error' ? 8 : 4,\n message: issue.message,\n startLineNumber: issue.line,\n startColumn: issue.column,\n endLineNumber: issue.endLine ?? issue.line,\n endColumn: issue.endColumn ?? issue.column + 1,\n })),\n );\n\n // Don't report here — the global marker listener below handles it\n };\n\n // Initial validation\n runValidation();\n\n // Debounced validation on content change\n const validateDisposable = monacoEditor.onDidChangeModelContent(() => {\n clearTimeout(validateTimer);\n validateTimer = setTimeout(runValidation, 300);\n });\n\n decorationsCleanupRef.current.push(() => {\n clearTimeout(validateTimer);\n validateDisposable.dispose();\n });\n }\n\n // Listen for marker changes and report counts to CodeBox header badges.\n // When a custom validate prop is provided, it is the single source of truth\n // (same validator the CLI uses). Clear Monaco's built-in JSON diagnostics\n // so they don't double-count.\n if (onMarkerCountsRef.current && monacoRef.current) {\n const monacoInstance = monacoRef.current;\n const model = monacoEditor.getModel();\n const hasCustomValidate = !!validateRef.current;\n if (model) {\n const reportMarkers = () => {\n // When custom validate owns validation, strip Monaco's JSON markers\n if (hasCustomValidate) {\n monacoInstance.editor.setModelMarkers(model, 'json', []);\n }\n const raw = monacoInstance.editor.getModelMarkers({\n resource: model.uri,\n });\n let errors = 0;\n let warnings = 0;\n const details: Array<{\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n }> = [];\n for (const m of raw) {\n if (m.severity === 8) {\n errors++;\n details.push({\n message: m.message,\n severity: 'error',\n line: m.startLineNumber,\n column: m.startColumn,\n });\n } else if (m.severity === 4) {\n warnings++;\n details.push({\n message: m.message,\n severity: 'warning',\n line: m.startLineNumber,\n column: m.startColumn,\n });\n }\n }\n onMarkerCountsRef.current?.({ errors, warnings, markers: details });\n };\n\n const markerDisposable = monacoInstance.editor.onDidChangeMarkers(\n (uris) => {\n if (uris.some((uri) => uri.toString() === model.uri.toString())) {\n reportMarkers();\n }\n },\n );\n\n // Initial report (catches markers set before listener)\n requestAnimationFrame(reportMarkers);\n\n decorationsCleanupRef.current.push(() => {\n markerDisposable.dispose();\n });\n }\n }\n\n // Initial layout call after mount\n requestAnimationFrame(() => {\n monacoEditor.layout();\n });\n\n if (onMount) {\n onMount(monacoEditor);\n }\n };\n\n // Cleanup\n useEffect(() => {\n return () => {\n for (const cleanup of decorationsCleanupRef.current) {\n cleanup();\n }\n decorationsCleanupRef.current = [];\n };\n }, []);\n\n // Choose height strategy: auto-calculated or fill parent\n // Note: When grid context is enabled with synced mode, CodeBox applies\n // syncedHeight to the Box container. Monaco should use calculatedHeight\n // (content-only) here, not syncedHeight (which includes header + border).\n const monacoHeight =\n autoHeight || gridContext?.enabled ? `${calculatedHeight}px` : '100%';\n\n // Add modifier class when using auto-height or synced height\n const useContentHeight = !!autoHeight || !!gridContext?.enabled;\n const codeClassName =\n `elb-code ${useContentHeight ? 'elb-code--auto-height' : ''} ${className || ''}`.trim();\n\n return (\n <div className={codeClassName} ref={containerRef}>\n <MonacoEditor\n height={monacoHeight}\n language={language}\n value={code}\n onChange={handleChange}\n beforeMount={handleBeforeMount}\n onMount={handleEditorMount}\n theme={monacoTheme}\n path={modelPathRef.current || undefined}\n options={{\n readOnly: disabled || !onChange,\n readOnlyMessage: { value: '' },\n minimap: { enabled: minimap },\n fontSize: fontSize,\n lineHeight: Math.round(fontSize * 1.5),\n padding: 0,\n lineNumbers: lineNumbers ? 'on' : 'off',\n lineNumbersMinChars: 3,\n glyphMargin: false,\n folding: folding,\n lineDecorationsWidth: 8, // Gap between line numbers and code\n scrollBeyondLastLine: false,\n automaticLayout: true,\n tabSize: 2,\n detectIndentation: false,\n trimAutoWhitespace: false,\n wordWrap: wordWrap ? 'on' : 'off',\n fixedOverflowWidgets: true,\n overviewRulerLanes: 0,\n renderLineHighlight: 'none',\n renderValidationDecorations: ide || jsonSchema ? 'editable' : 'off',\n hover: { enabled: ide || !!jsonSchema || !!intellisenseContext },\n 'semanticHighlighting.enabled': ide,\n showDeprecated: ide,\n showUnused: ide,\n 'bracketPairColorization.enabled': false,\n guides: {\n bracketPairs: false,\n bracketPairsHorizontal: false,\n highlightActiveBracketPair: false,\n indentation: false, // Disable indentation guide lines\n },\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n alwaysConsumeMouseWheel: false,\n },\n // Cursor and selection behavior\n cursorBlinking: 'blink', // Make cursor blink visibly\n cursorStyle: 'line', // Use line cursor (most visible)\n cursorWidth: 2, // Make cursor 2px wide for better visibility\n cursorSmoothCaretAnimation: 'off', // Disable smooth cursor animation\n selectionHighlight: false, // Disable auto-highlighting of selected text occurrences\n occurrencesHighlight: 'off', // Disable highlighting matching words\n selectOnLineNumbers: false, // Don't select line when clicking line numbers\n wordBasedSuggestions: 'off', // Reduce auto-completion interference\n quickSuggestions:\n jsonSchema || intellisenseContext\n ? { strings: true, other: true, comments: false }\n : false,\n stickyScroll: { enabled: sticky },\n }}\n />\n </div>\n );\n}\n","/**\n * Theme name constants\n *\n * Single source of truth for Monaco `defineTheme` keys and Shiki theme names.\n * Import these instead of hard-coding the string literals — renaming a theme\n * then only changes one place and both engines stay in sync.\n */\n\nexport const ELB_THEME_DARK = 'elbTheme-dark';\nexport const ELB_THEME_LIGHT = 'elbTheme-light';\n\nexport type ElbThemeName = typeof ELB_THEME_DARK | typeof ELB_THEME_LIGHT;\n","/**\n * Token groups — unified scope → color mapping for Monaco + Shiki\n *\n * Each `TokenGroup` defines ONE semantic color (foreground + optional fontStyle)\n * and a list of `scopes` that should receive it. The list pools both Monaco's\n * Monarch-style token names (e.g. `string.value.json`, `identifier.ts`) AND\n * TextMate scopes that Shiki grammars emit (e.g. `string.quoted.double.json`,\n * `variable.other.object.ts`). Because the same list drives both engines via\n * `tokenGroupsToMonacoRules` + `monacoThemeToShiki`, a single edit here updates\n * CodeBox (Monaco) and CodeView (Shiki) together.\n */\n\nimport type { editor } from 'monaco-editor';\n\nexport interface TokenGroup {\n /** Foreground hex WITHOUT leading `#` (Monaco convention). Omit for font-style-only rules. */\n foreground?: string;\n /** Monaco / TextMate fontStyle string, e.g. 'italic', 'bold', 'italic bold'. */\n fontStyle?: string;\n /**\n * Monarch token names (Monaco) AND TextMate scopes (Shiki), pooled into one list.\n * Every scope in this list gets the same foreground + fontStyle, so both engines\n * render the same color for every token they emit under any of these names.\n */\n scopes: string[];\n}\n\n/**\n * Expand `TokenGroup[]` into the flat `editor.ITokenThemeRule[]` Monaco wants.\n * Each scope becomes one rule with the group's shared foreground + fontStyle.\n */\nexport function tokenGroupsToMonacoRules(\n groups: TokenGroup[],\n): editor.ITokenThemeRule[] {\n return groups.flatMap((g) =>\n g.scopes.map((token) => {\n const rule: editor.ITokenThemeRule = { token };\n if (g.foreground !== undefined) rule.foreground = g.foreground;\n if (g.fontStyle !== undefined) rule.fontStyle = g.fontStyle;\n return rule;\n }),\n );\n}\n","/**\n * Palenight Theme for Monaco Editor\n *\n * Dark theme for walkerOS Explorer matching Prism's palenight theme.\n * Aligned with website documentation syntax highlighting for consistency.\n *\n * Token Color Mappings (Matching Prism Palenight):\n * - comment: #697098 - gray, italic\n * - string/inserted: #c3e88d - green\n * - number: #f78c6c - orange\n * - builtin/char/constant/function: #82aaff - blue\n * - punctuation/delimiter: #c792ea - purple\n * - variable: #bfc7d5 - light gray\n * - class-name: #ffcb6b - yellow/gold\n * - attr-name: #c3e88d - green (matching string color)\n * - tag/deleted: #ff5572 - red/pink\n * - operator: #89ddff - cyan\n * - boolean: #ff5874 - red\n * - keyword: #c084fc - bright purple, italic\n * - doctype: #c084fc - purple, italic\n * - namespace: #b2ccd6 - blue-gray\n * - url: #dddddd - white\n */\n\nimport type { editor } from 'monaco-editor';\nimport { ELB_THEME_DARK } from './names';\nimport { tokenGroupsToMonacoRules, type TokenGroup } from './token-groups';\n\n// Semantic color palette — change a hex here, it flows to every scope that uses it.\nconst C = {\n comment: '697098',\n string: 'c3e88d',\n regexp: '89ddff',\n number: 'f78c6c',\n keyword: 'c084fc',\n operator: '89ddff',\n function: '82aaff',\n type: 'ffcb6b',\n variable: 'bfc7d5',\n bool: 'ff5874',\n punctuation: 'c792ea',\n tag: 'ff5572',\n namespace: 'b2ccd6',\n url: 'dddddd',\n invalid: 'ff5572',\n invalidDep: 'f78c6c',\n cssSelector: 'ff5572',\n cssId: '82aaff',\n cssProperty: 'c084fc',\n} as const;\n\n// Token groups pool Monarch token names (Monaco) + TextMate scopes (Shiki).\n// Both engines consume the SAME list — change a group, both pick up.\n//\n// ORDER MATTERS: more-specific scopes should come AFTER broader ones so they\n// win when both match. Monaco walks `rules[]` top-to-bottom and (like\n// TextMate) later rules override earlier ones for the same scope.\nconst TOKEN_GROUPS: TokenGroup[] = [\n // Comments\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: [\n 'comment',\n 'comment.block',\n 'comment.line',\n 'comment.html',\n 'comment.line.double-slash',\n 'comment.line.number-sign',\n 'comment.block.documentation',\n 'punctuation.definition.comment',\n ],\n },\n\n // Strings (generic)\n {\n foreground: C.string,\n scopes: [\n 'string',\n 'string.quoted',\n 'string.template',\n 'string.value.json',\n 'string.json',\n 'string.html',\n 'string.css',\n 'string.js',\n 'string.ts',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.triple',\n 'punctuation.definition.string',\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'meta.string',\n // HTML/JSX attribute values stay in string color (matches prior rule)\n 'attribute.value.html',\n ],\n },\n\n // Regex (cyan — distinct from plain strings)\n {\n foreground: C.regexp,\n scopes: ['string.regexp'],\n },\n\n // Numbers\n {\n foreground: C.number,\n scopes: [\n 'number',\n 'number.hex',\n 'number.binary',\n 'number.octal',\n 'number.float',\n 'constant.numeric',\n 'constant.numeric.decimal',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'keyword.other.unit',\n ],\n },\n\n // Keywords — italic\n {\n foreground: C.keyword,\n fontStyle: 'italic',\n scopes: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.import',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'storage.type',\n 'storage.modifier',\n 'keyword.declaration',\n ],\n },\n\n // Keyword \"other\" — same color, upright\n {\n foreground: C.keyword,\n scopes: ['keyword.other'],\n },\n\n // Operators — cyan\n {\n foreground: C.operator,\n scopes: [\n 'operator',\n 'operators',\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.arithmetic',\n 'keyword.operator.logical',\n 'keyword.operator.comparison',\n 'keyword.operator.type',\n 'keyword.operator.type.ts',\n ],\n },\n\n // Functions\n {\n foreground: C.function,\n scopes: [\n 'function',\n 'identifier.function',\n 'support.function',\n 'entity.name.function',\n 'meta.function-call',\n 'meta.function-call.entity.name.function',\n 'variable.function',\n ],\n },\n\n // Types & classes\n {\n foreground: C.type,\n scopes: [\n 'type',\n 'type.identifier',\n 'entity.name.type',\n 'entity.name.class',\n 'support.type',\n 'support.class',\n 'support.type.primitive.ts',\n 'support.type.primitive.js',\n 'entity.name.type.ts',\n 'entity.name.type.js',\n 'meta.type.annotation',\n 'meta.type.annotation.ts',\n 'entity.other.inherited-class',\n 'storage.type.class',\n 'storage.type.function',\n 'storage.type.interface',\n 'support.type.primitive',\n ],\n },\n\n // Variables / identifiers / property names — unified light gray\n {\n foreground: C.variable,\n scopes: [\n 'variable',\n 'variable.name',\n 'variable.parameter',\n 'variable.parameter.ts',\n 'variable.parameter.js',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.language',\n 'meta.definition.variable',\n 'identifier',\n 'identifier.ts',\n 'identifier.js',\n // Object keys — JSON, TS, JS\n 'support.type.property-name',\n 'support.type.property-name.json',\n 'string.key.json',\n 'string.name.tag.json',\n 'meta.object-literal.key',\n 'variable.other.property',\n 'variable.other.object.property',\n 'variable.other.constant.property',\n ],\n },\n\n // Constants & built-ins (blue — matches function color per Prism palenight)\n {\n foreground: C.function,\n scopes: ['constant', 'constant.character', 'support.constant'],\n },\n\n // Booleans / null / language constants\n {\n foreground: C.bool,\n scopes: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'keyword.constant.boolean',\n ],\n },\n\n // Delimiters & punctuation\n {\n foreground: C.punctuation,\n scopes: [\n 'delimiter',\n 'delimiter.bracket',\n 'delimiter.parenthesis',\n 'delimiter.square',\n 'delimiter.html',\n 'punctuation',\n 'punctuation.separator',\n 'punctuation.definition',\n 'punctuation.terminator',\n 'punctuation.section',\n 'meta.brace',\n 'meta.brace.round',\n 'meta.brace.square',\n 'meta.brace.curly',\n 'meta.tag.html',\n 'punctuation.definition.tag.html',\n ],\n },\n\n // Tags (HTML/XML/JSX) — red/pink accent\n {\n foreground: C.tag,\n scopes: [\n 'tag',\n 'meta.tag',\n 'entity.name.tag',\n 'entity.name.tag.tsx',\n 'entity.name.tag.jsx',\n 'punctuation.definition.tag',\n 'punctuation.definition.tag.begin',\n 'punctuation.definition.tag.end',\n ],\n },\n\n // Attribute names — string color (matches prior theme intent)\n {\n foreground: C.string,\n scopes: ['attribute.name', 'entity.other.attribute-name', 'meta.attribute'],\n },\n\n // Namespaces\n {\n foreground: C.namespace,\n scopes: ['namespace', 'entity.name.namespace', 'storage.type.namespace'],\n },\n\n // URLs / links\n {\n foreground: C.url,\n scopes: ['markup.underline.link', 'string.other.link'],\n },\n\n // Doctype\n {\n foreground: C.keyword,\n fontStyle: 'italic',\n scopes: ['meta.tag.sgml.doctype'],\n },\n\n // Markdown\n {\n fontStyle: 'bold',\n scopes: ['markup.bold'],\n },\n {\n fontStyle: 'italic',\n scopes: ['markup.italic'],\n },\n {\n foreground: C.keyword,\n fontStyle: 'bold',\n scopes: ['markup.heading'],\n },\n {\n foreground: C.string,\n scopes: ['markup.raw'],\n },\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: ['markup.quote'],\n },\n {\n foreground: C.variable,\n scopes: ['markup.list'],\n },\n\n // Language-Specific: HTML — tag names/attributes rendered as identifiers\n {\n foreground: C.variable,\n scopes: [\n 'entity.name.tag.html',\n 'tag.html',\n 'entity.other.attribute-name.html',\n 'attribute.name.html',\n ],\n },\n\n // Language-Specific: CSS\n {\n foreground: C.cssSelector,\n scopes: ['entity.name.tag.css'],\n },\n {\n foreground: C.type,\n scopes: ['entity.other.attribute-name.class.css'],\n },\n {\n foreground: C.cssId,\n scopes: ['entity.other.attribute-name.id.css'],\n },\n {\n foreground: C.cssProperty,\n scopes: ['support.type.property-name.css'],\n },\n {\n foreground: C.number,\n scopes: ['support.constant.property-value.css', 'keyword.other.unit.css'],\n },\n\n // Errors / invalid\n {\n foreground: C.invalid,\n scopes: ['invalid', 'invalid.illegal'],\n },\n {\n foreground: C.invalidDep,\n scopes: ['invalid.deprecated'],\n },\n];\n\nexport const palenightTheme: editor.IStandaloneThemeData = {\n base: 'vs-dark',\n inherit: true,\n rules: tokenGroupsToMonacoRules(TOKEN_GROUPS),\n colors: {\n // Editor Background - transparent, let box handle background\n // Falls back to CSS var(--bg-input) in _code.scss\n 'editor.background': '#00000000', // Transparent\n 'editor.foreground': '#bfc7d5',\n\n // Editor Lines - transparent to inherit box background\n 'editor.lineHighlightBackground': '#00000000', // Transparent\n 'editorLineNumber.foreground': '#676E95',\n 'editorLineNumber.activeForeground': '#c084fc',\n\n // Editor Cursor & Selection\n 'editorCursor.foreground': '#c084fc', // Purple cursor for dark theme\n 'editor.selectionBackground': '#717CB450', // Visible selection\n 'editor.inactiveSelectionBackground': '#717CB430',\n 'editor.selectionHighlightBackground': '#717CB420',\n\n // Editor Gutter - transparent to inherit box background\n 'editorGutter.background': '#00000000', // Transparent\n 'editorGutter.modifiedBackground': '#82aaff',\n 'editorGutter.addedBackground': '#c3e88d',\n 'editorGutter.deletedBackground': '#ff5572',\n\n // Editor Widgets\n 'editorWidget.background': '#1e1e2e',\n 'editorWidget.border': '#676E95',\n 'editorSuggestWidget.background': '#1e1e2e',\n 'editorSuggestWidget.border': '#676E95',\n 'editorSuggestWidget.selectedBackground': '#717CB440',\n\n // Sticky Scroll - match box background with subtle border\n 'editorStickyScroll.background': '#292d3e',\n 'editorStickyScroll.border': '#676E9540',\n 'editorStickyScrollHover.background': '#292d3e',\n 'editorStickyScroll.shadow': '#00000000',\n 'editorStickyScrollGutter.background': '#292d3e',\n\n // Hover Widgets - Tooltips and hover information\n 'editorHoverWidget.background': '#1e1e2e',\n 'editorHoverWidget.border': '#676E95',\n 'editorHoverWidget.statusBarBackground': '#676E95',\n\n // Inline Hints - Type hints, parameter hints, inline suggestions\n 'editorInlineHint.background': '#292d3e',\n 'editorInlineHint.foreground': '#676E95',\n\n // Code Lens - Reference counts, test indicators\n 'editorCodeLens.foreground': '#697098',\n\n // Ghost Text - Autocomplete suggestions shown inline\n 'editorGhostText.foreground': '#676E9540',\n\n // Editor Whitespace & Indentation\n 'editorWhitespace.foreground': '#676E9540',\n 'editorIndentGuide.background': '#676E9520',\n 'editorIndentGuide.activeBackground': '#676E95',\n\n // Scrollbar\n 'scrollbar.shadow': '#00000000',\n 'scrollbarSlider.background': '#676E9530',\n 'scrollbarSlider.hoverBackground': '#676E9550',\n 'scrollbarSlider.activeBackground': '#676E9570',\n\n // Bracket Matching\n 'editorBracketMatch.background': '#676E9540',\n 'editorBracketMatch.border': '#676E95',\n\n // Find/Replace\n 'editor.findMatchBackground': '#717CB440',\n 'editor.findMatchHighlightBackground': '#676E9530',\n 'editor.findRangeHighlightBackground': '#676E9520',\n\n // Minimap\n 'minimap.background': '#292d3e',\n 'minimap.selectionHighlight': '#717CB440',\n 'minimap.findMatchHighlight': '#717CB440',\n\n // Overview Ruler\n 'editorOverviewRuler.border': '#676E9520',\n 'editorOverviewRuler.modifiedForeground': '#82aaff',\n 'editorOverviewRuler.addedForeground': '#c3e88d',\n 'editorOverviewRuler.deletedForeground': '#ff5572',\n\n // Peek View\n 'peekView.border': '#676E95',\n 'peekViewEditor.background': '#1e1e2e',\n 'peekViewResult.background': '#1e1e2e',\n 'peekViewTitle.background': '#1e1e2e',\n\n // Diff Editor\n 'diffEditor.insertedTextBackground': '#c3e88d20',\n 'diffEditor.removedTextBackground': '#ff557220',\n },\n};\n\n/**\n * Register the palenight theme with Monaco Editor\n * Call this function before creating any editor instances\n */\nexport function registerPalenightTheme(monaco: typeof import('monaco-editor')) {\n monaco.editor.defineTheme(ELB_THEME_DARK, palenightTheme);\n}\n","/**\n * Lighthouse Theme for Monaco Editor\n *\n * Custom light theme for walkerOS Explorer, designed to complement the Palenight dark theme.\n * Based on VS Code Light+ with adjustments for optimal readability and brand consistency.\n *\n * Color Palette Strategy:\n * - Comments: Muted green (#6A737D) for subtle annotations\n * - Strings: Dark green (#22863A) for clear text distinction\n * - Numbers: Brick red (#D73A49) for numeric emphasis\n * - Functions: Deep blue (#005CC5) for callable identification\n * - Keywords: Purple (#6F42C1) maintaining syntax hierarchy\n * - Variables: Near black (#24292E) for primary code elements\n * - Types/Classes: Dark gold (#B08800) for type definitions\n * - Tags: Red (#D73A49) for HTML/JSX elements\n * - Operators: Teal (#0086B3) for logical operations\n * - Booleans: Red (#D73A49) for literal values\n */\n\nimport type { editor } from 'monaco-editor';\nimport { ELB_THEME_LIGHT } from './names';\nimport { tokenGroupsToMonacoRules, type TokenGroup } from './token-groups';\n\n// Semantic color palette — change a hex here, it flows to every scope that uses it.\nconst C = {\n comment: '6A737D',\n string: '22863A',\n regexp: '032F62',\n number: 'D73A49',\n numericConstant: 'fb923c',\n keyword: '6F42C1',\n operator: '01b5e2', // Brand cyan — `operator` / `operators` tokens only\n operatorKeyword: '0086B3', // Darker teal — `keyword.operator*`\n function: '005CC5',\n type: 'B08800',\n variable: '24292E',\n bool: 'ef4444',\n tag: 'D73A49',\n namespace: '6F42C1',\n url: '005CC5',\n invalid: 'CB2431',\n invalidDep: 'D73A49',\n cssSelector: 'D73A49',\n cssClass: 'B08800',\n cssId: '005CC5',\n cssProperty: '6F42C1',\n cssValue: 'D73A49',\n} as const;\n\n// Token groups pool Monarch token names (Monaco) + TextMate scopes (Shiki).\n// Both engines consume the SAME list — change a group, both pick up.\nconst TOKEN_GROUPS: TokenGroup[] = [\n // Comments\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: [\n 'comment',\n 'comment.block',\n 'comment.line',\n 'comment.html',\n 'comment.line.double-slash',\n 'comment.line.number-sign',\n 'comment.block.documentation',\n 'punctuation.definition.comment',\n ],\n },\n\n // Strings (generic)\n {\n foreground: C.string,\n scopes: [\n 'string',\n 'string.quoted',\n 'string.template',\n 'string.value.json',\n 'string.json',\n 'string.html',\n 'string.css',\n 'string.js',\n 'string.ts',\n 'string.quoted.single',\n 'string.quoted.double',\n 'string.quoted.triple',\n 'punctuation.definition.string',\n 'punctuation.definition.string.begin',\n 'punctuation.definition.string.end',\n 'meta.string',\n 'attribute.value.html',\n ],\n },\n\n // Regex\n {\n foreground: C.regexp,\n scopes: ['string.regexp'],\n },\n\n // Numbers (base)\n {\n foreground: C.number,\n scopes: [\n 'number',\n 'number.hex',\n 'number.binary',\n 'number.octal',\n 'number.float',\n 'constant.numeric.decimal',\n 'constant.numeric.integer',\n 'constant.numeric.float',\n 'constant.numeric.hex',\n 'constant.numeric.binary',\n 'constant.numeric.octal',\n 'keyword.other.unit',\n ],\n },\n\n // Numeric constants (distinct hex in original theme)\n {\n foreground: C.numericConstant,\n scopes: ['constant.numeric'],\n },\n\n // Keywords — italic\n {\n foreground: C.keyword,\n fontStyle: 'italic',\n scopes: [\n 'keyword',\n 'keyword.control',\n 'keyword.control.flow',\n 'keyword.control.import',\n 'keyword.control.conditional',\n 'keyword.control.loop',\n 'storage.type',\n 'storage.modifier',\n 'keyword.declaration',\n ],\n },\n\n // Keyword \"other\" — same color, upright\n {\n foreground: C.keyword,\n scopes: ['keyword.other'],\n },\n\n // `operator` / `operators` — brand cyan (Monarch tokens)\n {\n foreground: C.operator,\n scopes: ['operator', 'operators'],\n },\n\n // `keyword.operator*` — darker teal\n {\n foreground: C.operatorKeyword,\n scopes: [\n 'keyword.operator',\n 'keyword.operator.assignment',\n 'keyword.operator.arithmetic',\n 'keyword.operator.logical',\n 'keyword.operator.comparison',\n 'keyword.operator.type',\n 'keyword.operator.type.ts',\n ],\n },\n\n // Functions\n {\n foreground: C.function,\n scopes: [\n 'function',\n 'identifier.function',\n 'support.function',\n 'entity.name.function',\n 'meta.function-call',\n 'meta.function-call.entity.name.function',\n 'variable.function',\n ],\n },\n\n // Types & classes\n {\n foreground: C.type,\n scopes: [\n 'type',\n 'type.identifier',\n 'entity.name.type',\n 'entity.name.class',\n 'support.type',\n 'support.class',\n 'support.type.primitive.ts',\n 'support.type.primitive.js',\n 'entity.name.type.ts',\n 'entity.name.type.js',\n 'meta.type.annotation',\n 'meta.type.annotation.ts',\n 'entity.other.inherited-class',\n 'storage.type.class',\n 'storage.type.function',\n 'storage.type.interface',\n 'support.type.primitive',\n ],\n },\n\n // Variables / identifiers / property names — near-black\n {\n foreground: C.variable,\n scopes: [\n 'variable',\n 'variable.name',\n 'variable.parameter',\n 'variable.parameter.ts',\n 'variable.parameter.js',\n 'variable.other',\n 'variable.other.readwrite',\n 'variable.other.constant',\n 'variable.language',\n 'meta.definition.variable',\n 'identifier',\n 'identifier.ts',\n 'identifier.js',\n // Object keys — JSON, TS, JS\n 'support.type.property-name',\n 'support.type.property-name.json',\n 'string.key.json',\n 'string.name.tag.json',\n 'meta.object-literal.key',\n 'variable.other.property',\n 'variable.other.object.property',\n 'variable.other.constant.property',\n ],\n },\n\n // Constants & built-ins — deep blue\n {\n foreground: C.function,\n scopes: ['constant', 'constant.character', 'support.constant'],\n },\n\n // Booleans / null / language constants\n {\n foreground: C.bool,\n scopes: [\n 'constant.language',\n 'constant.language.boolean',\n 'constant.language.null',\n 'constant.language.undefined',\n 'constant.language.boolean.true',\n 'constant.language.boolean.false',\n 'keyword.constant.boolean',\n ],\n },\n\n // Delimiters & punctuation\n {\n foreground: C.variable,\n scopes: [\n 'delimiter',\n 'delimiter.bracket',\n 'delimiter.parenthesis',\n 'delimiter.square',\n 'delimiter.html',\n 'punctuation',\n 'punctuation.separator',\n 'punctuation.definition',\n 'punctuation.terminator',\n 'punctuation.section',\n 'meta.brace',\n 'meta.brace.round',\n 'meta.brace.square',\n 'meta.brace.curly',\n 'meta.tag.html',\n 'punctuation.definition.tag.html',\n ],\n },\n\n // Tags (HTML/XML/JSX)\n {\n foreground: C.tag,\n scopes: [\n 'tag',\n 'meta.tag',\n 'entity.name.tag',\n 'entity.name.tag.tsx',\n 'entity.name.tag.jsx',\n 'punctuation.definition.tag',\n 'punctuation.definition.tag.begin',\n 'punctuation.definition.tag.end',\n ],\n },\n\n // Attribute names — string color (matches prior theme intent)\n {\n foreground: C.string,\n scopes: ['attribute.name', 'entity.other.attribute-name', 'meta.attribute'],\n },\n\n // Namespaces\n {\n foreground: C.namespace,\n scopes: ['namespace', 'entity.name.namespace', 'storage.type.namespace'],\n },\n\n // URLs / links\n {\n foreground: C.url,\n scopes: ['markup.underline.link', 'string.other.link'],\n },\n\n // Doctype\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: ['meta.tag.sgml.doctype'],\n },\n\n // Markdown\n {\n fontStyle: 'bold',\n scopes: ['markup.bold'],\n },\n {\n fontStyle: 'italic',\n scopes: ['markup.italic'],\n },\n {\n foreground: C.keyword,\n fontStyle: 'bold',\n scopes: ['markup.heading'],\n },\n {\n foreground: C.string,\n scopes: ['markup.raw'],\n },\n {\n foreground: C.comment,\n fontStyle: 'italic',\n scopes: ['markup.quote'],\n },\n {\n foreground: C.variable,\n scopes: ['markup.list'],\n },\n\n // Language-Specific: HTML — tag names/attributes rendered as identifiers\n {\n foreground: C.variable,\n scopes: [\n 'entity.name.tag.html',\n 'tag.html',\n 'entity.other.attribute-name.html',\n 'attribute.name.html',\n ],\n },\n\n // Language-Specific: CSS\n {\n foreground: C.cssSelector,\n scopes: ['entity.name.tag.css'],\n },\n {\n foreground: C.cssClass,\n scopes: ['entity.other.attribute-name.class.css'],\n },\n {\n foreground: C.cssId,\n scopes: ['entity.other.attribute-name.id.css'],\n },\n {\n foreground: C.cssProperty,\n scopes: ['support.type.property-name.css'],\n },\n {\n foreground: C.cssValue,\n scopes: ['support.constant.property-value.css', 'keyword.other.unit.css'],\n },\n\n // Errors / invalid\n {\n foreground: C.invalid,\n scopes: ['invalid', 'invalid.illegal'],\n },\n {\n foreground: C.invalidDep,\n scopes: ['invalid.deprecated'],\n },\n];\n\nexport const lighthouseTheme: editor.IStandaloneThemeData = {\n base: 'vs',\n inherit: true,\n rules: tokenGroupsToMonacoRules(TOKEN_GROUPS),\n colors: {\n // Editor Background - transparent, let box handle background\n 'editor.background': '#00000000', // Transparent\n 'editor.foreground': '#24292E',\n\n // Editor Lines - transparent to inherit box background\n 'editor.lineHighlightBackground': '#00000000', // Transparent\n 'editorLineNumber.foreground': '#1B1F2380',\n 'editorLineNumber.activeForeground': '#6F42C1',\n\n // Editor Cursor & Selection\n 'editorCursor.foreground': '#6F42C1', // Purple cursor for light theme\n 'editor.selectionBackground': '#0366D630', // Visible blue selection\n 'editor.inactiveSelectionBackground': '#0366D620',\n 'editor.selectionHighlightBackground': '#0366D615',\n\n // Editor Gutter - transparent to inherit box background\n 'editorGutter.background': '#00000000', // Transparent\n 'editorGutter.modifiedBackground': '#005CC5',\n 'editorGutter.addedBackground': '#28A745',\n 'editorGutter.deletedBackground': '#D73A49',\n\n // Editor Widgets\n 'editorWidget.background': '#F6F8FA',\n 'editorWidget.border': '#E1E4E8',\n 'editorSuggestWidget.background': '#F6F8FA',\n 'editorSuggestWidget.border': '#E1E4E8',\n 'editorSuggestWidget.selectedBackground': '#0366D625',\n\n // Sticky Scroll - match box background with subtle border\n 'editorStickyScroll.background': '#ffffff',\n 'editorStickyScroll.border': '#E1E4E8',\n 'editorStickyScrollHover.background': '#ffffff',\n 'editorStickyScroll.shadow': '#00000000',\n 'editorStickyScrollGutter.background': '#ffffff',\n\n // Hover Widgets - Tooltips and hover information\n 'editorHoverWidget.background': '#F6F8FA',\n 'editorHoverWidget.border': '#E1E4E8',\n 'editorHoverWidget.statusBarBackground': '#E1E4E8',\n\n // Inline Hints - Type hints, parameter hints, inline suggestions\n 'editorInlineHint.background': '#F6F8FA',\n 'editorInlineHint.foreground': '#6A737D',\n\n // Code Lens - Reference counts, test indicators\n 'editorCodeLens.foreground': '#6A737D',\n\n // Ghost Text - Autocomplete suggestions shown inline\n 'editorGhostText.foreground': '#1B1F2350',\n\n // Editor Whitespace & Indentation\n 'editorWhitespace.foreground': '#1B1F2340',\n 'editorIndentGuide.background': '#E1E4E820',\n 'editorIndentGuide.activeBackground': '#E1E4E8',\n\n // Scrollbar\n 'scrollbar.shadow': '#00000000',\n 'scrollbarSlider.background': '#1B1F2330',\n 'scrollbarSlider.hoverBackground': '#1B1F2350',\n 'scrollbarSlider.activeBackground': '#1B1F2370',\n\n // Bracket Matching\n 'editorBracketMatch.background': '#34D05840',\n 'editorBracketMatch.border': '#34D058',\n\n // Find/Replace\n 'editor.findMatchBackground': '#FFDF5D40',\n 'editor.findMatchHighlightBackground': '#FFDF5D30',\n 'editor.findRangeHighlightBackground': '#0366D620',\n\n // Minimap\n 'minimap.background': '#FAFBFC',\n 'minimap.selectionHighlight': '#0366D625',\n 'minimap.findMatchHighlight': '#FFDF5D40',\n\n // Overview Ruler\n 'editorOverviewRuler.border': '#E1E4E820',\n 'editorOverviewRuler.modifiedForeground': '#005CC5',\n 'editorOverviewRuler.addedForeground': '#28A745',\n 'editorOverviewRuler.deletedForeground': '#D73A49',\n\n // Peek View\n 'peekView.border': '#0366D6',\n 'peekViewEditor.background': '#F6F8FA',\n 'peekViewResult.background': '#FAFBFC',\n 'peekViewTitle.background': '#F6F8FA',\n\n // Diff Editor\n 'diffEditor.insertedTextBackground': '#28A74520',\n 'diffEditor.removedTextBackground': '#D73A4920',\n },\n};\n\n/**\n * Register the lighthouse theme with Monaco Editor\n * Call this function before creating any editor instances\n */\nexport function registerLighthouseTheme(\n monaco: typeof import('monaco-editor'),\n) {\n monaco.editor.defineTheme(ELB_THEME_LIGHT, lighthouseTheme);\n}\n","/**\n * Monaco Editor Themes for walkerOS Explorer\n *\n * Custom Monaco themes that integrate seamlessly with the CSS-based theme system.\n * Theme switching is handled via CSS `data-theme` attribute on document root.\n */\n\n// Import registration functions for use in registerAllThemes\nimport { registerPalenightTheme } from './palenight';\nimport { registerLighthouseTheme } from './lighthouse';\n\n// Monaco Editor themes\nexport { palenightTheme, registerPalenightTheme } from './palenight';\nexport { lighthouseTheme, registerLighthouseTheme } from './lighthouse';\n\n// Theme name constants — use these instead of hard-coded string literals\nexport { ELB_THEME_DARK, ELB_THEME_LIGHT } from './names';\nexport type { ElbThemeName } from './names';\n\n// Unified scope → color grouping (drives Monaco + Shiki from one source)\nexport type { TokenGroup } from './token-groups';\n\n// Theme types (for documentation and TypeScript support)\nexport type { ExplorerTheme } from './types';\n\n/**\n * Register all Monaco themes\n * Convenience function for registering both themes at once\n *\n * @example\n * ```typescript\n * import { registerAllThemes } from '@walkeros/explorer';\n * import * as monaco from 'monaco-editor';\n *\n * registerAllThemes(monaco);\n * ```\n */\nexport function registerAllThemes(\n monaco: typeof import('monaco-editor'),\n): void {\n registerPalenightTheme(monaco);\n registerLighthouseTheme(monaco);\n}\n","import type { editor } from 'monaco-editor';\n\n/**\n * Regular expressions to match walkerOS data attributes\n */\nconst DATA_ELB_PATTERNS = [\n /\\bdata-elb(?!-)\\b/g, // data-elb (not followed by hyphen)\n /\\bdata-elbaction\\b/g, // data-elbaction\n /\\bdata-elbactions\\b/g, // data-elbactions\n /\\bdata-elbglobals\\b/g, // data-elbglobals\n /\\bdata-elbcontext\\b/g, // data-elbcontext\n /\\bdata-elblink\\b/g, // data-elblink\n /\\bdata-elb-[\\w-]+\\b/g, // data-elb-* (property attributes)\n];\n\n/**\n * Apply decorations to highlight walkerOS data attributes in Monaco editor\n *\n * This function scans the editor content for data-elb* attributes and\n * applies color highlighting to match the website's Prism.js styling.\n *\n * @param editor - Monaco editor instance\n * @param monaco - Monaco module\n */\nexport function applyDataElbDecorations(\n monacoEditor: editor.IStandaloneCodeEditor,\n monaco: typeof import('monaco-editor'),\n): () => void {\n const decorationIds: string[] = [];\n\n const updateDecorations = () => {\n const model = monacoEditor.getModel();\n if (!model) return;\n\n const content = model.getValue();\n const decorations: editor.IModelDeltaDecoration[] = [];\n\n // Find all matches for each pattern\n DATA_ELB_PATTERNS.forEach((pattern) => {\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(content)) !== null) {\n const startPos = model.getPositionAt(match.index);\n const endPos = model.getPositionAt(match.index + match[0].length);\n\n decorations.push({\n range: new monaco.Range(\n startPos.lineNumber,\n startPos.column,\n endPos.lineNumber,\n endPos.column,\n ),\n options: {\n inlineClassName: 'elb-data-attribute',\n inlineClassNameAffectsLetterSpacing: true,\n },\n });\n }\n });\n\n // Apply decorations\n const newDecorationIds = monacoEditor.deltaDecorations(\n decorationIds,\n decorations,\n );\n decorationIds.length = 0;\n decorationIds.push(...newDecorationIds);\n };\n\n // Initial decoration\n updateDecorations();\n\n // Update decorations on content change\n const disposable = monacoEditor.onDidChangeModelContent(() => {\n updateDecorations();\n });\n\n // Return cleanup function\n return () => {\n disposable.dispose();\n monacoEditor.deltaDecorations(decorationIds, []);\n };\n}\n\n/**\n * Register CSS styles for data-elb attribute decorations\n * Call this once during app initialization\n */\nexport function registerDataElbStyles() {\n if (typeof document === 'undefined') return;\n\n const styleId = 'elb-monaco-data-attribute-styles';\n if (document.getElementById(styleId)) return;\n\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = `\n .monaco-editor .elb-data-attribute {\n color: var(--color-highlight-primary, #01b5e2) !important;\n }\n `;\n document.head.appendChild(style);\n}\n","import type { editor } from 'monaco-editor';\n\nexport type ReferenceType =\n | 'variable'\n | 'secret'\n | 'env'\n | 'store'\n | 'flow'\n | 'contract'\n | 'code';\n\nexport interface WalkerOSReference {\n type: ReferenceType;\n name: string;\n startIndex: number;\n endIndex: number;\n}\n\n// Covers every canonical walkerOS reference form. Aligned with REF_* constants\n// in @walkeros/core, but relaxed here because the decorator scans free-form\n// substrings inside quoted JSON/TS strings rather than whole-string values.\n// Name regex allows trailing dot + optional name/path so that prefix-only\n// typing (e.g. `\"$var.\"`) still lights up for IntelliSense.\nexport const REFERENCE_PATTERNS: Array<{\n type: ReferenceType;\n regex: RegExp;\n className: string;\n}> = [\n {\n type: 'variable',\n regex: /\\$var\\.(\\w*(?:\\.[\\w.]*)?)/g,\n className: 'elb-ref-variable',\n },\n { type: 'secret', regex: /\\$secret\\.(\\w*)/g, className: 'elb-ref-secret' },\n {\n type: 'env',\n regex: /\\$env\\.(\\w*)(?::[^\"}\\s]*)?/g,\n className: 'elb-ref-env',\n },\n {\n type: 'contract',\n regex: /\\$contract\\.(\\w*(?:\\.[\\w.]*)?)/g,\n className: 'elb-ref-contract',\n },\n { type: 'store', regex: /\\$store\\.(\\w*)/g, className: 'elb-ref-store' },\n {\n type: 'flow',\n regex: /\\$flow\\.(\\w*(?:\\.[\\w.]*)?)/g,\n className: 'elb-ref-flow',\n },\n { type: 'code', regex: /\\$code:/g, className: 'elb-ref-code' },\n];\n\n/**\n * Find all walkerOS reference patterns in text.\n * Used for both decorations and validation.\n */\nexport function findWalkerOSReferences(text: string): WalkerOSReference[] {\n const references: WalkerOSReference[] = [];\n\n for (const pattern of REFERENCE_PATTERNS) {\n const regex = new RegExp(pattern.regex.source, pattern.regex.flags);\n let match: RegExpExecArray | null;\n while ((match = regex.exec(text)) !== null) {\n references.push({\n type: pattern.type,\n name: pattern.type === 'code' ? '' : match[1] || '',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n\n return references;\n}\n\n/**\n * Apply walkerOS reference decorations to a Monaco editor.\n * Returns a cleanup function.\n */\nexport function applyWalkerOSDecorations(\n editorInstance: editor.IStandaloneCodeEditor,\n): () => void {\n let decorationIds: string[] = [];\n\n function update() {\n const model = editorInstance.getModel();\n if (!model) return;\n\n const text = model.getValue();\n const references = findWalkerOSReferences(text);\n\n const decorations: editor.IModelDeltaDecoration[] = references.map(\n (ref) => {\n const startPos = model.getPositionAt(ref.startIndex);\n const endPos = model.getPositionAt(ref.endIndex);\n const pattern = REFERENCE_PATTERNS.find((p) => p.type === ref.type)!;\n\n return {\n range: {\n startLineNumber: startPos.lineNumber,\n startColumn: startPos.column,\n endLineNumber: endPos.lineNumber,\n endColumn: endPos.column,\n },\n options: { inlineClassName: pattern.className },\n };\n },\n );\n\n decorationIds = editorInstance.deltaDecorations(decorationIds, decorations);\n }\n\n update();\n const disposable = editorInstance.onDidChangeModelContent(() => update());\n\n return () => {\n disposable.dispose();\n editorInstance.deltaDecorations(decorationIds, []);\n };\n}\n\n/**\n * Register CSS styles for walkerOS reference decorations.\n * Call once on app init.\n */\nexport function registerWalkerOSDecorationStyles(): void {\n if (typeof document === 'undefined') return;\n if (document.getElementById('walkeros-ref-styles')) return;\n\n const style = document.createElement('style');\n style.id = 'walkeros-ref-styles';\n style.textContent = `\n .monaco-editor .elb-ref-variable { color: #89ddff !important; font-style: italic; }\n .monaco-editor .elb-ref-secret { color: #ffcb6b !important; font-style: italic; }\n .monaco-editor .elb-ref-env { color: #ffcb6b !important; font-style: italic; }\n .monaco-editor .elb-ref-contract { color: #c3e88d !important; font-style: italic; }\n .monaco-editor .elb-ref-store { color: #89ddff !important; font-style: italic; }\n .monaco-editor .elb-ref-flow { color: #82aaff !important; font-style: italic; }\n .monaco-editor .elb-ref-code { color: #c084fc !important; }\n `;\n document.head.appendChild(style);\n}\n","import type { languages, editor, IDisposable, Position } from 'monaco-editor';\nimport {\n REF_ENV,\n REF_CONTRACT,\n REF_FLOW,\n REF_STORE,\n REF_SECRET,\n} from '@walkeros/core';\nimport type { IntelliSenseContext } from '../types/intellisense';\nimport {\n getVariableCompletions,\n getSecretCompletions,\n getStoreCompletions,\n getFlowCompletions,\n getEnvCompletions,\n getPackageCompletions,\n getStepNameCompletions,\n getContractCompletions,\n getMappingPathCompletions,\n type CompletionEntry,\n} from './monaco-walkeros-completions';\nimport { getJsonPathAtOffset } from './monaco-json-path';\nimport { detectMappingContext } from './mapping-context-detector';\nimport {\n detectChainRefContext,\n detectKeyContext,\n} from './monaco-chain-ref-detector';\n\n/**\n * Build an inline global regex from any REF_* source. The shared REF_*\n * constants in @walkeros/core include `^`/`$` anchors for whole-value\n * matches (e.g. REF_STORE). For inline scanning (hover on a token within a\n * line) we need a non-anchored global variant with the same capture groups.\n *\n * For REF_CONTRACT the trailing path is `(.+)` which would greedily eat\n * characters when unanchored, so we bound it to `[\\w.]+` for inline scans.\n */\nfunction inlineGlobal(pattern: RegExp): RegExp {\n const src = pattern.source\n .replace(/^\\^/, '')\n .replace(/\\$$/, '')\n .replace(/\\(\\.\\+\\)\\?$/, '([\\\\w.]+)?');\n return new RegExp(src, 'g');\n}\n\n/**\n * Extract the partial path typed after the `$contract.` prefix at the end\n * of the input. The prefix is derived from REF_CONTRACT.source so this\n * stays in lockstep with the shared reference syntax; the tail uses a\n * UI-friendly looser class because the user may be mid-typing (trailing\n * dot allowed).\n */\nconst CONTRACT_PREFIX = REF_CONTRACT.source\n .replace(/^\\^/, '')\n .split(/\\\\\\./, 1)[0]; // \"\\$contract\"\nconst CONTRACT_PATH_AT_END = new RegExp(\n `${CONTRACT_PREFIX}\\\\.([a-zA-Z0-9_.]*)?$`,\n);\n\nfunction getContractPathAtEnd(text: string): RegExpMatchArray | null {\n return text.match(CONTRACT_PATH_AT_END);\n}\n\n/**\n * Returns true iff the cursor is inside a JSON string literal whose content\n * so far matches `^$contract(.path)?`. This guards the `$contract.` completion\n * branch — runtime only resolves contract refs when the string value starts\n * with `$contract.` at position 0 (see REF_CONTRACT), so inline cases like\n * `\"prefix $contract.foo\"` should NOT offer contract completions.\n */\nexport function isAtContractValueStart(\n model: editor.ITextModel,\n position: Position,\n): boolean {\n const lineContent = model.getLineContent(position.lineNumber);\n const col = position.column - 1;\n const textBefore = lineContent.substring(0, col);\n const lastQuote = textBefore.lastIndexOf('\"');\n if (lastQuote < 0) return false;\n const between = textBefore.substring(lastQuote + 1);\n return /^\\$contract(\\.[a-zA-Z0-9_.]*)?$/.test(between);\n}\n\n// Store context per model path for scoped completions\nconst contextRegistry = new Map<string, IntelliSenseContext>();\nconst disposables: IDisposable[] = [];\nlet registered = false;\n\n/**\n * Update the IntelliSense context for a specific editor model.\n */\nexport function setIntelliSenseContext(\n modelPath: string,\n context: IntelliSenseContext,\n): void {\n contextRegistry.set(modelPath, context);\n}\n\n/**\n * Remove context when editor unmounts.\n */\nexport function removeIntelliSenseContext(modelPath: string): void {\n contextRegistry.delete(modelPath);\n}\n\n/**\n * Register the walkerOS CompletionItemProvider and HoverProvider for JSON.\n * Call once on app initialization. Safe to call multiple times (idempotent).\n */\nexport function registerWalkerOSProviders(\n monaco: typeof import('monaco-editor'),\n): void {\n if (registered) return;\n registered = true;\n\n // CompletionItemProvider\n disposables.push(\n monaco.languages.registerCompletionItemProvider('json', {\n triggerCharacters: ['\"', '.', '$'],\n provideCompletionItems(\n model: editor.ITextModel,\n position: Position,\n ): languages.CompletionList {\n const modelPath = model.uri.toString();\n const context = contextRegistry.get(modelPath);\n if (!context) return { suggestions: [] };\n\n const lineContent = model.getLineContent(position.lineNumber);\n const textBeforeCursor = lineContent.substring(0, position.column - 1);\n const offset = model.getOffsetAt(position);\n const fullText = model.getValue();\n const chainKey = detectChainRefContext(fullText, offset);\n\n const entries: CompletionEntry[] = [];\n\n if (\n textBeforeCursor.includes('$var.') ||\n textBeforeCursor.endsWith('\"$var')\n ) {\n entries.push(...getVariableCompletions(context.variables));\n } else if (\n textBeforeCursor.includes('$secret.') ||\n textBeforeCursor.endsWith('\"$secret')\n ) {\n entries.push(...getSecretCompletions(context.secrets));\n } else if (\n textBeforeCursor.includes('$store.') ||\n textBeforeCursor.endsWith('\"$store')\n ) {\n entries.push(...getStoreCompletions(context.stores));\n } else if (\n textBeforeCursor.includes('$flow.') ||\n textBeforeCursor.endsWith('\"$flow')\n ) {\n entries.push(...getFlowCompletions(context.flows));\n } else if (\n textBeforeCursor.includes('$env.') ||\n textBeforeCursor.endsWith('\"$env')\n ) {\n entries.push(...getEnvCompletions(context.envNames));\n } else if (\n (textBeforeCursor.includes('$contract.') ||\n textBeforeCursor.endsWith('\"$contract')) &&\n isAtContractValueStart(model, position)\n ) {\n // Extract the partial path typed so far after the \"$contract.\"\n // prefix. This is a UI extraction helper (looser character class\n // than REF_CONTRACT because the user may be mid-typing), so it\n // captures any word-or-dot sequence at end of the cursor line.\n const match = getContractPathAtEnd(textBeforeCursor);\n const pathStr = match?.[1] || '';\n const segments = pathStr ? pathStr.split('.').filter(Boolean) : [];\n if (pathStr && !pathStr.endsWith('.') && segments.length > 0) {\n segments.pop();\n }\n entries.push(\n ...getContractCompletions(context.contractRaw, segments),\n );\n } else if (detectKeyContext(fullText, offset, 'package')) {\n entries.push(\n ...getPackageCompletions(context.packages, context.platform),\n );\n } else if (chainKey) {\n entries.push(...getStepNameCompletions(context.stepNames, chainKey));\n } else if (\n textBeforeCursor.endsWith('\"$') ||\n textBeforeCursor.endsWith('\"')\n ) {\n entries.push(...getVariableCompletions(context.variables));\n entries.push(...getSecretCompletions(context.secrets));\n entries.push(...getStoreCompletions(context.stores));\n entries.push(...getFlowCompletions(context.flows));\n entries.push(...getEnvCompletions(context.envNames));\n entries.push(...getContractCompletions(context.contractRaw, []));\n }\n\n // Mapping value path completions (data., globals., user., etc.)\n if (entries.length === 0 && context.contractRaw) {\n const jsonPath = getJsonPathAtOffset(fullText, offset);\n const mappingCtx = detectMappingContext(jsonPath);\n\n if (mappingCtx) {\n const valueMatch = textBeforeCursor.match(/\"([a-z_]*)\\.?$/);\n if (valueMatch) {\n const prefix = valueMatch[1];\n const mappingEntries = getMappingPathCompletions(\n context.contractRaw,\n mappingCtx.entity,\n mappingCtx.action,\n prefix,\n );\n if (mappingEntries.length > 0) {\n entries.push(...mappingEntries);\n }\n }\n }\n }\n\n // Calculate range that covers the full $ref.name token.\n // Monaco's getWordUntilPosition doesn't understand $ or . as word chars,\n // so we scan backwards to find the $ that starts the reference.\n const refStartMatch = textBeforeCursor.match(\n /\\$(?:var|secret|env|code|contract|store|flow)[.:]?[\\w.]*$/,\n );\n const mappingPathMatch = !refStartMatch\n ? textBeforeCursor.match(/[a-z_][\\w.]*$/i)\n : null;\n const word = model.getWordUntilPosition(position);\n const startCol = refStartMatch\n ? position.column - refStartMatch[0].length\n : mappingPathMatch\n ? position.column - mappingPathMatch[0].length\n : word.startColumn;\n const range = {\n startLineNumber: position.lineNumber,\n endLineNumber: position.lineNumber,\n startColumn: startCol,\n endColumn: position.column,\n };\n\n return {\n suggestions: entries.map((entry) => ({\n label: entry.label,\n insertText: entry.insertText,\n detail: entry.detail,\n documentation: entry.documentation,\n kind: mapCompletionKind(monaco, entry.kind),\n sortText: entry.sortText,\n range,\n })),\n };\n },\n }),\n );\n\n // HoverProvider\n disposables.push(\n monaco.languages.registerHoverProvider('json', {\n provideHover(model, position) {\n const modelPath = model.uri.toString();\n const context = contextRegistry.get(modelPath);\n if (!context) return null;\n\n const lineContent = model.getLineContent(position.lineNumber);\n const col = position.column - 1; // 0-based index into line\n\n // Helper: find a reference match at cursor position\n function matchAtCursor(pattern: RegExp): RegExpExecArray | null {\n const regex = new RegExp(pattern.source, 'g');\n let m: RegExpExecArray | null;\n while ((m = regex.exec(lineContent)) !== null) {\n if (col >= m.index && col <= m.index + m[0].length) return m;\n }\n return null;\n }\n\n // $var.name(.deep.path)?\n const VAR_INLINE =\n /\\$var\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*/g;\n const varMatch = matchAtCursor(VAR_INLINE);\n if (varMatch && context.variables) {\n const name = varMatch[1];\n const fullToken = varMatch[0];\n if (name in context.variables) {\n const value = context.variables[name];\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: varMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: varMatch.index + fullToken.length + 1,\n },\n contents: [\n {\n value: `**Variable:** \\`${fullToken}\\`\\n\\n**Value:** \\`${JSON.stringify(value)}\\`\\n\\n*Resolved at runtime via variable interpolation*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown variable** \\`$var.${name}\\`\\n\\nDefined variables: ${Object.keys(context.variables).join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $secret.name\n const secretMatch = matchAtCursor(inlineGlobal(REF_SECRET));\n if (secretMatch) {\n const name = secretMatch[1];\n if (context.secrets?.includes(name)) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: secretMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: secretMatch.index + secretMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Secret:** \\`$secret.${name}\\`\\n\\n*Securely injected at runtime. Value not stored in config.*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown secret** \\`$secret.${name}\\`\\n\\nAvailable secrets: ${context.secrets?.join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $store.name\n const storeMatch = matchAtCursor(inlineGlobal(REF_STORE));\n if (storeMatch) {\n const name = storeMatch[1];\n if (context.stores?.includes(name)) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: storeMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: storeMatch.index + storeMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Store:** \\`$store.${name}\\`\\n\\n*Resolved to store instance at runtime.*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown store** \\`$store.${name}\\`\\n\\nAvailable: ${context.stores?.join(', ') || 'none'}`,\n },\n ],\n };\n }\n\n // $flow.name(.path)?\n const flowMatch = matchAtCursor(inlineGlobal(REF_FLOW));\n if (flowMatch && context.flows) {\n const flowName = flowMatch[1];\n const path = flowMatch[2];\n const known = context.flows.includes(flowName);\n const headline = known\n ? `**Flow reference:** \\`$flow.${flowName}${path ? `.${path}` : ''}\\``\n : `**Unknown flow** \\`$flow.${flowName}\\``;\n const body = known\n ? path\n ? `Resolves to \\`flows.${flowName}.config.${path}\\` at runtime.`\n : `Resolves to the full \\`Flow.Config\\` block of \"${flowName}\" at runtime.`\n : `Available: ${context.flows.join(', ') || 'none'}`;\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: flowMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: flowMatch.index + flowMatch[0].length + 1,\n },\n contents: [{ value: `${headline}\\n\\n${body}` }],\n };\n }\n\n // $env.NAME\n const envMatch = matchAtCursor(inlineGlobal(REF_ENV));\n if (envMatch) {\n const name = envMatch[1];\n if (context.envNames && context.envNames.length > 0) {\n if (context.envNames.includes(name)) {\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: envMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: envMatch.index + envMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Env var:** \\`$env.${name}\\`\\n\\n*Resolved from process.env at runtime. Append \\`:default\\` for a literal fallback.*`,\n },\n ],\n };\n }\n return {\n contents: [\n {\n value: `**Unknown env var** \\`$env.${name}\\`\\n\\nKnown: ${context.envNames.join(', ') || 'none'}`,\n },\n ],\n };\n }\n // No inventory: generic hint\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: envMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: envMatch.index + envMatch[0].length + 1,\n },\n contents: [\n {\n value: `**Env var:** \\`$env.${name}\\`\\n\\n*Resolved from process.env at runtime.*`,\n },\n ],\n };\n }\n\n // $contract.path\n const contractMatch = matchAtCursor(inlineGlobal(REF_CONTRACT));\n if (contractMatch && context.contractRaw) {\n const fullRef = contractMatch[0];\n const pathStr = fullRef.replace('$contract.', '');\n const segments = pathStr.split('.');\n\n const contractName = segments[0];\n const description =\n segments.length === 1\n ? `**Contract:** \\`${fullRef}\\`\\n\\nNamed contract entry \"${contractName}\".`\n : `**Contract reference:** \\`${fullRef}\\`\\n\\nResolves path \\`${segments.slice(1).join('.')}\\` in contract \"${contractName}\".`;\n\n return {\n range: {\n startLineNumber: position.lineNumber,\n startColumn: contractMatch.index + 1,\n endLineNumber: position.lineNumber,\n endColumn: contractMatch.index + contractMatch[0].length + 1,\n },\n contents: [{ value: description }],\n };\n }\n\n return null;\n },\n }),\n );\n}\n\n/**\n * Dispose all registered providers. Call on app teardown.\n */\nexport function disposeWalkerOSProviders(): void {\n for (const d of disposables) d.dispose();\n disposables.length = 0;\n registered = false;\n contextRegistry.clear();\n}\n\nfunction mapCompletionKind(\n monaco: typeof import('monaco-editor'),\n kind: CompletionEntry['kind'],\n): languages.CompletionItemKind {\n switch (kind) {\n case 'variable':\n return monaco.languages.CompletionItemKind.Variable;\n case 'reference':\n return monaco.languages.CompletionItemKind.Reference;\n case 'secret':\n return monaco.languages.CompletionItemKind.Constant;\n case 'module':\n return monaco.languages.CompletionItemKind.Module;\n case 'property':\n return monaco.languages.CompletionItemKind.Property;\n default:\n return monaco.languages.CompletionItemKind.Text;\n }\n}\n","import type { Flow } from '@walkeros/core';\nimport { resolveContracts } from '@walkeros/core';\n\nexport interface PathCompletion {\n key: string;\n type?: string;\n detail?: string;\n}\n\n// Cache resolved contracts to avoid re-resolving on every keystroke.\nlet cachedRawJson = '';\nlet cachedResolved: Record<string, Flow.ContractRule> = {};\n\nfunction getResolved(raw: Flow.Contract): Record<string, Flow.ContractRule> {\n const json = JSON.stringify(raw);\n if (json !== cachedRawJson) {\n try {\n cachedResolved = resolveContracts(raw);\n cachedRawJson = json;\n } catch {\n return {};\n }\n }\n return cachedResolved;\n}\n\n/**\n * Extract property names and types from a JSON Schema object.\n */\nexport function getSchemaPropertyCompletions(\n schema: Record<string, unknown>,\n): PathCompletion[] {\n const props = schema.properties;\n if (!props || typeof props !== 'object') return [];\n\n return Object.entries(props as Record<string, Record<string, unknown>>).map(\n ([key, value]) => ({\n key,\n type: typeof value?.type === 'string' ? value.type : undefined,\n }),\n );\n}\n\n/**\n * Get available completions at a given dot-path into the resolved contract.\n *\n * Path examples:\n * - [] → contract names (\"default\", \"web\")\n * - [\"web\"] → top-level keys (\"globals\", \"events\", \"tagging\", ...)\n * - [\"web\", \"events\"] → entity names (\"page\", \"product\")\n * - [\"web\", \"events\", \"page\"] → action names (\"view\", \"read\")\n * - [\"web\", \"events\", \"page\", \"view\"] → schema properties (\"title\", \"url\")\n * - [\"web\", \"globals\"] → globals schema properties (\"lang\", \"env\")\n */\nexport function getContractPathCompletions(\n raw: Flow.Contract,\n pathSegments: string[],\n): PathCompletion[] {\n if (!raw || Object.keys(raw).length === 0) return [];\n\n const resolved = getResolved(raw);\n if (Object.keys(resolved).length === 0) return [];\n\n // Level 0: contract names\n if (pathSegments.length === 0) {\n return Object.keys(resolved).map((key) => ({\n key,\n detail: resolved[key].description || 'contract',\n }));\n }\n\n const [contractName, ...rest] = pathSegments;\n const entry = resolved[contractName];\n if (!entry) return [];\n\n // Level 1: top-level keys of a contract entry\n if (rest.length === 0) {\n const keys: PathCompletion[] = [];\n if (entry.tagging !== undefined)\n keys.push({ key: 'tagging', type: 'number' });\n if (entry.description !== undefined)\n keys.push({ key: 'description', type: 'string' });\n for (const section of [\n 'globals',\n 'context',\n 'custom',\n 'user',\n 'consent',\n ] as const) {\n if (entry[section]) keys.push({ key: section, detail: 'schema' });\n }\n if (entry.events) keys.push({ key: 'events', detail: 'entity map' });\n return keys;\n }\n\n // Level 2+: walk into the entry\n const firstKey = rest[0];\n\n // Section schemas (globals, context, custom, user, consent)\n const sectionKeys = ['globals', 'context', 'custom', 'user', 'consent'];\n if (sectionKeys.includes(firstKey)) {\n const schema = entry[firstKey as keyof Flow.ContractRule];\n if (!schema || typeof schema !== 'object') return [];\n if (rest.length === 1) {\n return getSchemaPropertyCompletions(schema as Record<string, unknown>);\n }\n return walkSchemaPath(schema as Record<string, unknown>, rest.slice(1));\n }\n\n // Events path\n if (firstKey === 'events') {\n if (!entry.events) return [];\n\n // [\"events\"] → entity names\n if (rest.length === 1) {\n return Object.keys(entry.events)\n .filter((k) => k !== '*')\n .map((key) => ({ key, detail: 'entity' }));\n }\n\n const entity = rest[1];\n const actions = entry.events[entity];\n if (!actions) return [];\n\n // [\"events\", \"page\"] → action names\n if (rest.length === 2) {\n return Object.keys(actions)\n .filter((k) => k !== '*')\n .map((key) => ({ key, detail: 'action' }));\n }\n\n const action = rest[2];\n const schema = actions[action];\n if (!schema || typeof schema !== 'object') return [];\n\n // [\"events\", \"page\", \"view\"] → schema properties\n if (rest.length === 3) {\n return getSchemaPropertyCompletions(schema as Record<string, unknown>);\n }\n\n // Deeper: walk into nested schema\n return walkSchemaPath(schema as Record<string, unknown>, rest.slice(3));\n }\n\n return [];\n}\n\n/**\n * Walk into nested JSON Schema properties by path segments.\n */\nfunction walkSchemaPath(\n schema: Record<string, unknown>,\n segments: string[],\n): PathCompletion[] {\n let current = schema;\n for (const seg of segments) {\n const props = current.properties as\n | Record<string, Record<string, unknown>>\n | undefined;\n if (!props || !props[seg]) return [];\n current = props[seg];\n }\n return getSchemaPropertyCompletions(current);\n}\n\n/**\n * Clear the resolution cache (useful for testing).\n */\nexport function clearContractCache(): void {\n cachedRawJson = '';\n cachedResolved = {};\n}\n","import type { IntelliSenseContext, PackageInfo } from '../types/intellisense';\nimport { getContractPathCompletions } from './contract-path-walker';\n\nexport interface CompletionEntry {\n label: string;\n insertText: string;\n detail?: string;\n documentation?: string;\n kind: 'variable' | 'reference' | 'secret' | 'module' | 'property';\n sortText?: string;\n}\n\nexport function getVariableCompletions(\n variables: IntelliSenseContext['variables'],\n): CompletionEntry[] {\n if (!variables || Object.keys(variables).length === 0) return [];\n return Object.entries(variables).map(([name, value]) => ({\n label: `$var.${name}`,\n insertText: `$var.${name}`,\n detail: `= ${JSON.stringify(value)}`,\n documentation: `Variable reference. Resolves to \\`${JSON.stringify(value)}\\` at runtime.`,\n kind: 'variable' as const,\n sortText: '0_var_' + name,\n }));\n}\n\nexport function getSecretCompletions(\n secrets: IntelliSenseContext['secrets'],\n): CompletionEntry[] {\n if (!secrets || secrets.length === 0) return [];\n return secrets.map((name) => ({\n label: `$secret.${name}`,\n insertText: `$secret.${name}`,\n detail: '(secret)',\n documentation:\n 'Secret reference. Value is securely injected at runtime. Never stored in config.',\n kind: 'secret' as const,\n sortText: '0_secret_' + name,\n }));\n}\n\nexport function getStoreCompletions(\n stores: IntelliSenseContext['stores'],\n): CompletionEntry[] {\n if (!stores || stores.length === 0) return [];\n return stores.map((id) => ({\n label: `$store.${id}`,\n insertText: `$store.${id}`,\n detail: '(store)',\n documentation: `Store reference. Injected as store instance at runtime.`,\n kind: 'reference' as const,\n sortText: '0_store_' + id,\n }));\n}\n\nexport function getFlowCompletions(\n flows: IntelliSenseContext['flows'],\n): CompletionEntry[] {\n if (!flows || flows.length === 0) return [];\n return flows.map((name) => ({\n label: `$flow.${name}`,\n insertText: `$flow.${name}`,\n detail: '(flow)',\n documentation: `Cross-flow reference. Resolves to the resolved Flow.Config of \"${name}\" at runtime. Append \\`.url\\`, \\`.settings.<key>\\`, or another path inside that flow's config.`,\n kind: 'reference' as const,\n sortText: '0_flow_' + name,\n }));\n}\n\nexport function getEnvCompletions(\n envNames: IntelliSenseContext['envNames'],\n): CompletionEntry[] {\n if (!envNames || envNames.length === 0) return [];\n return envNames.map((name) => ({\n label: `$env.${name}`,\n insertText: `$env.${name}`,\n detail: '(env var)',\n documentation: `Environment variable. Resolved from process.env at runtime. Add a literal default with $env.${name}:default.`,\n kind: 'variable' as const,\n sortText: '0_env_' + name,\n }));\n}\n\nexport function getPackageCompletions(\n packages: PackageInfo[] | undefined,\n platform: IntelliSenseContext['platform'],\n): CompletionEntry[] {\n if (!packages || packages.length === 0) return [];\n const filtered = platform\n ? packages.filter((p) => p.platform === platform)\n : packages;\n return filtered.map((pkg) => ({\n label: pkg.package,\n insertText: pkg.package,\n detail: `${pkg.type} (${pkg.platform})`,\n documentation: `walkerOS ${pkg.type}: ${pkg.shortName}`,\n kind: 'module' as const,\n sortText: '1_pkg_' + pkg.shortName,\n }));\n}\n\nexport function getStepNameCompletions(\n stepNames: IntelliSenseContext['stepNames'],\n context: 'next' | 'before',\n): CompletionEntry[] {\n if (!stepNames) return [];\n const names = stepNames.transformers || [];\n return names.map((name) => ({\n label: name,\n insertText: name,\n detail: `transformer (${context} chain)`,\n documentation: `Reference to transformer step \"${name}\" in this flow config.`,\n kind: 'reference' as const,\n sortText: '0_step_' + name,\n }));\n}\n\n/** Top-level WalkerOS event fields available in mapping values */\nconst EVENT_ROOT_FIELDS: CompletionEntry[] = [\n {\n label: 'data',\n insertText: 'data',\n detail: '(event data)',\n kind: 'property',\n sortText: '0_event_data',\n },\n {\n label: 'globals',\n insertText: 'globals',\n detail: '(global properties)',\n kind: 'property',\n sortText: '0_event_globals',\n },\n {\n label: 'user',\n insertText: 'user',\n detail: '(user properties)',\n kind: 'property',\n sortText: '0_event_user',\n },\n {\n label: 'context',\n insertText: 'context',\n detail: '(context data)',\n kind: 'property',\n sortText: '0_event_context',\n },\n {\n label: 'custom',\n insertText: 'custom',\n detail: '(custom properties)',\n kind: 'property',\n sortText: '0_event_custom',\n },\n {\n label: 'consent',\n insertText: 'consent',\n detail: '(consent state)',\n kind: 'property',\n sortText: '0_event_consent',\n },\n {\n label: 'nested',\n insertText: 'nested',\n detail: '(nested entities)',\n kind: 'property',\n sortText: '0_event_nested',\n },\n {\n label: 'entity',\n insertText: 'entity',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_entity',\n },\n {\n label: 'action',\n insertText: 'action',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_action',\n },\n {\n label: 'name',\n insertText: 'name',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_name',\n },\n {\n label: 'trigger',\n insertText: 'trigger',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_trigger',\n },\n {\n label: 'timestamp',\n insertText: 'timestamp',\n detail: '(number)',\n kind: 'property',\n sortText: '1_event_timestamp',\n },\n {\n label: 'timing',\n insertText: 'timing',\n detail: '(number)',\n kind: 'property',\n sortText: '1_event_timing',\n },\n {\n label: 'id',\n insertText: 'id',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_id',\n },\n {\n label: 'group',\n insertText: 'group',\n detail: '(string)',\n kind: 'property',\n sortText: '1_event_group',\n },\n {\n label: 'count',\n insertText: 'count',\n detail: '(number)',\n kind: 'property',\n sortText: '1_event_count',\n },\n {\n label: 'source',\n insertText: 'source',\n detail: '(source info)',\n kind: 'property',\n sortText: '1_event_source',\n },\n {\n label: 'version',\n insertText: 'version',\n detail: '(version info)',\n kind: 'property',\n sortText: '1_event_version',\n },\n];\n\n/**\n * Get mapping value path completions based on contract schemas.\n *\n * When typing \"data.\" inside a mapping rule for entity \"page\" action \"view\",\n * this returns the properties defined in the contract for page.view.\n */\nexport function getMappingPathCompletions(\n contractRaw: IntelliSenseContext['contractRaw'],\n entity: string,\n action: string,\n prefix: string,\n): CompletionEntry[] {\n if (!prefix) return EVENT_ROOT_FIELDS;\n\n if (!contractRaw || Object.keys(contractRaw).length === 0) return [];\n\n const sectionMap: Record<string, string> = {\n data: 'events',\n globals: 'globals',\n context: 'context',\n custom: 'custom',\n user: 'user',\n consent: 'consent',\n };\n\n const section = sectionMap[prefix];\n if (!section) return [];\n\n const allCompletions: CompletionEntry[] = [];\n const seen = new Set<string>();\n\n for (const contractName of Object.keys(contractRaw)) {\n const pathSegments =\n section === 'events'\n ? [contractName, 'events', entity, action]\n : [contractName, section];\n\n const completions = getContractPathCompletions(\n contractRaw as Record<string, Record<string, unknown>>,\n pathSegments,\n );\n\n for (const c of completions) {\n if (seen.has(c.key)) continue;\n seen.add(c.key);\n allCompletions.push({\n label: `${prefix}.${c.key}`,\n insertText: `${prefix}.${c.key}`,\n detail: c.type ? `(${c.type})` : '(property)',\n documentation: `Event property from contract. Maps to event.${prefix}.${c.key}.`,\n kind: 'property' as const,\n sortText: `0_mapping_${c.key}`,\n });\n }\n }\n\n return allCompletions;\n}\n\nexport function getContractCompletions(\n contractRaw: IntelliSenseContext['contractRaw'],\n pathSegments: string[],\n): CompletionEntry[] {\n if (!contractRaw || Object.keys(contractRaw).length === 0) return [];\n\n const completions = getContractPathCompletions(\n contractRaw as Record<string, Record<string, unknown>>,\n pathSegments,\n );\n\n const prefix =\n pathSegments.length > 0\n ? `$contract.${pathSegments.join('.')}.`\n : '$contract.';\n\n return completions.map((c) => ({\n label: `${prefix}${c.key}`.replace(/\\.$/, ''),\n insertText:\n pathSegments.length === 0\n ? `$contract.${c.key}`\n : `$contract.${pathSegments.join('.')}.${c.key}`,\n detail: c.type ? `(${c.type})` : c.detail ? `(${c.detail})` : '(contract)',\n documentation: `Contract reference. Resolves to the ${c.key} ${c.detail || 'value'} at runtime.`,\n kind: 'property' as const,\n sortText: '0_contract_' + pathSegments.concat(c.key).join('_'),\n }));\n}\n","/**\n * Extract the JSON key path at a given character offset in a JSON string.\n *\n * Uses a simple stack-based parser that tracks object keys as we scan\n * from the start to the offset position.\n *\n * @param json - The full JSON string\n * @param offset - Character offset (0-based) of cursor position\n * @returns Array of key segments from root to cursor\n */\nexport function getJsonPathAtOffset(json: string, offset: number): string[] {\n const path: string[] = [];\n let i = 0;\n let currentKey: string | undefined;\n let inString = false;\n let stringStart = -1;\n let escaped = false;\n\n while (i < json.length && i <= offset) {\n const ch = json[i];\n\n if (escaped) {\n escaped = false;\n i++;\n continue;\n }\n\n if (ch === '\\\\' && inString) {\n escaped = true;\n i++;\n continue;\n }\n\n if (ch === '\"') {\n if (inString) {\n // End of string\n const str = json.substring(stringStart, i);\n inString = false;\n\n // Determine if this string is a key or value by looking ahead for ':'\n let j = i + 1;\n while (j < json.length && /\\s/.test(json[j])) j++;\n if (json[j] === ':') {\n currentKey = str;\n }\n } else {\n // Start of string\n inString = true;\n stringStart = i + 1;\n }\n } else if (!inString) {\n if (ch === '{') {\n if (currentKey !== undefined) {\n path.push(currentKey);\n currentKey = undefined;\n }\n } else if (ch === '}') {\n path.pop();\n }\n }\n\n i++;\n }\n\n // Add the current key if we're at a value position\n if (currentKey !== undefined) {\n path.push(currentKey);\n }\n\n return path;\n}\n","export interface MappingContext {\n entity: string;\n action: string;\n}\n\n/**\n * Detect the entity/action context from a JSON path that includes \"mapping\".\n *\n * The mapping structure in flow.json is:\n * flows.<name>.destinations.<name>.mapping.<entity>.<action>.<...>\n *\n * After the \"mapping\" key, the next two segments are entity and action.\n *\n * @param pathSegments - JSON path segments from root to cursor position\n * @returns Entity and action if inside a mapping rule, null otherwise\n */\nexport function detectMappingContext(\n pathSegments: string[],\n): MappingContext | null {\n const mappingIndex = pathSegments.indexOf('mapping');\n if (mappingIndex === -1) return null;\n\n const entity = pathSegments[mappingIndex + 1];\n const action = pathSegments[mappingIndex + 2];\n\n if (!entity || !action) return null;\n\n return { entity, action };\n}\n","import { getJsonPathAtOffset } from './monaco-json-path';\n\nexport type ChainKey = 'next' | 'before';\n\n/**\n * Detects whether a JSON-path offset lies inside a value of a `next` or `before`\n * chain field. Handles scalar, inline array, multi-line array, and Route[] inner `next`.\n */\nexport function detectChainRefContext(\n fullText: string,\n offset: number,\n): ChainKey | null {\n const path = getJsonPathAtOffset(fullText, offset);\n if (!path || path.length === 0) return null;\n const last = path[path.length - 1];\n const parent = path[path.length - 2];\n if (last === 'next' || last === 'before') return last;\n if (typeof last === 'number' && (parent === 'next' || parent === 'before')) {\n return parent;\n }\n return null;\n}\n\n/**\n * Detects whether the cursor's JSON path ends at the given key — useful for\n * scalar-valued keys like `\"package\"` that need multi-line-value awareness.\n */\nexport function detectKeyContext(\n fullText: string,\n offset: number,\n key: string,\n): boolean {\n const path = getJsonPathAtOffset(fullText, offset);\n if (!path || path.length === 0) return false;\n return path[path.length - 1] === key;\n}\n","import * as prettier from 'prettier/standalone';\nimport prettierBabel from 'prettier/plugins/babel';\nimport prettierEstree from 'prettier/plugins/estree';\nimport prettierTypescript from 'prettier/plugins/typescript';\nimport prettierHtml from 'prettier/plugins/html';\nimport type * as monaco from 'monaco-editor';\n\n/**\n * Register Monaco Editor formatting providers for various languages\n *\n * Uses Prettier for professional-grade code formatting.\n * Registered once when Monaco is initialized.\n *\n * Supported languages:\n * - JavaScript (parser: babel)\n * - TypeScript (parser: typescript)\n * - JSON (native JSON.stringify)\n * - HTML (parser: html)\n * - CSS (parser: css)\n */\nexport function registerFormatters(monacoInstance: typeof monaco): void {\n // JavaScript formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider(\n 'javascript',\n {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'babel',\n plugins: [prettierBabel, prettierEstree],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n },\n );\n\n // TypeScript formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider(\n 'typescript',\n {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'typescript',\n plugins: [prettierTypescript, prettierEstree],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n },\n );\n\n // JSON formatter (use native JSON.stringify for simplicity)\n monacoInstance.languages.registerDocumentFormattingEditProvider('json', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const parsed = JSON.parse(text);\n const formatted = JSON.stringify(parsed, null, options.tabSize);\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n\n // HTML formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider('html', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'html',\n plugins: [prettierHtml],\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n htmlWhitespaceSensitivity: 'css',\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n\n // CSS formatter\n monacoInstance.languages.registerDocumentFormattingEditProvider('css', {\n async provideDocumentFormattingEdits(model, options) {\n try {\n const text = model.getValue();\n const formatted = await prettier.format(text, {\n parser: 'css',\n plugins: [prettierHtml], // CSS parser is in html plugin\n tabWidth: options.tabSize,\n useTabs: !options.insertSpaces,\n });\n return [\n {\n range: model.getFullModelRange(),\n text: formatted,\n },\n ];\n } catch (error) {\n return [];\n }\n },\n });\n}\n","/**\n * Monaco JSON Schema Registry\n *\n * Manages JSON Schema registrations for Monaco's JSON language service.\n * Multiple Code instances can register schemas concurrently — the registry\n * accumulates all schemas and issues a single setDiagnosticsOptions() call.\n *\n * The monaco json namespace is initialized via initMonacoJson() when the\n * Code atom's beforeMount fires. Schemas registered before initialization\n * are queued and flushed once the namespace becomes available.\n */\n\ninterface RegisteredSchema {\n /** Unique schema identifier */\n uri: string;\n /** Glob patterns matching model URIs */\n fileMatch: string[];\n /** JSON Schema Draft 7 object */\n schema: Record<string, unknown>;\n}\n\nconst schemaRegistry = new Map<string, RegisteredSchema>();\n\nlet idCounter = 0;\n\n// Monaco JSON namespace, set via initMonacoJson() from Code atom's beforeMount\nlet _json: typeof import('monaco-editor').json | undefined;\n\n/**\n * Initialize the JSON schema registry with the monaco instance.\n * Called from Code atom's handleBeforeMount where monaco is guaranteed loaded.\n * Flushes any schemas registered before initialization.\n */\nexport function initMonacoJson(monaco: typeof import('monaco-editor')): void {\n if (_json) return;\n _json = monaco.json;\n if (schemaRegistry.size > 0) applySchemas();\n}\n\n/**\n * Reset state (for testing only).\n */\nexport function resetMonacoJson(): void {\n _json = undefined;\n schemaRegistry.clear();\n idCounter = 0;\n}\n\nconst EXTENSION_BY_LANGUAGE: Record<string, string> = {\n typescript: 'ts',\n javascript: 'js',\n typescriptreact: 'tsx',\n javascriptreact: 'jsx',\n json: 'json',\n html: 'html',\n css: 'css',\n markdown: 'md',\n};\n\n/**\n * Generate a unique model path for a Code instance.\n * Extension matches the language so Monaco's TypeScript worker treats `.tsx`\n * files as TSX, `.ts` files as TS, etc. Without this, all snippets live on\n * `.json` paths and TypeScript diagnostics misbehave.\n * Used as the `path` prop for @monaco-editor/react Editor.\n */\nexport function generateModelPath(language = 'json'): string {\n const ext = EXTENSION_BY_LANGUAGE[language] ?? 'txt';\n return `inmemory://walkeros/model-${++idCounter}.${ext}`;\n}\n\n/**\n * Register a JSON schema for a specific model path.\n * Triggers a global setDiagnosticsOptions update.\n */\nexport function registerJsonSchema(\n modelPath: string,\n schema: Record<string, unknown>,\n): void {\n schemaRegistry.set(modelPath, {\n uri: `schema://walkeros/${modelPath}`,\n fileMatch: [modelPath],\n schema,\n });\n applySchemas();\n}\n\n/**\n * Unregister a JSON schema when a Code instance unmounts.\n * Triggers a global setDiagnosticsOptions update.\n */\nexport function unregisterJsonSchema(modelPath: string): void {\n schemaRegistry.delete(modelPath);\n applySchemas();\n}\n\n/**\n * Apply all registered schemas to Monaco's JSON language service.\n */\nfunction applySchemas(): void {\n if (!_json) return;\n _json.jsonDefaults.setDiagnosticsOptions({\n validate: true,\n schemaValidation: 'error',\n schemaRequest: 'ignore',\n enableSchemaRequest: false,\n schemas: Array.from(schemaRegistry.values()),\n });\n}\n\n/**\n * Get count of registered schemas (for testing/debugging).\n */\nexport function getRegisteredSchemaCount(): number {\n return schemaRegistry.size;\n}\n\n/**\n * Clear all schemas (for testing).\n */\nexport function clearAllSchemas(): void {\n schemaRegistry.clear();\n applySchemas();\n}\n","import { useEffect, useState, useRef, useCallback } from 'react';\nimport type { editor } from 'monaco-editor';\n\nexport interface UseMonacoHeightOptions {\n enabled?: boolean;\n minHeight?: number;\n maxHeight?: number;\n defaultHeight?: number;\n onHeightChange?: (height: number) => void;\n}\n\n/**\n * Hook to automatically calculate Monaco Editor height based on content\n *\n * @param enabled - Whether to enable auto-height calculation\n * @param minHeight - Minimum height in pixels (default: 100)\n * @param maxHeight - Maximum height in pixels (default: 800)\n * @param defaultHeight - Default height when not auto-sizing (default: 400)\n *\n * @returns [height, setEditor] - Current height and function to register editor instance\n *\n * @example\n * const [height, setEditor] = useMonacoHeight({ enabled: autoHeight });\n *\n * <Editor\n * height={height}\n * onMount={(editor) => setEditor(editor)}\n * />\n */\nexport function useMonacoHeight({\n enabled = false,\n minHeight = 100,\n maxHeight = 800,\n defaultHeight = 400,\n onHeightChange,\n}: UseMonacoHeightOptions = {}): [\n number,\n (editor: editor.IStandaloneCodeEditor | null) => void,\n] {\n const [height, setHeight] = useState<number>(\n enabled ? minHeight : defaultHeight,\n );\n const editorRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n const previousHeightRef = useRef<number>(enabled ? minHeight : defaultHeight);\n const updateTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const updateHeight = useCallback(() => {\n if (!enabled || !editorRef.current) return;\n\n try {\n const monacoContentHeight = editorRef.current.getContentHeight();\n const boundedMonacoHeight = Math.max(\n minHeight,\n Math.min(maxHeight, monacoContentHeight),\n );\n\n if (boundedMonacoHeight === previousHeightRef.current) {\n return;\n }\n\n previousHeightRef.current = boundedMonacoHeight;\n setHeight(boundedMonacoHeight);\n\n if (onHeightChange) {\n const HEADER_HEIGHT = 36;\n const BORDER = 2;\n const totalBoxHeight = boundedMonacoHeight + HEADER_HEIGHT + BORDER;\n onHeightChange(totalBoxHeight);\n }\n\n // Note: We don't call editor.layout() here because Monaco's\n // automaticLayout option handles layout updates automatically.\n // Calling layout() here would create a feedback loop with\n // onDidContentSizeChange, causing height to grow indefinitely.\n } catch (error) {\n // Silently fail - editor might not be fully initialized\n }\n }, [enabled, minHeight, maxHeight, onHeightChange]);\n\n const setEditor = useCallback(\n (editor: editor.IStandaloneCodeEditor | null) => {\n // Clean up previous timeout if it exists\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n updateTimeoutRef.current = null;\n }\n\n editorRef.current = editor;\n\n if (!enabled || !editor) {\n setHeight(defaultHeight);\n previousHeightRef.current = defaultHeight;\n return;\n }\n\n // Trigger initial height calculation\n setTimeout(() => updateHeight(), 50);\n\n // Listen for content changes with debouncing\n const disposable = editor.onDidContentSizeChange(() => {\n // Clear any pending update\n if (updateTimeoutRef.current) {\n clearTimeout(updateTimeoutRef.current);\n }\n\n // Debounce updates to prevent rapid-fire recalculations\n updateTimeoutRef.current = setTimeout(() => {\n updateHeight();\n updateTimeoutRef.current = null;\n }, 150);\n });\n\n // Store disposable for cleanup\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (editor as any).__heightDisposable = disposable;\n },\n [enabled, defaultHeight, updateHeight],\n );\n\n return [height, setEditor];\n}\n","/**\n * Detect `@monaco-editor/loader`'s cancelation rejection.\n *\n * When a component using `<CodeBox>` unmounts before Monaco's loader promise\n * settles (React strict-mode double-mount, route change, Fast Refresh),\n * `@monaco-editor/loader`'s `makeCancelable` wrapper calls `.cancel()` and\n * the wrapped promise rejects with `{type: 'cancelation', msg: 'operation\n * is manually canceled'}`. The rejection lives inside `@monaco-editor/react`\n * and is not catchable from userland, so consumers suppress it via a\n * `window.addEventListener('unhandledrejection', ...)` filter (canonical\n * workaround, see https://github.com/suren-atoyan/monaco-react/issues/440).\n *\n * webpack-dev-server's runtime overlay hooks rejections independently and\n * wraps the reason in `new Error(reason, { cause: reason })`, so the same\n * identity check must walk `.cause` too.\n *\n * This predicate handles both shapes (raw reason and wrapping Error).\n */\nexport function isMonacoCancellation(value: unknown): boolean {\n if (!value || typeof value !== 'object') return false;\n const v = value as {\n type?: string;\n msg?: string;\n cause?: unknown;\n message?: string;\n };\n if (v.type === 'cancelation') return true;\n if (v.cause !== undefined && isMonacoCancellation(v.cause)) return true;\n return false;\n}\n","import React, { useState, useCallback, useRef, useEffect } from 'react';\nimport type { editor } from 'monaco-editor';\nimport { useMonaco } from '@monaco-editor/react';\nimport { Box } from '../atoms/box';\nimport { Code, type CodeProps } from '../atoms/code';\n\n/**\n * Tab with code content for CodeBox\n */\nexport interface CodeBoxTab {\n id: string;\n label: string;\n code: string;\n language?: string; // Optional, defaults to CodeBox's language prop\n}\n\nexport interface CodeBoxProps extends Omit<CodeProps, 'code'> {\n // Single code mode (backward compat)\n code?: string;\n\n // Header (use header OR tabs, not both)\n label?: string; // Shorthand for header\n header?: string; // Box header prop\n showHeader?: boolean;\n\n // Tabs with code content\n tabs?: CodeBoxTab[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n defaultTab?: string;\n\n // Visual options\n showTrafficLights?: boolean;\n\n // Actions\n showCopy?: boolean;\n showFormat?: boolean;\n showSettings?: boolean;\n\n /** Callback when validation issues change. Use to disable Save when errors > 0. */\n onValidationIssues?: (counts: { errors: number; warnings: number }) => void;\n\n // Layout\n footer?: React.ReactNode;\n height?: string | number;\n style?: React.CSSProperties;\n}\n\n/**\n * CodeBox - Monaco editor wrapped in a Box with header and actions\n *\n * Molecule that combines Box + Code atom + toolbar actions.\n * Use this when you need an editor with header, copy, and format buttons.\n * Use Code atom directly when you need an editor without Box wrapper.\n *\n * Height Behavior:\n *\n * Three height modes:\n * 1. Grid context: Equal row heights (250-450px), fills available space\n * 2. Explicit height prop: Fixed height (e.g., height={600} or height=\"50vh\")\n * 3. Auto-height prop: Dynamically sizes to content (min-max boundaries)\n *\n * @example\n * // Grid context - use default (no autoHeight) for equal row heights\n * <Grid columns={3}>\n * <CodeBox code={event} label=\"Event\" showCopy />\n * <CodeBox code={mapping} label=\"Mapping\" showFormat />\n * <CodeBox code={output} label=\"Output\" disabled />\n * </Grid>\n *\n * @example\n * // Standalone with auto-height - fits content, no blank space\n * <CodeBox\n * code={setupCode}\n * label=\"Setup\"\n * autoHeight={{ min: 100, max: 600 }}\n * disabled\n * />\n *\n * @example\n * // Explicit height override\n * <CodeBox\n * code={largeConfig}\n * label=\"Configuration\"\n * height={600}\n * showFormat\n * />\n */\nexport function CodeBox({\n // Code props (single code mode)\n code,\n language = 'javascript',\n onChange,\n disabled = false,\n autoHeight,\n // Header\n label,\n header,\n showHeader = true,\n // Tabs with code content\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n // Visual\n showTrafficLights = false,\n // Actions\n showCopy = true,\n showFormat = false,\n showSettings = false,\n // Validation\n onValidationIssues,\n // Layout\n footer,\n height,\n style,\n className,\n ...codeProps\n}: CodeBoxProps) {\n const { onMount: userOnMount, ...restCodeProps } = codeProps;\n const monaco = useMonaco();\n const [copied, setCopied] = useState(false);\n const [showSettingsPanel, setShowSettingsPanel] = useState(false);\n const [settings, setSettings] = useState({\n lineNumbers: codeProps.lineNumbers ?? false,\n minimap: codeProps.minimap ?? false,\n wordWrap: codeProps.wordWrap ?? false,\n sticky: codeProps.sticky ?? true,\n });\n const settingsRef = useRef<HTMLDivElement>(null);\n type MarkerDetail = {\n message: string;\n severity: 'error' | 'warning';\n line: number;\n column: number;\n };\n const [markerCounts, setMarkerCounts] = useState({ errors: 0, warnings: 0 });\n const [markerDetails, setMarkerDetails] = useState<MarkerDetail[]>([]);\n const [openMarkerMenu, setOpenMarkerMenu] = useState<\n 'error' | 'warning' | null\n >(null);\n const markerMenuRef = useRef<HTMLDivElement>(null);\n const editorInstanceRef = useRef<editor.IStandaloneCodeEditor | null>(null);\n\n useEffect(() => {\n if (!showSettingsPanel && !openMarkerMenu) return;\n const handleClickOutside = (e: MouseEvent) => {\n if (\n showSettingsPanel &&\n settingsRef.current &&\n !settingsRef.current.contains(e.target as Node)\n ) {\n setShowSettingsPanel(false);\n }\n if (\n openMarkerMenu &&\n markerMenuRef.current &&\n !markerMenuRef.current.contains(e.target as Node)\n ) {\n setOpenMarkerMenu(null);\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [showSettingsPanel, openMarkerMenu]);\n\n // Track active tab for copy button (Box handles tab state, we just observe)\n const [currentTabId, setCurrentTabId] = useState(\n controlledActiveTab ?? defaultTab ?? tabs?.[0]?.id ?? '',\n );\n\n // Update internal tracking when controlled prop changes\n const effectiveTabId = controlledActiveTab ?? currentTabId;\n\n // Wrap user's onTabChange to also update our tracking\n const handleTabChange = useCallback(\n (tabId: string) => {\n setCurrentTabId(tabId);\n onTabChange?.(tabId);\n },\n [onTabChange],\n );\n\n // Get current code for copy/format buttons\n const activeTabData = tabs?.find((t) => t.id === effectiveTabId);\n const currentCode = activeTabData?.code ?? code ?? '';\n const currentLanguage = activeTabData?.language ?? language;\n\n // Use label as fallback for header (backward compat)\n const boxHeader = header ?? label ?? 'Code';\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(currentCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard write failed silently\n }\n };\n\n const handleFormat = () => {\n if (!onChange || disabled || currentLanguage !== 'json') return;\n\n try {\n const parsed = JSON.parse(currentCode);\n const formatted = JSON.stringify(parsed, null, 2);\n onChange(formatted);\n } catch (e) {\n // Invalid JSON, do nothing\n }\n };\n\n const handleEditorMount = useCallback(\n (monacoEditor: editor.IStandaloneCodeEditor) => {\n editorInstanceRef.current = monacoEditor;\n userOnMount?.(monacoEditor);\n },\n [userOnMount],\n );\n\n const handleMarkerCounts = useCallback(\n (info: { errors: number; warnings: number; markers: MarkerDetail[] }) => {\n setMarkerCounts({ errors: info.errors, warnings: info.warnings });\n setMarkerDetails(info.markers);\n onValidationIssues?.({ errors: info.errors, warnings: info.warnings });\n },\n [onValidationIssues],\n );\n\n const jumpToLine = useCallback((line: number, column: number) => {\n const ed = editorInstanceRef.current;\n if (!ed) return;\n ed.revealLineInCenter(line);\n ed.setPosition({ lineNumber: line, column });\n ed.focus();\n setOpenMarkerMenu(null);\n }, []);\n\n const settingsProps = {\n lineNumbers: settings.lineNumbers,\n minimap: settings.minimap,\n wordWrap: settings.wordWrap,\n sticky: settings.sticky,\n };\n\n // Build header actions\n const actions = (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n {markerCounts.errors > 0 && (\n <div\n ref={openMarkerMenu === 'error' ? markerMenuRef : undefined}\n style={{ position: 'relative' }}\n >\n <button\n className=\"elb-codebox-marker-badge elb-codebox-marker-badge--error\"\n onClick={() =>\n setOpenMarkerMenu(openMarkerMenu === 'error' ? null : 'error')\n }\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"15\" y1=\"9\" x2=\"9\" y2=\"15\" />\n <line x1=\"9\" y1=\"9\" x2=\"15\" y2=\"15\" />\n </svg>\n <span>{markerCounts.errors}</span>\n </button>\n {openMarkerMenu === 'error' && (\n <MarkerMenu\n markers={markerDetails.filter((m) => m.severity === 'error')}\n onJump={jumpToLine}\n />\n )}\n </div>\n )}\n {markerCounts.warnings > 0 && (\n <div\n ref={openMarkerMenu === 'warning' ? markerMenuRef : undefined}\n style={{ position: 'relative' }}\n >\n <button\n className=\"elb-codebox-marker-badge elb-codebox-marker-badge--warning\"\n onClick={() =>\n setOpenMarkerMenu(openMarkerMenu === 'warning' ? null : 'warning')\n }\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 001.71 3h16.94a2 2 0 001.71-3L13.71 3.86a2 2 0 00-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <circle cx=\"12\" cy=\"17\" r=\".5\" />\n </svg>\n <span>{markerCounts.warnings}</span>\n </button>\n {openMarkerMenu === 'warning' && (\n <MarkerMenu\n markers={markerDetails.filter((m) => m.severity === 'warning')}\n onJump={jumpToLine}\n />\n )}\n </div>\n )}\n {showFormat && !disabled && currentLanguage === 'json' && (\n <button\n className=\"elb-explorer-btn\"\n onClick={handleFormat}\n title=\"Format JSON\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"3\" y1=\"5\" x2=\"16\" y2=\"5\" />\n <line x1=\"7\" y1=\"10\" x2=\"20\" y2=\"10\" />\n <line x1=\"7\" y1=\"15\" x2=\"18\" y2=\"15\" />\n <line x1=\"3\" y1=\"20\" x2=\"12\" y2=\"20\" />\n </svg>\n </button>\n )}\n {showCopy && (\n <button\n className=\"elb-explorer-btn\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy to clipboard'}\n >\n {copied ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n )}\n {showSettings && (\n <div ref={settingsRef} style={{ position: 'relative' }}>\n <button\n className={`elb-explorer-btn${showSettingsPanel ? ' active' : ''}`}\n onClick={() => setShowSettingsPanel(!showSettingsPanel)}\n title=\"Editor settings\"\n >\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n {showSettingsPanel && (\n <div className=\"elb-codebox-settings\">\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.lineNumbers}\n onChange={() =>\n setSettings((s) => ({ ...s, lineNumbers: !s.lineNumbers }))\n }\n />\n Line numbers\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.minimap}\n onChange={() =>\n setSettings((s) => ({ ...s, minimap: !s.minimap }))\n }\n />\n Minimap\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.wordWrap}\n onChange={() =>\n setSettings((s) => ({ ...s, wordWrap: !s.wordWrap }))\n }\n />\n Word wrap\n </label>\n <label className=\"elb-codebox-settings-option\">\n <input\n type=\"checkbox\"\n checked={settings.sticky}\n onChange={() =>\n setSettings((s) => ({ ...s, sticky: !s.sticky }))\n }\n />\n Sticky scroll\n </label>\n </div>\n )}\n </div>\n )}\n </div>\n );\n\n // Auto-height class for content-based sizing (Box handles gridContext)\n const autoHeightClass = autoHeight ? 'elb-box--auto-height' : '';\n const boxClassName = `${autoHeightClass} ${className || ''}`.trim();\n\n // Convert CodeBoxTab[] to BoxTab[] with Code as content (Box handles rendering)\n const boxTabs = tabs?.map((tab) => ({\n id: tab.id,\n label: tab.label,\n content: (\n <Code\n code={tab.code}\n language={tab.language ?? language}\n onChange={onChange}\n disabled={disabled}\n autoHeight={autoHeight}\n onMount={handleEditorMount}\n onMarkerCounts={handleMarkerCounts}\n {...restCodeProps}\n {...settingsProps}\n />\n ),\n }));\n\n return (\n <Box\n header={boxHeader}\n headerActions={actions}\n showHeader={showHeader}\n tabs={boxTabs}\n defaultTab={defaultTab}\n activeTab={controlledActiveTab}\n onTabChange={handleTabChange}\n showTrafficLights={showTrafficLights}\n footer={footer}\n height={height}\n style={style}\n className={boxClassName}\n >\n {/* Only render Code as children when no tabs (single code mode) */}\n {!tabs && (\n <Code\n code={code ?? ''}\n language={language}\n onChange={onChange}\n disabled={disabled}\n autoHeight={autoHeight}\n onMount={handleEditorMount}\n onMarkerCounts={handleMarkerCounts}\n {...restCodeProps}\n {...settingsProps}\n />\n )}\n </Box>\n );\n}\n\nfunction MarkerMenu({\n markers,\n onJump,\n}: {\n markers: Array<{ message: string; line: number; column: number }>;\n onJump: (line: number, column: number) => void;\n}) {\n return (\n <div className=\"elb-codebox-marker-menu\">\n {markers\n .sort((a, b) => a.line - b.line || a.column - b.column)\n .map((m, i) => (\n <button\n key={i}\n className=\"elb-codebox-marker-menu-item\"\n onClick={() => onJump(m.line, m.column)}\n >\n <span className=\"elb-codebox-marker-menu-line\">Ln {m.line}</span>\n <span className=\"elb-codebox-marker-menu-msg\">{m.message}</span>\n </button>\n ))}\n </div>\n );\n}\n","import type { Destination, WalkerOS } from '@walkeros/core';\n\n// Demo destination type with elb function in env\nexport interface DemoEnv extends Destination.BaseEnv {\n elb: (output: string) => void;\n}\n\nexport type DestinationCode = Destination.Instance<\n Destination.Types<unknown, unknown, DemoEnv>\n>;\n\n/**\n * Creates a gtag-style destination for demo purposes.\n * Formats output as: gtag('event', 'event_name', { data })\n */\nexport function createGtagDestination(): DestinationCode {\n return {\n type: 'gtag',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `gtag('event', '${event.name}', ${JSON.stringify(data, null, 2)});`;\n env.elb(formatted);\n },\n };\n}\n\n/**\n * Creates a Facebook Pixel-style destination for demo purposes.\n * Formats output as: fbq('track', 'EventName', { data })\n */\nexport function createFbqDestination(): DestinationCode {\n return {\n type: 'fbq',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `fbq('track', '${event.name}', ${JSON.stringify(data, null, 2)});`;\n env.elb(formatted);\n },\n };\n}\n\n/**\n * Creates a Plausible-style destination for demo purposes.\n * Formats output as: plausible('event_name', { props: { data } })\n */\nexport function createPlausibleDestination(): DestinationCode {\n return {\n type: 'plausible',\n config: {},\n push(event, context) {\n const { data, env } = context;\n\n const formatted = `plausible('${event.name}', { props: ${JSON.stringify(data, null, 2)} });`;\n env.elb(formatted);\n },\n };\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport type { WalkerOS } from '@walkeros/core';\nimport { debounce, isString, tryCatchAsync } from '@walkeros/core';\nimport { CodeBox } from '../molecules/code-box';\nimport { Grid } from '../atoms/grid';\nimport { cn } from '../../lib/utils';\nimport { formatCode } from '../../utils/format-code';\n\nexport interface LiveCodeProps {\n input: unknown;\n config?: unknown;\n output?: unknown;\n options?: WalkerOS.AnyObject;\n fn?: (\n input: unknown,\n config: unknown,\n log: (...args: unknown[]) => void,\n options?: WalkerOS.AnyObject,\n ) => Promise<void>;\n fnName?: string;\n labelInput?: string;\n labelConfig?: string;\n labelOutput?: string;\n emptyText?: string;\n disableInput?: boolean;\n disableConfig?: boolean;\n showQuotes?: boolean;\n className?: string;\n language?: string;\n format?: boolean;\n rowHeight?: 'auto' | 'equal' | 'synced' | number;\n /** Language for the Result panel. Defaults to json (the typical output\n * shape). Set to `javascript` when emptyText includes `//` comments. */\n outputLanguage?: string;\n /** Language for the Config panel. Defaults to `json`. Override when the\n * Config panel content is not JSON. */\n configLanguage?: string;\n}\n\nfunction formatValue(value: unknown, options: { quotes?: boolean } = {}) {\n if (value === undefined) return '';\n const str = isString(value) ? value.trim() : JSON.stringify(value, null, 2);\n return options.quotes && isString(value) ? `\"${str}\"` : str;\n}\n\nexport function LiveCode({\n input: initInput,\n config: initConfig,\n output: initOutput = '',\n options,\n fn,\n fnName,\n labelInput = 'Event',\n labelConfig = 'Config',\n labelOutput = 'Result',\n emptyText = 'No event yet.',\n disableInput = false,\n disableConfig = false,\n showQuotes = true,\n className,\n language = 'json',\n format = true,\n rowHeight,\n outputLanguage = 'json',\n configLanguage = 'json',\n}: LiveCodeProps) {\n const [input, setInput] = useState(formatValue(initInput));\n const [config, setConfig] = useState(formatValue(initConfig));\n const [output, setOutput] = useState([formatValue(initOutput)]);\n\n // Format input code on mount\n useEffect(() => {\n if (format && initInput) {\n const rawInput = formatValue(initInput);\n formatCode(rawInput, language).then(setInput);\n }\n }, [initInput, language, format]);\n\n // Format config code on mount\n useEffect(() => {\n if (format && initConfig) {\n const rawConfig = formatValue(initConfig);\n formatCode(rawConfig, language).then(setConfig);\n }\n }, [initConfig, language, format]);\n\n const log = useCallback(\n (...args: unknown[]) => {\n const params = args\n .map((arg) => formatValue(arg, { quotes: showQuotes }))\n .join(', ');\n setOutput([fnName ? `${fnName}(${params})` : params]);\n },\n [fnName, showQuotes],\n );\n\n const updateOutput = useCallback(\n debounce(\n async (inputStr: string, configStr: string, opts: WalkerOS.AnyObject) => {\n if (!fn) return;\n setOutput([]);\n await tryCatchAsync(fn, (e) => {\n setOutput([`Error: ${String(e)}`]);\n })(inputStr, configStr, log, opts);\n },\n 500,\n true,\n ),\n [fn, log],\n );\n\n useEffect(() => {\n updateOutput(input, config, options || {});\n }, [input, config, options, updateOutput]);\n\n return (\n <Grid columns={3} className={className} rowHeight={rowHeight}>\n <CodeBox\n label={labelInput}\n code={input}\n onChange={disableInput ? undefined : setInput}\n disabled={disableInput}\n language={language}\n showFormat={!disableInput && language === 'json'}\n />\n\n {config && (\n <CodeBox\n label={labelConfig}\n code={config}\n onChange={disableConfig ? undefined : setConfig}\n disabled={disableConfig}\n language={configLanguage}\n showFormat={!disableConfig && configLanguage === 'json'}\n />\n )}\n\n <CodeBox\n label={labelOutput}\n code={output[0] || emptyText}\n disabled\n language={outputLanguage}\n />\n </Grid>\n );\n}\n","import * as prettier from 'prettier/standalone';\nimport prettierBabel from 'prettier/plugins/babel';\nimport prettierEstree from 'prettier/plugins/estree';\nimport prettierTypescript from 'prettier/plugins/typescript';\nimport prettierHtml from 'prettier/plugins/html';\n\n/**\n * Format code using Prettier\n *\n * @param code - The code to format\n * @param language - The language (javascript, typescript, json, html, css)\n * @returns Formatted code, or original code if formatting fails\n */\nexport async function formatCode(\n code: string,\n language: string,\n): Promise<string> {\n try {\n let formatted: string;\n\n switch (language) {\n case 'javascript':\n case 'js': {\n // Wrap bare objects in parens so Prettier can parse them\n // Skip one-liners — they're intentionally compact\n const isBareObject =\n code.trimStart().startsWith('{') && code.includes('\\n');\n const input = isBareObject ? `(${code})` : code;\n formatted = await prettier.format(input, {\n parser: 'babel',\n plugins: [prettierBabel, prettierEstree],\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n if (isBareObject) {\n // Unwrap: remove leading \"(\" and trailing \");\\n\"\n formatted = formatted.replace(/^\\(/, '').replace(/\\);?\\s*$/, '');\n }\n break;\n }\n\n case 'typescript':\n case 'ts':\n case 'tsx':\n formatted = await prettier.format(code, {\n parser: 'typescript',\n plugins: [prettierTypescript, prettierEstree],\n semi: true,\n singleQuote: true,\n trailingComma: 'all',\n });\n break;\n\n case 'json':\n // Use native JSON for simplicity\n const parsed = JSON.parse(code);\n formatted = JSON.stringify(parsed, null, 2);\n break;\n\n case 'html':\n formatted = await prettier.format(code, {\n parser: 'html',\n plugins: [prettierHtml],\n htmlWhitespaceSensitivity: 'css',\n });\n break;\n\n case 'css':\n case 'scss':\n formatted = await prettier.format(code, {\n parser: 'css',\n plugins: [prettierHtml],\n });\n break;\n\n default:\n // Unsupported language, return original\n return code;\n }\n\n // Trim trailing whitespace/newlines\n return formatted.trim();\n } catch (error) {\n return code;\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport { startFlow } from '@walkeros/collector';\nimport type { DestinationCode } from '../../helpers/destinations';\nimport { CodeBox } from '../molecules/code-box';\n\nexport interface CollectorBoxProps {\n event: string;\n mapping: string;\n destination: DestinationCode;\n label?: string;\n wordWrap?: boolean;\n}\n\n/**\n * CollectorBox - Runs a collector with destination to transform events\n *\n * Takes raw event and mapping config, processes through collector pipeline,\n * and displays the formatted destination output.\n *\n * @example\n * <CollectorBox\n * event={JSON.stringify(event)}\n * mapping={mappingConfig}\n * destination={createGtagDestination()}\n * label=\"Result\"\n * />\n */\nexport function CollectorBox({\n event,\n mapping,\n destination,\n label = 'Result',\n wordWrap = false,\n}: CollectorBoxProps) {\n const [output, setOutput] = useState(\n '// Click elements in the preview to see function call',\n );\n\n useEffect(() => {\n (async () => {\n try {\n // Parse inputs\n const eventObj = JSON.parse(event);\n const mappingObj = JSON.parse(mapping);\n\n // Create collector with destination\n const { collector } = await startFlow({\n destinations: {\n demo: {\n code: destination,\n config: {\n mapping: mappingObj,\n },\n env: {\n elb: setOutput,\n },\n },\n },\n });\n\n // Push event through collector → destination\n await collector.push(eventObj);\n } catch (error) {\n if (error instanceof Error) {\n setOutput(`// Error: ${error.message}`);\n } else {\n setOutput(`// Error: ${String(error)}`);\n }\n }\n })();\n }, [event, mapping, destination]);\n\n return (\n <CodeBox\n code={output}\n language=\"javascript\"\n disabled\n label={label}\n wordWrap={wordWrap}\n />\n );\n}\n","'use client';\n\nimport { createElement, forwardRef, useState, useEffect } from 'react';\n\n/**\n* Resolve icon set icons\n*\n* Returns parent icon for each icon\n*/\nfunction getIconsTree(data, names) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tconst resolved = Object.create(null);\n\tfunction resolve(name) {\n\t\tif (icons[name]) return resolved[name] = [];\n\t\tif (!(name in resolved)) {\n\t\t\tresolved[name] = null;\n\t\t\tconst parent = aliases[name] && aliases[name].parent;\n\t\t\tconst value = parent && resolve(parent);\n\t\t\tif (value) resolved[name] = [parent].concat(value);\n\t\t}\n\t\treturn resolved[name];\n\t}\n\t(Object.keys(icons).concat(Object.keys(aliases))).forEach(resolve);\n\treturn resolved;\n}\n\n/**\n* Default values for dimensions\n*/\nconst defaultIconDimensions = Object.freeze({\n\tleft: 0,\n\ttop: 0,\n\twidth: 16,\n\theight: 16\n});\n/**\n* Default values for transformations\n*/\nconst defaultIconTransformations = Object.freeze({\n\trotate: 0,\n\tvFlip: false,\n\thFlip: false\n});\n/**\n* Default values for all optional IconifyIcon properties\n*/\nconst defaultIconProps = Object.freeze({\n\t...defaultIconDimensions,\n\t...defaultIconTransformations\n});\n/**\n* Default values for all properties used in ExtendedIconifyIcon\n*/\nconst defaultExtendedIconProps = Object.freeze({\n\t...defaultIconProps,\n\tbody: \"\",\n\thidden: false\n});\n\n/**\n* Merge transformations\n*/\nfunction mergeIconTransformations(obj1, obj2) {\n\tconst result = {};\n\tif (!obj1.hFlip !== !obj2.hFlip) result.hFlip = true;\n\tif (!obj1.vFlip !== !obj2.vFlip) result.vFlip = true;\n\tconst rotate = ((obj1.rotate || 0) + (obj2.rotate || 0)) % 4;\n\tif (rotate) result.rotate = rotate;\n\treturn result;\n}\n\n/**\n* Merge icon and alias\n*\n* Can also be used to merge default values and icon\n*/\nfunction mergeIconData(parent, child) {\n\tconst result = mergeIconTransformations(parent, child);\n\tfor (const key in defaultExtendedIconProps) if (key in defaultIconTransformations) {\n\t\tif (key in parent && !(key in result)) result[key] = defaultIconTransformations[key];\n\t} else if (key in child) result[key] = child[key];\n\telse if (key in parent) result[key] = parent[key];\n\treturn result;\n}\n\n/**\n* Get icon data, using prepared aliases tree\n*/\nfunction internalGetIconData(data, name, tree) {\n\tconst icons = data.icons;\n\tconst aliases = data.aliases || Object.create(null);\n\tlet currentProps = {};\n\tfunction parse(name$1) {\n\t\tcurrentProps = mergeIconData(icons[name$1] || aliases[name$1], currentProps);\n\t}\n\tparse(name);\n\ttree.forEach(parse);\n\treturn mergeIconData(data, currentProps);\n}\n\n/**\n* Extract icons from an icon set\n*\n* Returns list of icons that were found in icon set\n*/\nfunction parseIconSet(data, callback) {\n\tconst names = [];\n\tif (typeof data !== \"object\" || typeof data.icons !== \"object\") return names;\n\tif (data.not_found instanceof Array) data.not_found.forEach((name) => {\n\t\tcallback(name, null);\n\t\tnames.push(name);\n\t});\n\tconst tree = getIconsTree(data);\n\tfor (const name in tree) {\n\t\tconst item = tree[name];\n\t\tif (item) {\n\t\t\tcallback(name, internalGetIconData(data, name, item));\n\t\t\tnames.push(name);\n\t\t}\n\t}\n\treturn names;\n}\n\n/**\n* Optional properties\n*/\nconst optionalPropertyDefaults = {\n\tprovider: \"\",\n\taliases: {},\n\tnot_found: {},\n\t...defaultIconDimensions\n};\n/**\n* Check props\n*/\nfunction checkOptionalProps(item, defaults) {\n\tfor (const prop in defaults) if (prop in item && typeof item[prop] !== typeof defaults[prop]) return false;\n\treturn true;\n}\n/**\n* Validate icon set, return it as IconifyJSON on success, null on failure\n*\n* Unlike validateIconSet(), this function is very basic.\n* It does not throw exceptions, it does not check metadata, it does not fix stuff.\n*/\nfunction quicklyValidateIconSet(obj) {\n\tif (typeof obj !== \"object\" || obj === null) return null;\n\tconst data = obj;\n\tif (typeof data.prefix !== \"string\" || !obj.icons || typeof obj.icons !== \"object\") return null;\n\tif (!checkOptionalProps(obj, optionalPropertyDefaults)) return null;\n\tconst icons = data.icons;\n\tfor (const name in icons) {\n\t\tconst icon = icons[name];\n\t\tif (!name || typeof icon.body !== \"string\" || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\tconst aliases = data.aliases || Object.create(null);\n\tfor (const name in aliases) {\n\t\tconst icon = aliases[name];\n\t\tconst parent = icon.parent;\n\t\tif (!name || typeof parent !== \"string\" || !icons[parent] && !aliases[parent] || !checkOptionalProps(icon, defaultExtendedIconProps)) return null;\n\t}\n\treturn data;\n}\n\n/**\n* Storage by provider and prefix\n*/\nconst dataStorage = Object.create(null);\n/**\n* Create new storage\n*/\nfunction newStorage(provider, prefix) {\n\treturn {\n\t\tprovider,\n\t\tprefix,\n\t\ticons: Object.create(null),\n\t\tmissing: /* @__PURE__ */ new Set()\n\t};\n}\n/**\n* Get storage for provider and prefix\n*/\nfunction getStorage(provider, prefix) {\n\tconst providerStorage = dataStorage[provider] || (dataStorage[provider] = Object.create(null));\n\treturn providerStorage[prefix] || (providerStorage[prefix] = newStorage(provider, prefix));\n}\n/**\n* Add icon set to storage\n*\n* Returns array of added icons\n*/\nfunction addIconSet(storage, data) {\n\tif (!quicklyValidateIconSet(data)) return [];\n\treturn parseIconSet(data, (name, icon) => {\n\t\tif (icon) storage.icons[name] = icon;\n\t\telse storage.missing.add(name);\n\t});\n}\n/**\n* Add icon to storage\n*/\nfunction addIconToStorage(storage, name, icon) {\n\ttry {\n\t\tif (typeof icon.body === \"string\") {\n\t\t\tstorage.icons[name] = { ...icon };\n\t\t\treturn true;\n\t\t}\n\t} catch (err) {}\n\treturn false;\n}\n/**\n* List available icons\n*/\nfunction listIcons(provider, prefix) {\n\tlet allIcons = [];\n\tconst providers = typeof provider === \"string\" ? [provider] : Object.keys(dataStorage);\n\tproviders.forEach((provider$1) => {\n\t\tconst prefixes = typeof provider$1 === \"string\" && typeof prefix === \"string\" ? [prefix] : Object.keys(dataStorage[provider$1] || {});\n\t\tprefixes.forEach((prefix$1) => {\n\t\t\tconst storage = getStorage(provider$1, prefix$1);\n\t\t\tallIcons = allIcons.concat(Object.keys(storage.icons).map((name) => (provider$1 !== \"\" ? \"@\" + provider$1 + \":\" : \"\") + prefix$1 + \":\" + name));\n\t\t});\n\t});\n\treturn allIcons;\n}\n\n/**\n* Expression to test part of icon name.\n*\n* Used when loading icons from Iconify API due to project naming convension.\n* Ignored when using custom icon sets - convension does not apply.\n*/\nconst matchIconName = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n/**\n* Convert string icon name to IconifyIconName object.\n*/\nconst stringToIcon = (value, validate, allowSimpleName, provider = \"\") => {\n\tconst colonSeparated = value.split(\":\");\n\tif (value.slice(0, 1) === \"@\") {\n\t\tif (colonSeparated.length < 2 || colonSeparated.length > 3) return null;\n\t\tprovider = colonSeparated.shift().slice(1);\n\t}\n\tif (colonSeparated.length > 3 || !colonSeparated.length) return null;\n\tif (colonSeparated.length > 1) {\n\t\tconst name$1 = colonSeparated.pop();\n\t\tconst prefix = colonSeparated.pop();\n\t\tconst result = {\n\t\t\tprovider: colonSeparated.length > 0 ? colonSeparated[0] : provider,\n\t\t\tprefix,\n\t\t\tname: name$1\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tconst name = colonSeparated[0];\n\tconst dashSeparated = name.split(\"-\");\n\tif (dashSeparated.length > 1) {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: dashSeparated.shift(),\n\t\t\tname: dashSeparated.join(\"-\")\n\t\t};\n\t\treturn validate && !validateIconName(result) ? null : result;\n\t}\n\tif (allowSimpleName && provider === \"\") {\n\t\tconst result = {\n\t\t\tprovider,\n\t\t\tprefix: \"\",\n\t\t\tname\n\t\t};\n\t\treturn validate && !validateIconName(result, allowSimpleName) ? null : result;\n\t}\n\treturn null;\n};\n/**\n* Check if icon is valid.\n*\n* This function is not part of stringToIcon because validation is not needed for most code.\n*/\nconst validateIconName = (icon, allowSimpleName) => {\n\tif (!icon) return false;\n\treturn !!((allowSimpleName && icon.prefix === \"\" || !!icon.prefix) && !!icon.name);\n};\n\n/**\n* Allow storing icons without provider or prefix, making it possible to store icons like \"home\"\n*/\nlet simpleNames = false;\nfunction allowSimpleNames(allow) {\n\tif (typeof allow === \"boolean\") simpleNames = allow;\n\treturn simpleNames;\n}\n/**\n* Get icon data\n*\n* Returns:\n* - IconifyIcon on success, object directly from storage so don't modify it\n* - null if icon is marked as missing (returned in `not_found` property from API, so don't bother sending API requests)\n* - undefined if icon is missing in storage\n*/\nfunction getIconData(name) {\n\tconst icon = typeof name === \"string\" ? stringToIcon(name, true, simpleNames) : name;\n\tif (icon) {\n\t\tconst storage = getStorage(icon.provider, icon.prefix);\n\t\tconst iconName = icon.name;\n\t\treturn storage.icons[iconName] || (storage.missing.has(iconName) ? null : void 0);\n\t}\n}\n/**\n* Add one icon\n*/\nfunction addIcon(name, data) {\n\tconst icon = stringToIcon(name, true, simpleNames);\n\tif (!icon) return false;\n\tconst storage = getStorage(icon.provider, icon.prefix);\n\tif (data) return addIconToStorage(storage, icon.name, data);\n\telse {\n\t\tstorage.missing.add(icon.name);\n\t\treturn true;\n\t}\n}\n/**\n* Add icon set\n*/\nfunction addCollection(data, provider) {\n\tif (typeof data !== \"object\") return false;\n\tif (typeof provider !== \"string\") provider = data.provider || \"\";\n\tif (simpleNames && !provider && !data.prefix) {\n\t\tlet added = false;\n\t\tif (quicklyValidateIconSet(data)) {\n\t\t\tdata.prefix = \"\";\n\t\t\tparseIconSet(data, (name, icon) => {\n\t\t\t\tif (addIcon(name, icon)) added = true;\n\t\t\t});\n\t\t}\n\t\treturn added;\n\t}\n\tconst prefix = data.prefix;\n\tif (!validateIconName({\n\t\tprefix,\n\t\tname: \"a\"\n\t})) return false;\n\tconst storage = getStorage(provider, prefix);\n\treturn !!addIconSet(storage, data);\n}\n/**\n* Check if icon data is available\n*/\nfunction iconLoaded(name) {\n\treturn !!getIconData(name);\n}\n/**\n* Get full icon\n*/\nfunction getIcon(name) {\n\tconst result = getIconData(name);\n\treturn result ? {\n\t\t...defaultIconProps,\n\t\t...result\n\t} : result;\n}\n\n/**\n* Default icon customisations values\n*/\nconst defaultIconSizeCustomisations = Object.freeze({\n\twidth: null,\n\theight: null\n});\nconst defaultIconCustomisations = Object.freeze({\n\t...defaultIconSizeCustomisations,\n\t...defaultIconTransformations\n});\n\n/**\n* Regular expressions for calculating dimensions\n*/\nconst unitsSplit = /(-?[0-9.]*[0-9]+[0-9.]*)/g;\nconst unitsTest = /^-?[0-9.]*[0-9]+[0-9.]*$/g;\nfunction calculateSize(size, ratio, precision) {\n\tif (ratio === 1) return size;\n\tprecision = precision || 100;\n\tif (typeof size === \"number\") return Math.ceil(size * ratio * precision) / precision;\n\tif (typeof size !== \"string\") return size;\n\tconst oldParts = size.split(unitsSplit);\n\tif (oldParts === null || !oldParts.length) return size;\n\tconst newParts = [];\n\tlet code = oldParts.shift();\n\tlet isNumber = unitsTest.test(code);\n\twhile (true) {\n\t\tif (isNumber) {\n\t\t\tconst num = parseFloat(code);\n\t\t\tif (isNaN(num)) newParts.push(code);\n\t\t\telse newParts.push(Math.ceil(num * ratio * precision) / precision);\n\t\t} else newParts.push(code);\n\t\tcode = oldParts.shift();\n\t\tif (code === void 0) return newParts.join(\"\");\n\t\tisNumber = !isNumber;\n\t}\n}\n\nfunction splitSVGDefs(content, tag = \"defs\") {\n\tlet defs = \"\";\n\tconst index = content.indexOf(\"<\" + tag);\n\twhile (index >= 0) {\n\t\tconst start = content.indexOf(\">\", index);\n\t\tconst end = content.indexOf(\"</\" + tag);\n\t\tif (start === -1 || end === -1) break;\n\t\tconst endEnd = content.indexOf(\">\", end);\n\t\tif (endEnd === -1) break;\n\t\tdefs += content.slice(start + 1, end).trim();\n\t\tcontent = content.slice(0, index).trim() + content.slice(endEnd + 1);\n\t}\n\treturn {\n\t\tdefs,\n\t\tcontent\n\t};\n}\n/**\n* Merge defs and content\n*/\nfunction mergeDefsAndContent(defs, content) {\n\treturn defs ? \"<defs>\" + defs + \"</defs>\" + content : content;\n}\n/**\n* Wrap SVG content, without wrapping definitions\n*/\nfunction wrapSVGContent(body, start, end) {\n\tconst split = splitSVGDefs(body);\n\treturn mergeDefsAndContent(split.defs, start + split.content + end);\n}\n\n/**\n* Check if value should be unset. Allows multiple keywords\n*/\nconst isUnsetKeyword = (value) => value === \"unset\" || value === \"undefined\" || value === \"none\";\n/**\n* Get SVG attributes and content from icon + customisations\n*\n* Does not generate style to make it compatible with frameworks that use objects for style, such as React.\n* Instead, it generates 'inline' value. If true, rendering engine should add verticalAlign: -0.125em to icon.\n*\n* Customisations should be normalised by platform specific parser.\n* Result should be converted to <svg> by platform specific parser.\n* Use replaceIDs to generate unique IDs for body.\n*/\nfunction iconToSVG(icon, customisations) {\n\tconst fullIcon = {\n\t\t...defaultIconProps,\n\t\t...icon\n\t};\n\tconst fullCustomisations = {\n\t\t...defaultIconCustomisations,\n\t\t...customisations\n\t};\n\tconst box = {\n\t\tleft: fullIcon.left,\n\t\ttop: fullIcon.top,\n\t\twidth: fullIcon.width,\n\t\theight: fullIcon.height\n\t};\n\tlet body = fullIcon.body;\n\t[fullIcon, fullCustomisations].forEach((props) => {\n\t\tconst transformations = [];\n\t\tconst hFlip = props.hFlip;\n\t\tconst vFlip = props.vFlip;\n\t\tlet rotation = props.rotate;\n\t\tif (hFlip) if (vFlip) rotation += 2;\n\t\telse {\n\t\t\ttransformations.push(\"translate(\" + (box.width + box.left).toString() + \" \" + (0 - box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(-1 1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\telse if (vFlip) {\n\t\t\ttransformations.push(\"translate(\" + (0 - box.left).toString() + \" \" + (box.height + box.top).toString() + \")\");\n\t\t\ttransformations.push(\"scale(1 -1)\");\n\t\t\tbox.top = box.left = 0;\n\t\t}\n\t\tlet tempValue;\n\t\tif (rotation < 0) rotation -= Math.floor(rotation / 4) * 4;\n\t\trotation = rotation % 4;\n\t\tswitch (rotation) {\n\t\t\tcase 1:\n\t\t\t\ttempValue = box.height / 2 + box.top;\n\t\t\t\ttransformations.unshift(\"rotate(90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\ttransformations.unshift(\"rotate(180 \" + (box.width / 2 + box.left).toString() + \" \" + (box.height / 2 + box.top).toString() + \")\");\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\ttempValue = box.width / 2 + box.left;\n\t\t\t\ttransformations.unshift(\"rotate(-90 \" + tempValue.toString() + \" \" + tempValue.toString() + \")\");\n\t\t\t\tbreak;\n\t\t}\n\t\tif (rotation % 2 === 1) {\n\t\t\tif (box.left !== box.top) {\n\t\t\t\ttempValue = box.left;\n\t\t\t\tbox.left = box.top;\n\t\t\t\tbox.top = tempValue;\n\t\t\t}\n\t\t\tif (box.width !== box.height) {\n\t\t\t\ttempValue = box.width;\n\t\t\t\tbox.width = box.height;\n\t\t\t\tbox.height = tempValue;\n\t\t\t}\n\t\t}\n\t\tif (transformations.length) body = wrapSVGContent(body, \"<g transform=\\\"\" + transformations.join(\" \") + \"\\\">\", \"</g>\");\n\t});\n\tconst customisationsWidth = fullCustomisations.width;\n\tconst customisationsHeight = fullCustomisations.height;\n\tconst boxWidth = box.width;\n\tconst boxHeight = box.height;\n\tlet width;\n\tlet height;\n\tif (customisationsWidth === null) {\n\t\theight = customisationsHeight === null ? \"1em\" : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t\twidth = calculateSize(height, boxWidth / boxHeight);\n\t} else {\n\t\twidth = customisationsWidth === \"auto\" ? boxWidth : customisationsWidth;\n\t\theight = customisationsHeight === null ? calculateSize(width, boxHeight / boxWidth) : customisationsHeight === \"auto\" ? boxHeight : customisationsHeight;\n\t}\n\tconst attributes = {};\n\tconst setAttr = (prop, value) => {\n\t\tif (!isUnsetKeyword(value)) attributes[prop] = value.toString();\n\t};\n\tsetAttr(\"width\", width);\n\tsetAttr(\"height\", height);\n\tconst viewBox = [\n\t\tbox.left,\n\t\tbox.top,\n\t\tboxWidth,\n\t\tboxHeight\n\t];\n\tattributes.viewBox = viewBox.join(\" \");\n\treturn {\n\t\tattributes,\n\t\tviewBox,\n\t\tbody\n\t};\n}\n\n/**\n* IDs usage:\n*\n* id=\"{id}\"\n* xlink:href=\"#{id}\"\n* url(#{id})\n*\n* From SVG animations:\n*\n* begin=\"0;{id}.end\"\n* begin=\"{id}.end\"\n* begin=\"{id}.click\"\n*/\n/**\n* Regular expression for finding ids\n*/\nconst regex = /\\sid=\"(\\S+)\"/g;\n/**\n* New random-ish prefix for ids\n*\n* Do not use dash, it cannot be used in SVG 2 animations\n*/\nconst randomPrefix = \"IconifyId\" + Date.now().toString(16) + (Math.random() * 16777216 | 0).toString(16);\n/**\n* Counter for ids, increasing with every replacement\n*/\nlet counter = 0;\n/**\n* Replace IDs in SVG output with unique IDs\n*/\nfunction replaceIDs(body, prefix = randomPrefix) {\n\tconst ids = [];\n\tlet match;\n\twhile (match = regex.exec(body)) ids.push(match[1]);\n\tif (!ids.length) return body;\n\tconst suffix = \"suffix\" + (Math.random() * 16777216 | Date.now()).toString(16);\n\tids.forEach((id) => {\n\t\tconst newID = typeof prefix === \"function\" ? prefix(id) : prefix + (counter++).toString();\n\t\tconst escapedID = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tbody = body.replace(new RegExp(\"([#;\\\"])(\" + escapedID + \")([\\\")]|\\\\.[a-z])\", \"g\"), \"$1\" + newID + suffix + \"$3\");\n\t});\n\tbody = body.replace(new RegExp(suffix, \"g\"), \"\");\n\treturn body;\n}\n\n/**\n* Local storate types and entries\n*/\nconst storage = Object.create(null);\n/**\n* Set API module\n*/\nfunction setAPIModule(provider, item) {\n\tstorage[provider] = item;\n}\n/**\n* Get API module\n*/\nfunction getAPIModule(provider) {\n\treturn storage[provider] || storage[\"\"];\n}\n\n/**\n* Create full API configuration from partial data\n*/\nfunction createAPIConfig(source) {\n\tlet resources;\n\tif (typeof source.resources === \"string\") resources = [source.resources];\n\telse {\n\t\tresources = source.resources;\n\t\tif (!(resources instanceof Array) || !resources.length) return null;\n\t}\n\tconst result = {\n\t\tresources,\n\t\tpath: source.path || \"/\",\n\t\tmaxURL: source.maxURL || 500,\n\t\trotate: source.rotate || 750,\n\t\ttimeout: source.timeout || 5e3,\n\t\trandom: source.random === true,\n\t\tindex: source.index || 0,\n\t\tdataAfterTimeout: source.dataAfterTimeout !== false\n\t};\n\treturn result;\n}\n/**\n* Local storage\n*/\nconst configStorage = Object.create(null);\n/**\n* Redundancy for API servers.\n*\n* API should have very high uptime because of implemented redundancy at server level, but\n* sometimes bad things happen. On internet 100% uptime is not possible.\n*\n* There could be routing problems. Server might go down for whatever reason, but it takes\n* few minutes to detect that downtime, so during those few minutes API might not be accessible.\n*\n* This script has some redundancy to mitigate possible network issues.\n*\n* If one host cannot be reached in 'rotate' (750 by default) ms, script will try to retrieve\n* data from different host. Hosts have different configurations, pointing to different\n* API servers hosted at different providers.\n*/\nconst fallBackAPISources = [\"https://api.simplesvg.com\", \"https://api.unisvg.com\"];\nconst fallBackAPI = [];\nwhile (fallBackAPISources.length > 0) if (fallBackAPISources.length === 1) fallBackAPI.push(fallBackAPISources.shift());\nelse if (Math.random() > .5) fallBackAPI.push(fallBackAPISources.shift());\nelse fallBackAPI.push(fallBackAPISources.pop());\nconfigStorage[\"\"] = createAPIConfig({ resources: [\"https://api.iconify.design\"].concat(fallBackAPI) });\n/**\n* Add custom config for provider\n*/\nfunction addAPIProvider(provider, customConfig) {\n\tconst config = createAPIConfig(customConfig);\n\tif (config === null) return false;\n\tconfigStorage[provider] = config;\n\treturn true;\n}\n/**\n* Get API configuration\n*/\nfunction getAPIConfig(provider) {\n\treturn configStorage[provider];\n}\n/**\n* List API providers\n*/\nfunction listAPIProviders() {\n\treturn Object.keys(configStorage);\n}\n\nconst detectFetch = () => {\n\tlet callback;\n\ttry {\n\t\tcallback = fetch;\n\t\tif (typeof callback === \"function\") return callback;\n\t} catch (err) {}\n};\n/**\n* Fetch function\n*/\nlet fetchModule = detectFetch();\n/**\n* Set custom fetch() function\n*/\nfunction setFetch(fetch$1) {\n\tfetchModule = fetch$1;\n}\n/**\n* Get fetch() function. Used by Icon Finder Core\n*/\nfunction getFetch() {\n\treturn fetchModule;\n}\n/**\n* Calculate maximum icons list length for prefix\n*/\nfunction calculateMaxLength(provider, prefix) {\n\tconst config = getAPIConfig(provider);\n\tif (!config) return 0;\n\tlet result;\n\tif (!config.maxURL) result = 0;\n\telse {\n\t\tlet maxHostLength = 0;\n\t\tconfig.resources.forEach((item) => {\n\t\t\tconst host = item;\n\t\t\tmaxHostLength = Math.max(maxHostLength, host.length);\n\t\t});\n\t\tconst url = prefix + \".json?icons=\";\n\t\tresult = config.maxURL - maxHostLength - config.path.length - url.length;\n\t}\n\treturn result;\n}\n/**\n* Should query be aborted, based on last HTTP status\n*/\nfunction shouldAbort(status) {\n\treturn status === 404;\n}\n/**\n* Prepare params\n*/\nconst prepare = (provider, prefix, icons) => {\n\tconst results = [];\n\tconst maxLength = calculateMaxLength(provider, prefix);\n\tconst type = \"icons\";\n\tlet item = {\n\t\ttype,\n\t\tprovider,\n\t\tprefix,\n\t\ticons: []\n\t};\n\tlet length = 0;\n\ticons.forEach((name, index) => {\n\t\tlength += name.length + 1;\n\t\tif (length >= maxLength && index > 0) {\n\t\t\tresults.push(item);\n\t\t\titem = {\n\t\t\t\ttype,\n\t\t\t\tprovider,\n\t\t\t\tprefix,\n\t\t\t\ticons: []\n\t\t\t};\n\t\t\tlength = name.length;\n\t\t}\n\t\titem.icons.push(name);\n\t});\n\tresults.push(item);\n\treturn results;\n};\n/**\n* Get path\n*/\nfunction getPath(provider) {\n\tif (typeof provider === \"string\") {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (config) return config.path;\n\t}\n\treturn \"/\";\n}\n/**\n* Load icons\n*/\nconst send = (host, params, callback) => {\n\tif (!fetchModule) {\n\t\tcallback(\"abort\", 424);\n\t\treturn;\n\t}\n\tlet path = getPath(params.provider);\n\tswitch (params.type) {\n\t\tcase \"icons\": {\n\t\t\tconst prefix = params.prefix;\n\t\t\tconst icons = params.icons;\n\t\t\tconst iconsList = icons.join(\",\");\n\t\t\tconst urlParams = new URLSearchParams({ icons: iconsList });\n\t\t\tpath += prefix + \".json?\" + urlParams.toString();\n\t\t\tbreak;\n\t\t}\n\t\tcase \"custom\": {\n\t\t\tconst uri = params.uri;\n\t\t\tpath += uri.slice(0, 1) === \"/\" ? uri.slice(1) : uri;\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tcallback(\"abort\", 400);\n\t\t\treturn;\n\t}\n\tlet defaultError = 503;\n\tfetchModule(host + path).then((response) => {\n\t\tconst status = response.status;\n\t\tif (status !== 200) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tcallback(shouldAbort(status) ? \"abort\" : \"next\", status);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tdefaultError = 501;\n\t\treturn response.json();\n\t}).then((data) => {\n\t\tif (typeof data !== \"object\" || data === null) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (data === 404) callback(\"abort\", data);\n\t\t\t\telse callback(\"next\", defaultError);\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tcallback(\"success\", data);\n\t\t});\n\t}).catch(() => {\n\t\tcallback(\"next\", defaultError);\n\t});\n};\n/**\n* Export module\n*/\nconst fetchAPIModule = {\n\tprepare,\n\tsend\n};\n\n/**\n* Remove callback\n*/\nfunction removeCallback(storages, id) {\n\tstorages.forEach((storage) => {\n\t\tconst items = storage.loaderCallbacks;\n\t\tif (items) storage.loaderCallbacks = items.filter((row) => row.id !== id);\n\t});\n}\n/**\n* Update all callbacks for provider and prefix\n*/\nfunction updateCallbacks(storage) {\n\tif (!storage.pendingCallbacksFlag) {\n\t\tstorage.pendingCallbacksFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.pendingCallbacksFlag = false;\n\t\t\tconst items = storage.loaderCallbacks ? storage.loaderCallbacks.slice(0) : [];\n\t\t\tif (!items.length) return;\n\t\t\tlet hasPending = false;\n\t\t\tconst provider = storage.provider;\n\t\t\tconst prefix = storage.prefix;\n\t\t\titems.forEach((item) => {\n\t\t\t\tconst icons = item.icons;\n\t\t\t\tconst oldLength = icons.pending.length;\n\t\t\t\ticons.pending = icons.pending.filter((icon) => {\n\t\t\t\t\tif (icon.prefix !== prefix) return true;\n\t\t\t\t\tconst name = icon.name;\n\t\t\t\t\tif (storage.icons[name]) icons.loaded.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse if (storage.missing.has(name)) icons.missing.push({\n\t\t\t\t\t\tprovider,\n\t\t\t\t\t\tprefix,\n\t\t\t\t\t\tname\n\t\t\t\t\t});\n\t\t\t\t\telse {\n\t\t\t\t\t\thasPending = true;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tif (icons.pending.length !== oldLength) {\n\t\t\t\t\tif (!hasPending) removeCallback([storage], item.id);\n\t\t\t\t\titem.callback(icons.loaded.slice(0), icons.missing.slice(0), icons.pending.slice(0), item.abort);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Unique id counter for callbacks\n*/\nlet idCounter = 0;\n/**\n* Add callback\n*/\nfunction storeCallback(callback, icons, pendingSources) {\n\tconst id = idCounter++;\n\tconst abort = removeCallback.bind(null, pendingSources, id);\n\tif (!icons.pending.length) return abort;\n\tconst item = {\n\t\tid,\n\t\ticons,\n\t\tcallback,\n\t\tabort\n\t};\n\tpendingSources.forEach((storage) => {\n\t\t(storage.loaderCallbacks || (storage.loaderCallbacks = [])).push(item);\n\t});\n\treturn abort;\n}\n\n/**\n* Check if icons have been loaded\n*/\nfunction sortIcons(icons) {\n\tconst result = {\n\t\tloaded: [],\n\t\tmissing: [],\n\t\tpending: []\n\t};\n\tconst storage = Object.create(null);\n\ticons.sort((a, b) => {\n\t\tif (a.provider !== b.provider) return a.provider.localeCompare(b.provider);\n\t\tif (a.prefix !== b.prefix) return a.prefix.localeCompare(b.prefix);\n\t\treturn a.name.localeCompare(b.name);\n\t});\n\tlet lastIcon = {\n\t\tprovider: \"\",\n\t\tprefix: \"\",\n\t\tname: \"\"\n\t};\n\ticons.forEach((icon) => {\n\t\tif (lastIcon.name === icon.name && lastIcon.prefix === icon.prefix && lastIcon.provider === icon.provider) return;\n\t\tlastIcon = icon;\n\t\tconst provider = icon.provider;\n\t\tconst prefix = icon.prefix;\n\t\tconst name = icon.name;\n\t\tconst providerStorage = storage[provider] || (storage[provider] = Object.create(null));\n\t\tconst localStorage = providerStorage[prefix] || (providerStorage[prefix] = getStorage(provider, prefix));\n\t\tlet list;\n\t\tif (name in localStorage.icons) list = result.loaded;\n\t\telse if (prefix === \"\" || localStorage.missing.has(name)) list = result.missing;\n\t\telse list = result.pending;\n\t\tconst item = {\n\t\t\tprovider,\n\t\t\tprefix,\n\t\t\tname\n\t\t};\n\t\tlist.push(item);\n\t});\n\treturn result;\n}\n\n/**\n* Convert icons list from string/icon mix to icons and validate them\n*/\nfunction listToIcons(list, validate = true, simpleNames = false) {\n\tconst result = [];\n\tlist.forEach((item) => {\n\t\tconst icon = typeof item === \"string\" ? stringToIcon(item, validate, simpleNames) : item;\n\t\tif (icon) result.push(icon);\n\t});\n\treturn result;\n}\n\n/**\n* Default RedundancyConfig for API calls\n*/\nconst defaultConfig = {\n\tresources: [],\n\tindex: 0,\n\ttimeout: 2e3,\n\trotate: 750,\n\trandom: false,\n\tdataAfterTimeout: false\n};\n\n/**\n* Send query\n*/\nfunction sendQuery(config, payload, query, done) {\n\tconst resourcesCount = config.resources.length;\n\tconst startIndex = config.random ? Math.floor(Math.random() * resourcesCount) : config.index;\n\tlet resources;\n\tif (config.random) {\n\t\tlet list = config.resources.slice(0);\n\t\tresources = [];\n\t\twhile (list.length > 1) {\n\t\t\tconst nextIndex = Math.floor(Math.random() * list.length);\n\t\t\tresources.push(list[nextIndex]);\n\t\t\tlist = list.slice(0, nextIndex).concat(list.slice(nextIndex + 1));\n\t\t}\n\t\tresources = resources.concat(list);\n\t} else resources = config.resources.slice(startIndex).concat(config.resources.slice(0, startIndex));\n\tconst startTime = Date.now();\n\tlet status = \"pending\";\n\tlet queriesSent = 0;\n\tlet lastError;\n\tlet timer = null;\n\tlet queue = [];\n\tlet doneCallbacks = [];\n\tif (typeof done === \"function\") doneCallbacks.push(done);\n\t/**\n\t* Reset timer\n\t*/\n\tfunction resetTimer() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\t/**\n\t* Abort everything\n\t*/\n\tfunction abort() {\n\t\tif (status === \"pending\") status = \"aborted\";\n\t\tresetTimer();\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Add / replace callback to call when execution is complete.\n\t* This can be used to abort pending query implementations when query is complete or aborted.\n\t*/\n\tfunction subscribe(callback, overwrite) {\n\t\tif (overwrite) doneCallbacks = [];\n\t\tif (typeof callback === \"function\") doneCallbacks.push(callback);\n\t}\n\t/**\n\t* Get query status\n\t*/\n\tfunction getQueryStatus() {\n\t\treturn {\n\t\t\tstartTime,\n\t\t\tpayload,\n\t\t\tstatus,\n\t\t\tqueriesSent,\n\t\t\tqueriesPending: queue.length,\n\t\t\tsubscribe,\n\t\t\tabort\n\t\t};\n\t}\n\t/**\n\t* Fail query\n\t*/\n\tfunction failQuery() {\n\t\tstatus = \"failed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(void 0, lastError);\n\t\t});\n\t}\n\t/**\n\t* Clear queue\n\t*/\n\tfunction clearQueue() {\n\t\tqueue.forEach((item) => {\n\t\t\tif (item.status === \"pending\") item.status = \"aborted\";\n\t\t});\n\t\tqueue = [];\n\t}\n\t/**\n\t* Got response from module\n\t*/\n\tfunction moduleResponse(item, response, data) {\n\t\tconst isError = response !== \"success\";\n\t\tqueue = queue.filter((queued) => queued !== item);\n\t\tswitch (status) {\n\t\t\tcase \"pending\": break;\n\t\t\tcase \"failed\":\n\t\t\t\tif (isError || !config.dataAfterTimeout) return;\n\t\t\t\tbreak;\n\t\t\tdefault: return;\n\t\t}\n\t\tif (response === \"abort\") {\n\t\t\tlastError = data;\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tif (isError) {\n\t\t\tlastError = data;\n\t\t\tif (!queue.length) if (!resources.length) failQuery();\n\t\t\telse execNext();\n\t\t\treturn;\n\t\t}\n\t\tresetTimer();\n\t\tclearQueue();\n\t\tif (!config.random) {\n\t\t\tconst index = config.resources.indexOf(item.resource);\n\t\t\tif (index !== -1 && index !== config.index) config.index = index;\n\t\t}\n\t\tstatus = \"completed\";\n\t\tdoneCallbacks.forEach((callback) => {\n\t\t\tcallback(data);\n\t\t});\n\t}\n\t/**\n\t* Execute next query\n\t*/\n\tfunction execNext() {\n\t\tif (status !== \"pending\") return;\n\t\tresetTimer();\n\t\tconst resource = resources.shift();\n\t\tif (resource === void 0) {\n\t\t\tif (queue.length) {\n\t\t\t\ttimer = setTimeout(() => {\n\t\t\t\t\tresetTimer();\n\t\t\t\t\tif (status === \"pending\") {\n\t\t\t\t\t\tclearQueue();\n\t\t\t\t\t\tfailQuery();\n\t\t\t\t\t}\n\t\t\t\t}, config.timeout);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfailQuery();\n\t\t\treturn;\n\t\t}\n\t\tconst item = {\n\t\t\tstatus: \"pending\",\n\t\t\tresource,\n\t\t\tcallback: (status$1, data) => {\n\t\t\t\tmoduleResponse(item, status$1, data);\n\t\t\t}\n\t\t};\n\t\tqueue.push(item);\n\t\tqueriesSent++;\n\t\ttimer = setTimeout(execNext, config.rotate);\n\t\tquery(resource, payload, item.callback);\n\t}\n\tsetTimeout(execNext);\n\treturn getQueryStatus;\n}\n\n/**\n* Redundancy instance\n*/\nfunction initRedundancy(cfg) {\n\tconst config = {\n\t\t...defaultConfig,\n\t\t...cfg\n\t};\n\tlet queries = [];\n\t/**\n\t* Remove aborted and completed queries\n\t*/\n\tfunction cleanup() {\n\t\tqueries = queries.filter((item) => item().status === \"pending\");\n\t}\n\t/**\n\t* Send query\n\t*/\n\tfunction query(payload, queryCallback, doneCallback) {\n\t\tconst query$1 = sendQuery(config, payload, queryCallback, (data, error) => {\n\t\t\tcleanup();\n\t\t\tif (doneCallback) doneCallback(data, error);\n\t\t});\n\t\tqueries.push(query$1);\n\t\treturn query$1;\n\t}\n\t/**\n\t* Find instance\n\t*/\n\tfunction find(callback) {\n\t\treturn queries.find((value) => {\n\t\t\treturn callback(value);\n\t\t}) || null;\n\t}\n\tconst instance = {\n\t\tquery,\n\t\tfind,\n\t\tsetIndex: (index) => {\n\t\t\tconfig.index = index;\n\t\t},\n\t\tgetIndex: () => config.index,\n\t\tcleanup\n\t};\n\treturn instance;\n}\n\nfunction emptyCallback$1() {}\nconst redundancyCache = Object.create(null);\n/**\n* Get Redundancy instance for provider\n*/\nfunction getRedundancyCache(provider) {\n\tif (!redundancyCache[provider]) {\n\t\tconst config = getAPIConfig(provider);\n\t\tif (!config) return;\n\t\tconst redundancy = initRedundancy(config);\n\t\tconst cachedReundancy = {\n\t\t\tconfig,\n\t\t\tredundancy\n\t\t};\n\t\tredundancyCache[provider] = cachedReundancy;\n\t}\n\treturn redundancyCache[provider];\n}\n/**\n* Send API query\n*/\nfunction sendAPIQuery(target, query, callback) {\n\tlet redundancy;\n\tlet send;\n\tif (typeof target === \"string\") {\n\t\tconst api = getAPIModule(target);\n\t\tif (!api) {\n\t\t\tcallback(void 0, 424);\n\t\t\treturn emptyCallback$1;\n\t\t}\n\t\tsend = api.send;\n\t\tconst cached = getRedundancyCache(target);\n\t\tif (cached) redundancy = cached.redundancy;\n\t} else {\n\t\tconst config = createAPIConfig(target);\n\t\tif (config) {\n\t\t\tredundancy = initRedundancy(config);\n\t\t\tconst moduleKey = target.resources ? target.resources[0] : \"\";\n\t\t\tconst api = getAPIModule(moduleKey);\n\t\t\tif (api) send = api.send;\n\t\t}\n\t}\n\tif (!redundancy || !send) {\n\t\tcallback(void 0, 424);\n\t\treturn emptyCallback$1;\n\t}\n\treturn redundancy.query(query, send, callback)().abort;\n}\n\nfunction emptyCallback() {}\n/**\n* Function called when new icons have been loaded\n*/\nfunction loadedNewIcons(storage) {\n\tif (!storage.iconsLoaderFlag) {\n\t\tstorage.iconsLoaderFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsLoaderFlag = false;\n\t\t\tupdateCallbacks(storage);\n\t\t});\n\t}\n}\n/**\n* Check icon names for API\n*/\nfunction checkIconNamesForAPI(icons) {\n\tconst valid = [];\n\tconst invalid = [];\n\ticons.forEach((name) => {\n\t\t(name.match(matchIconName) ? valid : invalid).push(name);\n\t});\n\treturn {\n\t\tvalid,\n\t\tinvalid\n\t};\n}\n/**\n* Parse loader response\n*/\nfunction parseLoaderResponse(storage, icons, data) {\n\tfunction checkMissing() {\n\t\tconst pending = storage.pendingIcons;\n\t\ticons.forEach((name) => {\n\t\t\tif (pending) pending.delete(name);\n\t\t\tif (!storage.icons[name]) storage.missing.add(name);\n\t\t});\n\t}\n\tif (data && typeof data === \"object\") try {\n\t\tconst parsed = addIconSet(storage, data);\n\t\tif (!parsed.length) {\n\t\t\tcheckMissing();\n\t\t\treturn;\n\t\t}\n\t} catch (err) {\n\t\tconsole.error(err);\n\t}\n\tcheckMissing();\n\tloadedNewIcons(storage);\n}\n/**\n* Handle response that can be async\n*/\nfunction parsePossiblyAsyncResponse(response, callback) {\n\tif (response instanceof Promise) response.then((data) => {\n\t\tcallback(data);\n\t}).catch(() => {\n\t\tcallback(null);\n\t});\n\telse callback(response);\n}\n/**\n* Load icons\n*/\nfunction loadNewIcons(storage, icons) {\n\tif (!storage.iconsToLoad) storage.iconsToLoad = icons;\n\telse storage.iconsToLoad = storage.iconsToLoad.concat(icons).sort();\n\tif (!storage.iconsQueueFlag) {\n\t\tstorage.iconsQueueFlag = true;\n\t\tsetTimeout(() => {\n\t\t\tstorage.iconsQueueFlag = false;\n\t\t\tconst { provider, prefix } = storage;\n\t\t\tconst icons$1 = storage.iconsToLoad;\n\t\t\tdelete storage.iconsToLoad;\n\t\t\tif (!icons$1 || !icons$1.length) return;\n\t\t\tconst customIconLoader = storage.loadIcon;\n\t\t\tif (storage.loadIcons && (icons$1.length > 1 || !customIconLoader)) {\n\t\t\t\tparsePossiblyAsyncResponse(storage.loadIcons(icons$1, prefix, provider), (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, icons$1, data);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (customIconLoader) {\n\t\t\t\ticons$1.forEach((name) => {\n\t\t\t\t\tconst response = customIconLoader(name, prefix, provider);\n\t\t\t\t\tparsePossiblyAsyncResponse(response, (data) => {\n\t\t\t\t\t\tconst iconSet = data ? {\n\t\t\t\t\t\t\tprefix,\n\t\t\t\t\t\t\ticons: { [name]: data }\n\t\t\t\t\t\t} : null;\n\t\t\t\t\t\tparseLoaderResponse(storage, [name], iconSet);\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst { valid, invalid } = checkIconNamesForAPI(icons$1);\n\t\t\tif (invalid.length) parseLoaderResponse(storage, invalid, null);\n\t\t\tif (!valid.length) return;\n\t\t\tconst api = prefix.match(matchIconName) ? getAPIModule(provider) : null;\n\t\t\tif (!api) {\n\t\t\t\tparseLoaderResponse(storage, valid, null);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst params = api.prepare(provider, prefix, valid);\n\t\t\tparams.forEach((item) => {\n\t\t\t\tsendAPIQuery(provider, item, (data) => {\n\t\t\t\t\tparseLoaderResponse(storage, item.icons, data);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n/**\n* Load icons\n*/\nconst loadIcons = (icons, callback) => {\n\tconst cleanedIcons = listToIcons(icons, true, allowSimpleNames());\n\tconst sortedIcons = sortIcons(cleanedIcons);\n\tif (!sortedIcons.pending.length) {\n\t\tlet callCallback = true;\n\t\tif (callback) setTimeout(() => {\n\t\t\tif (callCallback) callback(sortedIcons.loaded, sortedIcons.missing, sortedIcons.pending, emptyCallback);\n\t\t});\n\t\treturn () => {\n\t\t\tcallCallback = false;\n\t\t};\n\t}\n\tconst newIcons = Object.create(null);\n\tconst sources = [];\n\tlet lastProvider, lastPrefix;\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix } = icon;\n\t\tif (prefix === lastPrefix && provider === lastProvider) return;\n\t\tlastProvider = provider;\n\t\tlastPrefix = prefix;\n\t\tsources.push(getStorage(provider, prefix));\n\t\tconst providerNewIcons = newIcons[provider] || (newIcons[provider] = Object.create(null));\n\t\tif (!providerNewIcons[prefix]) providerNewIcons[prefix] = [];\n\t});\n\tsortedIcons.pending.forEach((icon) => {\n\t\tconst { provider, prefix, name } = icon;\n\t\tconst storage = getStorage(provider, prefix);\n\t\tconst pendingQueue = storage.pendingIcons || (storage.pendingIcons = /* @__PURE__ */ new Set());\n\t\tif (!pendingQueue.has(name)) {\n\t\t\tpendingQueue.add(name);\n\t\t\tnewIcons[provider][prefix].push(name);\n\t\t}\n\t});\n\tsources.forEach((storage) => {\n\t\tconst list = newIcons[storage.provider][storage.prefix];\n\t\tif (list.length) loadNewIcons(storage, list);\n\t});\n\treturn callback ? storeCallback(callback, sortedIcons, sources) : emptyCallback;\n};\n/**\n* Load one icon using Promise\n*/\nconst loadIcon = (icon) => {\n\treturn new Promise((fulfill, reject) => {\n\t\tconst iconObj = typeof icon === \"string\" ? stringToIcon(icon, true) : icon;\n\t\tif (!iconObj) {\n\t\t\treject(icon);\n\t\t\treturn;\n\t\t}\n\t\tloadIcons([iconObj || icon], (loaded) => {\n\t\t\tif (loaded.length && iconObj) {\n\t\t\t\tconst data = getIconData(iconObj);\n\t\t\t\tif (data) {\n\t\t\t\t\tfulfill({\n\t\t\t\t\t\t...defaultIconProps,\n\t\t\t\t\t\t...data\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treject(icon);\n\t\t});\n\t});\n};\n\n/**\n* Set custom loader for multiple icons\n*/\nfunction setCustomIconsLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcons = loader;\n}\n/**\n* Set custom loader for one icon\n*/\nfunction setCustomIconLoader(loader, prefix, provider) {\n\tgetStorage(provider || \"\", prefix).loadIcon = loader;\n}\n\n/**\n* Convert IconifyIconCustomisations to FullIconCustomisations, checking value types\n*/\nfunction mergeCustomisations(defaults, item) {\n\tconst result = { ...defaults };\n\tfor (const key in item) {\n\t\tconst value = item[key];\n\t\tconst valueType = typeof value;\n\t\tif (key in defaultIconSizeCustomisations) {\n\t\t\tif (value === null || value && (valueType === \"string\" || valueType === \"number\")) result[key] = value;\n\t\t} else if (valueType === typeof result[key]) result[key] = key === \"rotate\" ? value % 4 : value;\n\t}\n\treturn result;\n}\n\nconst separator = /[\\s,]+/;\n/**\n* Apply \"flip\" string to icon customisations\n*/\nfunction flipFromString(custom, flip) {\n\tflip.split(separator).forEach((str) => {\n\t\tconst value = str.trim();\n\t\tswitch (value) {\n\t\t\tcase \"horizontal\":\n\t\t\t\tcustom.hFlip = true;\n\t\t\t\tbreak;\n\t\t\tcase \"vertical\":\n\t\t\t\tcustom.vFlip = true;\n\t\t\t\tbreak;\n\t\t}\n\t});\n}\n\n/**\n* Get rotation value\n*/\nfunction rotateFromString(value, defaultValue = 0) {\n\tconst units = value.replace(/^-?[0-9.]*/, \"\");\n\tfunction cleanup(value$1) {\n\t\twhile (value$1 < 0) value$1 += 4;\n\t\treturn value$1 % 4;\n\t}\n\tif (units === \"\") {\n\t\tconst num = parseInt(value);\n\t\treturn isNaN(num) ? 0 : cleanup(num);\n\t} else if (units !== value) {\n\t\tlet split = 0;\n\t\tswitch (units) {\n\t\t\tcase \"%\":\n\t\t\t\tsplit = 25;\n\t\t\t\tbreak;\n\t\t\tcase \"deg\": split = 90;\n\t\t}\n\t\tif (split) {\n\t\t\tlet num = parseFloat(value.slice(0, value.length - units.length));\n\t\t\tif (isNaN(num)) return 0;\n\t\t\tnum = num / split;\n\t\t\treturn num % 1 === 0 ? cleanup(num) : 0;\n\t\t}\n\t}\n\treturn defaultValue;\n}\n\n/**\n* Generate <svg>\n*/\nfunction iconToHTML(body, attributes) {\n\tlet renderAttribsHTML = body.indexOf(\"xlink:\") === -1 ? \"\" : \" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\"\";\n\tfor (const attr in attributes) renderAttribsHTML += \" \" + attr + \"=\\\"\" + attributes[attr] + \"\\\"\";\n\treturn \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + renderAttribsHTML + \">\" + body + \"</svg>\";\n}\n\n/**\n* Encode SVG for use in url()\n*\n* Short alternative to encodeURIComponent() that encodes only stuff used in SVG, generating\n* smaller code.\n*/\nfunction encodeSVGforURL(svg) {\n\treturn svg.replace(/\"/g, \"'\").replace(/%/g, \"%25\").replace(/#/g, \"%23\").replace(/</g, \"%3C\").replace(/>/g, \"%3E\").replace(/\\s+/g, \" \");\n}\n/**\n* Generate data: URL from SVG\n*/\nfunction svgToData(svg) {\n\treturn \"data:image/svg+xml,\" + encodeSVGforURL(svg);\n}\n/**\n* Generate url() from SVG\n*/\nfunction svgToURL(svg) {\n\treturn \"url(\\\"\" + svgToData(svg) + \"\\\")\";\n}\n\nlet policy;\n/**\n* Attempt to create policy\n*/\nfunction createPolicy() {\n\ttry {\n\t\tpolicy = window.trustedTypes.createPolicy(\"iconify\", { createHTML: (s) => s });\n\t} catch (err) {\n\t\tpolicy = null;\n\t}\n}\n/**\n* Clean up value for innerHTML assignment\n*\n* This code doesn't actually clean up anything.\n* It is intended be used with Iconify icon data, which has already been validated\n*/\nfunction cleanUpInnerHTML(html) {\n\tif (policy === void 0) createPolicy();\n\treturn policy ? policy.createHTML(html) : html;\n}\n\nconst defaultExtendedIconCustomisations = {\n ...defaultIconCustomisations,\n inline: false,\n};\n\n/**\n * Default SVG attributes\n */\nconst svgDefaults = {\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlnsXlink': 'http://www.w3.org/1999/xlink',\n 'aria-hidden': true,\n 'role': 'img',\n};\n/**\n * Style modes\n */\nconst commonProps = {\n display: 'inline-block',\n};\nconst monotoneProps = {\n backgroundColor: 'currentColor',\n};\nconst coloredProps = {\n backgroundColor: 'transparent',\n};\n// Dynamically add common props to variables above\nconst propsToAdd = {\n Image: 'var(--svg)',\n Repeat: 'no-repeat',\n Size: '100% 100%',\n};\nconst propsToAddTo = {\n WebkitMask: monotoneProps,\n mask: monotoneProps,\n background: coloredProps,\n};\nfor (const prefix in propsToAddTo) {\n const list = propsToAddTo[prefix];\n for (const prop in propsToAdd) {\n list[prefix + prop] = propsToAdd[prop];\n }\n}\n/**\n * Default values for customisations for inline icon\n */\nconst inlineDefaults = {\n ...defaultExtendedIconCustomisations,\n inline: true,\n};\n/**\n * Fix size: add 'px' to numbers\n */\nfunction fixSize(value) {\n return value + (value.match(/^[-0-9.]+$/) ? 'px' : '');\n}\n/**\n * Render icon\n */\nconst render = (\n// Icon must be validated before calling this function\nicon, \n// Partial properties\nprops, \n// Icon name\nname) => {\n // Get default properties\n const defaultProps = props.inline\n ? inlineDefaults\n : defaultExtendedIconCustomisations;\n // Get all customisations\n const customisations = mergeCustomisations(defaultProps, props);\n // Check mode\n const mode = props.mode || 'svg';\n // Create style\n const style = {};\n const customStyle = props.style || {};\n // Create SVG component properties\n const componentProps = {\n ...(mode === 'svg' ? svgDefaults : {}),\n };\n if (name) {\n const iconName = stringToIcon(name, false, true);\n if (iconName) {\n const classNames = ['iconify'];\n const props = [\n 'provider',\n 'prefix',\n ];\n for (const prop of props) {\n if (iconName[prop]) {\n classNames.push('iconify--' + iconName[prop]);\n }\n }\n componentProps.className = classNames.join(' ');\n }\n }\n // Get element properties\n for (let key in props) {\n const value = props[key];\n if (value === void 0) {\n continue;\n }\n switch (key) {\n // Properties to ignore\n case 'icon':\n case 'style':\n case 'children':\n case 'onLoad':\n case 'mode':\n case 'ssr':\n case 'fallback':\n break;\n // Forward ref\n case '_ref':\n componentProps.ref = value;\n break;\n // Merge class names\n case 'className':\n componentProps[key] =\n (componentProps[key] ? componentProps[key] + ' ' : '') +\n value;\n break;\n // Boolean attributes\n case 'inline':\n case 'hFlip':\n case 'vFlip':\n customisations[key] =\n value === true || value === 'true' || value === 1;\n break;\n // Flip as string: 'horizontal,vertical'\n case 'flip':\n if (typeof value === 'string') {\n flipFromString(customisations, value);\n }\n break;\n // Color: copy to style\n case 'color':\n style.color = value;\n break;\n // Rotation as string\n case 'rotate':\n if (typeof value === 'string') {\n customisations[key] = rotateFromString(value);\n }\n else if (typeof value === 'number') {\n customisations[key] = value;\n }\n break;\n // Remove aria-hidden\n case 'ariaHidden':\n case 'aria-hidden':\n if (value !== true && value !== 'true') {\n delete componentProps['aria-hidden'];\n }\n break;\n // Copy missing property if it does not exist in customisations\n default:\n if (defaultProps[key] === void 0) {\n componentProps[key] = value;\n }\n }\n }\n // Generate icon\n const item = iconToSVG(icon, customisations);\n const renderAttribs = item.attributes;\n // Inline display\n if (customisations.inline) {\n style.verticalAlign = '-0.125em';\n }\n if (mode === 'svg') {\n // Add style\n componentProps.style = {\n ...style,\n ...customStyle,\n };\n // Add icon stuff\n Object.assign(componentProps, renderAttribs);\n // Counter for ids based on \"id\" property to render icons consistently on server and client\n let localCounter = 0;\n let id = props.id;\n if (typeof id === 'string') {\n // Convert '-' to '_' to avoid errors in animations\n id = id.replace(/-/g, '_');\n }\n // Add icon stuff\n componentProps.dangerouslySetInnerHTML = {\n __html: cleanUpInnerHTML(replaceIDs(item.body, id ? () => id + 'ID' + localCounter++ : 'iconifyReact')),\n };\n return createElement('svg', componentProps);\n }\n // Render <span> with style\n const { body, width, height } = icon;\n const useMask = mode === 'mask' ||\n (mode === 'bg' ? false : body.indexOf('currentColor') !== -1);\n // Generate SVG\n const html = iconToHTML(body, {\n ...renderAttribs,\n width: width + '',\n height: height + '',\n });\n // Generate style\n componentProps.style = {\n ...style,\n '--svg': svgToURL(html),\n 'width': fixSize(renderAttribs.width),\n 'height': fixSize(renderAttribs.height),\n ...commonProps,\n ...(useMask ? monotoneProps : coloredProps),\n ...customStyle,\n };\n return createElement('span', componentProps);\n};\n\n/**\n * Initialise stuff\n */\n// Enable short names\nallowSimpleNames(true);\n// Set API module\nsetAPIModule('', fetchAPIModule);\n/**\n * Browser stuff\n */\nif (typeof document !== 'undefined' && typeof window !== 'undefined') {\n const _window = window;\n // Load icons from global \"IconifyPreload\"\n if (_window.IconifyPreload !== void 0) {\n const preload = _window.IconifyPreload;\n const err = 'Invalid IconifyPreload syntax.';\n if (typeof preload === 'object' && preload !== null) {\n (preload instanceof Array ? preload : [preload]).forEach((item) => {\n try {\n if (\n // Check if item is an object and not null/array\n typeof item !== 'object' ||\n item === null ||\n item instanceof Array ||\n // Check for 'icons' and 'prefix'\n typeof item.icons !== 'object' ||\n typeof item.prefix !== 'string' ||\n // Add icon set\n !addCollection(item)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n });\n }\n }\n // Set API from global \"IconifyProviders\"\n if (_window.IconifyProviders !== void 0) {\n const providers = _window.IconifyProviders;\n if (typeof providers === 'object' && providers !== null) {\n for (let key in providers) {\n const err = 'IconifyProviders[' + key + '] is invalid.';\n try {\n const value = providers[key];\n if (typeof value !== 'object' ||\n !value ||\n value.resources === void 0) {\n continue;\n }\n if (!addAPIProvider(key, value)) {\n console.error(err);\n }\n }\n catch (e) {\n console.error(err);\n }\n }\n }\n }\n}\nfunction IconComponent(props) {\n const [mounted, setMounted] = useState(!!props.ssr);\n const [abort, setAbort] = useState({});\n // Get initial state\n function getInitialState(mounted) {\n if (mounted) {\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n return {\n name: '',\n data: name,\n };\n }\n const data = getIconData(name);\n if (data) {\n return {\n name,\n data,\n };\n }\n }\n return {\n name: '',\n };\n }\n const [state, setState] = useState(getInitialState(!!props.ssr));\n // Cancel loading\n function cleanup() {\n const callback = abort.callback;\n if (callback) {\n callback();\n setAbort({});\n }\n }\n // Change state if it is different\n function changeState(newState) {\n if (JSON.stringify(state) !== JSON.stringify(newState)) {\n cleanup();\n setState(newState);\n return true;\n }\n }\n // Update state\n function updateState() {\n var _a;\n const name = props.icon;\n if (typeof name === 'object') {\n // Icon as object\n changeState({\n name: '',\n data: name,\n });\n return;\n }\n // New icon or got icon data\n const data = getIconData(name);\n if (changeState({\n name,\n data,\n })) {\n if (data === undefined) {\n // Load icon, update state when done\n const callback = loadIcons([name], updateState);\n setAbort({\n callback,\n });\n }\n else if (data) {\n // Icon data is available: trigger onLoad callback if present\n (_a = props.onLoad) === null || _a === void 0 ? void 0 : _a.call(props, name);\n }\n }\n }\n // Mounted state, cleanup for loader\n useEffect(() => {\n setMounted(true);\n return cleanup;\n }, []);\n // Icon changed or component mounted\n useEffect(() => {\n if (mounted) {\n updateState();\n }\n }, [props.icon, mounted]);\n // Render icon\n const { name, data } = state;\n if (!data) {\n return props.children\n ? props.children\n : props.fallback\n ? props.fallback\n : createElement('span', {});\n }\n return render({\n ...defaultIconProps,\n ...data,\n }, props, name);\n}\n/**\n * Block icon\n *\n * @param props - Component properties\n */\nconst Icon = forwardRef((props, ref) => IconComponent({\n ...props,\n _ref: ref,\n}));\n/**\n * Inline icon (has negative verticalAlign that makes it behave like icon font)\n *\n * @param props - Component properties\n */\nconst InlineIcon = forwardRef((props, ref) => IconComponent({\n inline: true,\n ...props,\n _ref: ref,\n}));\n/**\n * Internal API\n */\nconst _api = {\n getAPIConfig,\n setAPIModule,\n sendAPIQuery,\n setFetch,\n getFetch,\n listAPIProviders,\n};\n\nexport { Icon, InlineIcon, _api, addAPIProvider, addCollection, addIcon, iconToSVG as buildIcon, calculateSize, getIcon, iconLoaded, listIcons, loadIcon, loadIcons, replaceIDs, setCustomIconLoader, setCustomIconsLoader };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Concatenates two arrays faster than the array spread operator.\n */\nexport const concatArrays = <T, U>(\n array1: readonly T[],\n array2: readonly U[],\n): readonly (T | U)[] => {\n // Pre-allocate for better V8 optimization\n const combinedArray: (T | U)[] = new Array(array1.length + array2.length)\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i]!\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i]!\n }\n return combinedArray\n}\n","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\nimport { concatArrays } from './utils'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[] | null\n classGroupId: AnyClassGroupIds | undefined // Always define optional props for consistent shape\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (\n classGroupId: AnyClassGroupIds,\n validator: ClassValidator,\n): ClassValidatorObject => ({\n classGroupId,\n validator,\n})\n\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (\n nextPart: Map<string, ClassPartObject> = new Map(),\n validators: ClassValidatorObject[] | null = null,\n classGroupId?: AnyClassGroupIds,\n): ClassPartObject => ({\n nextPart,\n validators,\n classGroupId,\n})\n\nconst CLASS_PART_SEPARATOR = '-'\n\nconst EMPTY_CONFLICTS: readonly AnyClassGroupIds[] = []\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className)\n }\n\n const classParts = className.split(CLASS_PART_SEPARATOR)\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0\n return getGroupRecursive(classParts, startIndex, classMap)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ): readonly AnyClassGroupIds[] => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId]\n const baseConflicts = conflictingClassGroups[classGroupId]\n\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts)\n }\n // Only modifier conflicts\n return modifierConflicts\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS\n }\n\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n startIndex: number,\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n const classPathsLength = classParts.length - startIndex\n if (classPathsLength === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[startIndex]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject)\n if (result) return result\n }\n\n const validators = classPartObject.validators\n if (validators === null) {\n return undefined\n }\n\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest =\n startIndex === 0\n ? classParts.join(CLASS_PART_SEPARATOR)\n : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR)\n const validatorsLength = validators.length\n\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i]!\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId\n }\n }\n\n return undefined\n}\n\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = (className: string): AnyClassGroupIds | undefined =>\n className.slice(1, -1).indexOf(':') === -1\n ? undefined\n : (() => {\n const content = className.slice(1, -1)\n const colonIndex = content.indexOf(':')\n const property = content.slice(0, colonIndex)\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined\n })()\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, classGroups } = config\n return processClassGroups(classGroups, theme)\n}\n\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (\n classGroups: Record<AnyClassGroupIds, ClassGroup<AnyThemeGroupIds>>,\n theme: ThemeObject<AnyThemeGroupIds>,\n): ClassPartObject => {\n const classMap = createClassPartObject()\n\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId]!\n processClassesRecursively(group, classMap, classGroupId, theme)\n }\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const len = classGroup.length\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i]!\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme)\n }\n}\n\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (\n classDefinition: ClassGroup<AnyThemeGroupIds>[number],\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId)\n return\n }\n\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme)\n return\n }\n\n processObjectDefinition(\n classDefinition as Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject,\n classGroupId,\n theme,\n )\n}\n\nconst processStringDefinition = (\n classDefinition: string,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n) => {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n}\n\nconst processFunctionDefinition = (\n classDefinition: Function,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme)\n return\n }\n\n if (classPartObject.validators === null) {\n classPartObject.validators = []\n }\n classPartObject.validators.push(\n createClassValidatorObject(classGroupId, classDefinition as ClassValidator),\n )\n}\n\nconst processObjectDefinition = (\n classDefinition: Record<string, ClassGroup<AnyThemeGroupIds>>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n const entries = Object.entries(classDefinition)\n const len = entries.length\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i]!\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme)\n }\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string): ClassPartObject => {\n let current = classPartObject\n const parts = path.split(CLASS_PART_SEPARATOR)\n const len = parts.length\n\n for (let i = 0; i < len; i++) {\n const part = parts[i]!\n\n let next = current.nextPart.get(part)\n if (!next) {\n next = createClassPartObject()\n current.nextPart.set(part, next)\n }\n current = next\n }\n\n return current\n}\n\n// Type guard maintains monomorphic check\nconst isThemeGetter = (func: Function): func is ThemeGetter =>\n 'isThemeGetter' in func && (func as ThemeGetter).isThemeGetter === true\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key extends string, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache implementation using plain objects for simplicity\nexport const createLruCache = <Key extends string, Value>(\n maxCacheSize: number,\n): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache: Record<Key, Value> = Object.create(null)\n let previousCache: Record<Key, Value> = Object.create(null)\n\n const update = (key: Key, value: Value) => {\n cache[key] = value\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = Object.create(null)\n }\n }\n\n return {\n get(key) {\n let value = cache[key]\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig, ParsedClassName } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nconst MODIFIER_SEPARATOR = ':'\nconst EMPTY_MODIFIERS: string[] = []\n\n// Pre-allocated result object shape for consistency\nconst createResultObject = (\n modifiers: string[],\n hasImportantModifier: boolean,\n baseClassName: string,\n maybePostfixModifierPosition?: number,\n isExternal?: boolean,\n): ParsedClassName => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal,\n})\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { prefix, experimentalParseClassName } = config\n\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = (className: string): ParsedClassName => {\n // Use simple array with push for better performance\n const modifiers: string[] = []\n\n let bracketDepth = 0\n let parenDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n const len = className.length\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index]!\n\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + 1\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') bracketDepth++\n else if (currentCharacter === ']') bracketDepth--\n else if (currentCharacter === '(') parenDepth++\n else if (currentCharacter === ')') parenDepth--\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.slice(modifierStart)\n\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier\n let hasImportantModifier = false\n\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1)\n hasImportantModifier = true\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n ) {\n baseClassName = baseClassNameWithImportantModifier.slice(1)\n hasImportantModifier = true\n }\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return createResultObject(\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n )\n }\n\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n className.startsWith(fullPrefix)\n ? parseClassNameOriginal(className.slice(fullPrefix.length))\n : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true)\n }\n\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName\n parseClassName = (className: string) =>\n experimentalParseClassName({ className, parseClassName: parseClassNameOriginal })\n }\n\n return parseClassName\n}\n","import { AnyConfig } from './types'\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const createSortModifiers = (config: AnyConfig) => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map<string, number>()\n\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index) // High weights for sensitive mods\n })\n\n return (modifiers: readonly string[]): string[] => {\n const result: string[] = []\n let currentSegment: string[] = []\n\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i]!\n\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '['\n const isOrderSensitive = modifierWeights.has(modifier)\n\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n currentSegment = []\n }\n result.push(modifier)\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier)\n }\n }\n\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort()\n result.push(...currentSegment)\n }\n\n return result\n }\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { createSortModifiers } from './sort-modifiers'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds, sortModifiers } =\n configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n } = parseClassName(originalClassName)\n\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n let hasPostfixModifier = !!maybePostfixModifierPosition\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n // Fast path: skip sorting for empty or single modifier\n const variantModifier =\n modifiers.length === 0\n ? ''\n : modifiers.length === 1\n ? modifiers[0]!\n : sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport const twJoin = (...classLists: ClassNameValue[]): string => {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < classLists.length) {\n if ((argument = classLists[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string): string => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createTailwindMerge = (\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge => {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall: (classList: string) => string\n\n const initTailwindMerge = (classList: string) => {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n const tailwindMerge = (classList: string) => {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n functionToCall = initTailwindMerge\n\n return (...args: ClassNameValue[]) => functionToCall(twJoin(...args))\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nconst fallbackThemeArr: ThemeObject<DefaultThemeGroupIds>[DefaultThemeGroupIds] = []\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(\n key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>,\n): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || fallbackThemeArr\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isFraction = (value: string) => fractionRegex.test(value)\n\nexport const isNumber = (value: string) => !!value && !Number.isNaN(Number(value))\n\nexport const isInteger = (value: string) => !!value && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nexport const isAny = () => true\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n\nexport const isAnyNonArbitrary = (value: string) =>\n !isArbitraryValue(value) && !isArbitraryVariable(value)\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, isLabelSize, isNever)\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, isLabelLength, isLengthOnly)\n\nexport const isArbitraryNumber = (value: string) =>\n getIsArbitraryValue(value, isLabelNumber, isNumber)\n\nexport const isArbitraryWeight = (value: string) => getIsArbitraryValue(value, isLabelWeight, isAny)\n\nexport const isArbitraryFamilyName = (value: string) =>\n getIsArbitraryValue(value, isLabelFamilyName, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, isLabelPosition, isNever)\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, isLabelImage, isImage)\n\nexport const isArbitraryShadow = (value: string) =>\n getIsArbitraryValue(value, isLabelShadow, isShadow)\n\nexport const isArbitraryVariable = (value: string) => arbitraryVariableRegex.test(value)\n\nexport const isArbitraryVariableLength = (value: string) =>\n getIsArbitraryVariable(value, isLabelLength)\n\nexport const isArbitraryVariableFamilyName = (value: string) =>\n getIsArbitraryVariable(value, isLabelFamilyName)\n\nexport const isArbitraryVariablePosition = (value: string) =>\n getIsArbitraryVariable(value, isLabelPosition)\n\nexport const isArbitraryVariableSize = (value: string) => getIsArbitraryVariable(value, isLabelSize)\n\nexport const isArbitraryVariableImage = (value: string) =>\n getIsArbitraryVariable(value, isLabelImage)\n\nexport const isArbitraryVariableShadow = (value: string) =>\n getIsArbitraryVariable(value, isLabelShadow, true)\n\nexport const isArbitraryVariableWeight = (value: string) =>\n getIsArbitraryVariable(value, isLabelWeight, true)\n\n// Helpers\n\nconst getIsArbitraryValue = (\n value: string,\n testLabel: (label: string) => boolean,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst getIsArbitraryVariable = (\n value: string,\n testLabel: (label: string) => boolean,\n shouldMatchNoLabel = false,\n) => {\n const result = arbitraryVariableRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return testLabel(result[1])\n }\n return shouldMatchNoLabel\n }\n\n return false\n}\n\n// Labels\n\nconst isLabelPosition = (label: string) => label === 'position' || label === 'percentage'\n\nconst isLabelImage = (label: string) => label === 'image' || label === 'url'\n\nconst isLabelSize = (label: string) => label === 'length' || label === 'size' || label === 'bg-size'\n\nconst isLabelLength = (label: string) => label === 'length'\n\nconst isLabelNumber = (label: string) => label === 'number'\n\nconst isLabelFamilyName = (label: string) => label === 'family-name'\n\nconst isLabelWeight = (label: string) => label === 'number' || label === 'weight'\n\nconst isLabelShadow = (label: string) => label === 'shadow'\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n\n const themeColor = fromTheme('color')\n const themeFont = fromTheme('font')\n const themeText = fromTheme('text')\n const themeFontWeight = fromTheme('font-weight')\n const themeTracking = fromTheme('tracking')\n const themeLeading = fromTheme('leading')\n const themeBreakpoint = fromTheme('breakpoint')\n const themeContainer = fromTheme('container')\n const themeSpacing = fromTheme('spacing')\n const themeRadius = fromTheme('radius')\n const themeShadow = fromTheme('shadow')\n const themeInsetShadow = fromTheme('inset-shadow')\n const themeTextShadow = fromTheme('text-shadow')\n const themeDropShadow = fromTheme('drop-shadow')\n const themeBlur = fromTheme('blur')\n const themePerspective = fromTheme('perspective')\n const themeAspect = fromTheme('aspect')\n const themeEase = fromTheme('ease')\n const themeAnimate = fromTheme('animate')\n\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n\n const scaleBreak = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const scalePosition = () =>\n [\n 'center',\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top',\n 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top',\n 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom',\n 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom',\n ] as const\n const scalePositionWithArbitrary = () =>\n [...scalePosition(), isArbitraryVariable, isArbitraryValue] as const\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const scaleOverscroll = () => ['auto', 'contain', 'none'] as const\n const scaleUnambiguousSpacing = () =>\n [isArbitraryVariable, isArbitraryValue, themeSpacing] as const\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()] as const\n const scaleGridTemplateColsRows = () =>\n [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridColRowStartAndEnd = () =>\n [\n 'auto',\n { span: ['full', isInteger, isArbitraryVariable, isArbitraryValue] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleGridColRowStartOrEnd = () =>\n [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] as const\n const scaleGridAutoColsRows = () =>\n ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue] as const\n const scaleAlignPrimaryAxis = () =>\n [\n 'start',\n 'end',\n 'center',\n 'between',\n 'around',\n 'evenly',\n 'stretch',\n 'baseline',\n 'center-safe',\n 'end-safe',\n ] as const\n const scaleAlignSecondaryAxis = () =>\n ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'] as const\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()] as const\n const scaleSizing = () =>\n [\n isFraction,\n 'auto',\n 'full',\n 'dvw',\n 'dvh',\n 'lvw',\n 'lvh',\n 'svw',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingInline = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'dvw',\n 'lvw',\n 'svw',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleSizingBlock = () =>\n [\n isFraction,\n 'screen',\n 'full',\n 'lh',\n 'dvh',\n 'lvh',\n 'svh',\n 'min',\n 'max',\n 'fit',\n ...scaleUnambiguousSpacing(),\n ] as const\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue] as const\n const scaleBgPosition = () =>\n [\n ...scalePosition(),\n isArbitraryVariablePosition,\n isArbitraryPosition,\n { position: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleBgRepeat = () => ['no-repeat', { repeat: ['', 'x', 'y', 'space', 'round'] }] as const\n const scaleBgSize = () =>\n [\n 'auto',\n 'cover',\n 'contain',\n isArbitraryVariableSize,\n isArbitrarySize,\n { size: [isArbitraryVariable, isArbitraryValue] },\n ] as const\n const scaleGradientStopPosition = () =>\n [isPercent, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleRadius = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n 'full',\n themeRadius,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleBorderWidth = () =>\n ['', isNumber, isArbitraryVariableLength, isArbitraryLength] as const\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'] as const\n const scaleBlendMode = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const scaleMaskImagePosition = () =>\n [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition] as const\n const scaleBlur = () =>\n [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeBlur,\n isArbitraryVariable,\n isArbitraryValue,\n ] as const\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue] as const\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()] as const\n\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n ],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest'],\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [\n {\n aspect: [\n 'auto',\n 'square',\n isFraction,\n isArbitraryValue,\n isArbitraryVariable,\n themeAspect,\n ],\n },\n ],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [\n { columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer] },\n ],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': scaleBreak() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': scaleBreak() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: scalePositionWithArbitrary() }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: scaleOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': scaleOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': scaleOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: scaleOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': scaleOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': scaleOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: scaleInset() }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': scaleInset() }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': scaleInset() }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [\n {\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset(),\n },\n ],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [\n {\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset(),\n },\n ],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{ 'inset-bs': scaleInset() }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{ 'inset-be': scaleInset() }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: scaleInset() }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: scaleInset() }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: scaleInset() }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: scaleInset() }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [\n {\n basis: [\n isFraction,\n 'full',\n 'auto',\n themeContainer,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['nowrap', 'wrap', 'wrap-reverse'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [\n {\n order: [\n isInteger,\n 'first',\n 'last',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': scaleGridTemplateColsRows() }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{ col: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': scaleGridTemplateColsRows() }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{ row: scaleGridColRowStartAndEnd() }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': scaleGridColRowStartOrEnd() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': scaleGridAutoColsRows() }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': scaleGridAutoColsRows() }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: scaleUnambiguousSpacing() }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': scaleUnambiguousSpacing() }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': scaleUnambiguousSpacing() }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: [...scaleAlignPrimaryAxis(), 'normal'] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...scaleAlignPrimaryAxis()] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: [...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [\n { self: ['auto', ...scaleAlignSecondaryAxis(), { baseline: ['', 'last'] }] },\n ],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': scaleAlignPrimaryAxis() }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', ...scaleAlignSecondaryAxis()] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: scaleUnambiguousSpacing() }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: scaleUnambiguousSpacing() }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: scaleUnambiguousSpacing() }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{ pbs: scaleUnambiguousSpacing() }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{ pbe: scaleUnambiguousSpacing() }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: scaleUnambiguousSpacing() }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: scaleUnambiguousSpacing() }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: scaleUnambiguousSpacing() }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: scaleUnambiguousSpacing() }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: scaleMargin() }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: scaleMargin() }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: scaleMargin() }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: scaleMargin() }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: scaleMargin() }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{ mbs: scaleMargin() }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{ mbe: scaleMargin() }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: scaleMargin() }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: scaleMargin() }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: scaleMargin() }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: scaleMargin() }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{ 'space-x': scaleUnambiguousSpacing() }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{ 'space-y': scaleUnambiguousSpacing() }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n\n // --------------\n // --- Sizing ---\n // --------------\n\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{ size: scaleSizing() }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{ inline: ['auto', ...scaleSizingInline()] }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{ 'min-inline': ['auto', ...scaleSizingInline()] }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{ 'max-inline': ['none', ...scaleSizingInline()] }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{ block: ['auto', ...scaleSizingBlock()] }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{ 'min-block': ['auto', ...scaleSizingBlock()] }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{ 'max-block': ['none', ...scaleSizingBlock()] }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{ w: [themeContainer, 'screen', ...scaleSizing()] }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [\n {\n 'min-w': [\n themeContainer,\n 'screen',\n /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none',\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n themeContainer,\n 'screen',\n 'none',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose',\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n { screen: [themeBreakpoint] },\n ...scaleSizing(),\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{ h: ['screen', 'lh', ...scaleSizing()] }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{ 'min-h': ['screen', 'lh', 'none', ...scaleSizing()] }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{ 'max-h': ['screen', 'lh', ...scaleSizing()] }],\n\n // ------------------\n // --- Typography ---\n // ------------------\n\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [\n { text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [\n {\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight],\n },\n ],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [\n {\n 'font-stretch': [\n 'ultra-condensed',\n 'extra-condensed',\n 'condensed',\n 'semi-condensed',\n 'normal',\n 'semi-expanded',\n 'expanded',\n 'extra-expanded',\n 'ultra-expanded',\n isPercent,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [\n { font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont] },\n ],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{ 'font-features': [isArbitraryValue] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [\n { 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber] },\n ],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading,\n ...scaleUnambiguousSpacing(),\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryVariable, isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [\n { list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: scaleColor() }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: scaleColor() }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...scaleLineStyle(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n {\n decoration: [\n isNumber,\n 'from-font',\n 'auto',\n isArbitraryVariable,\n isArbitraryLength,\n ],\n },\n ],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: scaleColor() }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [\n { 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: scaleUnambiguousSpacing() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{ wrap: ['break-word', 'anywhere', 'normal'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // -------------------\n // --- Backgrounds ---\n // -------------------\n\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: scaleBgPosition() }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: scaleBgRepeat() }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: scaleBgSize() }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n {\n linear: [\n { to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isInteger,\n isArbitraryVariable,\n isArbitraryValue,\n ],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue],\n },\n isArbitraryVariableImage,\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: scaleColor() }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: scaleGradientStopPosition() }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: scaleColor() }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: scaleColor() }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: scaleColor() }],\n\n // ---------------\n // --- Borders ---\n // ---------------\n\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: scaleRadius() }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': scaleRadius() }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': scaleRadius() }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': scaleRadius() }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': scaleRadius() }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': scaleRadius() }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': scaleRadius() }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': scaleRadius() }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': scaleRadius() }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': scaleRadius() }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': scaleRadius() }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': scaleRadius() }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': scaleRadius() }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': scaleRadius() }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': scaleRadius() }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: scaleBorderWidth() }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': scaleBorderWidth() }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': scaleBorderWidth() }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': scaleBorderWidth() }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': scaleBorderWidth() }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{ 'border-bs': scaleBorderWidth() }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{ 'border-be': scaleBorderWidth() }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': scaleBorderWidth() }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': scaleBorderWidth() }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': scaleBorderWidth() }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': scaleBorderWidth() }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{ 'divide-x': scaleBorderWidth() }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{ 'divide-y': scaleBorderWidth() }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{ divide: [...scaleLineStyle(), 'hidden', 'none'] }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: scaleColor() }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': scaleColor() }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': scaleColor() }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': scaleColor() }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': scaleColor() }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{ 'border-bs': scaleColor() }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{ 'border-be': scaleColor() }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': scaleColor() }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': scaleColor() }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': scaleColor() }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': scaleColor() }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: scaleColor() }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: [...scaleLineStyle(), 'none', 'hidden'] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [\n { 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [\n { outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength] },\n ],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: scaleColor() }],\n\n // ---------------\n // --- Effects ---\n // ---------------\n\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [\n {\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{ shadow: scaleColor() }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [\n {\n 'inset-shadow': [\n 'none',\n themeInsetShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{ 'inset-shadow': scaleColor() }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{ ring: scaleBorderWidth() }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{ ring: scaleColor() }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{ 'ring-offset': [isNumber, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{ 'ring-offset': scaleColor() }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{ 'inset-ring': scaleBorderWidth() }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{ 'inset-ring': scaleColor() }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [\n {\n 'text-shadow': [\n 'none',\n themeTextShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{ 'text-shadow': scaleColor() }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': scaleBlendMode() }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [\n { 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n 'mask-no-clip',\n ],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{ mask: ['add', 'subtract', 'intersect', 'exclude'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{ 'mask-linear': [isNumber] }],\n 'mask-image-linear-from-pos': [{ 'mask-linear-from': scaleMaskImagePosition() }],\n 'mask-image-linear-to-pos': [{ 'mask-linear-to': scaleMaskImagePosition() }],\n 'mask-image-linear-from-color': [{ 'mask-linear-from': scaleColor() }],\n 'mask-image-linear-to-color': [{ 'mask-linear-to': scaleColor() }],\n 'mask-image-t-from-pos': [{ 'mask-t-from': scaleMaskImagePosition() }],\n 'mask-image-t-to-pos': [{ 'mask-t-to': scaleMaskImagePosition() }],\n 'mask-image-t-from-color': [{ 'mask-t-from': scaleColor() }],\n 'mask-image-t-to-color': [{ 'mask-t-to': scaleColor() }],\n 'mask-image-r-from-pos': [{ 'mask-r-from': scaleMaskImagePosition() }],\n 'mask-image-r-to-pos': [{ 'mask-r-to': scaleMaskImagePosition() }],\n 'mask-image-r-from-color': [{ 'mask-r-from': scaleColor() }],\n 'mask-image-r-to-color': [{ 'mask-r-to': scaleColor() }],\n 'mask-image-b-from-pos': [{ 'mask-b-from': scaleMaskImagePosition() }],\n 'mask-image-b-to-pos': [{ 'mask-b-to': scaleMaskImagePosition() }],\n 'mask-image-b-from-color': [{ 'mask-b-from': scaleColor() }],\n 'mask-image-b-to-color': [{ 'mask-b-to': scaleColor() }],\n 'mask-image-l-from-pos': [{ 'mask-l-from': scaleMaskImagePosition() }],\n 'mask-image-l-to-pos': [{ 'mask-l-to': scaleMaskImagePosition() }],\n 'mask-image-l-from-color': [{ 'mask-l-from': scaleColor() }],\n 'mask-image-l-to-color': [{ 'mask-l-to': scaleColor() }],\n 'mask-image-x-from-pos': [{ 'mask-x-from': scaleMaskImagePosition() }],\n 'mask-image-x-to-pos': [{ 'mask-x-to': scaleMaskImagePosition() }],\n 'mask-image-x-from-color': [{ 'mask-x-from': scaleColor() }],\n 'mask-image-x-to-color': [{ 'mask-x-to': scaleColor() }],\n 'mask-image-y-from-pos': [{ 'mask-y-from': scaleMaskImagePosition() }],\n 'mask-image-y-to-pos': [{ 'mask-y-to': scaleMaskImagePosition() }],\n 'mask-image-y-from-color': [{ 'mask-y-from': scaleColor() }],\n 'mask-image-y-to-color': [{ 'mask-y-to': scaleColor() }],\n 'mask-image-radial': [{ 'mask-radial': [isArbitraryVariable, isArbitraryValue] }],\n 'mask-image-radial-from-pos': [{ 'mask-radial-from': scaleMaskImagePosition() }],\n 'mask-image-radial-to-pos': [{ 'mask-radial-to': scaleMaskImagePosition() }],\n 'mask-image-radial-from-color': [{ 'mask-radial-from': scaleColor() }],\n 'mask-image-radial-to-color': [{ 'mask-radial-to': scaleColor() }],\n 'mask-image-radial-shape': [{ 'mask-radial': ['circle', 'ellipse'] }],\n 'mask-image-radial-size': [\n { 'mask-radial': [{ closest: ['side', 'corner'], farthest: ['side', 'corner'] }] },\n ],\n 'mask-image-radial-pos': [{ 'mask-radial-at': scalePosition() }],\n 'mask-image-conic-pos': [{ 'mask-conic': [isNumber] }],\n 'mask-image-conic-from-pos': [{ 'mask-conic-from': scaleMaskImagePosition() }],\n 'mask-image-conic-to-pos': [{ 'mask-conic-to': scaleMaskImagePosition() }],\n 'mask-image-conic-from-color': [{ 'mask-conic-from': scaleColor() }],\n 'mask-image-conic-to-color': [{ 'mask-conic-to': scaleColor() }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{ mask: ['alpha', 'luminance', 'match'] }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [\n { 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view'] },\n ],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{ mask: scaleBgPosition() }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{ mask: scaleBgRepeat() }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{ mask: scaleBgSize() }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{ 'mask-type': ['alpha', 'luminance'] }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{ mask: ['none', isArbitraryVariable, isArbitraryValue] }],\n\n // ---------------\n // --- Filters ---\n // ---------------\n\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [\n {\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: scaleBlur() }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [\n {\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '',\n 'none',\n themeDropShadow,\n isArbitraryVariableShadow,\n isArbitraryShadow,\n ],\n },\n ],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{ 'drop-shadow': scaleColor() }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [\n {\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': scaleBlur() }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [\n { 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [\n { 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [\n { 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [\n { 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [\n { 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [\n { 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [\n { 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [\n { 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue] },\n ],\n\n // --------------\n // --- Tables ---\n // --------------\n\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': scaleUnambiguousSpacing() }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': scaleUnambiguousSpacing() }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n '',\n 'all',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n 'none',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{ transition: ['normal', 'discrete'] }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue] }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [\n { ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: [isNumber, isArbitraryVariable, isArbitraryValue] }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue] }],\n\n // ------------------\n // --- Transforms ---\n // ------------------\n\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{ backface: ['hidden', 'visible'] }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [\n { perspective: [themePerspective, isArbitraryVariable, isArbitraryValue] },\n ],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{ 'perspective-origin': scalePositionWithArbitrary() }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: scaleRotate() }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{ 'rotate-x': scaleRotate() }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{ 'rotate-y': scaleRotate() }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{ 'rotate-z': scaleRotate() }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: scaleScale() }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': scaleScale() }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': scaleScale() }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{ 'scale-z': scaleScale() }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{ skew: scaleSkew() }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': scaleSkew() }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': scaleSkew() }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [\n { transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu'] },\n ],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{ origin: scalePositionWithArbitrary() }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{ transform: ['3d', 'flat'] }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{ translate: scaleTranslate() }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': scaleTranslate() }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': scaleTranslate() }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{ 'translate-z': scaleTranslate() }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: scaleColor() }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: scaleColor() }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [\n { scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light'] },\n ],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{ 'field-sizing': ['fixed', 'content'] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['auto', 'none'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', '', 'y', 'x'] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{ 'scroll-mbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{ 'scroll-mbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{ 'scroll-pbs': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{ 'scroll-pbe': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': scaleUnambiguousSpacing() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': scaleUnambiguousSpacing() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{ touch: ['auto', 'none', 'manipulation'] }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{ 'touch-pan': ['x', 'left', 'right'] }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{ 'touch-pan': ['y', 'up', 'down'] }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n {\n 'will-change': [\n 'auto',\n 'scroll',\n 'contents',\n 'transform',\n isArbitraryVariable,\n isArbitraryValue,\n ],\n },\n ],\n\n // -----------\n // --- SVG ---\n // -----------\n\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: ['none', ...scaleColor()] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [\n {\n stroke: [\n isNumber,\n isArbitraryVariableLength,\n isArbitraryLength,\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: ['none', ...scaleColor()] }],\n\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: [\n 'inset-x',\n 'inset-y',\n 'inset-bs',\n 'inset-be',\n 'start',\n 'end',\n 'top',\n 'right',\n 'bottom',\n 'left',\n ],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-x',\n 'border-w-y',\n 'border-w-s',\n 'border-w-e',\n 'border-w-bs',\n 'border-w-be',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-x',\n 'border-color-y',\n 'border-color-s',\n 'border-color-e',\n 'border-color-bs',\n 'border-color-be',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mbs',\n 'scroll-mbe',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pbs',\n 'scroll-pbe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n orderSensitiveModifiers: [\n '*',\n '**',\n 'after',\n 'backdrop',\n 'before',\n 'details-content',\n 'file',\n 'first-letter',\n 'first-line',\n 'marker',\n 'placeholder',\n 'selection',\n ],\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { AnyConfig, ConfigExtension, NoInfer } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: AnyConfig,\n {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n overrideConfigProperties(baseConfig.theme, override.theme)\n overrideConfigProperties(baseConfig.classGroups, override.classGroups)\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups)\n overrideConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n override.conflictingClassGroupModifiers,\n )\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers)\n\n mergeConfigProperties(baseConfig.theme, extend.theme)\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups)\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups)\n mergeConfigProperties(\n baseConfig.conflictingClassGroupModifiers,\n extend.conflictingClassGroupModifiers,\n )\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers')\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key)\n }\n }\n}\n\nconst mergeArrayProperties = <Key extends string>(\n baseObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n mergeObject: Partial<Record<NoInfer<Key>, readonly unknown[]>>,\n key: Key,\n) => {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { clsx, type ClassValue } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\n/**\n * Utility function to merge class names with Tailwind CSS classes\n * Uses clsx for conditional classes and tailwind-merge to handle conflicts\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import React from 'react';\nimport type { ReactNode } from 'react';\nimport { Icon } from '@iconify/react';\nimport { cn } from '../../../lib/utils';\n\nexport interface FlowItem {\n icon: ReactNode;\n label: string;\n link?: string;\n}\n\nexport interface FlowSection {\n title: string;\n items: FlowItem[];\n moreLink?: string;\n}\n\nexport interface FlowColumn {\n title: string;\n sections: FlowSection[];\n}\n\nexport interface ArchitectureFlowProps {\n sources: FlowColumn;\n center: ReactNode;\n centerTitle?: string;\n destinations: FlowColumn;\n arrowRight?: ReactNode;\n arrowDown?: ReactNode;\n className?: string;\n}\n\nexport function ArchitectureFlow({\n sources,\n center,\n centerTitle,\n destinations,\n arrowRight = <Icon icon=\"mdi:arrow-right\" />,\n arrowDown = <Icon icon=\"mdi:arrow-down\" />,\n className,\n}: ArchitectureFlowProps) {\n return (\n <div className={cn('elb-architecture-flow', className)}>\n <div className=\"elb-architecture-flow__grid\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {sources.title}\n </span>\n <div className=\"elb-architecture-flow__spacer\" />\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {centerTitle}\n </span>\n <div className=\"elb-architecture-flow__spacer\" />\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--desktop\">\n {destinations.title}\n </span>\n\n <div className=\"elb-architecture-flow__column\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {sources.title}\n </span>\n <div className=\"elb-architecture-flow__sections\">\n {sources.sections.map((section) => (\n <FlowSectionBox key={section.title} section={section} />\n ))}\n </div>\n </div>\n\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--desktop\">\n {arrowRight}\n </div>\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--mobile\">\n {arrowDown}\n </div>\n\n <div className=\"elb-architecture-flow__center\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {centerTitle}\n </span>\n <div className=\"elb-architecture-flow__center-content\">{center}</div>\n </div>\n\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--desktop\">\n {arrowRight}\n </div>\n <div className=\"elb-architecture-flow__arrow elb-architecture-flow__arrow--mobile\">\n {arrowDown}\n </div>\n\n <div className=\"elb-architecture-flow__column\">\n <span className=\"elb-architecture-flow__title elb-architecture-flow__title--mobile\">\n {destinations.title}\n </span>\n <div className=\"elb-architecture-flow__sections\">\n {destinations.sections.map((section) => (\n <FlowSectionBox key={section.title} section={section} />\n ))}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction FlowSectionBox({ section }: { section: FlowSection }) {\n return (\n <div className=\"elb-architecture-flow__section\">\n <span className=\"elb-architecture-flow__section-title\">\n {section.title}\n </span>\n <div className=\"elb-architecture-flow__items\">\n {section.items.map((item) => {\n const content = (\n <>\n <span className=\"elb-architecture-flow__item-icon\">\n {item.icon}\n </span>\n <span className=\"elb-architecture-flow__item-label\">\n {item.label}\n </span>\n </>\n );\n return item.link ? (\n <a\n key={item.label}\n href={item.link}\n className=\"elb-architecture-flow__item elb-architecture-flow__item--link\"\n >\n {content}\n </a>\n ) : (\n <div key={item.label} className=\"elb-architecture-flow__item\">\n {content}\n </div>\n );\n })}\n {section.moreLink ? (\n <a\n href={section.moreLink}\n className=\"elb-architecture-flow__more elb-architecture-flow__more--link\"\n >\n and more…\n </a>\n ) : (\n <span className=\"elb-architecture-flow__more\">and more…</span>\n )}\n </div>\n </div>\n );\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { Box } from '../atoms/box';\nimport type { editor } from 'monaco-editor';\nimport { CodeDiff, type CodeDiffSummary } from '../atoms/code-diff';\n\nconst ICON_PROPS = {\n width: 14,\n height: 14,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n};\n\nexport interface CodeDiffBoxProps {\n original: string;\n modified: string;\n language?: string;\n\n // Header (mirrors CodeBox)\n label?: string;\n header?: string;\n showHeader?: boolean;\n showTrafficLights?: boolean;\n\n // Actions\n /** Show copy-modified button in header. Default true. */\n showCopy?: boolean;\n /** Show split|inline toggle in header. Default true. */\n showViewToggle?: boolean;\n /** Show +N/-N/~N summary badges in header. Default false. */\n showSummary?: boolean;\n /** Initial view mode. Default 'split'. */\n defaultView?: 'split' | 'inline';\n\n // Layout (mirrors CodeBox)\n footer?: React.ReactNode;\n height?: string | number;\n style?: React.CSSProperties;\n className?: string;\n\n // Escape hatches\n onMount?: (diffEditor: editor.IStandaloneDiffEditor) => void;\n}\n\nfunction SummaryBadges({ summary }: { summary: CodeDiffSummary }) {\n return (\n <div className=\"flex items-center gap-1.5 text-xs font-medium tabular-nums\">\n <span className=\"text-green-600 dark:text-green-400\">\n +{summary.added}\n </span>\n <span className=\"text-red-600 dark:text-red-400\">-{summary.deleted}</span>\n <span className=\"text-zinc-500 dark:text-zinc-400\">\n ~{summary.modified}\n </span>\n </div>\n );\n}\n\nfunction ViewToggle({\n view,\n onChange,\n}: {\n view: 'split' | 'inline';\n onChange: (v: 'split' | 'inline') => void;\n}) {\n const base =\n 'px-2 py-0.5 text-xs font-medium rounded transition-colors cursor-pointer select-none';\n const active =\n 'bg-zinc-200 text-zinc-900 dark:bg-zinc-700 dark:text-zinc-100';\n const inactive =\n 'text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-200';\n return (\n <div\n className=\"flex rounded bg-zinc-100 p-0.5 dark:bg-zinc-800\"\n aria-label=\"Diff view mode\"\n >\n <button\n type=\"button\"\n className={`${base} ${view === 'split' ? active : inactive}`}\n aria-pressed={view === 'split'}\n onClick={() => onChange('split')}\n >\n Split\n </button>\n <button\n type=\"button\"\n className={`${base} ${view === 'inline' ? active : inactive}`}\n aria-pressed={view === 'inline'}\n onClick={() => onChange('inline')}\n >\n Inline\n </button>\n </div>\n );\n}\n\nfunction CopyButton({ value }: { value: string }) {\n const [status, setStatus] = useState<'idle' | 'copied' | 'failed'>('idle');\n const timerRef = useRef<number | null>(null);\n\n useEffect(() => {\n return () => {\n if (timerRef.current !== null) window.clearTimeout(timerRef.current);\n };\n }, []);\n\n const onClick = async () => {\n try {\n await navigator.clipboard.writeText(value);\n setStatus('copied');\n } catch {\n setStatus('failed');\n }\n if (timerRef.current !== null) window.clearTimeout(timerRef.current);\n timerRef.current = window.setTimeout(() => setStatus('idle'), 2000);\n };\n\n const label =\n status === 'copied'\n ? 'Copied!'\n : status === 'failed'\n ? 'Copy failed'\n : 'Copy modified to clipboard';\n\n return (\n <button\n type=\"button\"\n className=\"elb-explorer-btn\"\n onClick={onClick}\n title={label}\n aria-label=\"Copy modified content\"\n >\n <span className=\"sr-only\" aria-live=\"polite\">\n {status !== 'idle' ? label : ''}\n </span>\n {status === 'copied' ? (\n <svg {...ICON_PROPS}>\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg {...ICON_PROPS}>\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n );\n}\n\n/**\n * CodeDiffBox, read-only diff viewer with Box chrome.\n *\n * Generic: diffs any Monaco-supported language. Mirrors CodeBox's API where\n * overlapping. Use for flow.json diffs, inline TypeScript code diffs, or any\n * two strings of source.\n */\nexport function CodeDiffBox({\n original,\n modified,\n language = 'json',\n label,\n header,\n showHeader = true,\n showTrafficLights = false,\n showCopy = true,\n showViewToggle = true,\n showSummary = false,\n defaultView = 'split',\n footer,\n height,\n style,\n className,\n onMount,\n}: CodeDiffBoxProps) {\n const [view, setView] = useState<'split' | 'inline'>(defaultView);\n const [summary, setSummary] = useState<CodeDiffSummary>({\n added: 0,\n deleted: 0,\n modified: 0,\n });\n\n const summaryCb = useCallback((s: CodeDiffSummary) => setSummary(s), []);\n const boxHeader = header ?? label ?? 'Diff';\n\n const actions = (\n <div className=\"flex items-center gap-2\">\n {showSummary && <SummaryBadges summary={summary} />}\n {showViewToggle && <ViewToggle view={view} onChange={setView} />}\n {showCopy && <CopyButton value={modified} />}\n </div>\n );\n\n return (\n <Box\n header={boxHeader}\n headerActions={actions}\n showHeader={showHeader}\n showTrafficLights={showTrafficLights}\n footer={footer}\n height={height}\n style={style}\n className={className}\n >\n <CodeDiff\n original={original}\n modified={modified}\n language={language}\n renderSideBySide={view === 'split'}\n onSummaryChange={summaryCb}\n onMount={onMount}\n />\n </Box>\n );\n}\n","import React, {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n DiffEditor,\n type DiffOnMount,\n type Monaco,\n} from '@monaco-editor/react';\nimport type { editor } from 'monaco-editor';\nimport {\n ELB_THEME_DARK,\n ELB_THEME_LIGHT,\n registerAllThemes,\n} from '../../themes';\nimport { applyWalkerOSDecorations } from '../../utils/monaco-walkeros-decorations';\n\nexport interface CodeDiffSummary {\n /** Count of hunks that exist only in modified (pure additions). */\n added: number;\n /** Count of hunks that exist only in original (pure deletions). */\n deleted: number;\n /** Count of hunks where both sides have differing content. */\n modified: number;\n}\n\nexport interface CodeDiffProps {\n original: string;\n modified: string;\n /** Any Monaco language id. Default 'json'. */\n language?: string;\n /** Height value passed to DiffEditor. Defaults to '100%'. Parent must size. */\n height?: string | number;\n /** Split view on (default) or inline. Toggle by updating the prop. */\n renderSideBySide?: boolean;\n /** Fires on every Monaco diff update (debounced by Monaco). */\n onSummaryChange?: (summary: CodeDiffSummary) => void;\n /** Escape hatch. */\n beforeMount?: (monaco: Monaco) => void;\n /** Escape hatch — receives the diff editor instance. */\n onMount?: (diffEditor: editor.IStandaloneDiffEditor) => void;\n className?: string;\n}\n\nconst DIFF_OPTIONS: editor.IStandaloneDiffEditorConstructionOptions = {\n readOnly: true,\n domReadOnly: true,\n originalEditable: false,\n renderIndicators: true,\n renderMarginRevertIcon: false,\n renderGutterMenu: false,\n ignoreTrimWhitespace: false,\n diffAlgorithm: 'advanced',\n experimental: { showMoves: true, useTrueInlineView: true },\n hideUnchangedRegions: {\n enabled: true,\n revealLineCount: 20,\n minimumLineCount: 3,\n contextLineCount: 3,\n },\n useInlineViewWhenSpaceIsLimited: true,\n renderSideBySideInlineBreakpoint: 720,\n fixedOverflowWidgets: true,\n automaticLayout: true,\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n lineNumbers: 'on',\n lineNumbersMinChars: 3,\n glyphMargin: false,\n lineDecorationsWidth: 8,\n fontSize: 13,\n wordWrap: 'off',\n diffWordWrap: 'inherit',\n renderLineHighlight: 'none',\n overviewRulerLanes: 0,\n scrollbar: {\n vertical: 'auto',\n horizontal: 'auto',\n alwaysConsumeMouseWheel: false,\n },\n};\n\n/** Detect the current [data-theme] value from the closest ancestor or document. */\nfunction detectDataTheme(el: HTMLElement | null): string | null {\n if (typeof document === 'undefined') return null;\n if (el) {\n const closest = el.closest('[data-theme]');\n if (closest) return closest.getAttribute('data-theme');\n }\n return document.documentElement.getAttribute('data-theme');\n}\n\n/**\n * CodeDiff — read-only Monaco DiffEditor atom.\n *\n * Generic: diffs any Monaco-supported language. Theme follows [data-theme].\n * Use <CodeDiffBox> for the full chrome (header, summary, toggle, copy).\n */\nexport function CodeDiff({\n original,\n modified,\n language = 'json',\n height = '100%',\n renderSideBySide = true,\n onSummaryChange,\n beforeMount,\n onMount,\n className,\n}: CodeDiffProps) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const editorRef = useRef<editor.IStandaloneDiffEditor | null>(null);\n const decoCleanupRef = useRef<Array<() => void>>([]);\n const summaryCbRef = useRef(onSummaryChange);\n summaryCbRef.current = onSummaryChange;\n\n // Theme state follows [data-theme]\n const [themeName, setThemeName] = useState<string>(ELB_THEME_LIGHT);\n useEffect(() => {\n const read = () => {\n const dataTheme = detectDataTheme(containerRef.current);\n const isDark =\n dataTheme === 'dark' ||\n (dataTheme === null &&\n window.matchMedia('(prefers-color-scheme: dark)').matches);\n setThemeName(isDark ? ELB_THEME_DARK : ELB_THEME_LIGHT);\n };\n read();\n const observer = new MutationObserver(read);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['data-theme'],\n });\n const mq = window.matchMedia('(prefers-color-scheme: dark)');\n mq.addEventListener('change', read);\n return () => {\n observer.disconnect();\n mq.removeEventListener('change', read);\n };\n }, []);\n\n // Keep renderSideBySide live — no remount on toggle\n useEffect(() => {\n editorRef.current?.updateOptions({ renderSideBySide });\n }, [renderSideBySide]);\n\n const handleBeforeMount = useCallback(\n (monaco: Monaco) => {\n registerAllThemes(monaco);\n beforeMount?.(monaco);\n },\n [beforeMount],\n );\n\n const handleMount: DiffOnMount = useCallback(\n (diffEditor, _monaco) => {\n editorRef.current = diffEditor;\n\n // Apply walkerOS decoration to all canonical references:\n // $var./$env./$contract./$store./$secret./$code:\n // applyWalkerOSDecorations expects a single IStandaloneCodeEditor.\n decoCleanupRef.current.push(\n applyWalkerOSDecorations(diffEditor.getOriginalEditor()),\n );\n decoCleanupRef.current.push(\n applyWalkerOSDecorations(diffEditor.getModifiedEditor()),\n );\n\n // Summary: line-level counts. Fires after every diff recompute.\n const update = () => {\n const changes = diffEditor.getLineChanges() ?? [];\n let added = 0;\n let deleted = 0;\n let modifiedCount = 0;\n for (const c of changes) {\n if (c.originalEndLineNumber === 0) added++;\n else if (c.modifiedEndLineNumber === 0) deleted++;\n else modifiedCount++;\n }\n summaryCbRef.current?.({ added, deleted, modified: modifiedCount });\n };\n const sub = diffEditor.onDidUpdateDiff(update);\n decoCleanupRef.current.push(() => sub.dispose());\n\n onMount?.(diffEditor);\n },\n [onMount],\n );\n\n useEffect(() => {\n return () => {\n // Guard each cleanup — Monaco methods (deltaDecorations) throw if the\n // underlying editor was already disposed by @monaco-editor/react.\n for (const cleanup of decoCleanupRef.current) {\n try {\n cleanup();\n } catch {\n /* already disposed — ignore */\n }\n }\n decoCleanupRef.current = [];\n };\n }, []);\n\n const mergedOptions =\n useMemo<editor.IStandaloneDiffEditorConstructionOptions>(\n () => ({ ...DIFF_OPTIONS, renderSideBySide }),\n [renderSideBySide],\n );\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{ height: '100%', width: '100%' }}\n >\n <DiffEditor\n language={language}\n original={original}\n modified={modified}\n theme={themeName}\n height={height}\n options={mergedOptions}\n beforeMount={handleBeforeMount}\n onMount={handleMount}\n />\n </div>\n );\n}\n","import { useState, useEffect } from 'react';\nimport { CodeBox, type CodeBoxProps } from './code-box';\nimport { formatCode } from '../../utils/format-code';\n\nexport type CodeSnippetProps = Omit<CodeBoxProps, 'label' | 'showHeader'> & {\n format?: boolean;\n};\n\n/**\n * CodeSnippet - Prominent code display for snippets\n *\n * Wraps CodeBox with larger font size and generous padding.\n * Use this for showcasing code examples, one-liners, or small code blocks\n * where you want the code to be more visually prominent than in a standard editor.\n *\n * Always renders without a header. Use CodeBox if you need a header.\n *\n * Default behavior:\n * - Read-only (disabled=true)\n * - Copy button enabled (showCopy=true)\n * - Auto-height with sensible bounds (min: 20px, max: 600px)\n * - Auto-format on mount (format=true) - formats code once on initial load\n *\n * Auto-Formatting:\n * - Enabled by default (format=true)\n * - Runs once on component mount using Monaco's built-in formatters\n * - Supports: JavaScript, TypeScript, JSON, HTML, CSS\n * - Use format={false} to disable for special cases (pre-formatted code)\n *\n * Reuses all CodeBox functionality:\n * - Monaco Editor with syntax highlighting\n * - Grid height management and auto-height modes\n * - Copy button\n * - Theme integration\n *\n * @example\n * // Minimal usage - code auto-formats on load\n * <CodeSnippet\n * code=\"import { elb } from '@walkeros/core';\"\n * language=\"javascript\"\n * />\n *\n * @example\n * // Disable auto-formatting for pre-formatted code\n * <CodeSnippet\n * code={alreadyFormattedCode}\n * language=\"javascript\"\n * format={false}\n * />\n *\n * @example\n * // Override defaults if needed\n * <CodeSnippet\n * code={editableCode}\n * language=\"javascript\"\n * disabled={false}\n * showCopy={false}\n * autoHeight={{ min: 100, max: 800 }}\n * />\n */\nexport function CodeSnippet(props: CodeSnippetProps) {\n const {\n code,\n language = 'javascript',\n className,\n disabled = true,\n showCopy = true,\n autoHeight = { min: 20, max: 600 },\n fontSize = 15,\n format = true,\n ...rest\n } = props;\n const snippetClassName = `elb-code-snippet ${className || ''}`.trim();\n const [formattedCode, setFormattedCode] = useState(code);\n\n // Format code on mount\n useEffect(() => {\n if (format && code) {\n formatCode(code, language).then(setFormattedCode);\n } else {\n setFormattedCode(code);\n }\n }, [code, language, format]);\n\n return (\n <CodeBox\n {...rest}\n code={formattedCode}\n language={language}\n className={snippetClassName}\n showHeader={false}\n disabled={disabled}\n showCopy={showCopy}\n autoHeight={autoHeight}\n fontSize={fontSize}\n />\n );\n}\n","import React, { useEffect, useRef } from 'react';\nimport rough from 'roughjs';\nimport { Icon } from '@iconify/react';\n\n// ============================================\n// Helper Components for rough.js SVG rendering\n// ============================================\n\ninterface RoughRectProps {\n x: number;\n y: number;\n width: number;\n height: number;\n fill: string;\n stroke: string;\n}\n\n/**\n * RoughRect - Renders a hand-drawn rectangle using rough.js SVG mode\n * Uses a rounded rectangle path for softer corners\n */\nfunction RoughRect({\n x,\n y,\n width,\n height,\n fill,\n stroke,\n}: RoughRectProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n // Clear previous content\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const r = 8; // corner radius\n\n // Create rounded rectangle path\n const path = `M ${x + r} ${y}\n L ${x + width - r} ${y}\n Q ${x + width} ${y} ${x + width} ${y + r}\n L ${x + width} ${y + height - r}\n Q ${x + width} ${y + height} ${x + width - r} ${y + height}\n L ${x + r} ${y + height}\n Q ${x} ${y + height} ${x} ${y + height - r}\n L ${x} ${y + r}\n Q ${x} ${y} ${x + r} ${y}\n Z`;\n\n // Draw main rectangle\n const rectNode = rs.path(path, {\n fill,\n fillStyle: 'solid',\n stroke,\n strokeWidth: 1.5,\n roughness: 1.2,\n bowing: 1,\n });\n ref.current.appendChild(rectNode);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [x, y, width, height, fill, stroke]);\n\n return <g ref={ref} />;\n}\n\ninterface RoughCircleProps {\n cx: number;\n cy: number;\n diameter: number;\n fill: string;\n stroke: string;\n}\n\n/**\n * RoughCircle - Renders a hand-drawn circle using rough.js SVG mode\n */\nfunction RoughCircle({\n cx,\n cy,\n diameter,\n fill,\n stroke,\n}: RoughCircleProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const circleNode = rs.circle(cx, cy, diameter, {\n fill,\n fillStyle: 'solid',\n stroke,\n strokeWidth: 1.5,\n roughness: 0.8,\n });\n ref.current.appendChild(circleNode);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [cx, cy, diameter, fill, stroke]);\n\n return <g ref={ref} />;\n}\n\ninterface MarkerProps {\n x: number;\n y: number;\n text: string;\n}\n\n/**\n * Marker - Red circle with number/text inside\n */\nfunction Marker({ x, y, text }: MarkerProps): React.ReactElement {\n return (\n <g>\n <RoughCircle\n cx={x}\n cy={y}\n diameter={MARKER_SIZE}\n fill=\"var(--flow-marker-fill, #dc2626)\"\n stroke=\"var(--flow-marker-stroke, #991b1b)\"\n />\n <text\n x={x}\n y={y}\n textAnchor=\"middle\"\n dominantBaseline=\"central\"\n fill=\"var(--flow-marker-text, #ffffff)\"\n fontSize={10}\n fontWeight={600}\n fontFamily=\"system-ui, -apple-system, sans-serif\"\n >\n {text}\n </text>\n </g>\n );\n}\n\ninterface RoughArrowProps {\n fromX: number;\n fromY: number;\n toX: number;\n toY: number;\n stroke: string;\n arrowSize?: number;\n centerY?: number;\n}\n\n/**\n * RoughArrow - Renders a hand-drawn curved arrow using rough.js SVG mode\n * Uses quadratic bezier curves for an organic feel.\n * Includes arrowhead that follows the curve's final angle.\n */\nfunction RoughArrow({\n fromX,\n fromY,\n toX,\n toY,\n stroke,\n arrowSize = 8,\n centerY,\n}: RoughArrowProps): React.ReactElement {\n const ref = useRef<SVGGElement>(null);\n\n useEffect(() => {\n if (!ref.current) return;\n const svg = ref.current.ownerSVGElement;\n if (!svg) return;\n\n // Clear previous content\n ref.current.replaceChildren();\n\n const rs = rough.svg(svg);\n const strokeWidth = 1.5;\n const color = stroke;\n\n const dx = toX - fromX;\n const dy = toY - fromY;\n const length = Math.sqrt(dx * dx + dy * dy);\n\n // Calculate control point for quadratic bezier curve\n // For horizontal lines: slight upward curve\n // For diagonal lines: curve that exits horizontally then bends to target\n const midX = (fromX + toX) / 2;\n const midY = (fromY + toY) / 2;\n\n let controlX: number;\n let controlY: number;\n\n if (Math.abs(dy) < 2) {\n // Nearly horizontal: subtle upward curve\n controlX = midX;\n controlY = midY - Math.min(length * 0.08, 12);\n } else if (centerY !== undefined) {\n // Curve towards whichever endpoint is farther from center\n // This creates natural spreading for fan-in and fan-out\n const fromDistFromCenter = Math.abs(fromY - centerY);\n const toDistFromCenter = Math.abs(toY - centerY);\n\n controlX = fromX + dx * 0.5;\n\n if (fromDistFromCenter >= toDistFromCenter) {\n // Source is farther from center → curve towards source's side\n controlY =\n fromY < centerY\n ? midY - Math.abs(dy) * 0.3 // Source above center → curve UP\n : midY + Math.abs(dy) * 0.3; // Source below center → curve DOWN\n } else {\n // Target is farther from center → curve towards target's side\n controlY =\n toY < centerY\n ? midY - Math.abs(dy) * 0.3 // Target above center → curve UP\n : midY + Math.abs(dy) * 0.3; // Target below center → curve DOWN\n }\n } else {\n // Fallback when centerY not provided: simple direction-based curve\n controlX = fromX + dx * 0.5;\n controlY =\n dy > 0 ? fromY - Math.abs(dy) * 0.3 : fromY + Math.abs(dy) * 0.3;\n }\n\n // Calculate the angle at the end of the curve (tangent at t=1)\n // For quadratic bezier: tangent = 2(1-t)(P1-P0) + 2t(P2-P1) at t=1 = 2(P2-P1)\n const tangentX = toX - controlX;\n const tangentY = toY - controlY;\n const endAngle = Math.atan2(tangentY, tangentX);\n\n // Calculate where the curve should stop (before the arrowhead)\n const curveEndX = toX - Math.cos(endAngle) * arrowSize;\n const curveEndY = toY - Math.sin(endAngle) * arrowSize;\n\n // Draw curved line using SVG path with quadratic bezier\n const curvePath = `M ${fromX} ${fromY} Q ${controlX} ${controlY} ${curveEndX} ${curveEndY}`;\n const curveNode = rs.path(curvePath, {\n stroke: color,\n strokeWidth,\n roughness: 0.8,\n fill: 'none',\n });\n ref.current.appendChild(curveNode);\n\n // Draw arrowhead (two lines at angles from curve's end tangent)\n const arrowAngle = Math.PI / 6; // 30 degrees\n const arrowLength = 8;\n\n // Arrow head line 1 (upper)\n const arrow1EndX =\n curveEndX - Math.cos(endAngle - arrowAngle) * arrowLength;\n const arrow1EndY =\n curveEndY - Math.sin(endAngle - arrowAngle) * arrowLength;\n const arrowHead1 = rs.line(curveEndX, curveEndY, arrow1EndX, arrow1EndY, {\n stroke: color,\n strokeWidth,\n roughness: 0.5,\n });\n ref.current.appendChild(arrowHead1);\n\n // Arrow head line 2 (lower)\n const arrow2EndX =\n curveEndX - Math.cos(endAngle + arrowAngle) * arrowLength;\n const arrow2EndY =\n curveEndY - Math.sin(endAngle + arrowAngle) * arrowLength;\n const arrowHead2 = rs.line(curveEndX, curveEndY, arrow2EndX, arrow2EndY, {\n stroke: color,\n strokeWidth,\n roughness: 0.5,\n });\n ref.current.appendChild(arrowHead2);\n\n return () => {\n ref.current?.replaceChildren();\n };\n }, [fromX, fromY, toX, toY, stroke, arrowSize, centerY]);\n\n return <g ref={ref} />;\n}\n\nexport type FlowMarkerPosition =\n // Stages (default = top-right, left/right variants)\n | 'source'\n | 'source-left'\n | 'source-right'\n | 'collector'\n | 'collector-left'\n | 'collector-right'\n | 'destination'\n | 'destination-left'\n | 'destination-right'\n // Named stages: source-{name}, destination-{name}\n | `source-${string}`\n | `source-${string}-left`\n | `source-${string}-right`\n | `destination-${string}`\n | `destination-${string}-left`\n | `destination-${string}-right`\n // Transformer positions: pre-{name}, post-{name}\n | `pre-${string}`\n | `pre-${string}-left`\n | `pre-${string}-right`\n | `post-${string}`\n | `post-${string}-left`\n | `post-${string}-right`\n // Context stages\n | 'stage-before'\n | 'stage-before-right'\n | 'stage-after'\n | 'stage-after-left'\n // Arrows (single position each)\n | 'incoming'\n | 'outgoing'\n | 'source-collector'\n | 'collector-destination'\n // Named source arrows: source-{name}-pre, source-{name}-collector\n | `source-${string}-pre`\n | `source-${string}-collector`\n // Pre-transformer chain arrows: pre-{name}-next, pre-collector\n | `pre-${string}-next`\n | 'pre-collector'\n // Post-transformer chain arrows: collector-post, post-{name}-next\n | 'collector-post'\n | `post-${string}-next`\n // Destination arrows: post-destination-{name}\n | `post-destination-${string}`\n // Context stage arrows\n | 'before-source'\n | 'destination-after';\n\nexport interface FlowMarker {\n position: FlowMarkerPosition;\n /** ID displayed inside the marker dot. Default: array index + 1 */\n id?: string;\n /** Legend text. If provided, marker appears in legend below diagram */\n text?: string;\n}\n\nexport interface FlowStageConfig {\n /** Iconify icon name to display before the label (e.g., 'simple-icons:google-analytics') */\n icon?: string;\n label?: string;\n text?: React.ReactNode; // Supports rich content (text, links, JSX)\n description?: React.ReactNode; // Supports rich content (text, links, JSX)\n highlight?: boolean;\n /** Makes box clickable. undefined = default URL, false = not clickable, string = custom URL */\n link?: false | string;\n}\n\nexport interface FlowSourceConfig extends FlowStageConfig {\n /** Name of pre-transformer to connect to. Omit to connect directly to collector. */\n next?: string;\n}\n\nexport interface FlowTransformerConfig extends FlowStageConfig {\n /** Name of next transformer in chain. Omit to connect to collector (pre) or destination (post). */\n next?: string;\n}\n\nexport interface FlowDestinationConfig extends FlowStageConfig {\n /** Name of post-transformer to receive from. Omit to receive directly from collector. */\n before?: string;\n /** Optional: stage after this destination (e.g., external platform). Overrides shared stageAfter. */\n after?: FlowStageConfig;\n}\n\nexport interface FlowLayoutConfig {\n labelSize: number;\n labelWeight: string;\n textSize: number;\n textWeight: string;\n boxHeight: number;\n descriptionSize: number;\n}\n\n// Default layout configuration\nexport const defaultLayout: FlowLayoutConfig = {\n labelSize: 13,\n labelWeight: '600',\n textSize: 12,\n textWeight: 'normal',\n boxHeight: 50,\n descriptionSize: 13,\n};\n\nexport interface FlowMapProps {\n /** Optional: stage before source (e.g., \"Browser\") */\n stageBefore?: FlowStageConfig;\n /** Sources with named keys. Each source can specify `next` to connect to a pre-transformer. */\n sources?: Record<string, FlowSourceConfig>;\n /** Pre-transformers between sources and collector. Chain via `next` property. */\n preTransformers?: Record<string, FlowTransformerConfig>;\n /** Optional: customize collector stage */\n collector?: FlowStageConfig;\n /** Post-transformers between collector and destinations. */\n postTransformers?: Record<string, FlowTransformerConfig>;\n /** Destinations with named keys. Each destination can specify `before` to receive from a post-transformer. */\n destinations?: Record<string, FlowDestinationConfig>;\n /** Optional: stage after destination (e.g., \"gtag\") */\n stageAfter?: FlowStageConfig;\n /** Optional: title above diagram */\n title?: string;\n /** Optional: layout configuration */\n layout?: FlowLayoutConfig;\n /** Optional: height of stage boxes (default: 50) */\n boxHeight?: number;\n /** Optional: height of description area below boxes (default: 30) */\n descriptionHeight?: number;\n /** Optional: additional CSS class */\n className?: string;\n /** Optional: array of markers to display */\n markers?: FlowMarker[];\n /** Optional: show two arrows per connection (forward → and return ←) with parallel offset */\n withReturn?: boolean;\n}\n\n// Layout constants\nconst STAGE_WIDTH = 120;\nconst STAGE_HEIGHT = 50;\nconst STAGE_GAP = 50; // Horizontal gap between stages\nconst VERTICAL_GAP = 12; // Vertical gap between stacked sources/destinations\nconst PADDING_X = 8;\nconst PADDING_Y = 8;\nconst EDGE_ARROW_LENGTH = 25; // Space for incoming/outgoing arrows\nconst TITLE_HEIGHT = 30;\nconst ARROW_SIZE = 8;\nconst ARROW_OFFSET = 6; // Vertical offset for parallel return arrows\n\n// Resolved transformer with its name\ninterface ResolvedTransformer {\n name: string;\n config: FlowTransformerConfig;\n}\n\n/**\n * Resolves a transformer chain by following `next` references.\n * Returns an ordered array of transformers from the starting key to the end.\n * Throws if a reference is invalid or circular.\n */\nfunction resolveTransformerChain(\n transformers: Record<string, FlowTransformerConfig> | undefined,\n startKey: string | undefined,\n): ResolvedTransformer[] {\n if (!transformers || !startKey) return [];\n\n const result: ResolvedTransformer[] = [];\n const visited = new Set<string>();\n let currentKey: string | undefined = startKey;\n\n while (currentKey) {\n if (visited.has(currentKey)) {\n throw new Error(\n `FlowMap: Circular reference detected in transformer chain at \"${currentKey}\"`,\n );\n }\n\n const config: FlowTransformerConfig | undefined = transformers[currentKey];\n if (!config) {\n throw new Error(\n `FlowMap: Invalid transformer reference \"${currentKey}\". Available transformers: ${Object.keys(transformers).join(', ') || 'none'}`,\n );\n }\n\n visited.add(currentKey);\n result.push({ name: currentKey, config });\n currentKey = config.next;\n }\n\n return result;\n}\n\n/**\n * Collects all unique transformers that are reachable from sources (pre) or destinations (post).\n * Returns them in chain order based on `next` references.\n * Finds the chain head (transformer not referenced by any other's `next`) and walks from there.\n */\nfunction collectReachableTransformers(\n transformers: Record<string, FlowTransformerConfig> | undefined,\n entryPoints: (string | undefined)[],\n): ResolvedTransformer[] {\n if (!transformers) return [];\n\n // Find all unique transformer names referenced by walking each entry point's chain\n const referencedNames = new Set<string>();\n for (const entry of entryPoints) {\n if (!entry || !transformers[entry]) continue;\n const chain = resolveTransformerChain(transformers, entry);\n chain.forEach((p) => referencedNames.add(p.name));\n }\n\n if (referencedNames.size === 0) return [];\n\n // Find chain head: transformer in our set that's not anyone's `next`\n const nextTargets = new Set<string>();\n for (const name of referencedNames) {\n const next = transformers[name]?.next;\n if (next && referencedNames.has(next)) {\n nextTargets.add(next);\n }\n }\n\n // Chain head = in referencedNames but not in nextTargets\n let chainHead: string | undefined;\n for (const name of referencedNames) {\n if (!nextTargets.has(name)) {\n chainHead = name;\n break;\n }\n }\n\n // Walk from chain head\n if (!chainHead) chainHead = [...referencedNames][0];\n return resolveTransformerChain(transformers, chainHead);\n}\n\n/**\n * Gets the index of a transformer in the transformer list.\n * Returns transformerList.length if not found (= connects directly to collector).\n */\nfunction getTransformerIndex(\n transformerName: string | undefined,\n transformerList: ResolvedTransformer[],\n): number {\n if (!transformerName) return transformerList.length;\n const idx = transformerList.findIndex((p) => p.name === transformerName);\n return idx >= 0 ? idx : transformerList.length;\n}\n\n// Dynamic width calculation function\nfunction calculateTotalWidth(\n stageCount: number,\n hasStageBefore: boolean,\n hasStageAfter: boolean,\n): number {\n const leftEdge = hasStageBefore ? 0 : EDGE_ARROW_LENGTH;\n const rightEdge = hasStageAfter ? 0 : EDGE_ARROW_LENGTH;\n return (\n leftEdge +\n STAGE_WIDTH * stageCount +\n STAGE_GAP * (stageCount - 1) +\n rightEdge\n );\n}\n\ninterface StagePosition {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nconst MARKER_SIZE = 16;\nconst MARKER_OFFSET = 4; // Offset from box edge\n\nfunction getMarkerPosition(\n position: FlowMarkerPosition,\n stages: { [key: string]: StagePosition },\n centerY: number,\n totalWidth: number,\n): { x: number; y: number } | null {\n const sourcePos = stages.source;\n const collectorPos = stages.collector;\n const destPos = stages.destination;\n const beforePos = stages.before;\n const afterPos = stages.after;\n\n // Helper to get box marker position (top corners)\n const getBoxMarker = (\n pos: StagePosition | undefined,\n variant?: string,\n ): { x: number; y: number } | null => {\n if (!pos) return null;\n if (variant === '-left') {\n return { x: pos.x + MARKER_OFFSET, y: pos.y - MARKER_OFFSET };\n }\n // Default and -right: top-right corner\n return {\n x: pos.x + pos.width - MARKER_OFFSET,\n y: pos.y - MARKER_OFFSET,\n };\n };\n\n // Helper to get arrow marker position (between stages)\n const getArrowMarker = (\n fromPos: StagePosition | undefined,\n ): { x: number; y: number } | null => {\n if (!fromPos) return null;\n const fromCenterY = fromPos.y + fromPos.height / 2;\n return {\n x: fromPos.x + fromPos.width + STAGE_GAP / 2 - 6,\n y: fromCenterY + MARKER_SIZE / 2 + 4,\n };\n };\n\n switch (position) {\n // Stage-before (only right side, no left)\n case 'stage-before':\n case 'stage-before-right':\n return getBoxMarker(beforePos);\n\n // Source stage (above box, top corners) - first source\n case 'source':\n case 'source-right':\n return getBoxMarker(sourcePos);\n case 'source-left':\n return getBoxMarker(sourcePos, '-left');\n\n // Collector stage (above box, top corners)\n case 'collector':\n case 'collector-right':\n return getBoxMarker(collectorPos);\n case 'collector-left':\n return getBoxMarker(collectorPos, '-left');\n\n // Destination stage (above box, top corners) - first destination\n case 'destination':\n case 'destination-right':\n return getBoxMarker(destPos);\n case 'destination-left':\n return getBoxMarker(destPos, '-left');\n\n // Stage-after (only left side, no right)\n case 'stage-after':\n case 'stage-after-left':\n return getBoxMarker(afterPos, '-left');\n\n // Edge arrows (in/out)\n case 'incoming':\n return { x: EDGE_ARROW_LENGTH / 2, y: centerY + MARKER_SIZE / 2 + 8 };\n case 'outgoing':\n return {\n x: totalWidth - EDGE_ARROW_LENGTH / 2,\n y: centerY + MARKER_SIZE / 2 + 8,\n };\n\n // Arrow between before and source\n case 'before-source':\n return getArrowMarker(beforePos);\n\n // Between-stage arrows (for simple flows without transformers)\n case 'source-collector':\n return getArrowMarker(sourcePos);\n case 'collector-destination':\n return getArrowMarker(collectorPos);\n\n // Arrow between destination and after\n case 'destination-after':\n return getArrowMarker(destPos);\n\n // Pre-transformer to collector arrow\n case 'pre-collector':\n // Find the last pre-transformer position\n const preKeys = Object.keys(stages).filter((k) => k.startsWith('pre-'));\n if (preKeys.length === 0) return null;\n const lastPrePos = stages[preKeys[preKeys.length - 1]];\n return getArrowMarker(lastPrePos);\n\n // Collector to post-transformer arrow\n case 'collector-post':\n return getArrowMarker(collectorPos);\n\n default: {\n // Handle named source markers: source-{name}, source-{name}-left, source-{name}-right\n const sourceNameMatch = position.match(/^source-([^-]+)(-left|-right)?$/);\n if (sourceNameMatch) {\n const name = sourceNameMatch[1];\n const variant = sourceNameMatch[2];\n const pos = stages[`source-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle named destination markers: destination-{name}, destination-{name}-left, destination-{name}-right\n const destNameMatch = position.match(\n /^destination-([^-]+)(-left|-right)?$/,\n );\n if (destNameMatch) {\n const name = destNameMatch[1];\n const variant = destNameMatch[2];\n const pos = stages[`destination-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle pre-transformer markers: pre-{name}, pre-{name}-left, pre-{name}-right\n const preMatch = position.match(/^pre-([^-]+)(-left|-right)?$/);\n if (preMatch) {\n const name = preMatch[1];\n const variant = preMatch[2];\n // Skip if this looks like a -next pattern\n if (name === 'collector') return null;\n const pos = stages[`pre-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle post-transformer markers: post-{name}, post-{name}-left, post-{name}-right\n const postMatch = position.match(/^post-([^-]+)(-left|-right)?$/);\n if (postMatch) {\n const name = postMatch[1];\n const variant = postMatch[2];\n const pos = stages[`post-${name}`];\n return getBoxMarker(pos, variant);\n }\n\n // Handle source to pre-transformer arrow: source-{name}-pre\n const sourcePreMatch = position.match(/^source-([^-]+)-pre$/);\n if (sourcePreMatch) {\n const name = sourcePreMatch[1];\n const pos = stages[`source-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle source to collector arrow: source-{name}-collector\n const sourceCollectorMatch = position.match(/^source-([^-]+)-collector$/);\n if (sourceCollectorMatch) {\n const name = sourceCollectorMatch[1];\n const pos = stages[`source-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle pre-transformer chain arrow: pre-{name}-next\n const preNextMatch = position.match(/^pre-([^-]+)-next$/);\n if (preNextMatch) {\n const name = preNextMatch[1];\n const pos = stages[`pre-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle post-transformer chain arrow: post-{name}-next\n const postNextMatch = position.match(/^post-([^-]+)-next$/);\n if (postNextMatch) {\n const name = postNextMatch[1];\n const pos = stages[`post-${name}`];\n return getArrowMarker(pos);\n }\n\n // Handle post to destination arrow: post-destination-{name}\n const postDestMatch = position.match(/^post-destination-([^-]+)$/);\n if (postDestMatch) {\n const name = postDestMatch[1];\n // Find the last post-transformer position before this destination\n const postKeys = Object.keys(stages).filter((k) =>\n k.startsWith('post-'),\n );\n if (postKeys.length === 0) return getArrowMarker(collectorPos);\n const lastPostPos = stages[postKeys[postKeys.length - 1]];\n return getArrowMarker(lastPostPos);\n }\n\n return null;\n }\n }\n}\n\nexport function FlowMap({\n stageBefore,\n sources,\n preTransformers,\n collector,\n postTransformers,\n destinations,\n stageAfter,\n title,\n layout = defaultLayout,\n boxHeight: boxHeightProp,\n descriptionHeight: descriptionHeightProp,\n markers,\n className,\n withReturn,\n}: FlowMapProps): React.ReactElement {\n // Convert Record-based sources/destinations to arrays with names\n const sourceEntries = Object.entries(sources ?? { default: {} });\n const destinationEntries = Object.entries(destinations ?? { default: {} });\n\n // Collect pre-transformers reachable from sources\n const sourceNextValues = sourceEntries.map(([, config]) => config.next);\n const preTransformerList = collectReachableTransformers(\n preTransformers,\n sourceNextValues,\n );\n\n // Collect post-transformers reachable from destinations (via 'before')\n const destBeforeValues = destinationEntries.map(\n ([, config]) => config.before,\n );\n const postTransformerList = collectReachableTransformers(\n postTransformers,\n destBeforeValues,\n );\n\n // Sort sources by target transformer index to avoid edge crossings\n // Sources connecting to earlier transformers go on top\n const sortedSourceEntries = [...sourceEntries].sort(([, a], [, b]) => {\n const aIdx = getTransformerIndex(a.next, preTransformerList);\n const bIdx = getTransformerIndex(b.next, preTransformerList);\n return aIdx - bIdx;\n });\n\n // Sort destinations by source transformer index - ASCENDING (earlier transformer = top)\n // This mirrors source sorting behavior for symmetry\n const sortedDestinationEntries = [...destinationEntries].sort(\n ([, a], [, b]) => {\n const aIdx = getTransformerIndex(a.before, postTransformerList);\n const bIdx = getTransformerIndex(b.before, postTransformerList);\n return aIdx - bIdx; // ASCENDING: earlier transformer at top (mirrors sources)\n },\n );\n\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Check if any stage has a description or link\n const hasDescription =\n stageBefore?.description ||\n sourceEntries.some(([, s]) => s.description) ||\n preTransformerList.some((p) => p.config.description) ||\n collector?.description ||\n postTransformerList.some((p) => p.config.description) ||\n destinationEntries.some(([, d]) => d.description) ||\n stageAfter?.description ||\n destinationEntries.some(([, d]) => d.after?.description);\n const hasLink =\n stageBefore?.link !== false ||\n sourceEntries.some(([, s]) => s.link !== false) ||\n preTransformerList.some((p) => p.config.link !== false) ||\n collector?.link !== false ||\n postTransformerList.some((p) => p.config.link !== false) ||\n destinationEntries.some(([, d]) => d.link !== false) ||\n stageAfter?.link !== false ||\n destinationEntries.some(([, d]) => d.after?.link !== false);\n\n // Check if markers need extra padding (top for stage markers, bottom for arrow markers)\n const stageMarkerPositions = [\n 'stage-before',\n 'stage-before-right',\n 'source',\n 'source-left',\n 'source-right',\n 'collector',\n 'collector-left',\n 'collector-right',\n 'destination',\n 'destination-left',\n 'destination-right',\n 'stage-after',\n 'stage-after-left',\n ];\n // Helper to check if a position is a stage marker (including named stages and transformers)\n const isStageMarker = (pos: string): boolean => {\n if (stageMarkerPositions.includes(pos)) return true;\n // Check patterns: source-{name}, destination-{name}, pre-{name}, post-{name}\n return /^(source|destination|pre|post)-[^-]+(-left|-right)?$/.test(pos);\n };\n const hasTopMarkers =\n markers?.some((m) => isStageMarker(m.position)) ?? false;\n const markerTopPadding = hasTopMarkers ? MARKER_SIZE / 2 + MARKER_OFFSET : 0;\n\n // Filter markers that have legend text\n const legendItems = markers?.filter((m) => m.text) ?? [];\n // Estimate total text length to determine how many lines we need\n const totalTextLength = legendItems.reduce(\n (sum, item) => sum + (item.text?.length ?? 0),\n 0,\n );\n // Rough estimate: ~5.5 chars per pixel at 11px font, available width ~450px = ~82 chars per line\n const LEGEND_LINE_HEIGHT = 18;\n const estimatedLines = Math.max(1, Math.ceil(totalTextLength / 70));\n const legendHeight =\n legendItems.length > 0 ? LEGEND_LINE_HEIGHT * estimatedLines + 8 : 0;\n\n // Use prop values if provided, otherwise use layout defaults\n const boxHeight = boxHeightProp ?? layout.boxHeight;\n const descriptionHeight = descriptionHeightProp ?? 30;\n const belowBoxHeight = hasDescription || hasLink ? descriptionHeight + 10 : 0; // Space for description/link content\n\n // Calculate max rows for multi-source/destination layout\n const maxRows = Math.max(sourceEntries.length, destinationEntries.length, 1);\n const stackedHeight = boxHeight * maxRows + VERTICAL_GAP * (maxRows - 1);\n\n // Check if any destination has an after stage or if shared stageAfter exists\n const hasAnyAfterStage =\n stageAfter || destinationEntries.some(([, d]) => d.after);\n\n // Calculate stage count and total width dynamically\n // Stages: stageBefore? + sources(1) + preTransformers + collector(1) + postTransformers + destinations(1) + afterStages?\n const stageCount =\n (stageBefore ? 1 : 0) +\n 1 + // sources column\n preTransformerList.length +\n 1 + // collector\n postTransformerList.length +\n 1 + // destinations column\n (hasAnyAfterStage ? 1 : 0);\n const totalWidth = calculateTotalWidth(\n stageCount,\n !!stageBefore,\n !!hasAnyAfterStage,\n );\n\n const baseHeight =\n PADDING_Y * 2 +\n stackedHeight +\n belowBoxHeight +\n markerTopPadding +\n legendHeight;\n const totalHeight = title ? baseHeight + TITLE_HEIGHT : baseHeight;\n\n // Calculate positions (declarative, no useEffect)\n const baseY = (title ? TITLE_HEIGHT : 0) + PADDING_Y + markerTopPadding;\n\n // Calculate the vertical center of the stacked area (for collector positioning)\n const stackedCenterY = baseY + stackedHeight / 2;\n\n // Helper to calculate Y positions for stacked items centered around stackedCenterY\n const getStackedY = (index: number, count: number): number => {\n const totalStackHeight = boxHeight * count + VERTICAL_GAP * (count - 1);\n const startY = stackedCenterY - totalStackHeight / 2;\n return startY + index * (boxHeight + VERTICAL_GAP);\n };\n\n // Build stage positions dynamically based on which stages are active\n // Start at 0 if stageBefore exists (no left edge arrow), otherwise leave space for arrow\n let currentX = stageBefore ? 0 : EDGE_ARROW_LENGTH;\n const stages: { [key: string]: StagePosition } = {};\n\n // Arrays to hold named source/destination positions\n const sourcePositions: Array<{ name: string; pos: StagePosition }> = [];\n const destinationPositions: Array<{ name: string; pos: StagePosition }> = [];\n\n if (stageBefore) {\n stages.before = {\n x: currentX,\n y: stackedCenterY - boxHeight / 2, // Center vertically\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n currentX += STAGE_WIDTH + STAGE_GAP;\n }\n\n // Position ALL sources in the source column (stacked vertically)\n const sourceX = currentX;\n sortedSourceEntries.forEach(([name], index) => {\n const pos: StagePosition = {\n x: sourceX,\n y: getStackedY(index, sortedSourceEntries.length),\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n sourcePositions.push({ name, pos });\n stages[`source-${name}`] = pos;\n });\n // Keep 'source' alias pointing to first source for backward compatibility\n if (sourcePositions.length > 0) {\n stages.source = sourcePositions[0].pos;\n }\n currentX += STAGE_WIDTH + STAGE_GAP;\n\n // Pre-transformer positions\n // Strategy: position at source Y if only ONE source connects, otherwise center\n // This keeps transformers aligned with their sources when there's no branching\n const preTransformerPositions: Array<{ name: string; pos: StagePosition }> =\n [];\n\n // Build map: transformer name → list of sources that connect to it (directly or via chain)\n const transformerIncomingSources = new Map<string, string[]>();\n sortedSourceEntries.forEach(([sourceName, config]) => {\n const targetTransformer = config.next;\n if (targetTransformer) {\n const existing = transformerIncomingSources.get(targetTransformer) ?? [];\n existing.push(sourceName);\n transformerIncomingSources.set(targetTransformer, existing);\n }\n });\n // Also track chain connections (transformer A → transformer B means B receives from A's sources too)\n preTransformerList.forEach(({ name, config }) => {\n if (config.next) {\n // This transformer's output goes to config.next\n // So config.next receives from all sources that this transformer receives from\n const mySources = transformerIncomingSources.get(name) ?? [];\n const nextSources = transformerIncomingSources.get(config.next) ?? [];\n // Mark that the next transformer receives from chain (we'll use this for positioning)\n transformerIncomingSources.set(config.next, [\n ...new Set([...nextSources, `chain:${name}`]),\n ]);\n }\n });\n\n preTransformerList.forEach(({ name }) => {\n const incomingSources = transformerIncomingSources.get(name) ?? [];\n // Filter to only direct sources (not chain connections)\n const directSources = incomingSources.filter(\n (s) => !s.startsWith('chain:'),\n );\n const hasChainInput = incomingSources.some((s) => s.startsWith('chain:'));\n\n let y: number;\n if (directSources.length === 1 && !hasChainInput) {\n // Only ONE direct source, no chain input → align with that source\n const sourcePos = stages[`source-${directSources[0]}`];\n y = sourcePos ? sourcePos.y : stackedCenterY - boxHeight / 2;\n } else {\n // Multiple sources or has chain input → center\n y = stackedCenterY - boxHeight / 2;\n }\n\n const pos: StagePosition = {\n x: currentX,\n y,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n preTransformerPositions.push({ name, pos });\n stages[`pre-${name}`] = pos;\n currentX += STAGE_WIDTH + STAGE_GAP;\n });\n\n // Collector position (single, centered)\n stages.collector = {\n x: currentX,\n y: stackedCenterY - boxHeight / 2,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n currentX += STAGE_WIDTH + STAGE_GAP;\n\n // Post-transformer positions\n // Strategy: position at destination Y if only ONE destination connects, otherwise center\n // This mirrors pre-transformer behavior for symmetry\n const postTransformerPositions: Array<{ name: string; pos: StagePosition }> =\n [];\n\n // Build map: transformer name → list of destinations that receive from it (directly or via chain)\n const transformerOutgoingDests = new Map<string, string[]>();\n sortedDestinationEntries.forEach(([destName, config]) => {\n const sourceTransformer = config.before;\n if (sourceTransformer) {\n const existing = transformerOutgoingDests.get(sourceTransformer) ?? [];\n existing.push(destName);\n transformerOutgoingDests.set(sourceTransformer, existing);\n }\n });\n // Also track chain connections (transformer A → transformer B means A sends to all of B's destinations)\n // Walk backwards through chain to propagate destination info\n for (let i = postTransformerList.length - 1; i >= 0; i--) {\n const { name, config } = postTransformerList[i];\n if (config.next) {\n // This transformer sends to config.next, so it indirectly sends to config.next's destinations\n const nextDests = transformerOutgoingDests.get(config.next) ?? [];\n const myDests = transformerOutgoingDests.get(name) ?? [];\n // Mark chain connection\n transformerOutgoingDests.set(name, [\n ...new Set([...myDests, `chain:${config.next}`]),\n ]);\n }\n }\n\n // First position destinations (we need their positions for smart post-transformer positioning)\n const destinationX =\n currentX + postTransformerList.length * (STAGE_WIDTH + STAGE_GAP);\n sortedDestinationEntries.forEach(([name], index) => {\n const pos: StagePosition = {\n x: destinationX,\n y: getStackedY(index, sortedDestinationEntries.length),\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n destinationPositions.push({ name, pos });\n stages[`destination-${name}`] = pos;\n });\n // Keep 'destination' alias pointing to first destination for backward compatibility\n if (destinationPositions.length > 0) {\n stages.destination = destinationPositions[0].pos;\n }\n\n // Now position post-transformers with smart Y-positioning (can now reference destination positions)\n postTransformerList.forEach(({ name }) => {\n const outgoingDests = transformerOutgoingDests.get(name) ?? [];\n // Filter to only direct destinations (not chain connections)\n const directDests = outgoingDests.filter((d) => !d.startsWith('chain:'));\n const hasChainOutput = outgoingDests.some((d) => d.startsWith('chain:'));\n\n let y: number;\n if (directDests.length === 1 && !hasChainOutput) {\n // Only ONE direct destination, no chain output → align with that destination\n const destPos = stages[`destination-${directDests[0]}`];\n y = destPos ? destPos.y : stackedCenterY - boxHeight / 2;\n } else if (directDests.length > 1 && !hasChainOutput) {\n // Multiple direct destinations → center between them (average of their Y positions)\n const destYPositions = directDests\n .map((d) => stages[`destination-${d}`]?.y)\n .filter((pos): pos is number => pos !== undefined);\n if (destYPositions.length > 0) {\n const avgY =\n destYPositions.reduce((sum, pos) => sum + pos, 0) /\n destYPositions.length;\n y = avgY;\n } else {\n y = stackedCenterY - boxHeight / 2;\n }\n } else {\n // Has chain output or no direct destinations → center\n y = stackedCenterY - boxHeight / 2;\n }\n\n const pos: StagePosition = {\n x: currentX,\n y,\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n postTransformerPositions.push({ name, pos });\n stages[`post-${name}`] = pos;\n currentX += STAGE_WIDTH + STAGE_GAP;\n });\n\n // Position after stages (per-destination or shared)\n // Each destination with `after` or falling back to shared `stageAfter` gets its own box\n const afterPositions: Array<{\n name: string;\n pos: StagePosition;\n config: FlowStageConfig;\n }> = [];\n\n if (hasAnyAfterStage) {\n const afterX = currentX + STAGE_WIDTH + STAGE_GAP;\n\n sortedDestinationEntries.forEach(([destName, destConfig], index) => {\n // Use destination's after config, or fall back to shared stageAfter\n const afterConfig = destConfig.after ?? stageAfter;\n if (afterConfig) {\n const pos: StagePosition = {\n x: afterX,\n y: getStackedY(index, sortedDestinationEntries.length), // Same Y as destination\n width: STAGE_WIDTH,\n height: boxHeight,\n };\n afterPositions.push({ name: destName, pos, config: afterConfig });\n stages[`after-${destName}`] = pos;\n }\n });\n\n // Keep 'after' alias pointing to first after position for backward compatibility\n if (afterPositions.length > 0) {\n stages.after = afterPositions[0].pos;\n }\n }\n\n // Calculate center Y for arrows (collector's center)\n const centerY = stackedCenterY;\n\n // Stage configurations with colors and default links\n const stageConfigs = [\n ...(stageBefore\n ? [\n {\n key: 'before',\n config: stageBefore,\n fillVar: '--flow-before-fill',\n strokeVar: '--flow-before-stroke',\n defaultLabel: 'Before',\n defaultLink: undefined as string | undefined,\n },\n ]\n : []),\n // Sources (named, sorted by target transformer)\n ...sortedSourceEntries.map(([name, sourceConfig]) => ({\n key: `source-${name}`,\n config: sourceConfig,\n fillVar: '--flow-source-fill',\n strokeVar: '--flow-source-stroke',\n defaultLabel: 'Source',\n defaultLink: '/docs/sources' as string | undefined,\n })),\n // Pre-transformers\n ...preTransformerList.map(({ name, config }) => ({\n key: `pre-${name}`,\n config,\n fillVar: '--flow-transformer-fill',\n strokeVar: '--flow-transformer-stroke',\n defaultLabel: name.charAt(0).toUpperCase() + name.slice(1),\n defaultLink: '/docs/transformers' as string | undefined,\n })),\n {\n key: 'collector',\n config: collector,\n fillVar: '--flow-collector-fill',\n strokeVar: '--flow-collector-stroke',\n defaultLabel: 'Collector',\n defaultLink: '/docs/collectors' as string | undefined,\n },\n // Post-transformers\n ...postTransformerList.map(({ name, config }) => ({\n key: `post-${name}`,\n config,\n fillVar: '--flow-transformer-fill',\n strokeVar: '--flow-transformer-stroke',\n defaultLabel: name.charAt(0).toUpperCase() + name.slice(1),\n defaultLink: '/docs/transformers' as string | undefined,\n })),\n // Destinations (named, sorted by source transformer)\n ...sortedDestinationEntries.map(([name, destConfig]) => ({\n key: `destination-${name}`,\n config: destConfig,\n fillVar: '--flow-destination-fill',\n strokeVar: '--flow-destination-stroke',\n defaultLabel: 'Destination',\n defaultLink: '/docs/destinations' as string | undefined,\n })),\n // After stages (per-destination)\n ...afterPositions.map(({ name: destName, config: afterConfig }) => ({\n key: `after-${destName}`,\n config: afterConfig,\n fillVar: '--flow-after-fill',\n strokeVar: '--flow-after-stroke',\n defaultLabel: 'External',\n defaultLink: undefined as string | undefined,\n })),\n ];\n\n return (\n <div\n ref={containerRef}\n className={`elb-explorer elb-flow-map ${className || ''}`}\n style={{\n width: '100%',\n maxWidth: totalWidth,\n }}\n >\n <svg\n viewBox={`0 0 ${totalWidth} ${totalHeight}`}\n style={{\n width: '100%',\n height: 'auto',\n display: 'block',\n }}\n >\n {/* Title */}\n {title && (\n <text\n x={totalWidth / 2}\n y={18}\n textAnchor=\"middle\"\n dominantBaseline=\"middle\"\n fill=\"var(--color-text, #f3f4f6)\"\n fontSize={14}\n fontWeight={600}\n fontFamily=\"system-ui, -apple-system, sans-serif\"\n >\n {title}\n </text>\n )}\n\n {/* Arrows (rendered first so boxes appear on top) */}\n {(() => {\n const collectorPos = stages.collector;\n const collectorCenterY = collectorPos.y + boxHeight / 2;\n\n // Helper to spread connection points vertically on an edge\n const getSpreadY = (\n idx: number,\n count: number,\n baseY: number,\n ): number => {\n if (count <= 1) return baseY;\n const spread = Math.min(boxHeight * 0.6, (count - 1) * 12);\n const step = spread / (count - 1);\n return baseY - spread / 2 + idx * step;\n };\n\n // Find target position for a source (either pre-transformer or collector)\n const getSourceTarget = (\n sourceName: string,\n sourceConfig: FlowSourceConfig,\n ): StagePosition => {\n if (sourceConfig.next && preTransformers?.[sourceConfig.next]) {\n return stages[`pre-${sourceConfig.next}`];\n }\n // No pre-transformer, connect to first pre-transformer or collector\n if (preTransformerList.length > 0) {\n return stages[`pre-${preTransformerList[0].name}`];\n }\n return collectorPos;\n };\n\n // Find source position for a destination (either post-transformer or collector)\n const getDestinationSource = (\n destName: string,\n destConfig: FlowDestinationConfig,\n ): StagePosition => {\n if (destConfig.before && postTransformers?.[destConfig.before]) {\n return stages[`post-${destConfig.before}`];\n }\n // No 'before' specified - connect directly from collector\n return collectorPos;\n };\n\n return (\n <>\n {/* Incoming arrow - only show if no stageBefore and single source */}\n {!stageBefore && sourceEntries.length === 1 && (\n <RoughArrow\n fromX={0}\n fromY={centerY}\n toX={stages.source.x}\n toY={centerY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n\n {/* Before -> first source arrow (only if stageBefore exists) */}\n {stageBefore && (\n <RoughArrow\n fromX={stages.before.x + STAGE_WIDTH}\n fromY={centerY}\n toX={stages.source.x}\n toY={stages.source.y + boxHeight / 2}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n\n {/* Source -> PreTransformer/Collector arrows */}\n {/* Group sources by target to apply spread only for same-target connections */}\n {(() => {\n // Build map: targetKey -> list of sources connecting to it\n const sourcesByTarget = new Map<\n string,\n Array<{ name: string; pos: StagePosition; sortIndex: number }>\n >();\n sourcePositions.forEach(({ name, pos }, sortIndex) => {\n const sourceConfig = sources?.[name] ?? {};\n const targetKey = sourceConfig.next\n ? `pre-${sourceConfig.next}`\n : preTransformerList.length > 0\n ? `pre-${preTransformerList[0].name}`\n : 'collector';\n\n const existing = sourcesByTarget.get(targetKey) ?? [];\n existing.push({ name, pos, sortIndex });\n sourcesByTarget.set(targetKey, existing);\n });\n\n return sourcePositions.map(({ name, pos: sourcePos }) => {\n const sourceConfig = sources?.[name] ?? {};\n const targetPos = getSourceTarget(name, sourceConfig);\n const sourceCenterY = sourcePos.y + boxHeight / 2;\n const targetCenterY = targetPos.y + boxHeight / 2;\n\n // Find sources connecting to the same target\n const targetKey = sourceConfig.next\n ? `pre-${sourceConfig.next}`\n : preTransformerList.length > 0\n ? `pre-${preTransformerList[0].name}`\n : 'collector';\n const sourcesToSameTarget =\n sourcesByTarget.get(targetKey) ?? [];\n const indexWithinTarget = sourcesToSameTarget.findIndex(\n (s) => s.name === name,\n );\n\n // Only spread if multiple sources connect to same target\n const spreadY = getSpreadY(\n indexWithinTarget,\n sourcesToSameTarget.length,\n targetCenterY,\n );\n\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`source-${name}-arrows`}>\n <RoughArrow\n fromX={sourcePos.x + STAGE_WIDTH}\n fromY={sourceCenterY - offset}\n toX={targetPos.x}\n toY={spreadY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={spreadY + offset}\n toX={sourcePos.x + STAGE_WIDTH}\n toY={sourceCenterY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n });\n })()}\n\n {/* Pre-transformer chain arrows */}\n {preTransformerPositions.map(({ name, pos }, index) => {\n const procConfig = preTransformers?.[name] ?? {};\n // Find next target: next transformer in chain, or collector\n let targetPos: StagePosition;\n if (procConfig.next && preTransformers?.[procConfig.next]) {\n targetPos = stages[`pre-${procConfig.next}`];\n } else {\n targetPos = collectorPos;\n }\n\n const fromY = pos.y + boxHeight / 2;\n const toY = targetPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`pre-${name}-chain`}>\n <RoughArrow\n fromX={pos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={targetPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={toY + offset}\n toX={pos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* PostTransformer/Collector -> Destination arrows */}\n {destinationPositions.map(({ name, pos: destPos }) => {\n const destConfig = destinations?.[name] ?? {};\n const sourcePos = getDestinationSource(name, destConfig);\n const destCenterY = destPos.y + boxHeight / 2;\n const sourceCenterY = sourcePos.y + boxHeight / 2;\n\n // Draw straight horizontal arrow (post-transformers are already at destination Y)\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`destination-${name}-arrows`}>\n <RoughArrow\n fromX={sourcePos.x + STAGE_WIDTH}\n fromY={sourceCenterY - offset}\n toX={destPos.x}\n toY={destCenterY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={destPos.x}\n fromY={destCenterY + offset}\n toX={sourcePos.x + STAGE_WIDTH}\n toY={sourceCenterY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Post-transformer chain arrows (between post-transformers only) */}\n {postTransformerPositions\n .slice(0, -1)\n .map(({ name, pos }, index) => {\n const procConfig = postTransformers?.[name] ?? {};\n // Find next target: next transformer in chain\n const nextProc = postTransformerPositions[index + 1];\n if (!nextProc) return null;\n\n const targetPos = nextProc.pos;\n const fromY = pos.y + boxHeight / 2;\n const toY = targetPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <React.Fragment key={`post-${name}-chain`}>\n <RoughArrow\n fromX={pos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={targetPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={targetPos.x}\n fromY={toY + offset}\n toX={pos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </React.Fragment>\n );\n })}\n\n {/* Collector -> first PostTransformer arrow (if post-transformers exist) */}\n {postTransformerList.length > 0 &&\n (() => {\n const firstPostPos =\n stages[`post-${postTransformerList[0].name}`];\n const fromY = collectorCenterY;\n const toY = firstPostPos.y + boxHeight / 2;\n const offset = withReturn ? ARROW_OFFSET : 0;\n\n return (\n <>\n <RoughArrow\n fromX={collectorPos.x + STAGE_WIDTH}\n fromY={fromY - offset}\n toX={firstPostPos.x}\n toY={toY - offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n {withReturn && (\n <RoughArrow\n fromX={firstPostPos.x}\n fromY={toY + offset}\n toX={collectorPos.x + STAGE_WIDTH}\n toY={fromY + offset}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </>\n );\n })()}\n\n {/* Destination -> After arrows (per-destination) */}\n {afterPositions.map(({ name: destName, pos: afterPos }) => {\n const destPos = stages[`destination-${destName}`];\n if (!destPos) return null;\n const destCenterY = destPos.y + boxHeight / 2;\n const afterCenterY = afterPos.y + boxHeight / 2;\n\n return (\n <RoughArrow\n key={`dest-${destName}-after`}\n fromX={destPos.x + STAGE_WIDTH}\n fromY={destCenterY}\n toX={afterPos.x}\n toY={afterCenterY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n );\n })}\n\n {/* Outgoing arrow - only show if no after stages and single destination */}\n {!hasAnyAfterStage && destinationEntries.length === 1 && (\n <RoughArrow\n fromX={stages.destination.x + STAGE_WIDTH}\n fromY={centerY}\n toX={totalWidth}\n toY={centerY}\n stroke=\"var(--flow-edge-stroke, #9ca3af)\"\n centerY={centerY}\n />\n )}\n </>\n );\n })()}\n\n {/* Stages */}\n {stageConfigs.map(\n ({ key, config, fillVar, strokeVar, defaultLabel, defaultLink }) => {\n const pos = stages[key];\n const icon = config?.icon;\n const label = config?.label || defaultLabel;\n const text = config?.text;\n const description = config?.description;\n const link = config?.link;\n const stageHighlight = config?.highlight !== false;\n\n // Calculate label Y position\n // When text exists: label at ~25% from top, text fills remaining space centered\n const labelY = text\n ? pos.y + pos.height * 0.28\n : pos.y + pos.height / 2;\n\n // Resolve link URL: undefined = default, false = none, string = custom\n const linkUrl =\n link === false\n ? null\n : typeof link === 'string'\n ? link\n : defaultLink;\n\n // Content to render (box, label, text, description)\n const stageContent = (\n <>\n {/* Box */}\n <RoughRect\n x={pos.x}\n y={pos.y}\n width={pos.width}\n height={pos.height}\n fill={`var(${fillVar}, #6b7280)`}\n stroke={\n stageHighlight\n ? `var(${strokeVar}, #6b7280)`\n : 'var(--flow-edge-stroke, #9ca3af)'\n }\n />\n\n {/* Label (with optional icon) */}\n <foreignObject\n x={pos.x + 4}\n y={labelY - layout.labelSize / 2 - 2}\n width={pos.width - 8}\n height={layout.labelSize + 4}\n >\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '6px',\n height: '100%',\n fontSize: layout.labelSize,\n fontWeight: layout.labelWeight,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: 'var(--color-text)',\n }}\n >\n {icon && <Icon icon={icon} width={14} height={14} />}\n <span>{label}</span>\n </div>\n </foreignObject>\n\n {/* Text (inside box, below label - supports ReactNode) */}\n {text && (\n <foreignObject\n x={pos.x + 4}\n y={pos.y + pos.height * 0.34}\n width={pos.width - 8}\n height={pos.height * 0.62}\n >\n <div\n style={{\n fontSize: layout.textSize,\n fontWeight: layout.textWeight,\n color: 'var(--color-text)',\n textAlign: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: 1.3,\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {text}\n </div>\n </foreignObject>\n )}\n\n {/* Description (below box, using foreignObject for rich content) */}\n {description && (\n <foreignObject\n x={pos.x}\n y={pos.y + pos.height + 8}\n width={STAGE_WIDTH}\n height={descriptionHeight}\n >\n <div\n style={{\n fontSize: layout.descriptionSize,\n color: 'var(--color-text-muted)',\n textAlign: 'center',\n fontFamily: 'system-ui, -apple-system, sans-serif',\n lineHeight: 1.3,\n }}\n >\n {description}\n </div>\n </foreignObject>\n )}\n </>\n );\n\n // Wrap in link if URL is set\n return linkUrl ? (\n <a\n key={key}\n href={linkUrl}\n style={{ cursor: 'pointer', textDecoration: 'none' }}\n >\n {stageContent}\n </a>\n ) : (\n <g key={key}>{stageContent}</g>\n );\n },\n )}\n\n {/* Markers */}\n {markers?.map((marker, index) => {\n const pos = getMarkerPosition(\n marker.position,\n stages,\n centerY,\n totalWidth,\n );\n // Skip markers for stages that don't exist\n if (!pos) return null;\n const id = marker.id ?? String(index + 1);\n return (\n <Marker key={`marker-${index}`} x={pos.x} y={pos.y} text={id} />\n );\n })}\n\n {/* Legend */}\n {legendItems.length > 0 && (\n <foreignObject\n x={PADDING_X}\n y={baseY + stackedHeight + belowBoxHeight + 4}\n width={totalWidth - PADDING_X * 2}\n height={LEGEND_LINE_HEIGHT * estimatedLines}\n >\n <div\n style={{\n fontSize: 11,\n fontFamily: 'system-ui, -apple-system, sans-serif',\n color: 'var(--color-text-muted)',\n lineHeight: 1.6,\n }}\n >\n {legendItems.map((item, index) => {\n const id =\n item.id ?? String((markers?.indexOf(item) ?? index) + 1);\n return (\n <span key={`legend-${index}`}>\n <span\n style={{\n width: 12,\n height: 12,\n borderRadius: '50%',\n background: 'var(--flow-marker-fill, #dc2626)',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 8,\n fontWeight: 600,\n color: 'var(--flow-marker-text, #ffffff)',\n verticalAlign: 'middle',\n marginRight: 4,\n position: 'relative',\n top: -1,\n }}\n >\n {id}\n </span>\n <span style={{ marginRight: 10 }}>{item.text}</span>\n </span>\n );\n })}\n </div>\n </foreignObject>\n )}\n </svg>\n </div>\n );\n}\n","import React, { useState } from 'react';\nimport type { RJSFSchema } from '@rjsf/utils';\n\nexport interface PropertyTableProps {\n schema: RJSFSchema;\n className?: string;\n /** Message to display when the schema has no properties. Default: 'No specific properties available.' */\n emptyMessage?: string;\n}\n\n// Mapping of type titles (from $ref targets' `title` meta) to doc links.\n// If a title isn't listed here, it's still rendered — just without a link.\nconst TYPE_LINKS: Record<string, string> = {\n 'Mapping.Value': '/docs/mapping/value',\n 'Mapping.Rule': '/docs/mapping/rule',\n 'WalkerOS.Consent': '/docs/guides/consent',\n};\n\ninterface TypeRef {\n title: string;\n href?: string;\n}\n\ninterface Property {\n name: string;\n type: string;\n typeRefs?: TypeRef[]; // if set, renderer shows links instead of plain type\n description: string;\n default?: string;\n required?: boolean;\n example?: string;\n}\n\ntype SchemaNode = Record<string, unknown>;\n\nfunction resolveRef(ref: string, root: SchemaNode): SchemaNode | undefined {\n // Only handle local refs like #/definitions/Foo or #/$defs/Foo\n if (!ref.startsWith('#/')) return undefined;\n const parts = ref.slice(2).split('/');\n let cur: unknown = root;\n for (const p of parts) {\n if (cur && typeof cur === 'object' && p in (cur as SchemaNode)) {\n cur = (cur as SchemaNode)[p];\n } else {\n return undefined;\n }\n }\n return cur as SchemaNode | undefined;\n}\n\nfunction refTitle(refNode: SchemaNode | undefined, fallback: string): string {\n if (refNode && typeof refNode.title === 'string') return refNode.title;\n return fallback;\n}\n\nfunction titleFromRefString(ref: string): string {\n const idx = ref.lastIndexOf('/');\n return idx >= 0 ? ref.slice(idx + 1) : ref;\n}\n\n// Detect $ref presence inside a property and build a display label + refs.\n// Returns undefined if no $ref involvement.\nfunction detectTypeRefs(\n prop: SchemaNode,\n root: SchemaNode,\n): { type: string; typeRefs: TypeRef[] } | undefined {\n const getRefInfo = (refStr: string): TypeRef => {\n const target = resolveRef(refStr, root);\n const title = refTitle(target, titleFromRefString(refStr));\n return { title, href: TYPE_LINKS[title] };\n };\n\n // Direct $ref\n if (typeof prop.$ref === 'string') {\n const info = getRefInfo(prop.$ref);\n return { type: info.title, typeRefs: [info] };\n }\n\n // allOf: [ { $ref } ] — treat as a simple single ref\n if (Array.isArray(prop.allOf)) {\n const allOf = prop.allOf as SchemaNode[];\n const refs = allOf\n .map((n) => (typeof n.$ref === 'string' ? (n.$ref as string) : undefined))\n .filter((r): r is string => !!r);\n if (refs.length === 1 && allOf.length === 1) {\n const info = getRefInfo(refs[0]);\n return { type: info.title, typeRefs: [info] };\n }\n }\n\n // anyOf: [ { $ref: X }, { type: 'array', items: { $ref: X } } ]\n if (Array.isArray(prop.anyOf)) {\n const anyOf = prop.anyOf as SchemaNode[];\n const refs: string[] = [];\n let arrayRef: string | undefined;\n let directRef: string | undefined;\n for (const branch of anyOf) {\n if (typeof branch.$ref === 'string') {\n directRef = branch.$ref as string;\n refs.push(directRef);\n } else if (\n branch.type === 'array' &&\n branch.items &&\n typeof (branch.items as SchemaNode).$ref === 'string'\n ) {\n arrayRef = (branch.items as SchemaNode).$ref as string;\n refs.push(arrayRef);\n }\n }\n if (anyOf.length === 2 && directRef && arrayRef && directRef === arrayRef) {\n const info = getRefInfo(directRef);\n return {\n type: `${info.title} | ${info.title}[]`,\n typeRefs: [info],\n };\n }\n if (refs.length > 0 && refs.length === anyOf.length) {\n const infos = refs.map(getRefInfo);\n return {\n type: infos.map((i) => i.title).join(' | '),\n typeRefs: infos,\n };\n }\n }\n\n // array with $ref items\n if (\n prop.type === 'array' &&\n prop.items &&\n typeof (prop.items as SchemaNode).$ref === 'string'\n ) {\n const info = getRefInfo((prop.items as SchemaNode).$ref as string);\n return { type: `${info.title}[]`, typeRefs: [info] };\n }\n\n // object with additionalProperties: { $ref }\n if (\n prop.type === 'object' &&\n prop.additionalProperties &&\n typeof (prop.additionalProperties as SchemaNode).$ref === 'string'\n ) {\n const info = getRefInfo(\n (prop.additionalProperties as SchemaNode).$ref as string,\n );\n return {\n type: `Record<string, ${info.title}>`,\n typeRefs: [info],\n };\n }\n\n return undefined;\n}\n\ninterface PropertyModalProps {\n property: Property | null;\n isOpen: boolean;\n onClose: () => void;\n}\n\nfunction schemaToProperties(schema: RJSFSchema): Property[] {\n const properties: Property[] = [];\n const root = schema as SchemaNode;\n\n // Resolve top-level indirection: allOf: [ { $ref: ... } ] should be\n // unwrapped so we render the underlying object's properties.\n let target: SchemaNode = schema as SchemaNode;\n if (\n Array.isArray(target.allOf) &&\n (target.allOf as SchemaNode[]).length === 1 &&\n typeof (target.allOf as SchemaNode[])[0].$ref === 'string'\n ) {\n const ref = (target.allOf as SchemaNode[])[0].$ref as string;\n const resolved = resolveRef(ref, root);\n if (resolved) target = resolved;\n }\n\n const required = (target.required as string[]) || [];\n\n if (!target.properties) {\n return properties;\n }\n\n for (const [name, prop] of Object.entries(\n target.properties as Record<string, unknown>,\n )) {\n const property = prop as SchemaNode;\n\n // $ref-aware type detection first\n const refInfo = detectTypeRefs(property, root);\n\n let type: string;\n let typeRefs: TypeRef[] | undefined;\n\n if (refInfo) {\n type = refInfo.type;\n typeRefs = refInfo.typeRefs;\n } else {\n type = (property.type as string) || 'any';\n\n if (property.enum) {\n type = (property.enum as unknown[])\n .map((v: unknown) => `'${v}'`)\n .join(' | ');\n }\n\n if (type === 'array' && property.items) {\n const items = property.items as Record<string, unknown>;\n if (items.enum) {\n type = `Array<${(items.enum as unknown[]).map((v: unknown) => `'${v}'`).join(' | ')}>`;\n } else {\n type = `Array<${(items.type as string) || 'any'}>`;\n }\n }\n\n if (type === 'object' && property.additionalProperties) {\n const addProps = property.additionalProperties as Record<\n string,\n unknown\n >;\n const valueType = (addProps.type as string) || 'any';\n type = `Record<string, ${valueType}>`;\n }\n\n if (property.anyOf || property.oneOf) {\n const variants = (property.anyOf || property.oneOf) as Array<\n Record<string, unknown>\n >;\n type = variants.map((v) => (v.type as string) || 'any').join(' | ');\n }\n }\n\n let description = (property.description as string) || '';\n let example: string | undefined;\n\n const exampleMatch = description.match(/\\(like\\s+(.+?)\\)$/);\n if (exampleMatch) {\n example = exampleMatch[1];\n description = description.replace(/\\s*\\(like\\s+.+?\\)$/, '');\n }\n\n if (type === 'any' && description.toLowerCase().includes('function')) {\n type = 'function';\n }\n\n properties.push({\n name,\n type,\n typeRefs,\n description,\n required: required.includes(name),\n default:\n property.default !== undefined ? String(property.default) : undefined,\n example,\n });\n }\n\n return properties;\n}\n\nfunction PropertyModal({ property, isOpen, onClose }: PropertyModalProps) {\n if (!isOpen || !property) return null;\n\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n onClose();\n }\n };\n\n return (\n <div\n className=\"elb-property-table__modal-backdrop\"\n onClick={handleBackdropClick}\n >\n <div className=\"elb-property-table__modal-content\">\n <div className=\"elb-property-table__modal-header\">\n <h3 className=\"elb-property-table__modal-title\">\n <code className=\"elb-property-table__modal-property-name\">\n {property.name}\n </code>\n {property.required && (\n <span className=\"elb-property-table__required-icon\">*</span>\n )}\n </h3>\n <button\n className=\"elb-property-table__close-button\"\n onClick={onClose}\n aria-label=\"Close\"\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n </button>\n </div>\n <div className=\"elb-property-table__modal-body\">\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Type:</span>\n <code className=\"elb-property-table__modal-type elb-property-table__modal-type--wrap\">\n {property.type}\n </code>\n </div>\n {property.description && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">\n Description:\n </span>\n <p className=\"elb-property-table__modal-description\">\n {property.description}\n </p>\n </div>\n )}\n {property.default && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Default:</span>\n <code className=\"elb-property-table__modal-default\">\n {property.default}\n </code>\n </div>\n )}\n {property.example && (\n <div className=\"elb-property-table__modal-row\">\n <span className=\"elb-property-table__modal-label\">Example:</span>\n <code className=\"elb-property-table__modal-example\">\n {property.example}\n </code>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n}\n\nfunction renderTypeWithRefs(type: string, refs: TypeRef[]): React.ReactNode {\n // Split the type string by each ref title, replacing occurrences with\n // either a link or the plain title if no href is mapped.\n // Build a single alternation regex from unique titles.\n const uniqueTitles = Array.from(new Set(refs.map((r) => r.title)));\n if (uniqueTitles.length === 0) return type;\n\n // Sort longer first so \"Mapping.Value\" matches before any hypothetical\n // shorter prefix.\n uniqueTitles.sort((a, b) => b.length - a.length);\n const escaped = uniqueTitles.map((t) =>\n t.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n );\n const re = new RegExp(`(${escaped.join('|')})`, 'g');\n\n const titleToHref: Record<string, string | undefined> = {};\n for (const r of refs) titleToHref[r.title] = r.href;\n\n const parts = type.split(re);\n return parts.map((part, i) => {\n if (uniqueTitles.includes(part)) {\n const href = titleToHref[part];\n if (href) {\n return (\n <a key={i} href={href} className=\"elb-property-table__type-link\">\n {part}\n </a>\n );\n }\n return <span key={i}>{part}</span>;\n }\n return <span key={i}>{part}</span>;\n });\n}\n\nexport function PropertyTable({\n schema,\n className,\n emptyMessage,\n}: PropertyTableProps) {\n const [selectedProperty, setSelectedProperty] = useState<Property | null>(\n null,\n );\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const properties = schemaToProperties(schema);\n\n if (properties.length === 0) {\n return (\n <div\n className={`elb-explorer elb-property-table__empty ${className || ''}`}\n role=\"note\"\n >\n {emptyMessage ?? 'No specific properties available.'}\n </div>\n );\n }\n\n const hasRequiredProperties = properties.some(\n (property) => property.required,\n );\n\n const TYPE_MAX_LENGTH = 30;\n\n const isTruncated = (type: string) => type.length > TYPE_MAX_LENGTH;\n\n const truncateType = (type: string) => {\n if (type.length <= TYPE_MAX_LENGTH) return type;\n return type.slice(0, TYPE_MAX_LENGTH);\n };\n\n const openModal = (property: Property) => {\n setSelectedProperty(property);\n setIsModalOpen(true);\n };\n\n const closeModal = () => {\n setIsModalOpen(false);\n setSelectedProperty(null);\n };\n\n return (\n <div className={`elb-explorer ${className || ''}`}>\n <div className=\"elb-property-table__container\">\n <table className=\"elb-property-table\">\n <thead>\n <tr>\n <th>Property</th>\n <th>Type</th>\n <th>Description</th>\n <th>More</th>\n </tr>\n </thead>\n <tbody>\n {properties.map((property: Property, index: number) => (\n <tr key={index}>\n <td\n className=\"elb-property-table__property-cell\"\n data-label=\"Property\"\n >\n <code className=\"elb-property-table__property-name\">\n {property.name}\n {property.required && (\n <span className=\"elb-property-table__required-icon\">\n *\n </span>\n )}\n </code>\n </td>\n <td className=\"elb-property-table__type-cell\" data-label=\"Type\">\n {property.typeRefs && property.typeRefs.length > 0 ? (\n <code className=\"elb-property-table__property-type\">\n {renderTypeWithRefs(property.type, property.typeRefs)}\n </code>\n ) : isTruncated(property.type) ? (\n <button\n className=\"elb-property-table__type-button\"\n onClick={() => openModal(property)}\n aria-label={`View full type for ${property.name}`}\n >\n <code className=\"elb-property-table__property-type elb-property-table__property-type--truncated\">\n {truncateType(property.type)}\n </code>\n </button>\n ) : (\n <code className=\"elb-property-table__property-type\">\n {property.type}\n </code>\n )}\n </td>\n <td\n className=\"elb-property-table__description\"\n data-label=\"Description\"\n >\n {property.description}\n </td>\n <td\n className=\"elb-property-table__action-cell\"\n data-label=\"More\"\n >\n <button\n className=\"elb-property-table__more-button\"\n onClick={() => openModal(property)}\n aria-label={`More info about ${property.name}`}\n >\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n </button>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n {hasRequiredProperties && (\n <div className=\"elb-property-table__required-notice\">\n <span className=\"elb-property-table__required-icon\">*</span> Required\n fields\n </div>\n )}\n <PropertyModal\n property={selectedProperty}\n isOpen={isModalOpen}\n onClose={closeModal}\n />\n </div>\n );\n}\n","import React from 'react';\n\nexport interface DropdownProps {\n /** Trigger element (button, link, etc.) */\n trigger: React.ReactNode;\n /** Whether dropdown is open (controlled) */\n isOpen: boolean;\n /** Toggle handler */\n onToggle: () => void;\n /** Dropdown content */\n children: React.ReactNode;\n /** Alignment of dropdown panel */\n align?: 'left' | 'right';\n /** ARIA label for accessibility */\n ariaLabel?: string;\n /** Additional CSS class */\n className?: string;\n}\n\nexport interface DropdownItemProps {\n /** Item content */\n children: React.ReactNode;\n /** Click handler */\n onClick?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Visual variant */\n variant?: 'default' | 'danger';\n /** Additional CSS class */\n className?: string;\n}\n\nexport interface DropdownDividerProps {\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Dropdown - Generic dropdown container (UI only)\n *\n * Pure UI component for dropdown menus.\n * Click-outside and keyboard handling should be implemented in the parent\n * via hooks like useDropdown.\n *\n * @example\n * <Dropdown\n * trigger={<button>Menu</button>}\n * isOpen={isOpen}\n * onToggle={toggle}\n * align=\"right\"\n * >\n * <DropdownItem onClick={handleAction}>Action</DropdownItem>\n * <DropdownDivider />\n * <DropdownItem onClick={handleLogout} variant=\"danger\">Logout</DropdownItem>\n * </Dropdown>\n */\nexport function Dropdown({\n trigger,\n isOpen,\n onToggle,\n children,\n align = 'left',\n ariaLabel,\n className = '',\n}: DropdownProps) {\n return (\n <div className={`elb-dropdown ${className}`.trim()}>\n <div\n className=\"elb-dropdown__trigger\"\n onClick={onToggle}\n role=\"button\"\n tabIndex={0}\n aria-haspopup=\"menu\"\n aria-expanded={isOpen}\n aria-label={ariaLabel}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n }}\n >\n {trigger}\n </div>\n {isOpen && (\n <div\n className={`elb-dropdown__panel elb-dropdown__panel--${align}`}\n role=\"menu\"\n >\n {children}\n </div>\n )}\n </div>\n );\n}\n\n/**\n * DropdownItem - Menu item within a dropdown\n *\n * @example\n * <DropdownItem onClick={handleClick}>Action</DropdownItem>\n */\nexport function DropdownItem({\n children,\n onClick,\n disabled = false,\n variant = 'default',\n className = '',\n}: DropdownItemProps) {\n return (\n <button\n type=\"button\"\n role=\"menuitem\"\n className={`elb-dropdown__item elb-dropdown__item--${variant} ${disabled ? 'elb-dropdown__item--disabled' : ''} ${className}`.trim()}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}\n\n/**\n * DropdownDivider - Visual separator between menu items\n *\n * @example\n * <DropdownDivider />\n */\nexport function DropdownDivider({ className = '' }: DropdownDividerProps) {\n return (\n <div\n className={`elb-dropdown__divider ${className}`.trim()}\n role=\"separator\"\n />\n );\n}\n","import React, { useState, useCallback } from 'react';\nimport { Box } from '../atoms/box';\nimport { CodeStatic } from '../atoms/code-static';\n\n/**\n * Tab with code content for CodeView\n */\nexport interface CodeViewTab {\n id: string;\n label: string;\n code: string;\n language?: string; // Optional, defaults to CodeView's language prop\n}\n\nexport interface CodeViewProps {\n // Single code mode\n code?: string;\n language?: string;\n\n // Tabs mode\n tabs?: CodeViewTab[];\n activeTab?: string;\n onTabChange?: (id: string) => void;\n defaultTab?: string;\n\n // Header\n label?: string;\n header?: string;\n showHeader?: boolean;\n showTrafficLights?: boolean;\n\n // Actions\n showCopy?: boolean;\n\n // Layout\n footer?: React.ReactNode;\n height?: string | number;\n className?: string;\n style?: React.CSSProperties;\n}\n\n/**\n * CodeView - Read-only code rendered with the same visual chrome as CodeBox.\n *\n * Composes Box + CodeStatic. Use for non-interactive code blocks where Monaco\n * would be overkill but you want visual parity with `<CodeBox disabled>`.\n *\n * @example\n * <CodeView code={snippet} language=\"typescript\" label=\"Setup\" />\n *\n * @example\n * <CodeView\n * tabs={[\n * { id: 'js', label: 'JavaScript', code: jsCode, language: 'javascript' },\n * { id: 'ts', label: 'TypeScript', code: tsCode, language: 'typescript' },\n * ]}\n * showTrafficLights\n * />\n */\nexport function CodeView({\n code,\n language = 'javascript',\n tabs,\n activeTab: controlledActiveTab,\n onTabChange,\n defaultTab,\n label,\n header,\n showHeader = true,\n showTrafficLights = false,\n showCopy = true,\n footer,\n height,\n className,\n style,\n}: CodeViewProps) {\n const [copied, setCopied] = useState(false);\n\n // Track active tab so the copy button copies the right code\n const [currentTabId, setCurrentTabId] = useState(\n controlledActiveTab ?? defaultTab ?? tabs?.[0]?.id ?? '',\n );\n\n const effectiveTabId = controlledActiveTab ?? currentTabId;\n\n const handleTabChange = useCallback(\n (tabId: string) => {\n setCurrentTabId(tabId);\n onTabChange?.(tabId);\n },\n [onTabChange],\n );\n\n const activeTabData = tabs?.find((t) => t.id === effectiveTabId);\n const currentCode = activeTabData?.code ?? code ?? '';\n const currentLanguage = activeTabData?.language ?? language;\n\n const boxHeader = header ?? label ?? 'Code';\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(currentCode);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard write failed silently\n }\n };\n\n const actions = showCopy ? (\n <div style={{ display: 'flex', gap: '4px', alignItems: 'center' }}>\n <button\n className=\"elb-explorer-btn\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy to clipboard'}\n >\n {copied ? (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : (\n <svg\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\n </svg>\n )}\n </button>\n </div>\n ) : undefined;\n\n const boxTabs = tabs?.map((tab) => ({\n id: tab.id,\n label: tab.label,\n content: <CodeStatic code={tab.code} language={tab.language ?? language} />,\n }));\n\n return (\n <Box\n header={boxHeader}\n headerActions={actions}\n showHeader={showHeader}\n tabs={boxTabs}\n defaultTab={defaultTab}\n activeTab={controlledActiveTab}\n onTabChange={handleTabChange}\n showTrafficLights={showTrafficLights}\n footer={footer}\n height={height}\n style={style}\n className={className}\n >\n {!tabs && <CodeStatic code={code ?? ''} language={currentLanguage} />}\n </Box>\n );\n}\n","import React, { useEffect, useState } from 'react';\nimport {\n createHighlighter,\n type Highlighter,\n type BundledLanguage,\n} from 'shiki';\nimport { palenightTheme } from '../../themes/palenight';\nimport { lighthouseTheme } from '../../themes/lighthouse';\nimport { monacoThemeToShiki } from '../../themes/shiki-adapter';\nimport { ELB_THEME_DARK, ELB_THEME_LIGHT } from '../../themes/names';\n\nexport interface CodeStaticProps {\n code: string;\n language?: string;\n className?: string;\n /** Force theme. If omitted, auto-detected from <html> data-theme / class. */\n theme?: 'light' | 'dark';\n}\n\n// Pinned language set. Extend here when docs need a new language.\nconst LANGS: readonly BundledLanguage[] = [\n 'json',\n 'javascript',\n 'typescript',\n 'tsx',\n 'jsx',\n 'bash',\n 'html',\n 'css',\n 'markdown',\n];\n\n// Derive Shiki themes from the same Monaco theme objects CodeBox uses,\n// so CodeView (Shiki) and CodeBox (Monaco) render identical colors.\n// Names match Monaco's `monaco.editor.setTheme(...)` keys.\nconst ELB_SHIKI_LIGHT = monacoThemeToShiki(lighthouseTheme, {\n name: ELB_THEME_LIGHT,\n type: 'light',\n defaultBackground: '#ffffff',\n defaultForeground: '#24292E',\n});\n\nconst ELB_SHIKI_DARK = monacoThemeToShiki(palenightTheme, {\n name: ELB_THEME_DARK,\n type: 'dark',\n defaultBackground: '#292d3e',\n defaultForeground: '#bfc7d5',\n});\n\nlet highlighterPromise: Promise<Highlighter> | null = null;\n\nfunction getHighlighter(): Promise<Highlighter> {\n if (!highlighterPromise) {\n highlighterPromise = createHighlighter({\n themes: [ELB_SHIKI_LIGHT, ELB_SHIKI_DARK],\n langs: [...LANGS],\n });\n }\n return highlighterPromise;\n}\n\nfunction detectTheme(): 'light' | 'dark' {\n if (typeof document === 'undefined') return 'dark';\n const html = document.documentElement;\n if (html.dataset.theme === 'dark') return 'dark';\n if (html.classList.contains('dark')) return 'dark';\n return 'light';\n}\n\nfunction resolveLang(language: string | undefined): BundledLanguage | 'text' {\n if (!language) return 'json';\n return (LANGS as readonly string[]).includes(language)\n ? (language as BundledLanguage)\n : 'text';\n}\n\nexport function CodeStatic({\n code,\n language,\n className,\n theme,\n}: CodeStaticProps): React.ReactElement {\n const [html, setHtml] = useState<string>('');\n const [activeTheme, setActiveTheme] = useState<'light' | 'dark'>(\n theme ?? detectTheme(),\n );\n\n // Track host theme changes when not explicitly overridden.\n useEffect(() => {\n if (theme) {\n setActiveTheme(theme);\n return;\n }\n setActiveTheme(detectTheme());\n const observer = new MutationObserver(() => setActiveTheme(detectTheme()));\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['class', 'data-theme'],\n });\n return () => observer.disconnect();\n }, [theme]);\n\n useEffect(() => {\n let cancelled = false;\n getHighlighter().then((highlighter) => {\n if (cancelled) return;\n const rendered = highlighter.codeToHtml(code, {\n lang: resolveLang(language),\n theme: activeTheme === 'dark' ? ELB_THEME_DARK : ELB_THEME_LIGHT,\n });\n setHtml(rendered);\n });\n return () => {\n cancelled = true;\n };\n }, [code, language, activeTheme]);\n\n const wrapperClass = `elb-code-static${className ? ` ${className}` : ''}`;\n\n return (\n <div className={wrapperClass} dangerouslySetInnerHTML={{ __html: html }} />\n );\n}\n","/**\n * Monaco → Shiki theme adapter\n *\n * Converts a Monaco IStandaloneThemeData into Shiki's TextMate-format\n * ThemeRegistrationRaw so CodeStatic (Shiki) and Code (Monaco) use the\n * same walkerOS token colors (`elbTheme-dark` / `elbTheme-light`).\n *\n * Monaco token names are already TextMate-compatible scopes (e.g.\n * `string.quoted`, `entity.name.function`). The main differences:\n * - Shiki colors need a leading `#` prefix\n * - Shiki uses `tokenColors[]` instead of `rules[]`\n * - Shiki needs a `name` and `type` ('light' | 'dark')\n */\nimport type { editor } from 'monaco-editor';\nimport type { ThemeRegistrationRaw } from 'shiki';\n\nfunction normalizeColor(hex: string | undefined): string | undefined {\n if (!hex) return undefined;\n return hex.startsWith('#') ? hex : `#${hex}`;\n}\n\nfunction normalizeColors(\n colors: Record<string, string> | undefined,\n): Record<string, string> {\n if (!colors) return {};\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(colors)) {\n const normalized = normalizeColor(v);\n if (normalized) out[k] = normalized;\n }\n return out;\n}\n\nexport interface MonacoToShikiOptions {\n name: string;\n type: 'light' | 'dark';\n /** Fallback foreground if the Monaco theme didn't set editor.foreground. */\n defaultForeground?: string;\n /** Fallback background if the Monaco theme uses a transparent one. */\n defaultBackground?: string;\n}\n\n/**\n * Convert a Monaco theme to a Shiki ThemeRegistrationRaw.\n */\nexport function monacoThemeToShiki(\n monaco: editor.IStandaloneThemeData,\n options: MonacoToShikiOptions,\n): ThemeRegistrationRaw {\n const tokenColors = monaco.rules.map((rule) => {\n const settings: { foreground?: string; fontStyle?: string } = {};\n const fg = normalizeColor(rule.foreground);\n if (fg) settings.foreground = fg;\n if (rule.fontStyle) settings.fontStyle = rule.fontStyle;\n return {\n scope: rule.token,\n settings,\n };\n });\n\n const colors = normalizeColors(monaco.colors);\n\n // Shiki requires an opaque background and a foreground. Monaco themes use\n // transparent backgrounds (`#00000000`) so CSS can theme the box — replace\n // those with the caller-provided fallback.\n const isTransparent = (c: string | undefined) =>\n !c || c === '#00000000' || /^#[0-9a-f]{6}00$/i.test(c);\n\n const bg = isTransparent(colors['editor.background'])\n ? (options.defaultBackground ??\n (options.type === 'dark' ? '#292d3e' : '#ffffff'))\n : colors['editor.background'];\n\n const fg =\n colors['editor.foreground'] ??\n options.defaultForeground ??\n (options.type === 'dark' ? '#bfc7d5' : '#24292E');\n\n // Shiki's ThemeRegistrationRaw requires a `settings` array (TextMate format).\n // First entry sets global defaults; remaining entries are the token rules.\n const settings = [\n { settings: { foreground: fg, background: bg } },\n ...tokenColors,\n ];\n\n return {\n name: options.name,\n type: options.type,\n bg,\n fg,\n colors: {\n ...colors,\n 'editor.background': bg,\n 'editor.foreground': fg,\n },\n settings,\n tokenColors,\n };\n}\n","import React from 'react';\n\nexport interface FooterProps {\n children: React.ReactNode;\n className?: string;\n}\n\n/**\n * Footer - Footer atom component for boxes\n *\n * Provides a fixed-height footer area at the bottom of a box.\n * Pairs with Header component for consistent box structure.\n *\n * @example\n * <Box header=\"Preview\">\n * <Preview ... />\n * <Footer>\n * <ButtonGroup buttons={...} />\n * </Footer>\n * </Box>\n */\nexport function Footer({ children, className = '' }: FooterProps) {\n return <div className={`elb-explorer-footer ${className}`}>{children}</div>;\n}\n","import React from 'react';\n\nexport interface ButtonLinkProps {\n variant?: 'default' | 'primary' | 'secondary';\n size?: 'md' | 'lg';\n href?: string;\n onClick?: () => void;\n children: React.ReactNode;\n className?: string;\n disabled?: boolean;\n}\n\nexport function ButtonLink({\n variant = 'default',\n size = 'md',\n href,\n onClick,\n children,\n className = '',\n disabled = false,\n}: ButtonLinkProps) {\n const baseClass = 'elb-button-link';\n const classes =\n `${baseClass} ${baseClass}-${variant} ${baseClass}-${size} ${className}`.trim();\n\n if (href && !disabled) {\n return (\n <a href={href} className={classes}>\n {children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n className={classes}\n onClick={onClick}\n disabled={disabled}\n >\n {children}\n </button>\n );\n}\n","import React from 'react';\n\nexport interface SpinnerProps {\n /** Size of the spinner */\n size?: 'sm' | 'md' | 'lg';\n /** Additional CSS class */\n className?: string;\n}\n\n/**\n * Spinner - Loading indicator\n *\n * Pure UI component for showing loading state.\n * No internal state - controlled via parent.\n *\n * @example\n * <Spinner size=\"md\" />\n */\nexport function Spinner({ size = 'md', className = '' }: SpinnerProps) {\n return (\n <span\n className={`elb-spinner elb-spinner--${size} ${className}`.trim()}\n role=\"status\"\n aria-label=\"Loading\"\n />\n );\n}\n","import { addIcon } from '@iconify/react';\n\naddIcon('walkeros:piwik-pro', {\n body: '<g fill=\"none\" fill-rule=\"evenodd\"><path fill=\"#231F20\" d=\"M0 0h90v90H0z\"/><path d=\"M50.792 57.21v.044H37.99v8.675c0 3.38-2.652 6.07-6.006 6.07a5.917 5.917 0 0 1-4.243-1.77 6.073 6.073 0 0 1-1.74-4.3v-38.88C26 23.67 28.65 21 31.983 21H50.79v.022c9.58.4 17.209 8.341 17.209 18.104 0 9.764-7.628 17.704-17.209 18.083h.001Zm-2.148-25.29H37.99v14.57h10.872c3.88-.112 6.993-3.337 6.993-7.274a7.347 7.347 0 0 0-2.114-5.16 7.16 7.16 0 0 0-5.098-2.134Z\" fill=\"#FFF\" fill-rule=\"nonzero\"/></g>',\n width: 90,\n height: 90,\n});\n\naddIcon('walkeros:snowplow', {\n body: '<path d=\"M328.55 135.473L259.662 14.399a31.246 31.246 0 0 0-10.654-10.224 30.715 30.715 0 0 0-14.09-4.123h-51.362c-.47-.07-.948-.07-1.419 0H97.061a30.545 30.545 0 0 0-14.086 4.136A31.074 31.074 0 0 0 72.36 14.45L3.45 135.473A32.012 32.012 0 0 0 0 149.939c0 5.031 1.183 9.99 3.45 14.465L72.38 285.539a31.203 31.203 0 0 0 10.607 10.279A30.68 30.68 0 0 0 97.06 300h137.857a30.669 30.669 0 0 0 14.087-4.178 31.19 31.19 0 0 0 10.616-10.283l68.929-121.135a32.018 32.018 0 0 0 3.45-14.465c0-5.032-1.183-9.991-3.45-14.466zM251.086 19.439l25.159 44.225-44.074 76.53-28.848-50.129a4.973 4.973 0 0 0-1.804-1.814 4.884 4.884 0 0 0-2.454-.665h-57.261l43.851-77.506h49.263a21.061 21.061 0 0 1 9.12 2.79 21.41 21.41 0 0 1 7.008 6.548l.04.021zm-81.954 125.887l-27.47-47.722h54.585l27.491 47.712-54.606.01zm-8.971 4.844l-27.155 47.197-27.258-47.423l27.146-47.198 27.267 47.424zm8.687 5.245h54.302l-26.974 46.91h-54.514l27.186-46.91zM80.985 19.439a21.263 21.263 0 0 1 6.988-6.505 20.922 20.922 0 0 1 9.088-2.751h77.129l-43.8 77.403H42.202L80.985 19.44zM12.056 140.512l24.399-42.908h87.924l-28.686 49.789a5.065 5.065 0 0 0 0 5.071l28.686 49.85H36.455l-24.43-42.867a22.01 22.01 0 0 1-2.13-9.452c0-3.273.729-6.504 2.13-9.452l.031-.031zm85.005 149.419a21.067 21.067 0 0 1-9.136-2.841 21.415 21.415 0 0 1-6.99-6.611l-38.803-68.137h87.924l44.236 77.589h-77.23zm153.974-9.452a21.41 21.41 0 0 1-6.986 6.609 21.071 21.071 0 0 1-9.131 2.843h-49.152l-44.246-77.62h57.474c.861 0 1.707-.229 2.454-.664a4.973 4.973 0 0 0 1.804-1.814l28.625-49.697 44.013 76.705-24.855 43.638zm68.929-121.135l-38.336 67.428-43.851-76.468 44.205-76.664 38.053 66.852a22.014 22.014 0 0 1 2.131 9.452c0 3.273-.729 6.504-2.131 9.452\" fill=\"#9E62DD\"/>',\n width: 332,\n height: 300,\n});\n","/**\n * @import {MDXComponents} from 'mdx/types.js'\n * @import {Component, ReactElement, ReactNode} from 'react'\n */\n\n/**\n * @callback MergeComponents\n * Custom merge function.\n * @param {Readonly<MDXComponents>} currentComponents\n * Current components from the context.\n * @returns {MDXComponents}\n * Additional components.\n *\n * @typedef Props\n * Configuration for `MDXProvider`.\n * @property {ReactNode | null | undefined} [children]\n * Children (optional).\n * @property {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @property {boolean | null | undefined} [disableParentContext=false]\n * Turn off outer component context (default: `false`).\n */\n\nimport React from 'react'\n\n/** @type {Readonly<MDXComponents>} */\nconst emptyComponents = {}\n\nconst MDXContext = React.createContext(emptyComponents)\n\n/**\n * Get current components from the MDX Context.\n *\n * @param {Readonly<MDXComponents> | MergeComponents | null | undefined} [components]\n * Additional components to use or a function that creates them (optional).\n * @returns {MDXComponents}\n * Current components.\n */\nexport function useMDXComponents(components) {\n const contextComponents = React.useContext(MDXContext)\n\n // Memoize to avoid unnecessary top-level context changes\n return React.useMemo(\n function () {\n // Custom merge via a function prop\n if (typeof components === 'function') {\n return components(contextComponents)\n }\n\n return {...contextComponents, ...components}\n },\n [contextComponents, components]\n )\n}\n\n/**\n * Provider for MDX context.\n *\n * @param {Readonly<Props>} properties\n * Properties.\n * @returns {ReactElement}\n * Element.\n * @satisfies {Component}\n */\nexport function MDXProvider(properties) {\n /** @type {Readonly<MDXComponents>} */\n let allComponents\n\n if (properties.disableParentContext) {\n allComponents =\n typeof properties.components === 'function'\n ? properties.components(emptyComponents)\n : properties.components || emptyComponents\n } else {\n allComponents = useMDXComponents(properties.components)\n }\n\n return React.createElement(\n MDXContext.Provider,\n {value: allComponents},\n properties.children\n )\n}\n","import React, { type FC, type PropsWithChildren, Children } from 'react';\nimport { CodeBox } from '../molecules/code-box';\n\ninterface MDXCodeProps {\n className?: string;\n}\n\n/**\n * MDXCode - Code component for MDX files\n *\n * Automatically detects and renders inline vs block code:\n * - Inline code: `example` → <code className=\"elb-code-inline\">\n * - Block code: ```language\\ncode\\n``` → Uses CodeBox with Monaco editor\n *\n * Language detection:\n * - Extracts language from className (e.g., \"language-typescript\")\n * - Maps common MDX language names to Monaco language IDs\n *\n * Block code features (via CodeBox):\n * - Full Monaco editor with syntax highlighting\n * - Theme-aware (Palenight dark, VS Light)\n * - Copy to clipboard button\n * - Auto-height to fit content\n * - Read-only mode\n *\n * @example\n * // In MDX files (no import needed with MDXProvider):\n * Inline `code` example\n *\n * ```typescript\n * const block = \"code\";\n * ```\n */\nexport const MDXCode: FC<PropsWithChildren<MDXCodeProps>> = ({\n className,\n children,\n}) => {\n // Detect if this is block code based on:\n // 1. Has className (markdown sets \"language-*\" for code blocks)\n // 2. Content contains newlines\n const childrenArray = Children.toArray(children);\n const hasClassName = typeof className === 'string';\n\n // Check if content has newlines (block code)\n const hasNewlines = childrenArray.some((child) => {\n if (typeof child === 'string') {\n return child.match(/[\\n\\r]/g);\n }\n return false;\n });\n\n // Inline code: no className or no newlines\n if (!hasClassName || !hasNewlines) {\n return <code className=\"elb-code-inline\">{children}</code>;\n }\n\n // Block code: extract language from className\n // Format: \"language-typescript\" → \"typescript\"\n const mdxLanguage = className.replace(/^language-/, '');\n\n // Map MDX language names to Monaco language IDs\n const languageMap: Record<string, string> = {\n js: 'javascript',\n ts: 'typescript',\n jsx: 'javascript',\n tsx: 'typescript',\n bash: 'shell',\n sh: 'shell',\n yml: 'yaml',\n md: 'markdown',\n };\n\n const monacoLanguage = languageMap[mdxLanguage] || mdxLanguage;\n\n // Extract code string from children\n const code = childrenArray\n .map((child) => (typeof child === 'string' ? child : ''))\n .join('')\n .trim();\n\n return (\n <CodeBox\n code={code}\n language={monacoLanguage}\n disabled\n showCopy\n showHeader={false}\n autoHeight={{ min: 100, max: 600 }}\n />\n );\n};\n","import React, { type FC, type PropsWithChildren } from 'react';\nimport { MDXProvider as BaseMDXProvider } from '@mdx-js/react';\nimport { MDXCode } from '../components/atoms/mdx-code';\nimport { CodeBox } from '../components/molecules/code-box';\nimport { PropertyTable } from '../components/molecules/property-table';\n\n/**\n * MDXProvider - Makes components available in MDX files without explicit imports\n *\n * This provider wraps MDX content and injects React components for HTML elements.\n * Components are automatically used when rendering markdown/MDX content.\n *\n * Key features:\n * - No imports needed in MDX files\n * - Consistent styling across all documentation\n * - Theme-aware (respects data-theme attribute)\n * - Automatic inline vs block code detection\n *\n * Available components (no import needed):\n * - CodeBox: Monaco editor for code display (also auto-used for ```code blocks)\n * - PropertyTable: Display schema-based property documentation\n *\n * @example\n * // Wrap your app\n * <MDXProvider>\n * <App />\n * </MDXProvider>\n *\n * @example\n * // Then in any .mdx file, no imports needed:\n * # Documentation\n *\n * Inline `code` and markdown blocks:\n * ```typescript\n * const example = \"Hello\";\n * ```\n *\n * Or use components directly:\n * <CodeBox code=\"const x = 1;\" language=\"javascript\" />\n * <PropertyTable schema={mySchema} />\n */\nexport const MDXProvider: FC<PropsWithChildren> = ({ children }) => {\n const components = {\n // Markdown element mappings\n code: MDXCode, // Auto-handles ```code blocks\n\n // Explorer components (no import needed in MDX)\n CodeBox,\n PropertyTable,\n };\n\n return <BaseMDXProvider components={components}>{children}</BaseMDXProvider>;\n};\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport type { RefObject } from 'react';\n\nexport interface UseDropdownReturn {\n /** Whether dropdown is currently open */\n isOpen: boolean;\n /** Toggle dropdown open/closed */\n toggle: () => void;\n /** Open the dropdown */\n open: () => void;\n /** Close the dropdown */\n close: () => void;\n /** Ref to attach to the container element for click-outside detection */\n containerRef: RefObject<HTMLDivElement | null>;\n}\n\n/**\n * useDropdown - Manages dropdown open/close state with click-outside and keyboard handling\n *\n * Provides:\n * - Open/close state management\n * - Click-outside detection to close\n * - Escape key handling to close\n *\n * @example\n * const { isOpen, toggle, close, containerRef } = useDropdown();\n *\n * return (\n * <div ref={containerRef}>\n * <Dropdown isOpen={isOpen} onToggle={toggle}>\n * ...\n * </Dropdown>\n * </div>\n * );\n */\nexport function useDropdown(): UseDropdownReturn {\n const [isOpen, setIsOpen] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const toggle = useCallback(() => {\n setIsOpen((prev) => !prev);\n }, []);\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const close = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n // Close on click outside\n useEffect(() => {\n if (!isOpen) return;\n\n function handleClickOutside(event: MouseEvent) {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen]);\n\n // Close on Escape key\n useEffect(() => {\n if (!isOpen) return;\n\n function handleEscape(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n setIsOpen(false);\n }\n }\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen]);\n\n return {\n isOpen,\n toggle,\n open,\n close,\n containerRef,\n };\n}\n","export interface MonacoSchemaExtension {\n defaultSnippets?: Array<{\n label: string;\n description?: string;\n markdownDescription?: string;\n body?: unknown;\n bodyText?: string;\n }>;\n markdownDescription?: string;\n enumDescriptions?: string[];\n markdownEnumDescriptions?: string[];\n deprecationMessage?: string;\n errorMessage?: string;\n patternErrorMessage?: string;\n doNotSuggest?: boolean;\n suggestSortText?: string;\n}\n\ntype EnrichmentMap = Record<string, MonacoSchemaExtension>;\n\n/**\n * Deep-merges Monaco-specific JSON Schema extensions into a base schema.\n * Keys in the enrichment map are dot-paths (e.g., 'properties.sources').\n * Empty string '' targets the root. Does not mutate the original.\n */\nexport function enrichSchema<T extends Record<string, unknown>>(\n baseSchema: T,\n enrichments: EnrichmentMap,\n): T {\n const schema: T = JSON.parse(JSON.stringify(baseSchema));\n\n for (const [path, extensions] of Object.entries(enrichments)) {\n const target = path === '' ? schema : getNestedObject(schema, path);\n if (target && typeof target === 'object') {\n Object.assign(target, extensions);\n }\n }\n\n return schema;\n}\n\nfunction getNestedObject(\n obj: Record<string, unknown>,\n path: string,\n): Record<string, unknown> | undefined {\n const keys = path.split('.');\n let current: unknown = obj;\n for (const key of keys) {\n if (\n current &&\n typeof current === 'object' &&\n key in (current as Record<string, unknown>)\n ) {\n current = (current as Record<string, unknown>)[key];\n } else {\n return undefined;\n }\n }\n return current as Record<string, unknown> | undefined;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\n/**\n * Takes the base Flow.Json JSON Schema (from @walkeros/core z.toJSONSchema())\n * and returns an enriched version with Monaco-specific extensions.\n *\n * The actual schema uses { allOf: [{ $ref: '#/definitions/FlowJson' }], definitions: {...} }.\n * Root walkeros.config.json properties live under definitions.FlowJson.properties.\n * Per-flow properties live under definitions.Flow.properties.\n */\nexport function enrichFlowConfigSchema(baseSchema: AnySchema): AnySchema {\n // Deep clone to avoid mutating the input.\n const schema = JSON.parse(JSON.stringify(baseSchema));\n\n const root = schema.definitions?.FlowJson;\n const flowDef = schema.definitions?.Flow;\n const flowConfigDef = schema.definitions?.FlowConfig;\n\n if (!root?.properties) return schema;\n\n const props = root.properties;\n const flowProps = flowDef?.properties;\n const flowConfigProps = flowConfigDef?.properties;\n\n // Enrich version\n if (props.version) {\n props.version.markdownDescription =\n 'Schema version number. Use `4` for the current format.\\n\\n```json\\n\"version\": 4\\n```';\n }\n\n // Enrich $schema\n if (props.$schema) {\n props.$schema.markdownDescription =\n 'JSON Schema URI for IDE validation.\\n\\n```json\\n\"$schema\": \"https://walkeros.io/schema/flow/v4.json\"\\n```';\n }\n\n // Enrich include\n if (props.include) {\n props.include.markdownDescription =\n 'Folders to include in the bundle output.\\n\\n```json\\n\"include\": [\"./src\", \"./lib\"]\\n```';\n }\n\n // Enrich variables\n if (props.variables) {\n props.variables.markdownDescription =\n 'Reusable values referenced via `$var.name` (with optional deep paths).\\n\\n' +\n 'Whole-string references preserve native type (objects/arrays/scalars).\\n' +\n 'Inline interpolation requires scalars.\\n\\n' +\n '```json\\n\"variables\": {\\n \"apiKey\": \"G-XXXXXXXXXX\",\\n \"debug\": false,\\n \"mapping\": {\\n \"map\": { \"id\": \"data.id\" }\\n }\\n}\\n```\\n\\n' +\n 'Reference scalars or structures: `\"$var.apiKey\"`, `\"$var.mapping\"`, `\"$var.mapping.map.id\"`.';\n props.variables.defaultSnippets = [\n {\n label: 'Add scalar variable',\n description: 'String/number/boolean variable',\n body: { '${1:name}': '${2:value}' },\n },\n {\n label: 'Add structural variable',\n description: 'Reusable mapping or object fragment',\n body: { '${1:name}': { '${2:key}': '${3:value}' } },\n },\n ];\n }\n\n // Enrich flows with scaffolding snippets\n if (props.flows) {\n props.flows.markdownDescription =\n 'Flow configurations keyed by name. Each flow defines a complete event pipeline.\\n\\n' +\n '```json\\n\"flows\": {\\n \"myFlow\": {\\n \"config\": { \"platform\": \"web\" },\\n \"sources\": { ... },\\n \"destinations\": { ... }\\n }\\n}\\n```';\n props.flows.defaultSnippets = [\n {\n label: 'Web flow (basic)',\n description: 'Minimal web flow with browser source',\n body: {\n '${1:myFlow}': {\n config: { platform: 'web' },\n sources: {\n browser: { package: '@walkeros/web-source-browser' },\n },\n destinations: {},\n },\n },\n },\n {\n label: 'Server flow (basic)',\n description: 'Minimal server flow with Express source',\n body: {\n '${1:myFlow}': {\n config: { platform: 'server' },\n sources: {\n express: { package: '@walkeros/server-source-express' },\n },\n destinations: {},\n },\n },\n },\n {\n label: 'Web + GA4 flow',\n description: 'Web flow with browser source and GA4 destination',\n body: {\n '${1:myFlow}': {\n config: { platform: 'web' },\n sources: {\n browser: { package: '@walkeros/web-source-browser' },\n },\n destinations: {\n ga4: {\n package: '@walkeros/web-destination-gtag',\n config: {\n measurementId: '$var.${2:measurementId}',\n },\n },\n },\n },\n },\n },\n ];\n }\n\n // Enrich per-Flow sub-properties (definitions.Flow.properties)\n if (flowProps) {\n if (flowProps.config) {\n flowProps.config.markdownDescription =\n 'Per-flow configuration: platform identity, optional public URL, free-form settings, bundle.\\n\\n' +\n '```json\\n\"config\": {\\n \"platform\": \"web\",\\n \"settings\": {\\n \"windowCollector\": \"collector\"\\n }\\n}\\n```';\n flowProps.config.defaultSnippets = [\n {\n label: 'Web platform config',\n description: 'Browser-based flow configuration',\n body: { platform: 'web' },\n },\n {\n label: 'Server platform config',\n description: 'Node.js flow configuration',\n body: { platform: 'server' },\n },\n ];\n }\n\n if (flowProps.sources) {\n flowProps.sources.markdownDescription =\n 'Source configurations for data capture, keyed by step name.\\n\\n' +\n '```json\\n\"sources\": {\\n \"browser\": { \"package\": \"@walkeros/web-source-browser\" }\\n}\\n```';\n flowProps.sources.defaultSnippets = [\n {\n label: 'Add web source',\n description: 'Browser source for web tracking',\n body: {\n '${1:browser}': {\n package: '@walkeros/web-source-browser',\n },\n },\n },\n {\n label: 'Add server source',\n description: 'Express source for server tracking',\n body: {\n '${1:express}': {\n package: '@walkeros/server-source-express',\n },\n },\n },\n ];\n }\n\n if (flowProps.destinations) {\n flowProps.destinations.markdownDescription =\n 'Destination configurations for data output, keyed by step name.\\n\\n' +\n '```json\\n\"destinations\": {\\n \"ga4\": {\\n \"package\": \"@walkeros/web-destination-ga4\",\\n \"config\": { \"measurementId\": \"$var.trackingId\" }\\n }\\n}\\n```';\n flowProps.destinations.defaultSnippets = [\n {\n label: 'Add GA4 destination',\n description: 'Google Analytics 4 destination',\n body: {\n '${1:ga4}': {\n package: '@walkeros/web-destination-gtag',\n config: {\n measurementId: '$var.${2:measurementId}',\n },\n },\n },\n },\n {\n label: 'Add custom destination',\n description: 'Custom destination with inline code',\n body: {\n '${1:custom}': {\n code: {\n push: '$code:(event) => { ${2:// handle event} }',\n },\n },\n },\n },\n ];\n }\n\n if (flowProps.transformers) {\n flowProps.transformers.markdownDescription =\n 'Transformer configurations for event transformation, keyed by step name.\\n\\n' +\n '```json\\n\"transformers\": {\\n \"validator\": {\\n \"code\": { \"push\": \"$code:(event) => event\" }\\n }\\n}\\n```';\n flowProps.transformers.defaultSnippets = [\n {\n label: 'Add transformer',\n description: 'Inline transformer with code',\n body: {\n '${1:transformer}': {\n code: {\n push: '$code:(event) => { ${2:return event;} }',\n },\n },\n },\n },\n ];\n }\n }\n\n // Enrich Flow.Config sub-properties (definitions.FlowConfig.properties)\n if (flowConfigProps) {\n if (flowConfigProps.platform) {\n flowConfigProps.platform.markdownDescription =\n 'Platform identity for this flow.\\n\\n' +\n '- `web` builds to IIFE format, ES2020 target, browser platform.\\n' +\n '- `server` builds to ESM format, Node18 target, node platform.\\n\\n' +\n '```json\\n\"platform\": \"web\"\\n```';\n }\n\n if (flowConfigProps.url) {\n flowConfigProps.url.markdownDescription =\n 'Public URL where this flow is reachable. Used for cross-flow `$flow.X.url` references.\\n\\n' +\n '```json\\n\"url\": \"https://collect.example.com\"\\n```';\n }\n\n if (flowConfigProps.settings) {\n flowConfigProps.settings.markdownDescription =\n 'Free-form key-value settings consumed by the platform runtime.\\n\\n' +\n 'For web: typical keys include `windowCollector`, `windowElb`.\\n\\n' +\n '```json\\n\"settings\": {\\n \"windowCollector\": \"collector\",\\n \"windowElb\": \"elb\"\\n}\\n```';\n }\n\n if (flowConfigProps.bundle) {\n flowConfigProps.bundle.markdownDescription =\n 'Bundle configuration: NPM packages to include and transitive dependency overrides.\\n\\n' +\n '```json\\n\"bundle\": {\\n \"packages\": {\\n \"@walkeros/web-source-browser\": { \"version\": \"^2.0.0\" }\\n }\\n}\\n```';\n }\n }\n\n return schema;\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\n/**\n * Returns an enriched JSON Schema for the walkerOS Contract editor.\n * Structure: { $tagging: number, entity: { action: JSONSchema } }\n */\nexport function getEnrichedContractSchema(): AnySchema {\n return {\n type: 'object',\n markdownDescription:\n 'walkerOS Data Contract. Defines entity→action schemas for event validation.\\n\\n' +\n '```json\\n{\\n \"$tagging\": 1,\\n \"page\": {\\n' +\n ' \"view\": {\\n \"type\": \"object\",\\n \"properties\": {\\n' +\n ' \"title\": { \"type\": \"string\" }\\n }\\n }\\n }\\n}\\n```',\n properties: {\n $tagging: {\n type: 'number',\n markdownDescription:\n 'Contract version number. Increment when making breaking changes.\\n\\n```json\\n\"$tagging\": 1\\n```',\n },\n },\n additionalProperties: {\n type: 'object',\n markdownDescription: 'Entity name. Contains action→schema mappings.',\n additionalProperties: {\n type: 'object',\n markdownDescription:\n 'Action schema (JSON Schema). Defines valid event data for this entity+action.\\n\\n' +\n '```json\\n{\\n \"type\": \"object\",\\n \"properties\": {\\n' +\n ' \"name\": { \"type\": \"string\" },\\n \"price\": { \"type\": \"number\" }\\n' +\n ' },\\n \"required\": [\"name\"]\\n}\\n```',\n defaultSnippets: [\n {\n label: 'Object schema',\n description: 'Schema with typed properties',\n body: {\n type: 'object',\n properties: {\n '${1:name}': { type: '${2:string}' },\n },\n },\n },\n ],\n },\n defaultSnippets: [\n {\n label: 'Add action',\n description: 'Action with event data schema',\n body: {\n '${1:action}': {\n type: 'object',\n properties: {\n '${2:property}': { type: '${3:string}' },\n },\n },\n },\n },\n ],\n },\n defaultSnippets: [\n {\n label: 'Entity with action',\n description: 'New entity with one action and properties',\n body: {\n '${1:entity}': {\n '${2:action}': {\n type: 'object',\n properties: {\n '${3:property}': { type: '${4:string}' },\n },\n },\n },\n },\n },\n ],\n };\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnySchema = Record<string, any>;\n\nexport function getVariablesSchema(): AnySchema {\n return {\n type: 'object',\n markdownDescription:\n 'Flow variables for `$var.name` interpolation. Values must be string, number, or boolean.\\n\\n' +\n '```json\\n{\\n \"measurementId\": \"G-XXXXXXXXXX\",\\n \"debug\": false,\\n \"batchSize\": 10\\n}\\n```\\n\\n' +\n 'Reference in any config value: `\"$var.measurementId\"`',\n additionalProperties: {\n oneOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean' }],\n },\n defaultSnippets: [\n {\n label: 'Add string variable',\n body: { '${1:name}': '${2:value}' },\n },\n {\n label: 'Add boolean variable',\n body: { '${1:name}': '${2|true,false|}' },\n },\n {\n label: 'Add number variable',\n body: { '${1:name}': 0 },\n },\n ],\n };\n}\n","import { REF_ENV, REF_FLOW, REF_STORE, REF_SECRET } from '@walkeros/core';\nimport type { IntelliSenseContext } from '../types/intellisense';\n\nexport interface ValidationIssue {\n message: string;\n severity: 'error' | 'warning' | 'info';\n startIndex: number;\n endIndex: number;\n}\n\n/**\n * Build an inline global regex from any REF_* source. The shared REF_*\n * constants include `^`/`$` anchors for whole-value matches; for global\n * text scanning we need a non-anchored global variant. We also bound the\n * trailing optional `.+` path group to `[\\w.]+` so it doesn't greedily\n * swallow characters past the reference token. A fresh clone per call\n * keeps `lastIndex` state local.\n */\nfunction inlineGlobal(pattern: RegExp): RegExp {\n const src = pattern.source\n .replace(/^\\^/, '')\n .replace(/\\$$/, '')\n .replace(/\\(\\.\\+\\)\\?$/, '([\\\\w.]+)?');\n return new RegExp(src, 'g');\n}\n\n/**\n * Validate walkerOS references in JSON text against the current context.\n * Returns issues for dangling references and invalid cross-references.\n */\nexport function validateWalkerOSReferences(\n text: string,\n context: Partial<IntelliSenseContext>,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n\n // Check $var. references (supports deep paths: $var.name.deep.path)\n if (context.variables) {\n const varRegex =\n /\\$var\\.([a-zA-Z_][a-zA-Z0-9_]*)(?:\\.[a-zA-Z_][a-zA-Z0-9_]*)*/g;\n let match: RegExpExecArray | null;\n while ((match = varRegex.exec(text)) !== null) {\n const name = match[1];\n if (!(name in context.variables)) {\n issues.push({\n message: `Unknown variable \"$var.${name}\". Defined variables: ${Object.keys(context.variables).join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $secret. references\n if (context.secrets) {\n const secretRegex = inlineGlobal(REF_SECRET);\n let match: RegExpExecArray | null;\n while ((match = secretRegex.exec(text)) !== null) {\n if (!context.secrets.includes(match[1])) {\n issues.push({\n message: `Unknown secret \"$secret.${match[1]}\". Available: ${context.secrets.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $store. references (always when stores inventory is present)\n if (context.stores) {\n const storeRegex = inlineGlobal(REF_STORE);\n let match: RegExpExecArray | null;\n while ((match = storeRegex.exec(text)) !== null) {\n if (!context.stores.includes(match[1])) {\n issues.push({\n message: `Unknown store \"$store.${match[1]}\". Available: ${context.stores.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $flow. references (only when flows inventory is present)\n if (context.flows) {\n const flowRegex = inlineGlobal(REF_FLOW);\n let match: RegExpExecArray | null;\n while ((match = flowRegex.exec(text)) !== null) {\n if (!context.flows.includes(match[1])) {\n issues.push({\n message: `Unknown flow \"$flow.${match[1]}\". Available: ${context.flows.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check $env. references (only when envNames inventory is provided)\n if (context.envNames) {\n const envRegex = inlineGlobal(REF_ENV);\n let match: RegExpExecArray | null;\n while ((match = envRegex.exec(text)) !== null) {\n if (!context.envNames.includes(match[1])) {\n issues.push({\n message: `Unknown env var \"$env.${match[1]}\". Known: ${context.envNames.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: match.index,\n endIndex: match.index + match[0].length,\n });\n }\n }\n }\n\n // Check next/before cross-references across scalar, array, and Route[] forms\n issues.push(...validateChainRefs(text, context.stepNames?.transformers));\n\n return issues;\n}\n\n// TODO: precise source offsets for chain-ref markers (currently path-only).\nfunction validateChainRefs(\n text: string,\n stepNamesInput: string[] | undefined,\n): ValidationIssue[] {\n const issues: ValidationIssue[] = [];\n if (!stepNamesInput) return issues;\n // Local const so nested closures see the narrowed non-undefined type.\n const stepNames: string[] = stepNamesInput;\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return issues;\n }\n\n function collectRefs(value: unknown): string[] {\n if (typeof value === 'string') return [value];\n if (Array.isArray(value)) {\n const out: string[] = [];\n for (const item of value) {\n if (typeof item === 'string') out.push(item);\n else if (item && typeof item === 'object' && 'next' in item) {\n out.push(...collectRefs((item as { next: unknown }).next));\n }\n }\n return out;\n }\n return [];\n }\n\n function walk(node: unknown, path: (string | number)[]): void {\n if (!node || typeof node !== 'object') return;\n if (Array.isArray(node)) {\n node.forEach((item, i) => walk(item, [...path, i]));\n return;\n }\n for (const [key, value] of Object.entries(node)) {\n const p = [...path, key];\n if (key === 'next' || key === 'before') {\n // collectRefs handles scalar/array/Route[] uniformly. Do NOT walk\n // into the value afterwards — a Route[] item's inner `next` would\n // otherwise be re-detected on the recursive descent.\n for (const ref of collectRefs(value)) {\n if (!stepNames.includes(ref)) {\n // v1: path-only diagnostic with index 0,0; offset tracking is a\n // follow-up (see TODO above).\n issues.push({\n message: `Unknown transformer \"${ref}\" in ${p.join('.')}. Available: ${stepNames.join(', ') || 'none'}`,\n severity: 'warning',\n startIndex: 0,\n endIndex: 0,\n });\n }\n }\n continue;\n }\n walk(value, p);\n }\n }\n\n walk(parsed, []);\n return issues;\n}\n","import type { IntelliSenseContext, PackageInfo } from '../types/intellisense';\n\n/**\n * Extract IntelliSense context from a Flow.Json JSON string.\n *\n * Parses the JSON, walks root → flow → steps, and collects\n * all discoverable variables, step names, packages, platform, and\n * contract entities.\n *\n * Returns `{}` for invalid JSON or non-Flow structures.\n * Pure function, no side effects, no state.\n */\nexport function extractFlowIntelliSenseContext(\n json: string,\n): Partial<IntelliSenseContext> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(json);\n } catch {\n return {};\n }\n\n if (!isFlowConfig(parsed)) return {};\n\n const variables: Record<string, unknown> = {};\n const sources: string[] = [];\n const destinations: string[] = [];\n const transformers: string[] = [];\n const stores: string[] = [];\n const packages: PackageInfo[] = [];\n const contractEntities: Array<{ entity: string; actions: string[] }> = [];\n const contractRaw: Record<string, unknown> = {};\n let platform: 'web' | 'server' | undefined;\n\n // Config-level\n mergeVars(variables, parsed.variables);\n extractContract(contractEntities, parsed.contract);\n if (isObject(parsed.contract)) Object.assign(contractRaw, parsed.contract);\n\n // Walk each flow settings\n for (const settings of Object.values(parsed.flows)) {\n if (!isObject(settings)) continue;\n\n // Platform detection (first match wins) - reads config.platform in v4\n if (!platform && isObject(settings.config)) {\n const p = settings.config.platform;\n if (p === 'web' || p === 'server') platform = p;\n }\n\n // Settings-level variables/contract\n mergeVars(variables, settings.variables);\n extractContract(contractEntities, settings.contract);\n if (isObject(settings.contract))\n Object.assign(contractRaw, settings.contract);\n\n // Sources\n if (isObject(settings.sources)) {\n for (const [name, ref] of Object.entries(settings.sources)) {\n sources.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'source',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Destinations\n if (isObject(settings.destinations)) {\n for (const [name, ref] of Object.entries(settings.destinations)) {\n destinations.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'destination',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Transformers\n if (isObject(settings.transformers)) {\n for (const [name, ref] of Object.entries(settings.transformers)) {\n transformers.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n if (typeof ref.package === 'string') {\n packages.push({\n package: ref.package,\n shortName: name,\n type: 'transformer',\n platform: platform || 'web',\n });\n }\n }\n }\n }\n\n // Stores — collect IDs and cascade their variables\n if (isObject(settings.stores)) {\n for (const [name, ref] of Object.entries(settings.stores)) {\n stores.push(name);\n if (isObject(ref)) {\n mergeVars(variables, ref.variables);\n }\n }\n }\n }\n\n const result: Partial<IntelliSenseContext> = {\n variables,\n stepNames: { sources, destinations, transformers },\n };\n\n if (platform) result.platform = platform;\n if (packages.length > 0) result.packages = packages;\n if (contractEntities.length > 0) result.contract = contractEntities;\n if (Object.keys(contractRaw).length > 0) result.contractRaw = contractRaw;\n if (stores.length > 0) result.stores = stores;\n\n return result;\n}\n\n// --- Helpers ---\n\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === 'object' && v !== null && !Array.isArray(v);\n}\n\nfunction isFlowConfig(v: unknown): v is {\n version: number;\n flows: Record<string, unknown>;\n [k: string]: unknown;\n} {\n return isObject(v) && 'version' in v && 'flows' in v && isObject(v.flows);\n}\n\nfunction mergeVars(target: Record<string, unknown>, source: unknown): void {\n if (!isObject(source)) return;\n for (const [k, v] of Object.entries(source)) {\n target[k] = v;\n }\n}\n\nfunction extractContract(\n target: Array<{ entity: string; actions: string[] }>,\n contract: unknown,\n): void {\n if (!isObject(contract)) return;\n for (const [key, value] of Object.entries(contract)) {\n if (key.startsWith('$') || !isObject(value)) continue;\n // Avoid duplicates when merging config + settings contracts\n const existing = target.find((e) => e.entity === key);\n const actions = Object.keys(value);\n if (existing) {\n for (const a of actions) {\n if (!existing.actions.includes(a)) existing.actions.push(a);\n }\n } else {\n target.push({ entity: key, actions });\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAopBO,SAAS,gBACd,aACQ;AACR,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAjqBA,IAiBa,kBA+MA,yBAyOA;AAzcb;AAAA;AAAA;AAiBO,IAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA+MzB,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyOhC,IAAM,yBAAyB;AAAA;AAA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","names":["MDXProvider","import_react","import_react","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","C","TOKEN_GROUPS","regex","import_core","regex","prettierBabel","prettierEstree","prettierTypescript","prettierHtml","import_react","import_jsx_runtime","handleChange","loadPackageTypes","import_jsx_runtime","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_core","prettier","import_babel","import_estree","import_typescript","import_html","prettierBabel","prettierEstree","prettierTypescript","prettierHtml","import_jsx_runtime","format","import_react","import_collector","import_jsx_runtime","import_react","storage","storage","isNumber","storage","idCounter","simpleNames","send","props","mounted","name","data","concatArrays","array1","array2","combinedArray","Array","length","i","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","Map","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","startsWith","endsWith","getGroupIdForArbitraryProperty","classParts","split","startIndex","getGroupRecursive","getConflictingClassGroupIds","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","classPathsLength","currentClassPart","nextClassPartObject","get","result","undefined","classRest","join","slice","validatorsLength","validatorObj","indexOf","content","colonIndex","property","theme","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","entries","Object","key","value","path","current","parts","part","next","set","func","createLruCache","maxCacheSize","cacheSize","cache","create","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","prefix","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","orderSensitiveModifiers","forEach","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","has","sort","createConfigUtils","sortModifiers","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","originalClassName","substring","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","string","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","test","isNumber","Number","isNaN","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryWeight","isLabelWeight","isArbitraryFamilyName","isLabelFamilyName","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","isArbitraryVariableWeight","testLabel","testValue","exec","shouldMatchNoLabel","label","getDefaultConfig","themeColor","fromTheme","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","isArbitraryVariable","isArbitraryValue","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","isFraction","scaleGridTemplateColsRows","isInteger","scaleGridColRowStartAndEnd","span","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleSizingInline","scaleSizingBlock","scaleColor","scaleBgPosition","isArbitraryVariablePosition","isArbitraryPosition","position","scaleBgRepeat","repeat","scaleBgSize","isArbitraryVariableSize","isArbitrarySize","size","scaleGradientStopPosition","isPercent","isArbitraryVariableLength","isArbitraryLength","scaleRadius","scaleBorderWidth","isNumber","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","cacheSize","theme","animate","aspect","blur","isTshirtSize","breakpoint","color","isAny","container","ease","font","isAnyNonArbitrary","leading","perspective","radius","shadow","spacing","text","tracking","classGroups","columns","box","display","sr","float","clear","isolation","object","overflow","overscroll","inset","start","end","top","right","bottom","left","visibility","z","basis","flex","grow","shrink","order","col","row","gap","justify","content","items","baseline","self","p","px","py","ps","pe","pbs","pbe","pt","pr","pb","pl","m","mx","my","ms","me","mbs","mbe","mt","mr","mb","ml","inline","block","w","screen","h","isArbitraryVariableWeight","isArbitraryWeight","isArbitraryVariableFamilyName","isArbitraryFamilyName","isArbitraryNumber","list","placeholder","decoration","indent","align","whitespace","break","wrap","hyphens","bg","linear","to","radial","conic","isArbitraryVariableImage","isArbitraryImage","from","via","rounded","border","divide","outline","isArbitraryVariableShadow","isArbitraryShadow","ring","opacity","mask","closest","farthest","filter","brightness","contrast","grayscale","invert","saturate","sepia","table","caption","transition","duration","delay","backface","rotate","scale","skew","transform","origin","translate","accent","appearance","caret","scheme","cursor","resize","scroll","snap","touch","select","fill","stroke","conflictingClassGroups","conflictingClassGroupModifiers","orderSensitiveModifiers","twMerge","createTailwindMerge","getDefaultConfig","import_jsx_runtime","import_react","import_react","import_jsx_runtime","import_jsx_runtime","import_react","import_jsx_runtime","format","import_react","import_jsx_runtime","rough","r","pos","baseY","React","import_react","import_jsx_runtime","r","import_jsx_runtime","import_react","import_react","settings","fg","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_jsx_runtime","import_react","React","import_react","import_jsx_runtime","import_jsx_runtime","MDXProvider","import_react","import_core","inlineGlobal"]}