meno-core 1.1.2 → 1.1.3

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.
@@ -195,6 +195,7 @@ import {
195
195
  isAncestorPath,
196
196
  isBooleanMapping,
197
197
  isCMSListNode,
198
+ isClassStylableNode,
198
199
  isClassableStyleValue,
199
200
  isComponentNode,
200
201
  isCssNamedColor,
@@ -292,7 +293,7 @@ import {
292
293
  validatePath,
293
294
  validatePropDefinition,
294
295
  validateStructuredComponentDefinition
295
- } from "../../chunks/chunk-J4IPTP5X.js";
296
+ } from "../../chunks/chunk-LOZL5HOF.js";
296
297
  import {
297
298
  DEFAULT_I18N_CONFIG,
298
299
  buildLocalizedPath,
@@ -1843,6 +1844,7 @@ export {
1843
1844
  isBasePropDefinition,
1844
1845
  isBooleanMapping,
1845
1846
  isCMSListNode,
1847
+ isClassStylableNode,
1846
1848
  isClassableStyleValue,
1847
1849
  isColorProperty,
1848
1850
  isColorVariable,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../lib/shared/index.ts", "../../../lib/shared/treePathUtils.ts", "../../../lib/shared/colorProperties.ts", "../../../lib/shared/tree/PathBuilder.ts", "../../../lib/shared/validation/index.ts", "../../../lib/shared/validation/cmsValidators.ts", "../../../lib/shared/validation/commentValidators.ts", "../../../lib/shared/validation/permissionsValidators.ts", "../../../lib/shared/permissions.ts", "../../../lib/shared/utils.ts", "../../../lib/shared/themeDefaults.ts", "../../../lib/shared/colorVariableUtils.ts", "../../../lib/shared/errors.ts", "../../../lib/shared/colorConversions.ts", "../../../lib/shared/gradientUtils.ts", "../../../lib/shared/cmsQueryParser.ts", "../../../lib/shared/hrefRefs.ts"],
4
4
  "sourcesContent": ["/**\n * meno-core shared exports\n * Re-exports all types, constants, and utilities from shared modules\n */\n\n// Types\nexport * from './types';\n\n// Constants\nexport * from './constants';\n\n// Path utilities\nexport * from './pathArrayUtils';\nexport * from './treePathUtils';\nexport * from './paths';\n\n// Node utilities\nexport * from './nodeUtils';\n\n// Style utilities\nexport * from './breakpoints';\nexport * from './styleUtils';\nexport * from './cssProperties';\nexport * from './cssGeneration';\nexport * from './viewportUnits';\nexport * from './colorProperties';\nexport * from './cssNamedColors';\nexport * from './utilityClassMapper';\nexport { splitVariantPrefix, normalizeBreakpointVariant } from './utilityClassNames';\n// Utility-class catalog pieces \u2014 the seed for the Styles panel's class-bar autocomplete (\u00A713 Phase 5).\n// Selective (not `export *`) to keep the barrel collision-free.\nexport { propertyMap, staticUtilityReverse, keywordValues, presetClassReverse } from './utilityClassConfig';\n// Tailwind theme-scale tokens + the seed-variable generator (`text-lg` \u2192 `var(--text-lg, \u2026)`).\nexport {\n THEME_SCALE_ENTRIES,\n defaultTailwindThemeVariables,\n type ThemeScaleEntry,\n} from './tailwindThemeScale';\nexport * from './elementClassName';\nexport * from './styleValueRegistry';\n\n// i18n utilities\nexport * from './i18n';\n\n// Slugify utilities\nexport * from './slugify';\n\n// Tree utilities\nexport * from './tree/PathBuilder';\n\n// Validation - use explicit exports to avoid ValidationError conflict with types/errors.ts\nexport {\n // Schemas\n StyleMappingSchema,\n StyleObjectSchema,\n ResponsiveStyleObjectSchema,\n StyleValueSchema,\n InteractiveStyleRuleSchema,\n InteractiveStylesSchema,\n PageDataSchema,\n PageDataWithComponentSchema,\n PropDefinitionSchema,\n ComponentNodeSchema,\n ComponentDefinitionSchema,\n StructuredComponentDefinitionSchema,\n PageMetaDataSchema,\n CMSClientDataStrategySchema,\n CMSClientDataConfigSchema,\n CMSSchemaSchema,\n CMSItemSchema,\n // Validators\n type ValidationResult,\n validatePropDefinition,\n validateComponentNode,\n validateComponentDefinition,\n validateStructuredComponentDefinition,\n validatePageData,\n validatePageDataWithComponent,\n validatePageMetaData,\n validateCMSSchema,\n validateCMSItem,\n // Prop validator\n type PropValidationError,\n type PropValidationResult,\n validateComponentProps,\n // CMS validators\n isValidCollectionId,\n validateCollectionId,\n CMS_COLLECTION_ID_REGEX,\n CMSCollectionIdSchema,\n // Comment validators\n CommentSchema,\n CommentStatusSchema,\n CommentAnchorSchema,\n CommentAuthorSchema,\n CommentThreadEntrySchema,\n CommentNodeIdentitySchema,\n validateComment,\n // Permissions validators\n PermissionRoleSchema,\n PermissionRuleSchema,\n PermissionGrantSchema,\n PermissionsPolicySchema,\n validatePermissionsPolicy,\n} from './validation';\n\n// Permission resolver (pure)\nexport * from './permissions';\n\n// Utils\nexport * from './utils';\n\n// Registry\nexport * from './registry';\n\n// Theme defaults\nexport * from './themeDefaults';\n\n// Color variable utilities\nexport * from './colorVariableUtils';\n\n// Responsive style utilities\nexport * from './responsiveStyleUtils';\n\n// Responsive scaling utilities\nexport * from './responsiveScaling';\n\n// Item template utilities (for CMS List)\nexport * from './itemTemplateUtils';\n\n// Template-expression support predicate (mirrors expressionEvaluator's jsep grammar).\n// The meno-astro codec uses this to tell a modelable `{{binding}}` from arbitrary JS.\nexport { isSupportedTemplateExpression } from './expressionEvaluator';\n\n// Path security utilities\nexport * from './pathSecurity';\n\n// Netlify locale-scoped 404 rules + the managed netlify.toml block (shared by\n// every netlify.toml producer and the studio save-config sync)\nexport * from './netlifyLocale404';\n\n// Interactive style mapping utilities\nexport * from './interactiveStyleMappings';\n\n// Rich text utilities (Tiptap)\nexport * from './richtext';\n\n// Error handling\nexport * from './errors';\nexport * from './friendlyError';\nexport { logRuntimeError, logNetworkError, setErrorHandler } from './errorLogger';\nexport {\n createLogger,\n logger,\n setLogLevel,\n getLogLevel,\n setLogSink,\n type Logger,\n type LogLevel,\n type LogRecord,\n} from './logger';\n\n// Global template context\nexport * from './globalTemplateContext';\n\n// Link utilities\nexport * from './linkUtils';\n\n// Color conversion utilities\nexport * from './colorConversions';\n\n// Gradient utilities\nexport * from './gradientUtils';\n\n// CMS query parsing utilities\nexport * from './cmsQueryParser';\n\n// Prop resolution utilities\nexport { resolvePropsFromDefinition, isRichTextMarker, richTextMarkerToHtml } from './propResolver';\n\n// Component reference utilities (shared by rename API on server + editor sync on client)\nexport * from './componentRefs';\n\n// Href reference utilities (shared by page-rename/slug-rename API cascade)\nexport * from './hrefRefs';\n\n// Slug translation utilities (URL builder + slug index)\nexport {\n buildPageUrlForLocale,\n buildSlugIndex,\n findPageBySlug,\n getLocaleLinks,\n resolveSlugToPageId,\n translatePath,\n} from './slugTranslator';\nexport type { LocaleLink, SlugMap } from './slugTranslator';\n\n// Font CSS generation (pure: @font-face rules + preload tags from a fonts array).\n// Exposed on the barrel so non-SSR renderers \u2014 notably the meno-astro dialect\n// BaseLayout \u2014 can produce identical font CSS without the server-side config cache.\nexport { fontFaceCss, fontPreloadLinks, extractFamilyName } from './fontCss';\nexport type { FontConfig } from './fontCss';\n\n// Library tag generation (pure: merge/filter/collect + <link>/<script>/<style> tags\n// from a libraries config). Exposed on the barrel so the meno-astro dialect\n// (loadLibraries \u2192 BaseLayout) injects external JS/CSS libraries byte-identically to\n// meno-core's SSR (htmlGenerator), without the server-side config cache.\nexport {\n mergeLibraries,\n collectComponentLibraries,\n filterLibrariesByContext,\n generateLibraryTags,\n generateScriptTag,\n generateStylesheetTag,\n generateInlineStyleTag,\n} from './libraryLoader';\nexport type { LibraryTags } from './libraryLoader';\n", "/**\n * Tree path utilities for parsing and navigating tree structure paths\n */\n\nimport type { ComponentNode, PageData } from './types';\nimport type { PropDefinition } from './types';\nimport type { Path } from './pathArrayUtils';\nimport { stringToPath } from './pathArrayUtils';\n\n// Type for page data that can have component structure\ntype _PageDataWithComponent = PageData & {\n component?: {\n structure?: ComponentNode;\n interface?: Record<string, PropDefinition>;\n };\n};\n\nexport interface NodeLocation {\n parent: ComponentNode | PageData | null;\n index: number;\n node: ComponentNode | null;\n}\n\n/**\n * Validate that component data has a valid structure\n * @param pageData - PageData to validate\n * @returns true if component has valid structure, false otherwise\n */\nexport function validateComponentStructure(pageData: PageData | null): boolean {\n if (!pageData) return false;\n\n // Check for page format (has root property)\n if ('root' in pageData && pageData.root) {\n return true;\n }\n\n // Check for component format (has component.structure property)\n if ('component' in pageData && pageData.component) {\n if ('structure' in pageData.component && pageData.component.structure) {\n return true;\n }\n // Component exists but structure is missing\n return false;\n }\n\n return false;\n}\n\n/**\n * Get the root data from pageData (handles both page and component structures\n * Logs warnings when structure is missing for better debugging\n */\nexport function getRootData(pageData: PageData | null): ComponentNode | null {\n if (!pageData) return null;\n\n // Check for page format (has root property)\n if ('root' in pageData && pageData.root) {\n return pageData.root;\n }\n\n // Check for component format (has component.structure property)\n if ('component' in pageData && pageData.component) {\n if ('structure' in pageData.component) {\n const structure = pageData.component.structure;\n if (structure) {\n return structure;\n }\n // Structure field exists but is null/undefined\n } else {\n // Component exists but structure field is missing\n }\n }\n\n return null;\n}\n\n/**\n * Parse a tree path and return the parent, index, and node\n * Handles paths like: root_0, root_0_children_0, root_0_children_0_children_1\n * Also accepts array paths: [0], [0,0], [0,0,1]\n */\nexport function getParentAndIndexFromPath(path: Path | string, pageData: PageData): NodeLocation | null {\n const rootData = getRootData(pageData);\n if (!rootData) return null;\n\n // Convert string to array if needed\n const pathArray = typeof path === 'string' ? stringToPath(path) : path;\n\n // Handle root [0] specially\n if (pathArray.length === 1 && pathArray[0] === 0) {\n return {\n parent: pageData,\n index: 0,\n node: rootData,\n };\n }\n\n // Navigate through path array\n let current: ComponentNode = rootData;\n let parent: ComponentNode | PageData | null = null;\n let lastIndex = -1;\n\n // Skip first element (root index 0), navigate through rest\n for (let i = 1; i < pathArray.length; i++) {\n const childIndex = pathArray[i];\n if (childIndex === undefined) return null;\n\n if (!current || !('children' in current) || !Array.isArray(current.children)) {\n return null;\n }\n\n if (Number.isNaN(childIndex) || childIndex < 0 || childIndex >= current.children.length) {\n return null;\n }\n\n parent = current;\n const child = current.children[childIndex];\n if (child === undefined || typeof child === 'string') {\n return null;\n }\n current = child;\n lastIndex = childIndex;\n\n // If this is the last navigation step, we found our node\n if (i === pathArray.length - 1) {\n return { parent, index: childIndex, node: current };\n }\n }\n\n // Return the last valid location if we got here\n if (parent && lastIndex >= 0) {\n return { parent, index: lastIndex, node: current };\n }\n\n return null;\n}\n\n/**\n * Find the path to a node by reference identity (===) within the page tree.\n *\n * Used to recover the correct tree path when a stored selection path has drifted\n * out of sync with the current pageData (e.g. a play-mode reload re-parsed the\n * tree) but the selected node object is still present in the tree. Returns a path\n * in the same `[0, ...childIndices]` form that {@link getParentAndIndexFromPath}\n * consumes, or null if the node isn't reachable from the root by reference.\n */\nexport function findPathToNodeByReference(pageData: PageData, target: ComponentNode): Path | null {\n const root = getRootData(pageData);\n if (!root) return null;\n\n // DFS from the root (path [0]); the children of a node at `path` are `[...path, i]`.\n const stack: { node: ComponentNode; path: Path }[] = [{ node: root, path: [0] }];\n while (stack.length > 0) {\n const { node, path } = stack.pop()!;\n if (node === target) return path;\n const children = 'children' in node ? node.children : undefined;\n if (Array.isArray(children)) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child && typeof child === 'object') {\n stack.push({ node: child as ComponentNode, path: [...path, i] });\n }\n }\n }\n }\n return null;\n}\n\n/**\n * Extract structure without styles/props for tree comparison\n * This allows tree to only regenerate when structure changes, not styles\n */\nexport function extractStructureWithoutStyles(\n node: ComponentNode | string | null | undefined,\n): ComponentNode | string | null | undefined {\n if (!node || typeof node === 'string') {\n return node;\n }\n\n if (typeof node !== 'object') {\n return node;\n }\n\n // Create a new object with only structure-relevant properties\n const { type } = node;\n const tag = 'tag' in node ? (node.tag as string | undefined) : undefined;\n const label = 'label' in node ? (node as any).label : undefined;\n const component = 'component' in node ? (node as any).component : undefined;\n const ifCondition = 'if' in node ? node.if : undefined;\n const children = 'children' in node ? node.children : undefined;\n\n // Recursively process children\n let processedChildren: ComponentNode | (ComponentNode | string)[] | string | undefined;\n if (children) {\n if (Array.isArray(children)) {\n processedChildren = children.map((child: ComponentNode | string) =>\n typeof child === 'string' ? child : (extractStructureWithoutStyles(child) as ComponentNode),\n );\n } else if (typeof children === 'string') {\n processedChildren = children;\n } else if (typeof children === 'object' && 'type' in children) {\n processedChildren = extractStructureWithoutStyles(children as ComponentNode) as ComponentNode;\n }\n }\n\n const result: Partial<ComponentNode> = { type };\n if (tag !== undefined) {\n (result as { tag?: string }).tag = tag;\n }\n if (label !== undefined) {\n (result as any).label = label;\n }\n if (component !== undefined) {\n (result as any).component = component;\n }\n if (ifCondition !== undefined) {\n (result as { if?: any }).if = ifCondition;\n }\n if (processedChildren !== undefined) {\n (result as { children?: typeof processedChildren }).children = processedChildren;\n }\n return result as ComponentNode;\n}\n\n/**\n * Calculate insertion index based on drop target information\n */\nexport function calculateInsertionIndex(\n target: {\n childIndex?: number;\n childAfterItem?: { index: string };\n childBeforeItem?: { index: string };\n linearIndex?: number;\n },\n parentChildren: Array<ComponentNode | string>,\n nodeDataMap: Map<string, ComponentNode | string>,\n): number {\n if (target.childIndex !== undefined && target.childIndex >= 0) {\n // Most reliable: use childIndex directly\n return Math.min(Math.max(0, target.childIndex), parentChildren.length);\n }\n\n if (target.childAfterItem?.index) {\n const afterPath = target.childAfterItem.index;\n const afterNode = nodeDataMap.get(afterPath);\n if (afterNode) {\n const afterIndex = parentChildren.findIndex((child: ComponentNode | string) => child === afterNode);\n if (afterIndex >= 0) {\n return afterIndex + 1;\n }\n }\n // Fallback: append\n return parentChildren.length;\n }\n\n if (target.childBeforeItem?.index) {\n const beforePath = target.childBeforeItem.index;\n const beforeNode = nodeDataMap.get(beforePath);\n if (beforeNode) {\n const beforeIndex = parentChildren.findIndex((child: ComponentNode | string) => child === beforeNode);\n if (beforeIndex >= 0) {\n return beforeIndex;\n }\n }\n // Fallback: prepend\n return 0;\n }\n\n // Last resort: use linearIndex or append\n if (target.linearIndex !== undefined) {\n return Math.min(Math.max(0, target.linearIndex), parentChildren.length);\n }\n\n return parentChildren.length;\n}\n\n/**\n * Type guard to check if a value is a valid NodeLocation\n */\nexport function isValidNodeLocation(location: unknown): location is NodeLocation {\n if (!location || typeof location !== 'object') {\n return false;\n }\n\n // Use proper type narrowing instead of assertion\n const loc = location as Record<string, unknown>;\n const hasParent = 'parent' in loc && (loc.parent === null || typeof loc.parent === 'object');\n const hasIndex = 'index' in loc && typeof loc.index === 'number' && loc.index >= 0;\n const hasNode = 'node' in loc && (loc.node === null || typeof loc.node === 'object');\n\n return hasParent && hasIndex && hasNode;\n}\n\n/**\n * Type guard to check if a value is a valid Path\n */\nexport function isValidPath(path: unknown): path is Path {\n if (!Array.isArray(path)) {\n return false;\n }\n\n // Path is an array of numbers\n return path.every((item): item is number => typeof item === 'number' && item >= 0);\n}\n\n/**\n * Type guard to check if parent is PageData\n */\nexport function isPageDataParent(parent: ComponentNode | PageData | null): parent is PageData {\n if (!parent) return false;\n\n // Check for JSONPage format (has root property)\n if ('root' in parent) return true;\n\n // Check for component format - component must be an object, not a string\n if ('component' in parent) {\n return typeof parent.component === 'object' && parent.component !== null;\n }\n\n return false;\n}\n\n/**\n * Type guard to check if parent is ComponentNode\n */\nexport function isComponentNodeParent(parent: ComponentNode | PageData | null): parent is ComponentNode {\n if (!parent) return false;\n // Check for 'type' property (all ComponentNodes have it)\n // Then check for specific node types that can have children:\n // - HtmlNode: has 'tag' property\n // - ComponentInstanceNode: has 'component' property\n // - SlotMarker: type === 'slot'\n // - LinkNode: type === 'link'\n // - EmbedNode: type === 'embed'\n // - ListNode: type === 'list' (also handles legacy 'cms-list' for migration)\n // - CustomNode: type === 'custom' (opaque .astro, accepts slotted children)\n // - IslandNode: type === 'island' (BYO framework island, accepts slotted children)\n const nodeType = (parent as any).type;\n return (\n 'type' in parent &&\n ('tag' in parent ||\n 'component' in parent ||\n nodeType === 'slot' ||\n nodeType === 'link' ||\n nodeType === 'embed' ||\n nodeType === 'custom' ||\n nodeType === 'island' ||\n nodeType === 'cms-list' || // Legacy support for migration\n nodeType === 'list')\n );\n}\n\n/**\n * Get children array from parent (handles both PageData and ComponentNode)\n */\nexport function getParentChildren(parent: ComponentNode | PageData | null): Array<ComponentNode | string> | null {\n if (!parent) return null;\n\n if (isPageDataParent(parent)) {\n const rootData = getRootData(parent);\n return rootData && 'children' in rootData\n ? (rootData.children as Array<ComponentNode | string> | undefined) || null\n : null;\n }\n\n if (isComponentNodeParent(parent)) {\n return 'children' in parent ? (parent.children as Array<ComponentNode | string> | undefined) || null : null;\n }\n\n return null;\n}\n\n/**\n * Set children array on parent (handles both PageData and ComponentNode)\n */\nexport function setParentChildren(\n parent: ComponentNode | PageData | null,\n children: Array<ComponentNode | string>,\n): void {\n if (!parent) return;\n\n if (isPageDataParent(parent)) {\n const rootData = getRootData(parent);\n if (rootData && 'children' in rootData) {\n rootData.children = children;\n }\n } else if (isComponentNodeParent(parent)) {\n if ('children' in parent) {\n parent.children = children;\n }\n }\n}\n", "/**\n * Color Property Utilities\n * Helps identify and work with CSS properties that accept color values\n */\n\n/**\n * List of CSS properties that accept color values\n */\nconst COLOR_PROPERTIES = new Set([\n 'color',\n 'backgroundColor',\n 'borderColor',\n 'borderTopColor',\n 'borderRightColor',\n 'borderBottomColor',\n 'borderLeftColor',\n 'outlineColor',\n 'fill',\n 'stroke',\n 'textDecorationColor',\n 'caretColor',\n 'columnRuleColor',\n 'floodColor',\n 'lightingColor',\n 'stopColor',\n]);\n\n/**\n * Check if a CSS property is a color property\n */\nexport function isColorProperty(propertyName: string): boolean {\n return COLOR_PROPERTIES.has(propertyName);\n}\n\n/**\n * Get all color properties\n */\nexport function getColorProperties(): string[] {\n return Array.from(COLOR_PROPERTIES);\n}\n", "/**\n * Path Builder Utilities\n *\n * Build tree structures with both logical and rendered paths for each node.\n *\n * Logical Path: Position in the JSON data structure\n * Rendered Path: Position after component structure transformations (slot markers)\n */\n\nimport type { Path } from '../pathArrayUtils';\nimport type { PageData, ComponentNode } from '../types';\nimport { getRootData } from '../treePathUtils';\nimport { isComponentNode, isSlotMarker, isLocaleListNode, isCMSListNode, isListNode, hasChildren } from '../nodeUtils';\n\n/**\n * Node path data containing both logical and rendered paths\n */\nexport interface NodePathData {\n path: Path; // Logical path in data structure\n renderedPath: Path; // Path adjusted for component structure wrapping\n /**\n * For slot markers being edited from inside their host component: the\n * page-absolute rendered paths of every DOM position the slot occupies\n * after the renderer inlines its N instance children. Length === N.\n * Undefined for non-slot nodes and for slot markers with 0 or 1 children\n * (where the single `renderedPath` already represents the whole region).\n */\n slotRenderedPaths?: Path[];\n}\n\n/**\n * Find the path to the slot marker in a component structure\n * Returns the path as an array of indices\n *\n * @example\n * // Structure: div > div > children\n * findSlotMarkerPath(structure) // Returns [0, 0, 1] (or null if not found)\n */\nfunction findSlotMarkerPath(structure: any, currentPath: Path = [0]): Path | null {\n if (!structure || typeof structure !== 'object') return null;\n\n if (isSlotMarker(structure)) {\n return currentPath;\n }\n\n if (!hasChildren(structure)) {\n return null;\n }\n\n for (let i = 0; i < structure.children.length; i++) {\n const child = structure.children[i];\n\n // Text children can't be (or contain) slot markers\n if (typeof child === 'string') continue;\n\n if (isSlotMarker(child)) {\n return [...currentPath, i];\n }\n\n if (child && typeof child === 'object' && !Array.isArray(child)) {\n const found = findSlotMarkerPath(child, [...currentPath, i]);\n if (found) return found;\n }\n }\n\n return null;\n}\n\n/**\n * Calculate rendered path accounting for component structure wrapping\n *\n * When a component has a {type: \"slot\"} marker nested inside its structure,\n * the rendered path needs adjustment for the nesting depth.\n *\n * This algorithm builds the rendered path incrementally, checking if each\n * parent node is a component and calculating the correct rendered position\n * based on the component's slot path.\n *\n * @example\n * Section structure: div > div > slot (slotPath = [0, 0, 0])\n * Stack structure: div > div > slot (slotPath = [0, 0, 0])\n *\n * Logical path [0, 1, 0, 0] (Subtitle inside Stack inside Section):\n * - i=1: root div is NOT component, renderedPath = [0, 1]\n * - i=2: Section IS component, slotPath=[0,0,0], prefix=[0], renderedPath = [0, 1, 0, 0]\n * - i=3: Stack IS component, slotPath=[0,0,0], prefix=[0], renderedPath = [0, 1, 0, 0, 0, 0]\n */\nfunction calculateRenderedPath(\n logicalPath: Path,\n currentNode: any,\n globalComponentRegistry: any,\n navigationHistory?: NavigationContext[],\n): Path {\n if (!currentNode || logicalPath.length === 0) {\n return logicalPath;\n }\n\n // For the root element, logical and rendered paths are the same\n if (logicalPath.length === 1) {\n return logicalPath;\n }\n\n // Handle editing a component definition with slot marker\n // This calculates the offset for elements that come AFTER the slot in the structure\n // The offset is applied during the component slot wrapping calculation below\n let postSlotOffset = 0;\n let postSlotDepth = -1;\n\n if (navigationHistory && navigationHistory.length > 0) {\n // Use the most recent (current) navigation context's instanceChildren\n // When editing nested components A > B, we need B's instanceChildren, not A's\n const currentContext = navigationHistory[navigationHistory.length - 1];\n const instanceChildren = currentContext?.instanceChildren;\n const instanceChildrenCount = Array.isArray(instanceChildren) ? instanceChildren.length : 0;\n\n if (instanceChildrenCount > 0) {\n const rootSlotPath = findSlotMarkerPath(currentNode);\n\n if (rootSlotPath && rootSlotPath.length > 1) {\n // Check if this path is for an element AFTER the slot marker\n const markerDepth = rootSlotPath.length - 1;\n if (logicalPath.length > markerDepth) {\n const indexAtMarkerLevel = logicalPath[markerDepth] ?? 0;\n const markerIndex = rootSlotPath[markerDepth] ?? 0;\n\n if (indexAtMarkerLevel > markerIndex) {\n // This path is after the slot marker in the structure\n // Calculate offset but DON'T return early - we still need to handle\n // component slot wrapping (e.g., if root is a component like Layout)\n postSlotOffset = instanceChildrenCount - 1;\n postSlotDepth = markerDepth;\n }\n }\n }\n }\n }\n\n // Build rendered path incrementally by walking through the logical path\n // and checking if each parent is a component with a nested slot\n let renderedPath: Path = [0];\n let node: ComponentNode | null | undefined = currentNode;\n\n for (let i = 1; i < logicalPath.length; i++) {\n const originalIndex = logicalPath[i] ?? 0;\n let childIndex = originalIndex;\n\n // Apply post-slot offset at the appropriate depth\n // This handles elements that come AFTER a slot marker in the component structure\n if (i === postSlotDepth && postSlotOffset > 0) {\n childIndex += postSlotOffset;\n }\n\n if (!node || !hasChildren(node)) break;\n\n const children = node.children;\n const childNode = children[originalIndex]; // Use original index for traversal\n\n // Check if current node (the parent) is a component\n if (isComponentNode(node)) {\n const componentName = node.component;\n const componentDef = globalComponentRegistry?.get?.(componentName);\n\n if (componentDef?.component?.structure) {\n const slotPath = findSlotMarkerPath(componentDef.component.structure);\n\n if (slotPath && slotPath.length > 1) {\n // slotPath is like [0, 0, 0] meaning: root \u2192 child0 \u2192 child0 \u2192 slot\n // prefix = path from component root to slot's parent container\n // For [0, 0, 0]: prefix = [0] (the middle elements, excluding root and slot index)\n const prefix = slotPath.slice(1, -1);\n const slotIndex = slotPath[slotPath.length - 1] ?? 0;\n\n // Child renders at: currentRenderedPath + prefix + (slotIndex + adjustedChildIndex)\n renderedPath = [...renderedPath, ...prefix, slotIndex + childIndex];\n } else {\n // No nested slot or slot at root level, direct child mapping\n renderedPath = [...renderedPath, childIndex];\n }\n } else {\n // Component has no structure defined\n renderedPath = [...renderedPath, childIndex];\n }\n } else {\n // Regular HTML node - direct mapping\n renderedPath = [...renderedPath, childIndex];\n }\n\n // Text children have no children of their own \u2014 the next iteration's\n // hasChildren() check breaks out, same as before, but keep `node` typed.\n node = typeof childNode === 'string' ? undefined : childNode;\n }\n\n return renderedPath;\n}\n\n/**\n * Navigation context for component editing\n * Used to convert component-relative paths to page-relative paths\n *\n * Note: This matches FileStore's NavigationContext structure for compatibility\n */\n/**\n * CMS item context for elements inside CMS List(s)\n */\nexport interface CMSItemContext {\n itemIndexPath: number[]; // e.g., [0] for single list, [0, 2] for nested\n listPaths: Path[]; // Parallel array of list node paths\n}\n\nexport interface NavigationContext {\n file?: any; // FileItem - optional as not all contexts have file\n componentInstancePath: Path | null;\n componentInstanceRenderedPath?: Path | null; // Rendered path for accurate DOM queries\n instanceChildren?: Array<ComponentNode | string>; // Children of the component instance (for path offset calculation)\n cmsItemContext?: CMSItemContext | null; // CMS context when editing component inside CMS List\n}\n\n/**\n * Stack a navigation history's componentInstanceRenderedPath entries into one\n * page-absolute path. The first entry's path is taken as-is; every subsequent\n * entry contributes `path.slice(1)` (i.e. its component-internal suffix), so\n * the storage convention is \"first entry is page-absolute, deeper entries are\n * component-internal-with-offset\". Used to compute the prefix that\n * buildTreePathsWithRendered prepends, and to know how many leading elements\n * to strip when extracting a component-internal path back out.\n */\nexport function computeCumulativeInstancePath(navigationHistory: NavigationContext[] | undefined): Path | null {\n if (!navigationHistory || navigationHistory.length === 0) return null;\n let cumulative: Path | null =\n navigationHistory[0]?.componentInstanceRenderedPath ?? navigationHistory[0]?.componentInstancePath ?? null;\n if (!cumulative) return null;\n for (let i = 1; i < navigationHistory.length; i++) {\n const entry = navigationHistory[i];\n const next = entry?.componentInstanceRenderedPath ?? entry?.componentInstancePath;\n if (next) {\n cumulative = [...cumulative, ...next.slice(1)];\n }\n }\n return cumulative;\n}\n\n/**\n * Build all paths from tree with both logical and rendered paths\n *\n * Recursively traverses the tree structure and creates NodePathData entries\n * for each node, including both the logical path and the rendered path.\n *\n * When editing a component (navigationHistory provided), paths are adjusted\n * to be page-relative by prepending the cumulative component instance path.\n *\n * @param pageData - The page or component data\n * @param globalComponentRegistry - Registry for component definitions\n * @param navigationHistory - Optional navigation context for component editing\n * @returns Array of NodePathData with both logical and rendered paths\n *\n * @example\n * // When editing a page\n * const pathsData = buildTreePathsWithRendered(pageData, registry);\n * pathsData.forEach(({path, renderedPath}) => {\n * console.log(`Node at [${path}] renders as [${renderedPath}]`);\n * });\n *\n * // When editing a component\n * const navigationHistory = [{componentInstancePath: [0, 2]}];\n * const pathsData = buildTreePathsWithRendered(componentData, registry, navigationHistory);\n * // Returns paths relative to the page (e.g., [0, 2, 0] for first child of component)\n */\nexport function buildTreePathsWithRendered(\n pageData: PageData,\n globalComponentRegistry?: any,\n navigationHistory?: NavigationContext[],\n): NodePathData[] {\n const rootData = getRootData(pageData);\n if (!rootData) return [];\n\n // Calculate cumulative component instance path for nested editing\n // Use rendered paths to ensure DOM queries have correct element paths\n const cumulativeInstancePath = computeCumulativeInstancePath(navigationHistory);\n\n const result: NodePathData[] = [];\n\n // The slot under the host component being edited renders into N DOM\n // positions equal to the host's `instanceChildren` count. Snapshot that\n // count once: it's the same source `calculateRenderedPath` uses for the\n // post-slot offset (the LAST navigation entry's instanceChildren).\n const hostInstanceChildrenCount =\n navigationHistory && navigationHistory.length > 0\n ? Array.isArray(navigationHistory[navigationHistory.length - 1]?.instanceChildren)\n ? navigationHistory[navigationHistory.length - 1]!.instanceChildren!.length\n : 0\n : 0;\n\n function traverse(node: ComponentNode, currentPath: Path = [0]): void {\n // Calculate rendered path for this node\n // Call calculateRenderedPath when:\n // 1. globalComponentRegistry exists (for component slot offsets), OR\n // 2. navigationHistory exists (for post-slot element offsets when editing a component)\n const needsPathCalculation = globalComponentRegistry || (navigationHistory && navigationHistory.length > 0);\n const renderedPath = needsPathCalculation\n ? calculateRenderedPath(currentPath, rootData, globalComponentRegistry, navigationHistory)\n : currentPath;\n\n // When editing a component, adjust rendered path to be page-relative\n // Logical path always stays component-relative (starting from [0])\n const adjustedRenderedPath = cumulativeInstancePath\n ? [...cumulativeInstancePath, ...renderedPath.slice(1)]\n : renderedPath;\n\n const slotRenderedPaths =\n isSlotMarker(node) && hostInstanceChildrenCount > 1\n ? expandSlotRenderedPaths(adjustedRenderedPath, hostInstanceChildrenCount)\n : undefined;\n\n result.push({\n path: currentPath, // Keep logical path component-relative\n renderedPath: adjustedRenderedPath, // Adjust rendered path for page-relative queries\n ...(slotRenderedPaths ? { slotRenderedPaths } : {}),\n });\n\n // Traverse children\n // Include markers when editing a component instance (has navigationHistory)\n // to ensure they get proper rendered paths\n if (hasChildren(node)) {\n node.children.forEach((child, index) => {\n if (\n typeof child === 'object' &&\n child !== null &&\n ('tag' in child ||\n 'component' in child ||\n 'html' in child ||\n 'src' in child ||\n 'href' in child ||\n isLocaleListNode(child) ||\n isCMSListNode(child) ||\n isListNode(child) ||\n (cumulativeInstancePath && isSlotMarker(child)))\n ) {\n const childPath = [...currentPath, index];\n traverse(child as ComponentNode, childPath);\n }\n });\n }\n }\n\n traverse(rootData);\n return result;\n}\n\n/**\n * Given the slot marker's primary rendered path (its position in the parent\n * AFTER all path adjustments) and the count N of injected instance children,\n * return the N page-absolute paths the slot's children occupy in the DOM:\n * positions [slotIdx, slotIdx+1, ..., slotIdx+N-1] under the same parent.\n */\nfunction expandSlotRenderedPaths(slotRenderedPath: Path, instanceChildrenCount: number): Path[] {\n if (instanceChildrenCount <= 0 || slotRenderedPath.length === 0) return [];\n const prefix = slotRenderedPath.slice(0, -1);\n const slotIdx = slotRenderedPath[slotRenderedPath.length - 1] ?? 0;\n const out: Path[] = [];\n for (let i = 0; i < instanceChildrenCount; i++) {\n out.push([...prefix, slotIdx + i]);\n }\n return out;\n}\n\n/**\n * Build tree paths for a specific component context\n *\n * When editing a component, use this to get paths for the component definition\n * with proper accounting for slot marker positions.\n *\n * @param componentStructure - Component definition structure\n * @param globalComponentRegistry - Registry for nested components\n * @param navigationHistory - Optional navigation context to adjust paths to page-relative\n * @returns Array of NodePathData\n */\nexport function buildComponentTreePaths(\n componentStructure: ComponentNode,\n globalComponentRegistry?: any,\n navigationHistory?: NavigationContext[],\n): NodePathData[] {\n const result: NodePathData[] = [];\n\n // Calculate cumulative component instance path for navigation context\n const cumulativeInstancePath = computeCumulativeInstancePath(navigationHistory);\n\n const hostInstanceChildrenCount =\n navigationHistory && navigationHistory.length > 0\n ? Array.isArray(navigationHistory[navigationHistory.length - 1]?.instanceChildren)\n ? navigationHistory[navigationHistory.length - 1]!.instanceChildren!.length\n : 0\n : 0;\n\n function traverse(node: ComponentNode, currentPath: Path = [0]): void {\n // In component context, logical and rendered paths may differ\n // based on nested slot markers\n const needsPathCalculation = globalComponentRegistry || (navigationHistory && navigationHistory.length > 0);\n const renderedPath = needsPathCalculation\n ? calculateRenderedPath(currentPath, componentStructure, globalComponentRegistry, navigationHistory)\n : currentPath;\n\n // Adjust to page-relative paths if navigating into an instance\n const adjustedRenderedPath = cumulativeInstancePath\n ? [...cumulativeInstancePath, ...renderedPath.slice(1)]\n : renderedPath;\n\n const slotRenderedPaths =\n isSlotMarker(node) && hostInstanceChildrenCount > 1\n ? expandSlotRenderedPaths(adjustedRenderedPath, hostInstanceChildrenCount)\n : undefined;\n\n result.push({\n path: currentPath,\n renderedPath: adjustedRenderedPath,\n ...(slotRenderedPaths ? { slotRenderedPaths } : {}),\n });\n\n // Traverse children\n if (hasChildren(node)) {\n node.children.forEach((child, index) => {\n if (\n typeof child === 'object' &&\n child !== null &&\n ('tag' in child ||\n 'component' in child ||\n 'html' in child ||\n 'src' in child ||\n 'href' in child ||\n isLocaleListNode(child) ||\n isCMSListNode(child) ||\n isListNode(child) ||\n isSlotMarker(child))\n ) {\n const childPath = [...currentPath, index];\n traverse(child as ComponentNode, childPath);\n }\n });\n }\n }\n\n traverse(componentStructure);\n return result;\n}\n\n/**\n * Find NodePathData by logical path\n */\nexport function findPathData(pathsData: NodePathData[], searchPath: Path): NodePathData | undefined {\n return pathsData.find(\n (item) => item.path.length === searchPath.length && item.path.every((val, idx) => val === searchPath[idx]),\n );\n}\n\n/**\n * Get all ancestors for a path (including the path itself)\n */\nexport function getPathAncestors(pathsData: NodePathData[], searchPath: Path): NodePathData[] {\n const ancestors: NodePathData[] = [];\n\n for (let i = 1; i <= searchPath.length; i++) {\n const ancestorPath = searchPath.slice(0, i);\n const found = findPathData(pathsData, ancestorPath);\n if (found) {\n ancestors.push(found);\n }\n }\n\n return ancestors;\n}\n", "/**\n * Validation exports\n */\n\nexport * from './schemas';\nexport * from './validators';\nexport * from './propValidator';\nexport * from './cmsValidators';\nexport * from './commentValidators';\nexport * from './permissionsValidators';\n", "/**\n * CMS Validation Utilities\n * Centralized validation for CMS-specific fields to ensure consistency\n */\n\nimport { z } from 'zod';\n\n/**\n * Regex pattern for valid CMS collection IDs\n * Allows alphanumeric characters, underscores, and hyphens\n */\nexport const CMS_COLLECTION_ID_REGEX = /^[a-zA-Z0-9_-]+$/;\n\n/**\n * Zod schema for CMS collection ID validation\n */\nexport const CMSCollectionIdSchema = z\n .string()\n .min(1, 'Collection ID is required')\n .regex(CMS_COLLECTION_ID_REGEX, 'Collection ID must contain only letters, numbers, underscores, and hyphens');\n\n/**\n * Validate a CMS collection ID\n * @returns Object with valid boolean and optional error message\n */\nexport function validateCollectionId(id: string): { valid: boolean; error?: string } {\n const result = CMSCollectionIdSchema.safeParse(id);\n if (result.success) {\n return { valid: true };\n }\n return { valid: false, error: result.error.errors[0]?.message };\n}\n\n/**\n * Check if a string is a valid CMS collection ID (simple boolean check)\n */\nexport function isValidCollectionId(id: string): boolean {\n return CMS_COLLECTION_ID_REGEX.test(id);\n}\n", "/**\n * Comment Validators\n * Zod schema + validator for pinned comments.\n */\n\nimport { z } from 'zod';\nimport type { ZodError } from 'zod';\nimport type { Comment } from '../types/comment';\nimport { COMMENT_STATUSES } from '../types/comment';\nimport type { ValidationResult, ValidationError } from './validators';\n\nexport const CommentStatusSchema = z.enum(COMMENT_STATUSES as unknown as [string, ...string[]]);\n\nexport const CommentAuthorSchema = z.object({\n login: z.string().min(1),\n name: z.string().optional(),\n avatarUrl: z.string().optional(),\n});\n\nexport const CommentNodeIdentitySchema = z.object({\n kind: z.enum(['component', 'node']),\n name: z.string().min(1),\n label: z.string().optional(),\n});\n\nexport const CommentNodeRefSegmentSchema = z.object({\n kind: z.enum(['component', 'node']),\n name: z.string().min(1),\n nth: z.number().int().nonnegative(),\n});\n\nexport const CommentAnchorSchema = z.object({\n // Type + occurrence path (move-resilient source of truth). Must be declared\n // (z.object strips unknown keys) so it round-trips to disk.\n nodeRef: z.array(CommentNodeRefSegmentSchema).optional(),\n nodePath: z.array(z.number().int().nonnegative()),\n // CMS-list item path disambiguating which list copy the element belongs to.\n cmsItemIndexPath: z.array(z.number().int().nonnegative()).optional(),\n nodeIdentity: CommentNodeIdentitySchema,\n offsetXPercent: z.number().min(0).max(1),\n offsetYPercent: z.number().min(0).max(1),\n breakpoint: z.string().optional(),\n});\n\nexport const CommentThreadEntrySchema = z.object({\n id: z.string().min(1),\n author: CommentAuthorSchema,\n createdAt: z.string().min(1),\n text: z.string(),\n statusChange: CommentStatusSchema.nullable(),\n});\n\nexport const CommentSchema = z.object({\n _id: z.string().min(1),\n _filename: z.string().min(1),\n _pagePath: z.string().min(1),\n _seq: z.number().int().nonnegative(),\n _createdAt: z.string().min(1),\n _updatedAt: z.string().min(1),\n _commitSha: z.string().nullable(),\n anchor: CommentAnchorSchema,\n status: CommentStatusSchema,\n thread: z.array(CommentThreadEntrySchema).min(1),\n});\n\nfunction zodToValidationErrors(zodError: ZodError): ValidationError[] {\n return zodError.errors.map((err) => ({\n path: err.path.join('.') || 'root',\n message: err.message,\n code: 'INVALID_TYPE' as const,\n }));\n}\n\nexport function validateComment(data: unknown): ValidationResult<Comment> {\n const result = CommentSchema.safeParse(data);\n if (result.success) {\n return { valid: true, data: result.data as Comment };\n }\n return { valid: false, errors: zodToValidationErrors(result.error) };\n}\n", "/**\n * Permissions Policy Validators\n * Zod schema + validator for `.meno/permissions.json`.\n */\n\nimport { z } from 'zod';\nimport type { ZodError } from 'zod';\nimport type { PermissionsPolicy } from '../types/permissions';\nimport { PERMISSION_ROLES } from '../types/permissions';\nimport type { ValidationResult, ValidationError } from './validators';\n\n// PERMISSION_ROLES is a precise `as const` tuple, so z.enum consumes it directly.\nexport const PermissionRoleSchema = z.enum(PERMISSION_ROLES);\n\nexport const PermissionRuleSchema = z.object({\n pages: z.array(z.string()).optional(),\n components: z.array(z.string()).optional(),\n cms: z.array(z.string()).optional(),\n config: z.array(z.string()).optional(),\n});\n\nexport const PermissionGrantSchema = z.object({\n role: PermissionRoleSchema.optional(),\n allow: PermissionRuleSchema.optional(),\n});\n\nexport const PermissionsPolicySchema = z.object({\n // Forward-tolerant: accept any positive version; the resolver only knows v1.\n version: z.number().int().min(1),\n defaultRole: PermissionRoleSchema.optional(),\n members: z.record(z.string(), PermissionGrantSchema).optional(),\n teams: z.record(z.string(), PermissionGrantSchema).optional(),\n});\n\nfunction zodToValidationErrors(zodError: ZodError): ValidationError[] {\n return zodError.errors.map((err) => ({\n path: err.path.join('.') || 'root',\n message: err.message,\n code: 'INVALID_TYPE' as const,\n }));\n}\n\nexport function validatePermissionsPolicy(data: unknown): ValidationResult<PermissionsPolicy> {\n const result = PermissionsPolicySchema.safeParse(data);\n if (result.success) {\n return { valid: true, data: result.data as PermissionsPolicy };\n }\n return { valid: false, errors: zodToValidationErrors(result.error) };\n}\n", "/**\n * Permission resolver\n *\n * Pure functions that turn a {@link PermissionsPolicy} + a\n * {@link PermissionIdentity} into a queryable {@link ResolvedPermissions}, and\n * answer \"can this identity edit this resource?\". No IO \u2014 the policy is loaded\n * and the identity gathered by the caller. Shared by the studio client (UI\n * gating) and any future server-side mirror.\n *\n * See `./types/permissions.ts` for the data model and the SOFT-enforcement\n * caveat.\n */\n\nimport type {\n PermissionGrant,\n PermissionIdentity,\n PermissionRole,\n PermissionRule,\n PermissionsPolicy,\n ResolvedPermissions,\n ResourceKind,\n ResourceRef,\n} from './types/permissions';\n\n/** Role capability ordering, low \u2192 high. */\nconst ROLE_RANK: Record<PermissionRole, number> = { viewer: 0, editor: 1, admin: 2 };\n\n/** Maps a {@link ResourceKind} to its {@link PermissionRule} key. */\nconst RULE_KEY: Record<ResourceKind, keyof PermissionRule> = {\n page: 'pages',\n component: 'components',\n cms: 'cms',\n config: 'config',\n};\n\n/** The empty (all-kinds-present) allow rule used as a merge seed. */\nfunction emptyAllow(): Required<PermissionRule> {\n return { pages: [], components: [], cms: [], config: [] };\n}\n\nfunction higherRole(a: PermissionRole, b: PermissionRole): PermissionRole {\n return ROLE_RANK[b] > ROLE_RANK[a] ? b : a;\n}\n\n/** A grant's role: explicit, else `editor` when it carries an allow-list, else `viewer`. */\nfunction grantRole(grant: PermissionGrant): PermissionRole {\n if (grant.role) return grant.role;\n return grant.allow ? 'editor' : 'viewer';\n}\n\nfunction mergeAllow(grants: PermissionGrant[]): Required<PermissionRule> {\n const merged = emptyAllow();\n for (const grant of grants) {\n const allow = grant.allow;\n if (!allow) continue;\n for (const kind of Object.keys(merged) as (keyof PermissionRule)[]) {\n const patterns = allow[kind];\n if (patterns) merged[kind].push(...patterns);\n }\n }\n // Dedupe each list while preserving order.\n for (const kind of Object.keys(merged) as (keyof PermissionRule)[]) {\n merged[kind] = [...new Set(merged[kind])];\n }\n return merged;\n}\n\nconst REGEX_SPECIALS = /[.+?^${}()|[\\]\\\\]/g;\n\n/**\n * Glob match for a single permission pattern against a value. `*` matches any\n * run of characters (including `/`); every other character is literal. An exact\n * (wildcard-free) pattern must equal the value.\n */\nexport function matchesPermissionPattern(pattern: string, value: string): boolean {\n if (pattern === value) return true;\n if (!pattern.includes('*')) return false;\n const source = pattern\n .split('*')\n .map((segment) => segment.replace(REGEX_SPECIALS, '\\\\$&'))\n .join('.*');\n return new RegExp(`^${source}$`).test(value);\n}\n\n/** True if `value` matches any pattern in `patterns`. */\nexport function matchesAnyPermissionPattern(patterns: string[] | undefined, value: string): boolean {\n return !!patterns && patterns.some((pattern) => matchesPermissionPattern(pattern, value));\n}\n\n/**\n * Resolve a policy + identity into a capability set.\n *\n * - `policy == null` \u2192 an UNMANAGED project: everyone edits everything (status\n * quo). `canManagePolicy` (who may create the first policy) is gated to repo\n * admins, or anyone on a local/unauthenticated run.\n * - With a policy present, an identity not listed in `members`/`teams` gets\n * `defaultRole` (default `viewer`). `login: null` is treated the same way \u2014\n * callers that want to bypass gating for local runs should skip resolution\n * rather than pass a null login.\n * - A GitHub repo admin (`identity.isRepoAdmin`) is ALWAYS an admin here,\n * regardless of the policy (bootstrap safety against lockout).\n */\nexport function resolvePermissions(\n policy: PermissionsPolicy | null | undefined,\n identity: PermissionIdentity,\n): ResolvedPermissions {\n const login = identity.login ?? null;\n const isRepoAdmin = identity.isRepoAdmin === true;\n\n if (!policy) {\n return {\n login,\n role: 'admin',\n isAdmin: true,\n canManagePolicy: login == null || isRepoAdmin,\n allow: emptyAllow(),\n };\n }\n\n const grants: PermissionGrant[] = [];\n\n const lookupLogin = login?.toLowerCase() ?? null;\n if (lookupLogin && policy.members) {\n for (const [key, grant] of Object.entries(policy.members)) {\n if (key.toLowerCase() === lookupLogin) grants.push(grant);\n }\n }\n\n if (policy.teams && identity.teams && identity.teams.length > 0) {\n const teamSet = new Set(identity.teams.map((team) => team.toLowerCase()));\n for (const [key, grant] of Object.entries(policy.teams)) {\n if (teamSet.has(key.toLowerCase())) grants.push(grant);\n }\n }\n\n const defaultRole: PermissionRole = policy.defaultRole ?? 'viewer';\n const baseRole =\n grants.length === 0\n ? defaultRole\n : grants.reduce<PermissionRole>((acc, g) => higherRole(acc, grantRole(g)), 'viewer');\n\n const isAdmin = isRepoAdmin || baseRole === 'admin';\n\n return {\n login,\n role: isAdmin ? 'admin' : baseRole,\n isAdmin,\n canManagePolicy: isAdmin,\n allow: mergeAllow(grants),\n };\n}\n\n/**\n * May this identity edit this resource? Admins edit everything; viewers edit\n * nothing; editors edit only resources whose id matches the merged allow-list\n * for the resource's kind.\n */\nexport function canEdit(resolved: ResolvedPermissions, ref: ResourceRef): boolean {\n if (resolved.isAdmin) return true;\n if (resolved.role === 'viewer') return false;\n return matchesAnyPermissionPattern(resolved.allow[RULE_KEY[ref.kind]], ref.id);\n}\n", "/**\n * Shared utility functions used across the codebase\n */\n\nimport type { Path } from './pathArrayUtils';\nimport { stringToPath, pathToLegacyString, getParentPath, isRootPath as isRootPathArray } from './pathArrayUtils';\nimport { ROOT_0_STRING } from './pathArrayUtils';\n\n/**\n * Deep clone an object using structuredClone\n * @param obj - The object to clone\n * @returns A deep clone of the object\n */\nexport function deepClone<T>(obj: T): T {\n return structuredClone(obj);\n}\n\n/**\n * Wait for a specified amount of time\n * @param ms - Milliseconds to wait\n */\nexport function wait(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Check if the currently focused element is editable (input, textarea, or contenteditable)\n * Also checks if the active element is INSIDE a contenteditable element (for rich text editors like Tiptap/ProseMirror)\n * Also returns true if text is selected (to allow native copy/paste)\n * @returns true if the active element is editable or text is selected\n */\nexport function isEditableElement(): boolean {\n // Allow native copy/paste when text is selected\n // Note: window.getSelection() only returns selections from the current document,\n // NOT from iframe documents. So in the parent window, any selection is from\n // sidebar/panels and should allow native copy.\n const selection = window.getSelection();\n if (selection && selection.toString().trim().length > 0) {\n return true;\n }\n\n const activeElement = document.activeElement;\n if (!activeElement) return false;\n\n // Textarea always accepts text\n if (activeElement.tagName === 'TEXTAREA') {\n return true;\n }\n\n // For inputs, only block shortcuts for text-accepting types\n if (activeElement.tagName === 'INPUT') {\n const inputType = (activeElement as HTMLInputElement).type.toLowerCase();\n const textInputTypes = [\n 'text',\n 'password',\n 'email',\n 'number',\n 'search',\n 'tel',\n 'url',\n 'date',\n 'time',\n 'datetime-local',\n 'month',\n 'week',\n ];\n // Allow shortcuts for: checkbox, radio, button, submit, reset, color, file, range, hidden\n return textInputTypes.includes(inputType);\n }\n\n // Check if activeElement or any parent is contenteditable\n // This handles rich text editors where focus may be on an internal element\n let element: Element | null = activeElement;\n while (element) {\n if (element.hasAttribute('contenteditable') || (element as HTMLElement).isContentEditable) {\n return true;\n }\n element = element.parentElement;\n }\n\n return false;\n}\n\n/**\n * Extract the parent path from a tree path\n * Example: root_0_children_0 -> root_0, root_0_children_0_children_1 -> root_0_children_0\n * Also accepts array paths: [0,0] -> \"root_0\", [0,0,1] -> \"root_0_children_0\"\n *\n * @param treePath - The tree path (string or Path array)\n * @param rootPath - The root path constant (default: 'root_0')\n * @returns The parent path, or rootPath if no parent found\n */\nexport function getParentPathFromTreePath(treePath: string | Path, rootPath: string = ROOT_0_STRING): string {\n // Convert to array if needed\n const pathArray = typeof treePath === 'string' ? stringToPath(treePath) : treePath;\n\n // Handle root paths\n if (isRootPathArray(pathArray)) {\n return rootPath;\n }\n\n // Use array operations to get parent path\n const parentArray = getParentPath(pathArray);\n return pathToLegacyString(parentArray);\n}\n\n/**\n * Normalize children property to always be an array\n * Mutates the node object directly (for performance in large trees)\n * Handles cases where children might be undefined, a single item, or already an array\n * @param node - The node object with a children property (will be mutated)\n */\nexport function normalizeChildrenArray(node: { children?: any[] | any }): void {\n if (!node.children) {\n node.children = [];\n } else if (!Array.isArray(node.children)) {\n // Single child - wrap in array\n node.children = [node.children];\n }\n // If already an array, no change needed\n}\n", "/**\n * Shared theme color defaults\n * Used by PropsPanel and StyleEditor to avoid duplication\n */\n\nexport interface PropsPanelColors {\n background: string;\n backgroundSecondary: string;\n backgroundTertiary: string;\n border: string;\n borderSecondary: string;\n text: string;\n textSecondary: string;\n textMuted: string;\n codeString: string;\n codeNumber: string;\n codeKey: string;\n codeType: string;\n buttonPrimary: string;\n buttonPrimaryHover: string;\n buttonSecondary: string;\n buttonDanger: string;\n buttonDangerHover: string;\n inputBackground: string;\n inputBorder: string;\n hoverBackground: string;\n variableBackground?: string;\n}\n\n/**\n * Spacing constants for props panel components\n */\nexport interface PropsPanelSpacing {\n tight: string; // 2px - for label:colon:input gaps\n normal: string; // 4px - for standard gaps\n loose: string; // 8px - for larger gaps\n}\n\nexport const DEFAULT_PROPS_PANEL_SPACING: PropsPanelSpacing = {\n tight: '2px',\n normal: '4px',\n loose: '8px',\n};\n\n/**\n * Base input style properties\n */\nexport interface PropsPanelInputStyle {\n fontFamily: string;\n fontSize: string;\n padding: string;\n borderRadius: string;\n outline: string;\n border?: string;\n}\n\n/**\n * Base input style defaults\n */\nexport const DEFAULT_INPUT_STYLE: Omit<PropsPanelInputStyle, 'border' | 'color' | 'background'> = {\n fontFamily: \"'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n fontSize: '13px',\n padding: '6px 8px',\n borderRadius: '3px',\n outline: 'none',\n};\n\n/**\n * Base textarea style defaults\n */\nexport const DEFAULT_TEXTAREA_STYLE: Omit<PropsPanelInputStyle, 'border' | 'color' | 'background'> = {\n fontFamily: 'inherit',\n fontSize: '13px',\n padding: '6px 8px',\n borderRadius: '3px',\n outline: 'none',\n};\n\n/**\n * Default dark theme colors for props panel\n */\nexport const DEFAULT_PROPS_PANEL_COLORS: PropsPanelColors = {\n background: '#1e1e1e',\n backgroundSecondary: '#2d2d2d',\n backgroundTertiary: '#252525',\n border: '#333333',\n borderSecondary: '#444444',\n text: '#ebebeb',\n textSecondary: '#cccccc',\n textMuted: '#b0b0b0',\n codeString: '#ffffff',\n codeNumber: '#b5cea8',\n codeKey: '#9cdcfe',\n codeType: '#4ec9b0',\n buttonPrimary: '#007acc',\n buttonPrimaryHover: '#0098ff',\n buttonSecondary: '#007acc',\n buttonDanger: '#f48771',\n buttonDangerHover: '#ff6b6b',\n inputBackground: '#2a2a2a',\n inputBorder: '#444444',\n hoverBackground: '#2a2d2e',\n variableBackground: '#2a2a2a',\n};\n\n/**\n * Light theme colors for props panel\n */\nexport const LIGHT_PROPS_PANEL_COLORS: PropsPanelColors = {\n background: '#ffffff',\n backgroundSecondary: '#f5f5f5',\n backgroundTertiary: '#fafafa',\n border: '#e4e8ec',\n borderSecondary: '#d0d0d0',\n text: '#1a1a1a',\n textSecondary: '#333333',\n textMuted: '#525a63',\n codeString: '#a31515',\n codeNumber: '#098658',\n codeKey: '#0451a5',\n codeType: '#267f99',\n buttonPrimary: '#0078d4',\n buttonPrimaryHover: '#106ebe',\n buttonSecondary: '#0078d4',\n buttonDanger: '#d13438',\n buttonDangerHover: '#a4262c',\n inputBackground: '#f5f7fa',\n inputBorder: '#d0d0d0',\n hoverBackground: '#f0f0f0',\n variableBackground: '#ebedf0',\n};\n", "/**\n * Color Variable Utilities\n * Handles resolution and validation of color variables in styles\n */\n\n/**\n * Check if a value is a color variable reference\n * @example \"var(--primary-color)\" -> true\n */\nexport function isColorVariable(value: string | unknown): value is string {\n if (typeof value !== 'string') return false;\n return /^var\\(--[\\w-]+\\)$/.test(value.trim());\n}\n\n/**\n * Extract variable name from a color variable reference\n * @example \"var(--primary-color)\" -> \"primary-color\"\n */\nexport function extractVariableName(value: string): string | null {\n const match = value.match(/^var\\(--([^)]+)\\)$/);\n return match ? (match[1] ?? null) : null;\n}\n\n/**\n * Create a color variable reference\n * @example \"primary-color\" -> \"var(--primary-color)\"\n */\nexport function createVariableReference(variableName: string): string {\n return `var(--${variableName})`;\n}\n\n/**\n * The project color a color-prop value references, or null if it's a literal color / unknown.\n * Accepts BOTH the `var(--muted)` form AND the bare token `muted` \u2014 the latter being the form the\n * class-string round-trip stores (colorTokenProps keep the bare token, e.g. `bg-muted`). A bare\n * value is only a token when it's a defined color name in `colors` (so literals like `#fff` / `red`\n * stay literals). Lets the editor resolve a bare-token color to its swatch + linked-color widget.\n * @example colorTokenName(\"var(--muted)\", {...}) -> \"muted\"\n * @example colorTokenName(\"muted\", { muted: \"#6b7280\" }) -> \"muted\"\n * @example colorTokenName(\"#fff\", {...}) -> null\n */\nexport function colorTokenName(value: string, colors: Record<string, string> | undefined | null): string | null {\n return extractVariableName(value) ?? (value && colors?.[value] ? value : null);\n}\n\n/**\n * Resolve a color variable to its actual value\n * @param value - The style value (may be a variable reference or actual color)\n * @param colorMap - Map of variable names to color values\n * @returns Resolved color value or original value if not a variable\n */\nexport function resolveColorVariable(value: string | unknown, colorMap: Record<string, string>): string {\n if (!isColorVariable(value)) {\n return String(value);\n }\n\n const varName = extractVariableName(value);\n if (!varName) {\n return String(value);\n }\n\n return colorMap[varName] || String(value);\n}\n\n/**\n * Replace color variables in a style object\n * @param styles - Style object with potential variable references\n * @param colorMap - Map of variable names to color values\n * @returns New style object with variables resolved\n */\nexport function resolveColorVariablesInStyles(\n styles: Record<string, unknown>,\n colorMap: Record<string, string>,\n): Record<string, unknown> {\n const resolved: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(styles)) {\n if (typeof value === 'string') {\n resolved[key] = resolveColorVariable(value, colorMap);\n } else {\n resolved[key] = value;\n }\n }\n\n return resolved;\n}\n\n/**\n * Get all color variable references from a style object\n * @param styles - Style object to search\n * @returns Array of variable names found in styles\n */\nexport function getColorVariablesFromStyles(styles: Record<string, unknown>): string[] {\n const variables = new Set<string>();\n\n for (const value of Object.values(styles)) {\n if (isColorVariable(value)) {\n const varName = extractVariableName(value);\n if (varName) {\n variables.add(varName);\n }\n }\n }\n\n return Array.from(variables);\n}\n", "/**\n * Error Types\n * Structured error types for consistent error handling across the codebase\n */\n\n/**\n * Error categories for filtering and handling\n */\nexport type ErrorCategory =\n | 'validation' // Invalid input/state\n | 'runtime' // Runtime failures (graceful degradation)\n | 'network' // API/fetch failures\n | 'internal'; // Unexpected errors\n\n/**\n * Structured error type for consistent error handling\n */\nexport interface AppError {\n readonly category: ErrorCategory;\n readonly code: string;\n readonly message: string;\n readonly context?: Record<string, unknown>;\n readonly cause?: Error;\n}\n\n/**\n * Create a structured error object\n */\nexport function createError(\n category: ErrorCategory,\n code: string,\n message: string,\n context?: Record<string, unknown>,\n cause?: Error,\n): AppError {\n return { category, code, message, context, cause };\n}\n\n/**\n * Type guard for AppError\n */\nexport function isAppError(error: unknown): error is AppError {\n return typeof error === 'object' && error !== null && 'category' in error && 'code' in error && 'message' in error;\n}\n", "/**\n * Color conversion utilities for HEX, RGB, and HSL formats\n */\n\nexport type ColorMode = 'hex' | 'rgb' | 'hsl';\n\nexport interface RgbColor {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface HslColor {\n h: number;\n s: number;\n l: number;\n}\n\n// \u2500\u2500 Detection \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst HEX_RE = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;\nconst RGB_RE = /^rgb\\(\\s*(\\d{1,3})\\s*[,\\s]\\s*(\\d{1,3})\\s*[,\\s]\\s*(\\d{1,3})\\s*\\)$/i;\nconst HSL_RE = /^hsl\\(\\s*(\\d{1,3}(?:\\.\\d+)?)\\s*[,\\s]\\s*(\\d{1,3}(?:\\.\\d+)?)%?\\s*[,\\s]\\s*(\\d{1,3}(?:\\.\\d+)?)%?\\s*\\)$/i;\n\n/** Detect the color mode from a CSS color string */\nexport function detectColorMode(value: string): ColorMode | null {\n if (!value) return null;\n const v = value.trim();\n if (HEX_RE.test(v)) return 'hex';\n if (RGB_RE.test(v)) return 'rgb';\n if (HSL_RE.test(v)) return 'hsl';\n return null;\n}\n\n// \u2500\u2500 Parsing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Parse a CSS rgb() string to an RgbColor object */\nexport function parseCssRgb(value: string): RgbColor | null {\n const m = value.trim().match(RGB_RE);\n if (!m) return null;\n return {\n r: clamp(parseInt(m[1] ?? '', 10), 0, 255),\n g: clamp(parseInt(m[2] ?? '', 10), 0, 255),\n b: clamp(parseInt(m[3] ?? '', 10), 0, 255),\n };\n}\n\n/** Parse a CSS hsl() string to an HslColor object */\nexport function parseCssHsl(value: string): HslColor | null {\n const m = value.trim().match(HSL_RE);\n if (!m) return null;\n return {\n h: clamp(parseFloat(m[1] ?? ''), 0, 360),\n s: clamp(parseFloat(m[2] ?? ''), 0, 100),\n l: clamp(parseFloat(m[3] ?? ''), 0, 100),\n };\n}\n\n// \u2500\u2500 Formatting \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Format an RgbColor to a CSS rgb() string */\nexport function rgbToCssString(rgb: RgbColor): string {\n return `rgb(${Math.round(rgb.r)}, ${Math.round(rgb.g)}, ${Math.round(rgb.b)})`;\n}\n\n/** Format an HslColor to a CSS hsl() string */\nexport function hslToCssString(hsl: HslColor): string {\n return `hsl(${Math.round(hsl.h)}, ${Math.round(hsl.s)}%, ${Math.round(hsl.l)}%)`;\n}\n\n// \u2500\u2500 Hex \u2194 RGB \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Expand 3-char hex to 6-char hex */\nfunction expandHex(hex: string): string {\n const h = hex.replace('#', '');\n if (h.length === 3) {\n return `#${h[0]}${h[0]}${h[1]}${h[1]}${h[2]}${h[2]}`;\n }\n return `#${h}`;\n}\n\n/** Convert a hex color string to an RgbColor */\nexport function hexToRgb(hex: string): RgbColor {\n const h = expandHex(hex).replace('#', '');\n return {\n r: parseInt(h.substring(0, 2), 16),\n g: parseInt(h.substring(2, 4), 16),\n b: parseInt(h.substring(4, 6), 16),\n };\n}\n\n/** Convert an RgbColor to a hex color string */\nexport function rgbToHex(rgb: RgbColor): string {\n const r = clamp(Math.round(rgb.r), 0, 255);\n const g = clamp(Math.round(rgb.g), 0, 255);\n const b = clamp(Math.round(rgb.b), 0, 255);\n return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;\n}\n\n// \u2500\u2500 RGB \u2194 HSL \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Convert an RgbColor to an HslColor */\nexport function rgbToHsl(rgb: RgbColor): HslColor {\n const r = rgb.r / 255;\n const g = rgb.g / 255;\n const b = rgb.b / 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n\n if (max === min) {\n return { h: 0, s: 0, l: Math.round(l * 100) };\n }\n\n const d = max - min;\n const s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\n let h = 0;\n if (max === r) {\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n } else if (max === g) {\n h = ((b - r) / d + 2) / 6;\n } else {\n h = ((r - g) / d + 4) / 6;\n }\n\n return {\n h: Math.round(h * 360),\n s: Math.round(s * 100),\n l: Math.round(l * 100),\n };\n}\n\n/** Convert an HslColor to an RgbColor */\nexport function hslToRgb(hsl: HslColor): RgbColor {\n const h = hsl.h / 360;\n const s = hsl.s / 100;\n const l = hsl.l / 100;\n\n if (s === 0) {\n const v = Math.round(l * 255);\n return { r: v, g: v, b: v };\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n\n return {\n r: Math.round(hueToRgb(p, q, h + 1 / 3) * 255),\n g: Math.round(hueToRgb(p, q, h) * 255),\n b: Math.round(hueToRgb(p, q, h - 1 / 3) * 255),\n };\n}\n\nfunction hueToRgb(p: number, q: number, t: number): number {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\n// \u2500\u2500 Hex \u2194 HSL (via RGB) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Convert a hex color string to an HslColor */\nexport function hexToHsl(hex: string): HslColor {\n return rgbToHsl(hexToRgb(hex));\n}\n\n/** Convert an HslColor to a hex color string */\nexport function hslToHex(hsl: HslColor): string {\n return rgbToHex(hslToRgb(hsl));\n}\n\n// \u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n", "/**\n * Gradient parsing and building utilities\n */\n\nexport interface GradientStop {\n color: string;\n position: number;\n}\n\nexport interface GradientConfig {\n type: 'linear' | 'radial' | 'conic';\n angle: number;\n shape?: 'circle' | 'ellipse';\n stops: GradientStop[];\n}\n\nconst LINEAR_RE = /^linear-gradient\\((.+)\\)$/i;\nconst RADIAL_RE = /^radial-gradient\\((.+)\\)$/i;\nconst CONIC_RE = /^conic-gradient\\((.+)\\)$/i;\n\n/** Check if a CSS value is a gradient */\nexport function isGradientValue(value: string): boolean {\n if (!value) return false;\n const v = value.trim().toLowerCase();\n return v.startsWith('linear-gradient(') || v.startsWith('radial-gradient(') || v.startsWith('conic-gradient(');\n}\n\n/** Parse a CSS gradient string into a GradientConfig */\nexport function parseGradient(cssValue: string): GradientConfig | null {\n if (!cssValue) return null;\n const v = cssValue.trim();\n\n let match: RegExpMatchArray | null;\n let type: GradientConfig['type'];\n\n const linearMatch = v.match(LINEAR_RE);\n const radialMatch = linearMatch ? null : v.match(RADIAL_RE);\n const conicMatch = linearMatch || radialMatch ? null : v.match(CONIC_RE);\n\n if (linearMatch) {\n match = linearMatch;\n type = 'linear';\n } else if (radialMatch) {\n match = radialMatch;\n type = 'radial';\n } else if (conicMatch) {\n match = conicMatch;\n type = 'conic';\n } else {\n return null;\n }\n\n const inner = match[1] ?? '';\n const parts = splitGradientArgs(inner);\n\n let angle = type === 'linear' ? 180 : 0;\n let shape: 'circle' | 'ellipse' | undefined;\n let stopsStartIndex = 0;\n\n if (type === 'linear') {\n const first = parts[0]?.trim();\n if (first) {\n const angleDeg = parseAngle(first);\n if (angleDeg !== null) {\n angle = angleDeg;\n stopsStartIndex = 1;\n } else if (first.startsWith('to ')) {\n angle = directionToAngle(first);\n stopsStartIndex = 1;\n }\n }\n } else if (type === 'radial') {\n const first = parts[0]?.trim().toLowerCase();\n if (first) {\n if (first.startsWith('circle') || first === 'circle') {\n shape = 'circle';\n stopsStartIndex = 1;\n } else if (first.startsWith('ellipse') || first === 'ellipse') {\n shape = 'ellipse';\n stopsStartIndex = 1;\n }\n }\n } else if (type === 'conic') {\n const first = parts[0]?.trim();\n if (first) {\n const fromAngle = first.match(/^from\\s+(\\d+(?:\\.\\d+)?)deg/i);\n if (fromAngle) {\n angle = parseFloat(fromAngle[1] ?? '');\n stopsStartIndex = 1;\n }\n }\n }\n\n const stops = parseStops(parts.slice(stopsStartIndex));\n if (stops.length < 2) return null;\n\n return { type, angle, shape, stops };\n}\n\n/** Build a CSS gradient string from a GradientConfig */\nexport function buildGradientCss(config: GradientConfig): string {\n const stopStrings = config.stops.map((s) => `${s.color} ${Math.round(s.position)}%`);\n\n switch (config.type) {\n case 'linear': {\n return `linear-gradient(${config.angle}deg, ${stopStrings.join(', ')})`;\n }\n case 'radial': {\n const shape = config.shape || 'circle';\n return `radial-gradient(${shape}, ${stopStrings.join(', ')})`;\n }\n case 'conic': {\n const from = config.angle ? `from ${config.angle}deg, ` : '';\n return `conic-gradient(${from}${stopStrings.join(', ')})`;\n }\n }\n}\n\n// \u2500\u2500 Internal helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n/** Split gradient arguments respecting nested parentheses */\nfunction splitGradientArgs(inner: string): string[] {\n const parts: string[] = [];\n let depth = 0;\n let current = '';\n\n for (const char of inner) {\n if (char === '(') depth++;\n if (char === ')') depth--;\n if (char === ',' && depth === 0) {\n parts.push(current.trim());\n current = '';\n } else {\n current += char;\n }\n }\n if (current.trim()) parts.push(current.trim());\n return parts;\n}\n\nfunction parseAngle(part: string): number | null {\n const m = part.match(/^(-?\\d+(?:\\.\\d+)?)deg$/i);\n return m ? parseFloat(m[1] ?? '') : null;\n}\n\nfunction directionToAngle(direction: string): number {\n const d = direction.trim().toLowerCase();\n const map: Record<string, number> = {\n 'to top': 0,\n 'to top right': 45,\n 'to right': 90,\n 'to bottom right': 135,\n 'to bottom': 180,\n 'to bottom left': 225,\n 'to left': 270,\n 'to top left': 315,\n };\n return map[d] ?? 180;\n}\n\nfunction parseStops(parts: string[]): GradientStop[] {\n const stops: GradientStop[] = [];\n const total = parts.length;\n\n for (let i = 0; i < total; i++) {\n const part = parts[i]?.trim();\n if (!part) continue;\n\n // Match color and optional position percentage\n const posMatch = part.match(/\\s+(\\d+(?:\\.\\d+)?)%\\s*$/);\n let color: string;\n let position: number;\n\n if (posMatch) {\n color = part.slice(0, posMatch.index!).trim();\n position = parseFloat(posMatch[1] ?? '');\n } else {\n color = part;\n // Auto-distribute position\n position = total <= 1 ? 0 : (i / (total - 1)) * 100;\n }\n\n stops.push({ color, position });\n }\n\n return stops;\n}\n", "/**\n * CMS Query Parser\n * Utilities for parsing and serializing sort/filter expressions for CMS List nodes.\n *\n * Sort Expression Syntax:\n * field [asc|desc]\n * Multiple fields separated by comma: date desc, title asc\n *\n * Filter Expression Syntax:\n * field operator value\n * Operators: =, ==, !=, <>, >, >=, <, <=, contains, ~, in\n * Multiple conditions on separate lines or semicolon-separated\n * Supports template values: category = {{cms.category}}\n */\n\nimport type { CMSFilterCondition, CMSSortConfig, CMSFilterOperator } from './types/cms';\n\n/**\n * Parse sort expression: \"date desc, title asc\"\n * Note: \"asc\" is the default and can be omitted. The serializer outputs \"date\" for ascending.\n */\nexport function parseSortExpression(expr: string): CMSSortConfig | CMSSortConfig[] | undefined {\n if (!expr.trim()) return undefined;\n\n const parts = expr\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean);\n const sorts: CMSSortConfig[] = parts.map((part) => {\n const tokens = part.split(/\\s+/);\n const field = tokens[0] ?? '';\n const order = tokens[1]?.toLowerCase() === 'desc' ? 'desc' : 'asc';\n return { field, order };\n });\n\n return sorts.length === 1 ? (sorts[0] as CMSSortConfig) : sorts;\n}\n\n/**\n * Serialize sort config back to expression\n */\nexport function serializeSortExpression(sort: CMSSortConfig | CMSSortConfig[] | undefined): string {\n if (!sort) return '';\n const sorts = Array.isArray(sort) ? sort : [sort];\n return sorts.map((s) => `${s.field}${s.order === 'desc' ? ' desc' : ''}`).join(', ');\n}\n\n/**\n * Parse filter expression: \"featured = true; price > 100\"\n */\nexport function parseFilterExpression(\n expr: string,\n): CMSFilterCondition | CMSFilterCondition[] | Record<string, unknown> | undefined {\n if (!expr.trim()) return undefined;\n\n // Split by newline or semicolon\n const lines = expr\n .split(/[;\\n]/)\n .map((l) => l.trim())\n .filter(Boolean);\n const conditions: CMSFilterCondition[] = [];\n\n for (const line of lines) {\n const condition = parseFilterLine(line);\n if (condition) conditions.push(condition);\n }\n\n if (conditions.length === 0) return undefined;\n\n // Single simple equality can use shorthand: { field: value }\n const first = conditions[0];\n if (conditions.length === 1 && first && (!first.operator || first.operator === 'eq')) {\n return { [first.field]: first.value };\n }\n\n return conditions.length === 1 && first ? first : conditions;\n}\n\nfunction parseFilterLine(line: string): CMSFilterCondition | null {\n // Match: field operator value\n // Operators listed longest-first to avoid partial matches (e.g., gte before gt)\n const match = line.match(/^(\\w+)\\s*(==|!=|<>|>=|<=|=|>|<|contains|~|in|gte|lte|neq|gt|lt|eq)\\s*(.+)$/i);\n if (!match) return null;\n\n // The regex matched (guarded above), so groups 1\u20133 are present; default for the type system.\n const field = match[1] ?? '';\n const op = match[2] ?? '';\n const rawValue = match[3] ?? '';\n const operator = normalizeOperator(op);\n const value = parseValue(rawValue.trim(), operator);\n\n // For simple equality, we can omit operator\n if (operator === 'eq') {\n return { field, value };\n }\n\n return { field, operator, value };\n}\n\nfunction normalizeOperator(op: string): CMSFilterOperator {\n const normalized = op.toLowerCase();\n const map: Record<string, CMSFilterOperator> = {\n '=': 'eq',\n '==': 'eq',\n eq: 'eq',\n '!=': 'neq',\n '<>': 'neq',\n neq: 'neq',\n '>': 'gt',\n gt: 'gt',\n '>=': 'gte',\n gte: 'gte',\n '<': 'lt',\n lt: 'lt',\n '<=': 'lte',\n lte: 'lte',\n contains: 'contains',\n '~': 'contains',\n in: 'in',\n };\n return map[normalized] || 'eq';\n}\n\nfunction parseValue(raw: string, operator: CMSFilterOperator): unknown {\n // Template expression - keep as string\n if (raw.startsWith('{{') && raw.endsWith('}}')) {\n return raw;\n }\n\n // Handle 'in' operator - comma separated list\n if (operator === 'in') {\n return raw.split(',').map((v) => parseScalarValue(v.trim()));\n }\n\n return parseScalarValue(raw);\n}\n\nfunction parseScalarValue(raw: string): unknown {\n // Boolean\n if (raw.toLowerCase() === 'true') return true;\n if (raw.toLowerCase() === 'false') return false;\n\n // Number\n const num = Number(raw);\n if (!Number.isNaN(num) && raw !== '') return num;\n\n // String (strip quotes if present)\n if ((raw.startsWith('\"') && raw.endsWith('\"')) || (raw.startsWith(\"'\") && raw.endsWith(\"'\"))) {\n return raw.slice(1, -1);\n }\n\n return raw;\n}\n\n/**\n * Serialize filter config back to expression\n */\nexport function serializeFilterExpression(\n filter: CMSFilterCondition | CMSFilterCondition[] | Record<string, unknown> | undefined,\n): string {\n if (!filter) return '';\n\n // Simple object filter: { featured: true }\n if (!Array.isArray(filter) && !isFilterCondition(filter)) {\n return Object.entries(filter)\n .map(([field, value]) => `${field} = ${serializeValue(value)}`)\n .join('\\n');\n }\n\n // Array or single condition\n const conditions = Array.isArray(filter) ? filter : [filter as CMSFilterCondition];\n return conditions\n .map((c) => {\n const op = c.operator || 'eq';\n const opStr = operatorToString(op);\n const valStr =\n op === 'in' && Array.isArray(c.value)\n ? c.value.map((v) => serializeValue(v)).join(', ')\n : serializeValue(c.value);\n return `${c.field} ${opStr} ${valStr}`;\n })\n .join('\\n');\n}\n\nfunction operatorToString(op: CMSFilterOperator): string {\n const map: Record<CMSFilterOperator, string> = {\n eq: '=',\n neq: '!=',\n gt: '>',\n gte: '>=',\n lt: '<',\n lte: '<=',\n contains: 'contains',\n in: 'in',\n };\n return map[op] || '=';\n}\n\nfunction isFilterCondition(obj: unknown): obj is CMSFilterCondition {\n return typeof obj === 'object' && obj !== null && 'field' in obj;\n}\n\nfunction serializeValue(value: unknown): string {\n if (typeof value === 'string') {\n // Template or simple alphanumeric - no quotes needed\n if (value.startsWith('{{') || /^[\\w-]+$/.test(value)) return value;\n return `\"${value}\"`;\n }\n return String(value);\n}\n", "/**\n * Href reference utilities \u2014 shared helpers for walking a node tree and\n * rewriting `href` strings that point at an internal page.\n *\n * Used by the slug/page-rename flow on the server (cascade rewrite across\n * pages + components) and unit-tested in isolation. Pure \u2014 no fs.\n *\n * Matching rules for a single href string `value` vs. `oldHref`:\n * - exact match: `value === oldHref`\n * - prefix match: `value` starts with `oldHref + \"/\"`, `oldHref + \"?\"`,\n * or `oldHref + \"#\"` (catches deep links, query strings, fragments)\n *\n * Non-string href values (e.g. LinkMapping objects on a link node) are\n * skipped \u2014 those reference scopes/CMS items, not page slugs.\n */\n\nfunction rewriteHref(value: string, oldHref: string, newHref: string): string | null {\n if (value === oldHref) return newHref;\n if (value.startsWith(`${oldHref}/`) || value.startsWith(`${oldHref}?`) || value.startsWith(`${oldHref}#`)) {\n return newHref + value.substring(oldHref.length);\n }\n return null;\n}\n\n/**\n * Rewrite every `href: \"<oldHref>\"` (or `oldHref`-prefixed) string inside\n * `node` to point at `newHref`. Returns true if any references were\n * rewritten. Mutates `node` in place.\n *\n * Walks `children` recursively (array or single object) and any object-valued\n * field on the node (covers component-prop-trees, nested structure, etc.).\n */\nexport function rewriteHrefRefs(node: unknown, oldHref: string, newHref: string): boolean {\n if (!node || typeof node !== 'object') return false;\n if (!oldHref || oldHref === newHref) return false;\n\n let changed = false;\n const n = node as Record<string, unknown>;\n\n if (typeof n.href === 'string') {\n const rewritten = rewriteHref(n.href, oldHref, newHref);\n if (rewritten !== null) {\n n.href = rewritten;\n changed = true;\n }\n }\n\n for (const key of Object.keys(n)) {\n if (key === 'href') continue;\n const v = n[key];\n if (Array.isArray(v)) {\n for (const item of v) {\n if (item && typeof item === 'object') {\n if (rewriteHrefRefs(item, oldHref, newHref)) changed = true;\n }\n }\n } else if (v && typeof v === 'object') {\n if (rewriteHrefRefs(v, oldHref, newHref)) changed = true;\n }\n }\n\n return changed;\n}\n\n/**\n * Count how many href references in `node` would be rewritten by\n * rewriteHrefRefs(node, href, \u2026). Does not mutate.\n */\nexport function countHrefRefs(node: unknown, href: string): number {\n if (!node || typeof node !== 'object' || !href) return 0;\n\n let count = 0;\n const n = node as Record<string, unknown>;\n\n if (typeof n.href === 'string' && rewriteHref(n.href, href, '__x__') !== null) {\n count++;\n }\n\n for (const key of Object.keys(n)) {\n if (key === 'href') continue;\n const v = n[key];\n if (Array.isArray(v)) {\n for (const item of v) {\n if (item && typeof item === 'object') count += countHrefRefs(item, href);\n }\n } else if (v && typeof v === 'object') {\n count += countHrefRefs(v, href);\n }\n }\n\n return count;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA;;;ACmBO,SAAS,2BAA2B,UAAoC;AAC7E,MAAI,CAAC,SAAU,QAAO;AAGtB,MAAI,UAAU,YAAY,SAAS,MAAM;AACvC,WAAO;AAAA,EACT;AAGA,MAAI,eAAe,YAAY,SAAS,WAAW;AACjD,QAAI,eAAe,SAAS,aAAa,SAAS,UAAU,WAAW;AACrE,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAMO,SAAS,YAAY,UAAiD;AAC3E,MAAI,CAAC,SAAU,QAAO;AAGtB,MAAI,UAAU,YAAY,SAAS,MAAM;AACvC,WAAO,SAAS;AAAA,EAClB;AAGA,MAAI,eAAe,YAAY,SAAS,WAAW;AACjD,QAAI,eAAe,SAAS,WAAW;AACrC,YAAM,YAAY,SAAS,UAAU;AACrC,UAAI,WAAW;AACb,eAAO;AAAA,MACT;AAAA,IAEF,OAAO;AAAA,IAEP;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,0BAA0B,MAAqB,UAAyC;AACtG,QAAM,WAAW,YAAY,QAAQ;AACrC,MAAI,CAAC,SAAU,QAAO;AAGtB,QAAM,YAAY,OAAO,SAAS,WAAW,aAAa,IAAI,IAAI;AAGlE,MAAI,UAAU,WAAW,KAAK,UAAU,CAAC,MAAM,GAAG;AAChD,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,MAAM;AAAA,IACR;AAAA,EACF;AAGA,MAAI,UAAyB;AAC7B,MAAI,SAA0C;AAC9C,MAAI,YAAY;AAGhB,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,aAAa,UAAU,CAAC;AAC9B,QAAI,eAAe,OAAW,QAAO;AAErC,QAAI,CAAC,WAAW,EAAE,cAAc,YAAY,CAAC,MAAM,QAAQ,QAAQ,QAAQ,GAAG;AAC5E,aAAO;AAAA,IACT;AAEA,QAAI,OAAO,MAAM,UAAU,KAAK,aAAa,KAAK,cAAc,QAAQ,SAAS,QAAQ;AACvF,aAAO;AAAA,IACT;AAEA,aAAS;AACT,UAAM,QAAQ,QAAQ,SAAS,UAAU;AACzC,QAAI,UAAU,UAAa,OAAO,UAAU,UAAU;AACpD,aAAO;AAAA,IACT;AACA,cAAU;AACV,gBAAY;AAGZ,QAAI,MAAM,UAAU,SAAS,GAAG;AAC9B,aAAO,EAAE,QAAQ,OAAO,YAAY,MAAM,QAAQ;AAAA,IACpD;AAAA,EACF;AAGA,MAAI,UAAU,aAAa,GAAG;AAC5B,WAAO,EAAE,QAAQ,OAAO,WAAW,MAAM,QAAQ;AAAA,EACnD;AAEA,SAAO;AACT;AAWO,SAAS,0BAA0B,UAAoB,QAAoC;AAChG,QAAM,OAAO,YAAY,QAAQ;AACjC,MAAI,CAAC,KAAM,QAAO;AAGlB,QAAM,QAA+C,CAAC,EAAE,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC;AAC/E,SAAO,MAAM,SAAS,GAAG;AACvB,UAAM,EAAE,MAAM,KAAK,IAAI,MAAM,IAAI;AACjC,QAAI,SAAS,OAAQ,QAAO;AAC5B,UAAM,WAAW,cAAc,OAAO,KAAK,WAAW;AACtD,QAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACxC,cAAM,QAAQ,SAAS,CAAC;AACxB,YAAI,SAAS,OAAO,UAAU,UAAU;AACtC,gBAAM,KAAK,EAAE,MAAM,OAAwB,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,8BACd,MAC2C;AAC3C,MAAI,CAAC,QAAQ,OAAO,SAAS,UAAU;AACrC,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,SAAS,UAAU;AAC5B,WAAO;AAAA,EACT;AAGA,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,MAAM,SAAS,OAAQ,KAAK,MAA6B;AAC/D,QAAM,QAAQ,WAAW,OAAQ,KAAa,QAAQ;AACtD,QAAM,YAAY,eAAe,OAAQ,KAAa,YAAY;AAClE,QAAM,cAAc,QAAQ,OAAO,KAAK,KAAK;AAC7C,QAAM,WAAW,cAAc,OAAO,KAAK,WAAW;AAGtD,MAAI;AACJ,MAAI,UAAU;AACZ,QAAI,MAAM,QAAQ,QAAQ,GAAG;AAC3B,0BAAoB,SAAS;AAAA,QAAI,CAAC,UAChC,OAAO,UAAU,WAAW,QAAS,8BAA8B,KAAK;AAAA,MAC1E;AAAA,IACF,WAAW,OAAO,aAAa,UAAU;AACvC,0BAAoB;AAAA,IACtB,WAAW,OAAO,aAAa,YAAY,UAAU,UAAU;AAC7D,0BAAoB,8BAA8B,QAAyB;AAAA,IAC7E;AAAA,EACF;AAEA,QAAM,SAAiC,EAAE,KAAK;AAC9C,MAAI,QAAQ,QAAW;AACrB,IAAC,OAA4B,MAAM;AAAA,EACrC;AACA,MAAI,UAAU,QAAW;AACvB,IAAC,OAAe,QAAQ;AAAA,EAC1B;AACA,MAAI,cAAc,QAAW;AAC3B,IAAC,OAAe,YAAY;AAAA,EAC9B;AACA,MAAI,gBAAgB,QAAW;AAC7B,IAAC,OAAwB,KAAK;AAAA,EAChC;AACA,MAAI,sBAAsB,QAAW;AACnC,IAAC,OAAmD,WAAW;AAAA,EACjE;AACA,SAAO;AACT;AAKO,SAAS,wBACd,QAMA,gBACA,aACQ;AACR,MAAI,OAAO,eAAe,UAAa,OAAO,cAAc,GAAG;AAE7D,WAAO,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,UAAU,GAAG,eAAe,MAAM;AAAA,EACvE;AAEA,MAAI,OAAO,gBAAgB,OAAO;AAChC,UAAM,YAAY,OAAO,eAAe;AACxC,UAAM,YAAY,YAAY,IAAI,SAAS;AAC3C,QAAI,WAAW;AACb,YAAM,aAAa,eAAe,UAAU,CAAC,UAAkC,UAAU,SAAS;AAClG,UAAI,cAAc,GAAG;AACnB,eAAO,aAAa;AAAA,MACtB;AAAA,IACF;AAEA,WAAO,eAAe;AAAA,EACxB;AAEA,MAAI,OAAO,iBAAiB,OAAO;AACjC,UAAM,aAAa,OAAO,gBAAgB;AAC1C,UAAM,aAAa,YAAY,IAAI,UAAU;AAC7C,QAAI,YAAY;AACd,YAAM,cAAc,eAAe,UAAU,CAAC,UAAkC,UAAU,UAAU;AACpG,UAAI,eAAe,GAAG;AACpB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAGA,MAAI,OAAO,gBAAgB,QAAW;AACpC,WAAO,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,WAAW,GAAG,eAAe,MAAM;AAAA,EACxE;AAEA,SAAO,eAAe;AACxB;AAKO,SAAS,oBAAoB,UAA6C;AAC/E,MAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,WAAO;AAAA,EACT;AAGA,QAAM,MAAM;AACZ,QAAM,YAAY,YAAY,QAAQ,IAAI,WAAW,QAAQ,OAAO,IAAI,WAAW;AACnF,QAAM,WAAW,WAAW,OAAO,OAAO,IAAI,UAAU,YAAY,IAAI,SAAS;AACjF,QAAM,UAAU,UAAU,QAAQ,IAAI,SAAS,QAAQ,OAAO,IAAI,SAAS;AAE3E,SAAO,aAAa,YAAY;AAClC;AAKO,SAAS,YAAY,MAA6B;AACvD,MAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AACxB,WAAO;AAAA,EACT;AAGA,SAAO,KAAK,MAAM,CAAC,SAAyB,OAAO,SAAS,YAAY,QAAQ,CAAC;AACnF;AAKO,SAAS,iBAAiB,QAA6D;AAC5F,MAAI,CAAC,OAAQ,QAAO;AAGpB,MAAI,UAAU,OAAQ,QAAO;AAG7B,MAAI,eAAe,QAAQ;AACzB,WAAO,OAAO,OAAO,cAAc,YAAY,OAAO,cAAc;AAAA,EACtE;AAEA,SAAO;AACT;AAKO,SAAS,sBAAsB,QAAkE;AACtG,MAAI,CAAC,OAAQ,QAAO;AAWpB,QAAM,WAAY,OAAe;AACjC,SACE,UAAU,WACT,SAAS,UACR,eAAe,UACf,aAAa,UACb,aAAa,UACb,aAAa,WACb,aAAa,YACb,aAAa,YACb,aAAa;AAAA,EACb,aAAa;AAEnB;AAKO,SAAS,kBAAkB,QAA+E;AAC/G,MAAI,CAAC,OAAQ,QAAO;AAEpB,MAAI,iBAAiB,MAAM,GAAG;AAC5B,UAAM,WAAW,YAAY,MAAM;AACnC,WAAO,YAAY,cAAc,WAC5B,SAAS,YAA0D,OACpE;AAAA,EACN;AAEA,MAAI,sBAAsB,MAAM,GAAG;AACjC,WAAO,cAAc,SAAU,OAAO,YAA0D,OAAO;AAAA,EACzG;AAEA,SAAO;AACT;AAKO,SAAS,kBACd,QACA,UACM;AACN,MAAI,CAAC,OAAQ;AAEb,MAAI,iBAAiB,MAAM,GAAG;AAC5B,UAAM,WAAW,YAAY,MAAM;AACnC,QAAI,YAAY,cAAc,UAAU;AACtC,eAAS,WAAW;AAAA,IACtB;AAAA,EACF,WAAW,sBAAsB,MAAM,GAAG;AACxC,QAAI,cAAc,QAAQ;AACxB,aAAO,WAAW;AAAA,IACpB;AAAA,EACF;AACF;;;AC/XA,IAAM,mBAAmB,oBAAI,IAAI;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAKM,SAAS,gBAAgB,cAA+B;AAC7D,SAAO,iBAAiB,IAAI,YAAY;AAC1C;AAKO,SAAS,qBAA+B;AAC7C,SAAO,MAAM,KAAK,gBAAgB;AACpC;;;ACDA,SAAS,mBAAmB,WAAgB,cAAoB,CAAC,CAAC,GAAgB;AAChF,MAAI,CAAC,aAAa,OAAO,cAAc,SAAU,QAAO;AAExD,MAAI,aAAa,SAAS,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,YAAY,SAAS,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,WAAS,IAAI,GAAG,IAAI,UAAU,SAAS,QAAQ,KAAK;AAClD,UAAM,QAAQ,UAAU,SAAS,CAAC;AAGlC,QAAI,OAAO,UAAU,SAAU;AAE/B,QAAI,aAAa,KAAK,GAAG;AACvB,aAAO,CAAC,GAAG,aAAa,CAAC;AAAA,IAC3B;AAEA,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK,GAAG;AAC/D,YAAM,QAAQ,mBAAmB,OAAO,CAAC,GAAG,aAAa,CAAC,CAAC;AAC3D,UAAI,MAAO,QAAO;AAAA,IACpB;AAAA,EACF;AAEA,SAAO;AACT;AAqBA,SAAS,sBACP,aACA,aACA,yBACA,mBACM;AACN,MAAI,CAAC,eAAe,YAAY,WAAW,GAAG;AAC5C,WAAO;AAAA,EACT;AAGA,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AAKA,MAAI,iBAAiB;AACrB,MAAI,gBAAgB;AAEpB,MAAI,qBAAqB,kBAAkB,SAAS,GAAG;AAGrD,UAAM,iBAAiB,kBAAkB,kBAAkB,SAAS,CAAC;AACrE,UAAM,mBAAmB,gBAAgB;AACzC,UAAM,wBAAwB,MAAM,QAAQ,gBAAgB,IAAI,iBAAiB,SAAS;AAE1F,QAAI,wBAAwB,GAAG;AAC7B,YAAM,eAAe,mBAAmB,WAAW;AAEnD,UAAI,gBAAgB,aAAa,SAAS,GAAG;AAE3C,cAAM,cAAc,aAAa,SAAS;AAC1C,YAAI,YAAY,SAAS,aAAa;AACpC,gBAAM,qBAAqB,YAAY,WAAW,KAAK;AACvD,gBAAM,cAAc,aAAa,WAAW,KAAK;AAEjD,cAAI,qBAAqB,aAAa;AAIpC,6BAAiB,wBAAwB;AACzC,4BAAgB;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIA,MAAI,eAAqB,CAAC,CAAC;AAC3B,MAAI,OAAyC;AAE7C,WAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,UAAM,gBAAgB,YAAY,CAAC,KAAK;AACxC,QAAI,aAAa;AAIjB,QAAI,MAAM,iBAAiB,iBAAiB,GAAG;AAC7C,oBAAc;AAAA,IAChB;AAEA,QAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAG;AAEjC,UAAM,WAAW,KAAK;AACtB,UAAM,YAAY,SAAS,aAAa;AAGxC,QAAI,gBAAgB,IAAI,GAAG;AACzB,YAAM,gBAAgB,KAAK;AAC3B,YAAM,eAAe,yBAAyB,MAAM,aAAa;AAEjE,UAAI,cAAc,WAAW,WAAW;AACtC,cAAM,WAAW,mBAAmB,aAAa,UAAU,SAAS;AAEpE,YAAI,YAAY,SAAS,SAAS,GAAG;AAInC,gBAAM,SAAS,SAAS,MAAM,GAAG,EAAE;AACnC,gBAAM,YAAY,SAAS,SAAS,SAAS,CAAC,KAAK;AAGnD,yBAAe,CAAC,GAAG,cAAc,GAAG,QAAQ,YAAY,UAAU;AAAA,QACpE,OAAO;AAEL,yBAAe,CAAC,GAAG,cAAc,UAAU;AAAA,QAC7C;AAAA,MACF,OAAO;AAEL,uBAAe,CAAC,GAAG,cAAc,UAAU;AAAA,MAC7C;AAAA,IACF,OAAO;AAEL,qBAAe,CAAC,GAAG,cAAc,UAAU;AAAA,IAC7C;AAIA,WAAO,OAAO,cAAc,WAAW,SAAY;AAAA,EACrD;AAEA,SAAO;AACT;AAiCO,SAAS,8BAA8B,mBAAiE;AAC7G,MAAI,CAAC,qBAAqB,kBAAkB,WAAW,EAAG,QAAO;AACjE,MAAI,aACF,kBAAkB,CAAC,GAAG,iCAAiC,kBAAkB,CAAC,GAAG,yBAAyB;AACxG,MAAI,CAAC,WAAY,QAAO;AACxB,WAAS,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;AACjD,UAAM,QAAQ,kBAAkB,CAAC;AACjC,UAAM,OAAO,OAAO,iCAAiC,OAAO;AAC5D,QAAI,MAAM;AACR,mBAAa,CAAC,GAAG,YAAY,GAAG,KAAK,MAAM,CAAC,CAAC;AAAA,IAC/C;AAAA,EACF;AACA,SAAO;AACT;AA4BO,SAAS,2BACd,UACA,yBACA,mBACgB;AAChB,QAAM,WAAW,YAAY,QAAQ;AACrC,MAAI,CAAC,SAAU,QAAO,CAAC;AAIvB,QAAM,yBAAyB,8BAA8B,iBAAiB;AAE9E,QAAM,SAAyB,CAAC;AAMhC,QAAM,4BACJ,qBAAqB,kBAAkB,SAAS,IAC5C,MAAM,QAAQ,kBAAkB,kBAAkB,SAAS,CAAC,GAAG,gBAAgB,IAC7E,kBAAkB,kBAAkB,SAAS,CAAC,EAAG,iBAAkB,SACnE,IACF;AAEN,WAAS,SAAS,MAAqB,cAAoB,CAAC,CAAC,GAAS;AAKpE,UAAM,uBAAuB,2BAA4B,qBAAqB,kBAAkB,SAAS;AACzG,UAAM,eAAe,uBACjB,sBAAsB,aAAa,UAAU,yBAAyB,iBAAiB,IACvF;AAIJ,UAAM,uBAAuB,yBACzB,CAAC,GAAG,wBAAwB,GAAG,aAAa,MAAM,CAAC,CAAC,IACpD;AAEJ,UAAM,oBACJ,aAAa,IAAI,KAAK,4BAA4B,IAC9C,wBAAwB,sBAAsB,yBAAyB,IACvE;AAEN,WAAO,KAAK;AAAA,MACV,MAAM;AAAA;AAAA,MACN,cAAc;AAAA;AAAA,MACd,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,IACnD,CAAC;AAKD,QAAI,YAAY,IAAI,GAAG;AACrB,WAAK,SAAS,QAAQ,CAAC,OAAO,UAAU;AACtC,YACE,OAAO,UAAU,YACjB,UAAU,SACT,SAAS,SACR,eAAe,SACf,UAAU,SACV,SAAS,SACT,UAAU,SACV,iBAAiB,KAAK,KACtB,cAAc,KAAK,KACnB,WAAW,KAAK,KACf,0BAA0B,aAAa,KAAK,IAC/C;AACA,gBAAM,YAAY,CAAC,GAAG,aAAa,KAAK;AACxC,mBAAS,OAAwB,SAAS;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,QAAQ;AACjB,SAAO;AACT;AAQA,SAAS,wBAAwB,kBAAwB,uBAAuC;AAC9F,MAAI,yBAAyB,KAAK,iBAAiB,WAAW,EAAG,QAAO,CAAC;AACzE,QAAM,SAAS,iBAAiB,MAAM,GAAG,EAAE;AAC3C,QAAM,UAAU,iBAAiB,iBAAiB,SAAS,CAAC,KAAK;AACjE,QAAM,MAAc,CAAC;AACrB,WAAS,IAAI,GAAG,IAAI,uBAAuB,KAAK;AAC9C,QAAI,KAAK,CAAC,GAAG,QAAQ,UAAU,CAAC,CAAC;AAAA,EACnC;AACA,SAAO;AACT;AAaO,SAAS,wBACd,oBACA,yBACA,mBACgB;AAChB,QAAM,SAAyB,CAAC;AAGhC,QAAM,yBAAyB,8BAA8B,iBAAiB;AAE9E,QAAM,4BACJ,qBAAqB,kBAAkB,SAAS,IAC5C,MAAM,QAAQ,kBAAkB,kBAAkB,SAAS,CAAC,GAAG,gBAAgB,IAC7E,kBAAkB,kBAAkB,SAAS,CAAC,EAAG,iBAAkB,SACnE,IACF;AAEN,WAAS,SAAS,MAAqB,cAAoB,CAAC,CAAC,GAAS;AAGpE,UAAM,uBAAuB,2BAA4B,qBAAqB,kBAAkB,SAAS;AACzG,UAAM,eAAe,uBACjB,sBAAsB,aAAa,oBAAoB,yBAAyB,iBAAiB,IACjG;AAGJ,UAAM,uBAAuB,yBACzB,CAAC,GAAG,wBAAwB,GAAG,aAAa,MAAM,CAAC,CAAC,IACpD;AAEJ,UAAM,oBACJ,aAAa,IAAI,KAAK,4BAA4B,IAC9C,wBAAwB,sBAAsB,yBAAyB,IACvE;AAEN,WAAO,KAAK;AAAA,MACV,MAAM;AAAA,MACN,cAAc;AAAA,MACd,GAAI,oBAAoB,EAAE,kBAAkB,IAAI,CAAC;AAAA,IACnD,CAAC;AAGD,QAAI,YAAY,IAAI,GAAG;AACrB,WAAK,SAAS,QAAQ,CAAC,OAAO,UAAU;AACtC,YACE,OAAO,UAAU,YACjB,UAAU,SACT,SAAS,SACR,eAAe,SACf,UAAU,SACV,SAAS,SACT,UAAU,SACV,iBAAiB,KAAK,KACtB,cAAc,KAAK,KACnB,WAAW,KAAK,KAChB,aAAa,KAAK,IACpB;AACA,gBAAM,YAAY,CAAC,GAAG,aAAa,KAAK;AACxC,mBAAS,OAAwB,SAAS;AAAA,QAC5C;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,WAAS,kBAAkB;AAC3B,SAAO;AACT;AAKO,SAAS,aAAa,WAA2B,YAA4C;AAClG,SAAO,UAAU;AAAA,IACf,CAAC,SAAS,KAAK,KAAK,WAAW,WAAW,UAAU,KAAK,KAAK,MAAM,CAAC,KAAK,QAAQ,QAAQ,WAAW,GAAG,CAAC;AAAA,EAC3G;AACF;AAKO,SAAS,iBAAiB,WAA2B,YAAkC;AAC5F,QAAM,YAA4B,CAAC;AAEnC,WAAS,IAAI,GAAG,KAAK,WAAW,QAAQ,KAAK;AAC3C,UAAM,eAAe,WAAW,MAAM,GAAG,CAAC;AAC1C,UAAM,QAAQ,aAAa,WAAW,YAAY;AAClD,QAAI,OAAO;AACT,gBAAU,KAAK,KAAK;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;;;AChdA;;;ACCA,SAAS,SAAS;AAMX,IAAM,0BAA0B;AAKhC,IAAM,wBAAwB,EAClC,OAAO,EACP,IAAI,GAAG,2BAA2B,EAClC,MAAM,yBAAyB,4EAA4E;AAMvG,SAAS,qBAAqB,IAAgD;AACnF,QAAM,SAAS,sBAAsB,UAAU,EAAE;AACjD,MAAI,OAAO,SAAS;AAClB,WAAO,EAAE,OAAO,KAAK;AAAA,EACvB;AACA,SAAO,EAAE,OAAO,OAAO,OAAO,OAAO,MAAM,OAAO,CAAC,GAAG,QAAQ;AAChE;AAKO,SAAS,oBAAoB,IAAqB;AACvD,SAAO,wBAAwB,KAAK,EAAE;AACxC;;;ACjCA,SAAS,KAAAA,UAAS;AAMX,IAAM,sBAAsBC,GAAE,KAAK,gBAAoD;AAEvF,IAAM,sBAAsBA,GAAE,OAAO;AAAA,EAC1C,OAAOA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACvB,MAAMA,GAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,IAAM,4BAA4BA,GAAE,OAAO;AAAA,EAChD,MAAMA,GAAE,KAAK,CAAC,aAAa,MAAM,CAAC;AAAA,EAClC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAOA,GAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAEM,IAAM,8BAA8BA,GAAE,OAAO;AAAA,EAClD,MAAMA,GAAE,KAAK,CAAC,aAAa,MAAM,CAAC;AAAA,EAClC,MAAMA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACtB,KAAKA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AACpC,CAAC;AAEM,IAAM,sBAAsBA,GAAE,OAAO;AAAA;AAAA;AAAA,EAG1C,SAASA,GAAE,MAAM,2BAA2B,EAAE,SAAS;AAAA,EACvD,UAAUA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC;AAAA;AAAA,EAEhD,kBAAkBA,GAAE,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,SAAS;AAAA,EACnE,cAAc;AAAA,EACd,gBAAgBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACvC,gBAAgBA,GAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC;AAAA,EACvC,YAAYA,GAAE,OAAO,EAAE,SAAS;AAClC,CAAC;AAEM,IAAM,2BAA2BA,GAAE,OAAO;AAAA,EAC/C,IAAIA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACpB,QAAQ;AAAA,EACR,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,MAAMA,GAAE,OAAO;AAAA,EACf,cAAc,oBAAoB,SAAS;AAC7C,CAAC;AAEM,IAAM,gBAAgBA,GAAE,OAAO;AAAA,EACpC,KAAKA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EACrB,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,WAAWA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC3B,MAAMA,GAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACnC,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,YAAYA,GAAE,OAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,YAAYA,GAAE,OAAO,EAAE,SAAS;AAAA,EAChC,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQA,GAAE,MAAM,wBAAwB,EAAE,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,sBAAsB,UAAuC;AACpE,SAAO,SAAS,OAAO,IAAI,CAAC,SAAS;AAAA,IACnC,MAAM,IAAI,KAAK,KAAK,GAAG,KAAK;AAAA,IAC5B,SAAS,IAAI;AAAA,IACb,MAAM;AAAA,EACR,EAAE;AACJ;AAEO,SAAS,gBAAgB,MAA0C;AACxE,QAAM,SAAS,cAAc,UAAU,IAAI;AAC3C,MAAI,OAAO,SAAS;AAClB,WAAO,EAAE,OAAO,MAAM,MAAM,OAAO,KAAgB;AAAA,EACrD;AACA,SAAO,EAAE,OAAO,OAAO,QAAQ,sBAAsB,OAAO,KAAK,EAAE;AACrE;;;AC1EA,SAAS,KAAAC,UAAS;AAOX,IAAM,uBAAuBC,GAAE,KAAK,gBAAgB;AAEpD,IAAM,uBAAuBA,GAAE,OAAO;AAAA,EAC3C,OAAOA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACpC,YAAYA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACzC,KAAKA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAClC,QAAQA,GAAE,MAAMA,GAAE,OAAO,CAAC,EAAE,SAAS;AACvC,CAAC;AAEM,IAAM,wBAAwBA,GAAE,OAAO;AAAA,EAC5C,MAAM,qBAAqB,SAAS;AAAA,EACpC,OAAO,qBAAqB,SAAS;AACvC,CAAC;AAEM,IAAM,0BAA0BA,GAAE,OAAO;AAAA;AAAA,EAE9C,SAASA,GAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;AAAA,EAC/B,aAAa,qBAAqB,SAAS;AAAA,EAC3C,SAASA,GAAE,OAAOA,GAAE,OAAO,GAAG,qBAAqB,EAAE,SAAS;AAAA,EAC9D,OAAOA,GAAE,OAAOA,GAAE,OAAO,GAAG,qBAAqB,EAAE,SAAS;AAC9D,CAAC;AAED,SAASC,uBAAsB,UAAuC;AACpE,SAAO,SAAS,OAAO,IAAI,CAAC,SAAS;AAAA,IACnC,MAAM,IAAI,KAAK,KAAK,GAAG,KAAK;AAAA,IAC5B,SAAS,IAAI;AAAA,IACb,MAAM;AAAA,EACR,EAAE;AACJ;AAEO,SAAS,0BAA0B,MAAoD;AAC5F,QAAM,SAAS,wBAAwB,UAAU,IAAI;AACrD,MAAI,OAAO,SAAS;AAClB,WAAO,EAAE,OAAO,MAAM,MAAM,OAAO,KAA0B;AAAA,EAC/D;AACA,SAAO,EAAE,OAAO,OAAO,QAAQA,uBAAsB,OAAO,KAAK,EAAE;AACrE;;;ACvBA,IAAM,YAA4C,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,EAAE;AAGnF,IAAM,WAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,WAAW;AAAA,EACX,KAAK;AAAA,EACL,QAAQ;AACV;AAGA,SAAS,aAAuC;AAC9C,SAAO,EAAE,OAAO,CAAC,GAAG,YAAY,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,EAAE;AAC1D;AAEA,SAAS,WAAW,GAAmB,GAAmC;AACxE,SAAO,UAAU,CAAC,IAAI,UAAU,CAAC,IAAI,IAAI;AAC3C;AAGA,SAAS,UAAU,OAAwC;AACzD,MAAI,MAAM,KAAM,QAAO,MAAM;AAC7B,SAAO,MAAM,QAAQ,WAAW;AAClC;AAEA,SAAS,WAAW,QAAqD;AACvE,QAAM,SAAS,WAAW;AAC1B,aAAW,SAAS,QAAQ;AAC1B,UAAM,QAAQ,MAAM;AACpB,QAAI,CAAC,MAAO;AACZ,eAAW,QAAQ,OAAO,KAAK,MAAM,GAA+B;AAClE,YAAM,WAAW,MAAM,IAAI;AAC3B,UAAI,SAAU,QAAO,IAAI,EAAE,KAAK,GAAG,QAAQ;AAAA,IAC7C;AAAA,EACF;AAEA,aAAW,QAAQ,OAAO,KAAK,MAAM,GAA+B;AAClE,WAAO,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,IAAI,CAAC,CAAC;AAAA,EAC1C;AACA,SAAO;AACT;AAEA,IAAM,iBAAiB;AAOhB,SAAS,yBAAyB,SAAiB,OAAwB;AAChF,MAAI,YAAY,MAAO,QAAO;AAC9B,MAAI,CAAC,QAAQ,SAAS,GAAG,EAAG,QAAO;AACnC,QAAM,SAAS,QACZ,MAAM,GAAG,EACT,IAAI,CAAC,YAAY,QAAQ,QAAQ,gBAAgB,MAAM,CAAC,EACxD,KAAK,IAAI;AACZ,SAAO,IAAI,OAAO,IAAI,MAAM,GAAG,EAAE,KAAK,KAAK;AAC7C;AAGO,SAAS,4BAA4B,UAAgC,OAAwB;AAClG,SAAO,CAAC,CAAC,YAAY,SAAS,KAAK,CAAC,YAAY,yBAAyB,SAAS,KAAK,CAAC;AAC1F;AAeO,SAAS,mBACd,QACA,UACqB;AACrB,QAAM,QAAQ,SAAS,SAAS;AAChC,QAAM,cAAc,SAAS,gBAAgB;AAE7C,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,MACL;AAAA,MACA,MAAM;AAAA,MACN,SAAS;AAAA,MACT,iBAAiB,SAAS,QAAQ;AAAA,MAClC,OAAO,WAAW;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,SAA4B,CAAC;AAEnC,QAAM,cAAc,OAAO,YAAY,KAAK;AAC5C,MAAI,eAAe,OAAO,SAAS;AACjC,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,OAAO,GAAG;AACzD,UAAI,IAAI,YAAY,MAAM,YAAa,QAAO,KAAK,KAAK;AAAA,IAC1D;AAAA,EACF;AAEA,MAAI,OAAO,SAAS,SAAS,SAAS,SAAS,MAAM,SAAS,GAAG;AAC/D,UAAM,UAAU,IAAI,IAAI,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;AACxE,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,KAAK,GAAG;AACvD,UAAI,QAAQ,IAAI,IAAI,YAAY,CAAC,EAAG,QAAO,KAAK,KAAK;AAAA,IACvD;AAAA,EACF;AAEA,QAAM,cAA8B,OAAO,eAAe;AAC1D,QAAM,WACJ,OAAO,WAAW,IACd,cACA,OAAO,OAAuB,CAAC,KAAK,MAAM,WAAW,KAAK,UAAU,CAAC,CAAC,GAAG,QAAQ;AAEvF,QAAM,UAAU,eAAe,aAAa;AAE5C,SAAO;AAAA,IACL;AAAA,IACA,MAAM,UAAU,UAAU;AAAA,IAC1B;AAAA,IACA,iBAAiB;AAAA,IACjB,OAAO,WAAW,MAAM;AAAA,EAC1B;AACF;AAOO,SAAS,QAAQ,UAA+B,KAA2B;AAChF,MAAI,SAAS,QAAS,QAAO;AAC7B,MAAI,SAAS,SAAS,SAAU,QAAO;AACvC,SAAO,4BAA4B,SAAS,MAAM,SAAS,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE;AAC/E;;;ACpJO,SAAS,UAAa,KAAW;AACtC,SAAO,gBAAgB,GAAG;AAC5B;AAMO,SAAS,KAAK,IAA2B;AAC9C,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AACzD;AAQO,SAAS,oBAA6B;AAK3C,QAAM,YAAY,OAAO,aAAa;AACtC,MAAI,aAAa,UAAU,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG;AACvD,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,SAAS;AAC/B,MAAI,CAAC,cAAe,QAAO;AAG3B,MAAI,cAAc,YAAY,YAAY;AACxC,WAAO;AAAA,EACT;AAGA,MAAI,cAAc,YAAY,SAAS;AACrC,UAAM,YAAa,cAAmC,KAAK,YAAY;AACvE,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,eAAe,SAAS,SAAS;AAAA,EAC1C;AAIA,MAAI,UAA0B;AAC9B,SAAO,SAAS;AACd,QAAI,QAAQ,aAAa,iBAAiB,KAAM,QAAwB,mBAAmB;AACzF,aAAO;AAAA,IACT;AACA,cAAU,QAAQ;AAAA,EACpB;AAEA,SAAO;AACT;AAWO,SAAS,0BAA0B,UAAyB,WAAmB,eAAuB;AAE3G,QAAM,YAAY,OAAO,aAAa,WAAW,aAAa,QAAQ,IAAI;AAG1E,MAAI,WAAgB,SAAS,GAAG;AAC9B,WAAO;AAAA,EACT;AAGA,QAAM,cAAc,cAAc,SAAS;AAC3C,SAAO,mBAAmB,WAAW;AACvC;AAQO,SAAS,uBAAuB,MAAwC;AAC7E,MAAI,CAAC,KAAK,UAAU;AAClB,SAAK,WAAW,CAAC;AAAA,EACnB,WAAW,CAAC,MAAM,QAAQ,KAAK,QAAQ,GAAG;AAExC,SAAK,WAAW,CAAC,KAAK,QAAQ;AAAA,EAChC;AAEF;;;ATPA;;;AU3EO,IAAM,8BAAiD;AAAA,EAC5D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AACT;AAiBO,IAAM,sBAAqF;AAAA,EAChG,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AACX;AAKO,IAAM,yBAAwF;AAAA,EACnG,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,SAAS;AAAA,EACT,cAAc;AAAA,EACd,SAAS;AACX;AAKO,IAAM,6BAA+C;AAAA,EAC1D,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,UAAU;AAAA,EACV,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,oBAAoB;AACtB;AAKO,IAAM,2BAA6C;AAAA,EACxD,YAAY;AAAA,EACZ,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,eAAe;AAAA,EACf,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,UAAU;AAAA,EACV,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,oBAAoB;AACtB;;;ACzHO,SAAS,gBAAgB,OAA0C;AACxE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,oBAAoB,KAAK,MAAM,KAAK,CAAC;AAC9C;AAMO,SAAS,oBAAoB,OAA8B;AAChE,QAAM,QAAQ,MAAM,MAAM,oBAAoB;AAC9C,SAAO,QAAS,MAAM,CAAC,KAAK,OAAQ;AACtC;AAMO,SAAS,wBAAwB,cAA8B;AACpE,SAAO,SAAS,YAAY;AAC9B;AAYO,SAAS,eAAe,OAAe,QAAkE;AAC9G,SAAO,oBAAoB,KAAK,MAAM,SAAS,SAAS,KAAK,IAAI,QAAQ;AAC3E;AAQO,SAAS,qBAAqB,OAAyB,UAA0C;AACtG,MAAI,CAAC,gBAAgB,KAAK,GAAG;AAC3B,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,QAAM,UAAU,oBAAoB,KAAK;AACzC,MAAI,CAAC,SAAS;AACZ,WAAO,OAAO,KAAK;AAAA,EACrB;AAEA,SAAO,SAAS,OAAO,KAAK,OAAO,KAAK;AAC1C;AAQO,SAAS,8BACd,QACA,UACyB;AACzB,QAAM,WAAoC,CAAC;AAE3C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,QAAI,OAAO,UAAU,UAAU;AAC7B,eAAS,GAAG,IAAI,qBAAqB,OAAO,QAAQ;AAAA,IACtD,OAAO;AACL,eAAS,GAAG,IAAI;AAAA,IAClB;AAAA,EACF;AAEA,SAAO;AACT;AAOO,SAAS,4BAA4B,QAA2C;AACrF,QAAM,YAAY,oBAAI,IAAY;AAElC,aAAW,SAAS,OAAO,OAAO,MAAM,GAAG;AACzC,QAAI,gBAAgB,KAAK,GAAG;AAC1B,YAAM,UAAU,oBAAoB,KAAK;AACzC,UAAI,SAAS;AACX,kBAAU,IAAI,OAAO;AAAA,MACvB;AAAA,IACF;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,SAAS;AAC7B;;;AC7EO,SAAS,YACd,UACA,MACA,SACA,SACA,OACU;AACV,SAAO,EAAE,UAAU,MAAM,SAAS,SAAS,MAAM;AACnD;AAKO,SAAS,WAAW,OAAmC;AAC5D,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,cAAc,SAAS,UAAU,SAAS,aAAa;AAC/G;;;AZ2GA;;;AalIA,IAAM,SAAS;AACf,IAAM,SAAS;AACf,IAAM,SAAS;AAGR,SAAS,gBAAgB,OAAiC;AAC/D,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,IAAI,MAAM,KAAK;AACrB,MAAI,OAAO,KAAK,CAAC,EAAG,QAAO;AAC3B,MAAI,OAAO,KAAK,CAAC,EAAG,QAAO;AAC3B,MAAI,OAAO,KAAK,CAAC,EAAG,QAAO;AAC3B,SAAO;AACT;AAKO,SAAS,YAAY,OAAgC;AAC1D,QAAM,IAAI,MAAM,KAAK,EAAE,MAAM,MAAM;AACnC,MAAI,CAAC,EAAG,QAAO;AACf,SAAO;AAAA,IACL,GAAG,MAAM,SAAS,EAAE,CAAC,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG;AAAA,IACzC,GAAG,MAAM,SAAS,EAAE,CAAC,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG;AAAA,IACzC,GAAG,MAAM,SAAS,EAAE,CAAC,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG;AAAA,EAC3C;AACF;AAGO,SAAS,YAAY,OAAgC;AAC1D,QAAM,IAAI,MAAM,KAAK,EAAE,MAAM,MAAM;AACnC,MAAI,CAAC,EAAG,QAAO;AACf,SAAO;AAAA,IACL,GAAG,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;AAAA,IACvC,GAAG,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;AAAA,IACvC,GAAG,MAAM,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG;AAAA,EACzC;AACF;AAKO,SAAS,eAAe,KAAuB;AACpD,SAAO,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC;AAC7E;AAGO,SAAS,eAAe,KAAuB;AACpD,SAAO,OAAO,KAAK,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC;AAC9E;AAKA,SAAS,UAAU,KAAqB;AACtC,QAAM,IAAI,IAAI,QAAQ,KAAK,EAAE;AAC7B,MAAI,EAAE,WAAW,GAAG;AAClB,WAAO,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAAA,EACpD;AACA,SAAO,IAAI,CAAC;AACd;AAGO,SAAS,SAAS,KAAuB;AAC9C,QAAM,IAAI,UAAU,GAAG,EAAE,QAAQ,KAAK,EAAE;AACxC,SAAO;AAAA,IACL,GAAG,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,IACjC,GAAG,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,IACjC,GAAG,SAAS,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE;AAAA,EACnC;AACF;AAGO,SAAS,SAAS,KAAuB;AAC9C,QAAM,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG;AACzC,QAAM,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG;AACzC,QAAM,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,GAAG,GAAG,GAAG;AACzC,SAAO,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK,GAAG,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;AACzE;AAKO,SAAS,SAAS,KAAyB;AAChD,QAAM,IAAI,IAAI,IAAI;AAClB,QAAM,IAAI,IAAI,IAAI;AAClB,QAAM,IAAI,IAAI,IAAI;AAElB,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,QAAM,MAAM,KAAK,IAAI,GAAG,GAAG,CAAC;AAC5B,QAAM,KAAK,MAAM,OAAO;AAExB,MAAI,QAAQ,KAAK;AACf,WAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,KAAK,MAAM,IAAI,GAAG,EAAE;AAAA,EAC9C;AAEA,QAAM,IAAI,MAAM;AAChB,QAAM,IAAI,IAAI,MAAM,KAAK,IAAI,MAAM,OAAO,KAAK,MAAM;AAErD,MAAI,IAAI;AACR,MAAI,QAAQ,GAAG;AACb,UAAM,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,MAAM;AAAA,EACxC,WAAW,QAAQ,GAAG;AACpB,UAAM,IAAI,KAAK,IAAI,KAAK;AAAA,EAC1B,OAAO;AACL,UAAM,IAAI,KAAK,IAAI,KAAK;AAAA,EAC1B;AAEA,SAAO;AAAA,IACL,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,IACrB,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,IACrB,GAAG,KAAK,MAAM,IAAI,GAAG;AAAA,EACvB;AACF;AAGO,SAAS,SAAS,KAAyB;AAChD,QAAM,IAAI,IAAI,IAAI;AAClB,QAAM,IAAI,IAAI,IAAI;AAClB,QAAM,IAAI,IAAI,IAAI;AAElB,MAAI,MAAM,GAAG;AACX,UAAM,IAAI,KAAK,MAAM,IAAI,GAAG;AAC5B,WAAO,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE;AAAA,EAC5B;AAEA,QAAM,IAAI,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI,IAAI,IAAI;AAC9C,QAAM,IAAI,IAAI,IAAI;AAElB,SAAO;AAAA,IACL,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG;AAAA,IAC7C,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG;AAAA,IACrC,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,GAAG;AAAA,EAC/C;AACF;AAEA,SAAS,SAAS,GAAW,GAAW,GAAmB;AACzD,MAAI,IAAI,EAAG,MAAK;AAChB,MAAI,IAAI,EAAG,MAAK;AAChB,MAAI,IAAI,IAAI,EAAG,QAAO,KAAK,IAAI,KAAK,IAAI;AACxC,MAAI,IAAI,IAAI,EAAG,QAAO;AACtB,MAAI,IAAI,IAAI,EAAG,QAAO,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK;AAClD,SAAO;AACT;AAKO,SAAS,SAAS,KAAuB;AAC9C,SAAO,SAAS,SAAS,GAAG,CAAC;AAC/B;AAGO,SAAS,SAAS,KAAuB;AAC9C,SAAO,SAAS,SAAS,GAAG,CAAC;AAC/B;AAIA,SAAS,MAAM,OAAe,KAAa,KAAqB;AAC9D,SAAO,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,GAAG,GAAG;AAC3C;;;ACpKA,IAAM,YAAY;AAClB,IAAM,YAAY;AAClB,IAAM,WAAW;AAGV,SAAS,gBAAgB,OAAwB;AACtD,MAAI,CAAC,MAAO,QAAO;AACnB,QAAM,IAAI,MAAM,KAAK,EAAE,YAAY;AACnC,SAAO,EAAE,WAAW,kBAAkB,KAAK,EAAE,WAAW,kBAAkB,KAAK,EAAE,WAAW,iBAAiB;AAC/G;AAGO,SAAS,cAAc,UAAyC;AACrE,MAAI,CAAC,SAAU,QAAO;AACtB,QAAM,IAAI,SAAS,KAAK;AAExB,MAAI;AACJ,MAAI;AAEJ,QAAM,cAAc,EAAE,MAAM,SAAS;AACrC,QAAM,cAAc,cAAc,OAAO,EAAE,MAAM,SAAS;AAC1D,QAAM,aAAa,eAAe,cAAc,OAAO,EAAE,MAAM,QAAQ;AAEvE,MAAI,aAAa;AACf,YAAQ;AACR,WAAO;AAAA,EACT,WAAW,aAAa;AACtB,YAAQ;AACR,WAAO;AAAA,EACT,WAAW,YAAY;AACrB,YAAQ;AACR,WAAO;AAAA,EACT,OAAO;AACL,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,MAAM,CAAC,KAAK;AAC1B,QAAM,QAAQ,kBAAkB,KAAK;AAErC,MAAI,QAAQ,SAAS,WAAW,MAAM;AACtC,MAAI;AACJ,MAAI,kBAAkB;AAEtB,MAAI,SAAS,UAAU;AACrB,UAAM,QAAQ,MAAM,CAAC,GAAG,KAAK;AAC7B,QAAI,OAAO;AACT,YAAM,WAAW,WAAW,KAAK;AACjC,UAAI,aAAa,MAAM;AACrB,gBAAQ;AACR,0BAAkB;AAAA,MACpB,WAAW,MAAM,WAAW,KAAK,GAAG;AAClC,gBAAQ,iBAAiB,KAAK;AAC9B,0BAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF,WAAW,SAAS,UAAU;AAC5B,UAAM,QAAQ,MAAM,CAAC,GAAG,KAAK,EAAE,YAAY;AAC3C,QAAI,OAAO;AACT,UAAI,MAAM,WAAW,QAAQ,KAAK,UAAU,UAAU;AACpD,gBAAQ;AACR,0BAAkB;AAAA,MACpB,WAAW,MAAM,WAAW,SAAS,KAAK,UAAU,WAAW;AAC7D,gBAAQ;AACR,0BAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF,WAAW,SAAS,SAAS;AAC3B,UAAM,QAAQ,MAAM,CAAC,GAAG,KAAK;AAC7B,QAAI,OAAO;AACT,YAAM,YAAY,MAAM,MAAM,6BAA6B;AAC3D,UAAI,WAAW;AACb,gBAAQ,WAAW,UAAU,CAAC,KAAK,EAAE;AACrC,0BAAkB;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,WAAW,MAAM,MAAM,eAAe,CAAC;AACrD,MAAI,MAAM,SAAS,EAAG,QAAO;AAE7B,SAAO,EAAE,MAAM,OAAO,OAAO,MAAM;AACrC;AAGO,SAAS,iBAAiB,QAAgC;AAC/D,QAAM,cAAc,OAAO,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,IAAI,KAAK,MAAM,EAAE,QAAQ,CAAC,GAAG;AAEnF,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK,UAAU;AACb,aAAO,mBAAmB,OAAO,KAAK,QAAQ,YAAY,KAAK,IAAI,CAAC;AAAA,IACtE;AAAA,IACA,KAAK,UAAU;AACb,YAAM,QAAQ,OAAO,SAAS;AAC9B,aAAO,mBAAmB,KAAK,KAAK,YAAY,KAAK,IAAI,CAAC;AAAA,IAC5D;AAAA,IACA,KAAK,SAAS;AACZ,YAAM,OAAO,OAAO,QAAQ,QAAQ,OAAO,KAAK,UAAU;AAC1D,aAAO,kBAAkB,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAKA,SAAS,kBAAkB,OAAyB;AAClD,QAAM,QAAkB,CAAC;AACzB,MAAI,QAAQ;AACZ,MAAI,UAAU;AAEd,aAAW,QAAQ,OAAO;AACxB,QAAI,SAAS,IAAK;AAClB,QAAI,SAAS,IAAK;AAClB,QAAI,SAAS,OAAO,UAAU,GAAG;AAC/B,YAAM,KAAK,QAAQ,KAAK,CAAC;AACzB,gBAAU;AAAA,IACZ,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AACA,MAAI,QAAQ,KAAK,EAAG,OAAM,KAAK,QAAQ,KAAK,CAAC;AAC7C,SAAO;AACT;AAEA,SAAS,WAAW,MAA6B;AAC/C,QAAM,IAAI,KAAK,MAAM,yBAAyB;AAC9C,SAAO,IAAI,WAAW,EAAE,CAAC,KAAK,EAAE,IAAI;AACtC;AAEA,SAAS,iBAAiB,WAA2B;AACnD,QAAM,IAAI,UAAU,KAAK,EAAE,YAAY;AACvC,QAAM,MAA8B;AAAA,IAClC,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,mBAAmB;AAAA,IACnB,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,WAAW;AAAA,IACX,eAAe;AAAA,EACjB;AACA,SAAO,IAAI,CAAC,KAAK;AACnB;AAEA,SAAS,WAAW,OAAiC;AACnD,QAAM,QAAwB,CAAC;AAC/B,QAAM,QAAQ,MAAM;AAEpB,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,UAAM,OAAO,MAAM,CAAC,GAAG,KAAK;AAC5B,QAAI,CAAC,KAAM;AAGX,UAAM,WAAW,KAAK,MAAM,yBAAyB;AACrD,QAAI;AACJ,QAAI;AAEJ,QAAI,UAAU;AACZ,cAAQ,KAAK,MAAM,GAAG,SAAS,KAAM,EAAE,KAAK;AAC5C,iBAAW,WAAW,SAAS,CAAC,KAAK,EAAE;AAAA,IACzC,OAAO;AACL,cAAQ;AAER,iBAAW,SAAS,IAAI,IAAK,KAAK,QAAQ,KAAM;AAAA,IAClD;AAEA,UAAM,KAAK,EAAE,OAAO,SAAS,CAAC;AAAA,EAChC;AAEA,SAAO;AACT;;;ACrKO,SAAS,oBAAoB,MAA2D;AAC7F,MAAI,CAAC,KAAK,KAAK,EAAG,QAAO;AAEzB,QAAM,QAAQ,KACX,MAAM,GAAG,EACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACjB,QAAM,QAAyB,MAAM,IAAI,CAAC,SAAS;AACjD,UAAM,SAAS,KAAK,MAAM,KAAK;AAC/B,UAAM,QAAQ,OAAO,CAAC,KAAK;AAC3B,UAAM,QAAQ,OAAO,CAAC,GAAG,YAAY,MAAM,SAAS,SAAS;AAC7D,WAAO,EAAE,OAAO,MAAM;AAAA,EACxB,CAAC;AAED,SAAO,MAAM,WAAW,IAAK,MAAM,CAAC,IAAsB;AAC5D;AAKO,SAAS,wBAAwB,MAA2D;AACjG,MAAI,CAAC,KAAM,QAAO;AAClB,QAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AAChD,SAAO,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,GAAG,EAAE,UAAU,SAAS,UAAU,EAAE,EAAE,EAAE,KAAK,IAAI;AACrF;AAKO,SAAS,sBACd,MACiF;AACjF,MAAI,CAAC,KAAK,KAAK,EAAG,QAAO;AAGzB,QAAM,QAAQ,KACX,MAAM,OAAO,EACb,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EACnB,OAAO,OAAO;AACjB,QAAM,aAAmC,CAAC;AAE1C,aAAW,QAAQ,OAAO;AACxB,UAAM,YAAY,gBAAgB,IAAI;AACtC,QAAI,UAAW,YAAW,KAAK,SAAS;AAAA,EAC1C;AAEA,MAAI,WAAW,WAAW,EAAG,QAAO;AAGpC,QAAM,QAAQ,WAAW,CAAC;AAC1B,MAAI,WAAW,WAAW,KAAK,UAAU,CAAC,MAAM,YAAY,MAAM,aAAa,OAAO;AACpF,WAAO,EAAE,CAAC,MAAM,KAAK,GAAG,MAAM,MAAM;AAAA,EACtC;AAEA,SAAO,WAAW,WAAW,KAAK,QAAQ,QAAQ;AACpD;AAEA,SAAS,gBAAgB,MAAyC;AAGhE,QAAM,QAAQ,KAAK,MAAM,6EAA6E;AACtG,MAAI,CAAC,MAAO,QAAO;AAGnB,QAAM,QAAQ,MAAM,CAAC,KAAK;AAC1B,QAAM,KAAK,MAAM,CAAC,KAAK;AACvB,QAAM,WAAW,MAAM,CAAC,KAAK;AAC7B,QAAM,WAAW,kBAAkB,EAAE;AACrC,QAAM,QAAQC,YAAW,SAAS,KAAK,GAAG,QAAQ;AAGlD,MAAI,aAAa,MAAM;AACrB,WAAO,EAAE,OAAO,MAAM;AAAA,EACxB;AAEA,SAAO,EAAE,OAAO,UAAU,MAAM;AAClC;AAEA,SAAS,kBAAkB,IAA+B;AACxD,QAAM,aAAa,GAAG,YAAY;AAClC,QAAM,MAAyC;AAAA,IAC7C,KAAK;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,KAAK;AAAA,IACL,UAAU;AAAA,IACV,KAAK;AAAA,IACL,IAAI;AAAA,EACN;AACA,SAAO,IAAI,UAAU,KAAK;AAC5B;AAEA,SAASA,YAAW,KAAa,UAAsC;AAErE,MAAI,IAAI,WAAW,IAAI,KAAK,IAAI,SAAS,IAAI,GAAG;AAC9C,WAAO;AAAA,EACT;AAGA,MAAI,aAAa,MAAM;AACrB,WAAO,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,iBAAiB,EAAE,KAAK,CAAC,CAAC;AAAA,EAC7D;AAEA,SAAO,iBAAiB,GAAG;AAC7B;AAEA,SAAS,iBAAiB,KAAsB;AAE9C,MAAI,IAAI,YAAY,MAAM,OAAQ,QAAO;AACzC,MAAI,IAAI,YAAY,MAAM,QAAS,QAAO;AAG1C,QAAM,MAAM,OAAO,GAAG;AACtB,MAAI,CAAC,OAAO,MAAM,GAAG,KAAK,QAAQ,GAAI,QAAO;AAG7C,MAAK,IAAI,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,KAAO,IAAI,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,GAAI;AAC5F,WAAO,IAAI,MAAM,GAAG,EAAE;AAAA,EACxB;AAEA,SAAO;AACT;AAKO,SAAS,0BACd,QACQ;AACR,MAAI,CAAC,OAAQ,QAAO;AAGpB,MAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,CAAC,kBAAkB,MAAM,GAAG;AACxD,WAAO,OAAO,QAAQ,MAAM,EACzB,IAAI,CAAC,CAAC,OAAO,KAAK,MAAM,GAAG,KAAK,MAAM,eAAe,KAAK,CAAC,EAAE,EAC7D,KAAK,IAAI;AAAA,EACd;AAGA,QAAM,aAAa,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAC,MAA4B;AACjF,SAAO,WACJ,IAAI,CAAC,MAAM;AACV,UAAM,KAAK,EAAE,YAAY;AACzB,UAAM,QAAQ,iBAAiB,EAAE;AACjC,UAAM,SACJ,OAAO,QAAQ,MAAM,QAAQ,EAAE,KAAK,IAChC,EAAE,MAAM,IAAI,CAAC,MAAM,eAAe,CAAC,CAAC,EAAE,KAAK,IAAI,IAC/C,eAAe,EAAE,KAAK;AAC5B,WAAO,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,MAAM;AAAA,EACtC,CAAC,EACA,KAAK,IAAI;AACd;AAEA,SAAS,iBAAiB,IAA+B;AACvD,QAAM,MAAyC;AAAA,IAC7C,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,UAAU;AAAA,IACV,IAAI;AAAA,EACN;AACA,SAAO,IAAI,EAAE,KAAK;AACpB;AAEA,SAAS,kBAAkB,KAAyC;AAClE,SAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,WAAW;AAC/D;AAEA,SAAS,eAAe,OAAwB;AAC9C,MAAI,OAAO,UAAU,UAAU;AAE7B,QAAI,MAAM,WAAW,IAAI,KAAK,WAAW,KAAK,KAAK,EAAG,QAAO;AAC7D,WAAO,IAAI,KAAK;AAAA,EAClB;AACA,SAAO,OAAO,KAAK;AACrB;;;ACjMA,SAAS,YAAY,OAAe,SAAiB,SAAgC;AACnF,MAAI,UAAU,QAAS,QAAO;AAC9B,MAAI,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK,MAAM,WAAW,GAAG,OAAO,GAAG,GAAG;AACzG,WAAO,UAAU,MAAM,UAAU,QAAQ,MAAM;AAAA,EACjD;AACA,SAAO;AACT;AAUO,SAAS,gBAAgB,MAAe,SAAiB,SAA0B;AACxF,MAAI,CAAC,QAAQ,OAAO,SAAS,SAAU,QAAO;AAC9C,MAAI,CAAC,WAAW,YAAY,QAAS,QAAO;AAE5C,MAAI,UAAU;AACd,QAAM,IAAI;AAEV,MAAI,OAAO,EAAE,SAAS,UAAU;AAC9B,UAAM,YAAY,YAAY,EAAE,MAAM,SAAS,OAAO;AACtD,QAAI,cAAc,MAAM;AACtB,QAAE,OAAO;AACT,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,aAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,QAAI,QAAQ,OAAQ;AACpB,UAAM,IAAI,EAAE,GAAG;AACf,QAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,iBAAW,QAAQ,GAAG;AACpB,YAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,cAAI,gBAAgB,MAAM,SAAS,OAAO,EAAG,WAAU;AAAA,QACzD;AAAA,MACF;AAAA,IACF,WAAW,KAAK,OAAO,MAAM,UAAU;AACrC,UAAI,gBAAgB,GAAG,SAAS,OAAO,EAAG,WAAU;AAAA,IACtD;AAAA,EACF;AAEA,SAAO;AACT;AAMO,SAAS,cAAc,MAAe,MAAsB;AACjE,MAAI,CAAC,QAAQ,OAAO,SAAS,YAAY,CAAC,KAAM,QAAO;AAEvD,MAAI,QAAQ;AACZ,QAAM,IAAI;AAEV,MAAI,OAAO,EAAE,SAAS,YAAY,YAAY,EAAE,MAAM,MAAM,OAAO,MAAM,MAAM;AAC7E;AAAA,EACF;AAEA,aAAW,OAAO,OAAO,KAAK,CAAC,GAAG;AAChC,QAAI,QAAQ,OAAQ;AACpB,UAAM,IAAI,EAAE,GAAG;AACf,QAAI,MAAM,QAAQ,CAAC,GAAG;AACpB,iBAAW,QAAQ,GAAG;AACpB,YAAI,QAAQ,OAAO,SAAS,SAAU,UAAS,cAAc,MAAM,IAAI;AAAA,MACzE;AAAA,IACF,WAAW,KAAK,OAAO,MAAM,UAAU;AACrC,eAAS,cAAc,GAAG,IAAI;AAAA,IAChC;AAAA,EACF;AAEA,SAAO;AACT;",
5
+ "mappings": "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",
6
6
  "names": ["z", "z", "z", "z", "zodToValidationErrors", "parseValue"]
7
7
  }
@@ -11,7 +11,23 @@ export const formHandlerScript = `
11
11
  // Find all forms with fetch handler
12
12
  const forms = document.querySelectorAll('form[data-submit-handler="fetch"]');
13
13
 
14
+ // Spam protection (server-enforced at /api/send-email): inject a hidden honeypot
15
+ // field bots fill but humans never see, and stamp a clock-skew-free dwell time on
16
+ // submit. Fields named with a leading "_" are control/meta and are not emailed.
17
+ const loadedAt = Date.now();
18
+
14
19
  forms.forEach(function(form) {
20
+ if (!form.querySelector('input[name="_honey"]')) {
21
+ const hp = document.createElement('input');
22
+ hp.type = 'text';
23
+ hp.name = '_honey';
24
+ hp.tabIndex = -1;
25
+ hp.setAttribute('autocomplete', 'off');
26
+ hp.setAttribute('aria-hidden', 'true');
27
+ hp.style.cssText = 'position:absolute;left:-9999px;width:1px;height:1px;opacity:0';
28
+ form.appendChild(hp);
29
+ }
30
+
15
31
  form.addEventListener('submit', async function(e) {
16
32
  e.preventDefault();
17
33
 
@@ -46,6 +62,7 @@ export const formHandlerScript = `
46
62
 
47
63
  try {
48
64
  const formData = new FormData(form);
65
+ formData.append('_elapsed', String(Date.now() - loadedAt));
49
66
 
50
67
  const response = await fetch(action, {
51
68
  method: method.toUpperCase(),
@@ -6,7 +6,7 @@ describe('cors middleware', () => {
6
6
  test('returns default headers with no options', () => {
7
7
  const headers = createCorsHeaders();
8
8
  expect(headers['Access-Control-Allow-Origin']).toBe('*');
9
- expect(headers['Access-Control-Allow-Methods']).toBe('GET, POST, PUT, DELETE, OPTIONS');
9
+ expect(headers['Access-Control-Allow-Methods']).toBe('GET, POST, PUT, PATCH, DELETE, OPTIONS');
10
10
  expect(headers['Access-Control-Allow-Headers']).toBe('Content-Type, Authorization');
11
11
  });
12
12
 
@@ -20,7 +20,7 @@ export interface CorsOptions {
20
20
 
21
21
  const DEFAULT_OPTIONS: CorsOptions = {
22
22
  origin: '*',
23
- methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
23
+ methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
24
24
  allowedHeaders: ['Content-Type', 'Authorization'],
25
25
  credentials: false,
26
26
  };
@@ -120,7 +120,7 @@ export async function handleFunctionsRoute(req: Request, url: URL): Promise<Resp
120
120
  // Add CORS headers for development
121
121
  const headers = new Headers(response.headers);
122
122
  headers.set('Access-Control-Allow-Origin', '*');
123
- headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
123
+ headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS');
124
124
  headers.set('Access-Control-Allow-Headers', 'Content-Type');
125
125
 
126
126
  return new Response(response.body, {
@@ -152,7 +152,7 @@ export function handleFunctionsPreflight(req: Request, url: URL): Response | und
152
152
  status: 204,
153
153
  headers: {
154
154
  'Access-Control-Allow-Origin': '*',
155
- 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
155
+ 'Access-Control-Allow-Methods': 'GET, POST, PUT, PATCH, DELETE, OPTIONS',
156
156
  'Access-Control-Allow-Headers': 'Content-Type',
157
157
  'Access-Control-Max-Age': '86400',
158
158
  },
@@ -91,6 +91,24 @@ export function isHtmlNode(node: ComponentNode | null | undefined): node is Html
91
91
  return node?.type === NODE_TYPE.NODE;
92
92
  }
93
93
 
94
+ /**
95
+ * Whether a node stores its utility-class styling on `attributes.class` — the class-styling system's
96
+ * `attributes.class` storage path. HTML elements plus the html-like content nodes (embed/link/markdown)
97
+ * qualify: each carries a `style` AND an `attributes` map, and the codec already round-trips a class on
98
+ * them. Component instances are NOT included here — they store on the `class` PROP (a separate
99
+ * eligibility path; see isClassEligible / migrateOneNode, the two callers that must agree). Excluded:
100
+ * list/island/slot/custom (`canHaveStyle:false` or no styling model) and locale-list (its root class is
101
+ * not codec-wired yet — joins in Phase 2). Single source of truth for "what can hold an `attributes.class`".
102
+ */
103
+ export function isClassStylableNode(node: ComponentNode | null | undefined): boolean {
104
+ return (
105
+ node?.type === NODE_TYPE.NODE ||
106
+ node?.type === NODE_TYPE.EMBED ||
107
+ node?.type === NODE_TYPE.LINK ||
108
+ node?.type === NODE_TYPE.MARKDOWN
109
+ );
110
+ }
111
+
94
112
  /**
95
113
  * Get the component name from a ComponentNode (for component instances)
96
114
  */
@@ -97,6 +97,16 @@ describe('utilityClassMapper', () => {
97
97
  expect(classToStyle('font-(--l-ff)')).toEqual({ prop: 'fontFamily', value: 'var(--l-ff)' });
98
98
  });
99
99
 
100
+ test('a color var whose token name can NOT be a bare token uses the arbitrary form + round-trips', () => {
101
+ // A CSS-color name (`--salmon`) or palette-shaped name (`--text-100`) can't be a bare token
102
+ // (`bg-salmon` would render the CSS color salmon), and the `bg-(--x)` shorthand reverses to the
103
+ // bare value — dropping var(). The arbitrary form keeps the variable exact and reverses cleanly,
104
+ // so the value can live in a class instead of the style object (static AND interactive styles).
105
+ expect(stylesToClasses({ backgroundColor: 'var(--salmon)' })).toContain('bg-[var(--salmon)]');
106
+ expect(stylesToClasses({ color: 'var(--text-100)' })).toContain('text-[var(--text-100)]');
107
+ expect(classToStyle('bg-[var(--salmon)]')).toEqual({ prop: 'backgroundColor', value: 'var(--salmon)' });
108
+ });
109
+
100
110
  test('border/outline shorthand var binding stays the shorthand (not the color longhand)', () => {
101
111
  // `border`/`outline` roots are shared by a shorthand and a color longhand. A `var(--x)` value
102
112
  // is opaque and reads as a color, so the bare `border-(--x)` form would round-trip to
@@ -243,9 +243,17 @@ function propertyValueToClass(prop: string, value: string | number): string | nu
243
243
  }
244
244
  // A `var(--token)` on a color-token prop IS a Meno token reference → emit the bare token
245
245
  // form (`bg-muted`), matching the bare-value path so `var(--muted)` and `muted` agree.
246
- // (Token-aware inverse recovers it; palette-shaped names fall through to the var shorthand.)
246
+ // (Token-aware inverse recovers it; palette-shaped names fall through to the arbitrary form.)
247
247
  else if (colorTokenProps.has(prop) && isBareColorTokenName(varName)) {
248
248
  className = `${root}-${varName}`;
249
+ }
250
+ // A color var whose token name can't be a bare token — a CSS color name (`--salmon`) or a
251
+ // palette-shaped name (`--text-100`). The `root-(--x)` shorthand would reverse to the BARE
252
+ // value (classToStyle strips `var()` for color props), losing the variable — and a CSS-color
253
+ // name would then render as the literal color. The arbitrary form keeps `var(--x)` exact and
254
+ // round-trips losslessly (`bg-[var(--x)]` → `var(--x)`), so the value can live in a class.
255
+ else if (colorTokenProps.has(prop)) {
256
+ className = `${root}-[var(${varMatch[1]})]`;
249
257
  } else className = `${root}-(${varMatch[1]})`;
250
258
  }
251
259
  }
@@ -201,6 +201,84 @@ describe('Schema Validation', () => {
201
201
  });
202
202
  });
203
203
 
204
+ describe('list prop authoring mistakes surface a clear, prop-named error', () => {
205
+ // Collect every message in a zod error tree (union branches included), so
206
+ // assertions don't depend on which branch zod happens to surface.
207
+ const allMessages = (error: import('zod').ZodError): string[] => {
208
+ const out: string[] = [];
209
+ const walk = (issues: import('zod').ZodIssue[]) => {
210
+ for (const issue of issues) {
211
+ out.push(issue.message);
212
+ if (issue.code === 'invalid_union') {
213
+ for (const ue of (issue as import('zod').ZodInvalidUnionIssue).unionErrors) walk(ue.errors);
214
+ }
215
+ }
216
+ };
217
+ walk(error.issues);
218
+ return out;
219
+ };
220
+
221
+ test('a bare-string `default` with no `itemSchema` is rejected with the list-prop requirement', () => {
222
+ // The single most common first guess. The codec round-trips it and
223
+ // `astro build` renders it, so the editor load path is the only guard.
224
+ const propDef = { type: 'list', default: ['First', 'Second'] };
225
+
226
+ const result = PropDefinitionSchema.safeParse(propDef);
227
+
228
+ expect(result.success).toBe(false);
229
+ if (!result.success) {
230
+ expect(allMessages(result.error).some((m) => m.includes('list prop requires `itemSchema`'))).toBe(true);
231
+ }
232
+ });
233
+
234
+ test('an object-array `default` still requires `itemSchema`', () => {
235
+ const propDef = { type: 'list', default: [{ label: 'First' }] };
236
+ const result = PropDefinitionSchema.safeParse(propDef);
237
+ expect(result.success).toBe(false);
238
+ });
239
+
240
+ test('the correct form (itemSchema + object-array default) passes', () => {
241
+ const propDef = {
242
+ type: 'list',
243
+ itemSchema: { label: { type: 'string', default: 'Item' } },
244
+ default: [{ label: 'First' }, { label: 'Second' }],
245
+ };
246
+ expect(PropDefinitionSchema.safeParse(propDef).success).toBe(true);
247
+ });
248
+
249
+ test('a component file with a bad list prop reports the prop error, NOT the misleading JSONPage refine', () => {
250
+ // Regression for the union-dirty-branch bug: a `{ component }` payload
251
+ // whose list prop is malformed used to surface "JSONPage must have at
252
+ // least one of: meta, components, or root" (the page branch's refine),
253
+ // which names nothing useful. It must surface the list-prop error instead.
254
+ const componentFile = {
255
+ component: {
256
+ interface: { items: { type: 'list', default: ['a', 'b'] } },
257
+ structure: { type: 'node', tag: 'div', children: [] },
258
+ },
259
+ };
260
+
261
+ const result = PageDataSchema.safeParse(componentFile);
262
+
263
+ expect(result.success).toBe(false);
264
+ if (!result.success) {
265
+ const messages = allMessages(result.error);
266
+ expect(messages.some((m) => m.includes('list prop requires `itemSchema`'))).toBe(true);
267
+ expect(messages.some((m) => m.includes('JSONPage must have'))).toBe(false);
268
+ }
269
+ });
270
+
271
+ test('an empty payload (a real page with no fields) still reports the JSONPage refine', () => {
272
+ // The guard only fires on a present `component` key — a genuinely empty
273
+ // page payload must keep its existing refine message.
274
+ const result = PageDataSchema.safeParse({});
275
+ expect(result.success).toBe(false);
276
+ if (!result.success) {
277
+ expect(allMessages(result.error).some((m) => m.includes('JSONPage must have'))).toBe(true);
278
+ }
279
+ });
280
+ });
281
+
204
282
  describe('Missing required fields handled', () => {
205
283
  test('prop definition without default', () => {
206
284
  const propDef = {