@eaprelsky/nocturna-wheel 3.1.1 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -1
- package/dist/nocturna-wheel.bundle.js +46 -12
- package/dist/nocturna-wheel.bundle.js.map +1 -1
- package/dist/nocturna-wheel.es.js +46 -12
- package/dist/nocturna-wheel.es.js.map +1 -1
- package/dist/nocturna-wheel.min.js +1 -1
- package/dist/nocturna-wheel.min.js.map +1 -1
- package/dist/nocturna-wheel.umd.js +46 -12
- package/dist/nocturna-wheel.umd.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nocturna-wheel.umd.js","sources":["../src/services/ServiceRegistry.js","../src/services/IconProvider.js","../src/data/IconData.js","../src/core/HouseCalculator.js","../src/core/ChartConfig.js","../src/utils/SvgUtils.js","../src/managers/SVGManager.js","../src/renderers/BaseRenderer.js","../src/utils/AstrologyUtils.js","../src/renderers/ZodiacRenderer.js","../src/renderers/HouseRenderer.js","../src/renderers/BasePlanetRenderer.js","../src/renderers/PlanetSymbolRenderer.js","../src/utils/PlanetPositionCalculator.js","../src/renderers/PrimaryPlanetRenderer.js","../src/renderers/SecondaryPlanetRenderer.js","../src/renderers/PlanetRendererCoordinator.js","../src/renderers/ClientSideAspectRenderer.js","../src/factories/RendererFactory.js","../src/components/RenderingCoordinator.js","../src/components/ChartStateManager.js","../src/components/ChartManager.js","../src/NocturnaWheel.js","../src/components/ChartRenderer.js","../src/components/WheelChart.js","../src/main.js"],"sourcesContent":["/**\n * ServiceRegistry.js\n * A simple service locator/registry with all dependencies inlined.\n */\n\n// Self-contained implementation\nexport class ServiceRegistry {\n // Private map to store service instances\n static #instances = new Map();\n \n /**\n * Registers a service instance with the registry\n * @param {string} key - Service identifier\n * @param {Object} instance - Service instance\n */\n static register(key, instance) {\n this.#instances.set(key, instance);\n }\n \n /**\n * Retrieves a service instance from the registry\n * @param {string} key - Service identifier\n * @returns {Object|undefined} The service instance, or undefined if not found\n */\n static get(key) {\n return this.#instances.get(key);\n }\n \n /**\n * Checks if a service is registered\n * @param {string} key - Service identifier\n * @returns {boolean} True if the service is registered\n */\n static has(key) {\n return this.#instances.has(key);\n }\n \n /**\n * Clears all registered services\n * Useful for testing or reinitialization\n */\n static clear() {\n this.#instances.clear();\n }\n \n /**\n * Gets or creates a basic SvgUtils-compatible instance\n * @returns {Object} An object with SVG utility methods\n */\n static getSvgUtils() {\n if (!this.has('svgUtils')) {\n // Create a simple SVG utilities object\n const svgUtils = {\n svgNS: \"http://www.w3.org/2000/svg\",\n \n createSVGElement(tagName, attributes = {}) {\n const element = document.createElementNS(this.svgNS, tagName);\n for (const [key, value] of Object.entries(attributes)) {\n element.setAttribute(key, value);\n }\n return element;\n },\n \n addTooltip(element, text) {\n const title = document.createElementNS(this.svgNS, \"title\");\n title.textContent = text;\n element.appendChild(title);\n return element;\n },\n \n pointOnCircle(centerX, centerY, radius, angle) {\n const radians = (angle - 90) * (Math.PI / 180);\n return {\n x: centerX + radius * Math.cos(radians),\n y: centerY + radius * Math.sin(radians)\n };\n }\n };\n \n this.register('svgUtils', svgUtils);\n }\n return this.get('svgUtils');\n }\n \n /**\n * Gets the IconProvider instance\n * NOTE: IconProvider should be registered externally before use\n * This method only retrieves, does not create\n * @returns {Object|undefined} The IconProvider instance if registered\n */\n static getIconProvider() {\n if (!this.has('iconProvider')) {\n console.warn('ServiceRegistry: IconProvider not registered. Icons may not work correctly.');\n console.warn('ServiceRegistry: This should be initialized in main.js with inline IconData.');\n return null;\n }\n return this.get('iconProvider');\n }\n \n /**\n * Initializes all core services at once\n * @param {Object} options - Initialization options\n */\n static initializeServices(options = {}) {\n // Initialize SvgUtils\n this.getSvgUtils();\n \n // Note: IconProvider should be registered externally in main.js\n // with inline IconData before calling this method\n \n console.log(\"ServiceRegistry: Core services initialized\");\n }\n} ","/**\n * IconProvider.js\n * Service to handle all SVG icon path management and fallback strategies.\n * This ensures consistent icon handling across the application.\n * \n * Supports two modes:\n * 1. Inline mode (default): Uses bundled data URLs for icons\n * 2. External mode: Uses external file paths (for custom icons)\n */\n\nexport class IconProvider {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {string} options.basePath - Base path for external SVG assets\n * @param {boolean} options.useInline - Whether to use inline data URLs (default: true)\n * @param {Object} options.customIcons - Custom icon data URLs (optional)\n */\n constructor(options = {}) {\n // Support legacy string argument for backwards compatibility\n if (typeof options === 'string') {\n options = { basePath: options, useInline: false };\n }\n \n this.basePath = options.basePath || './assets/svg/zodiac/';\n this.useInline = options.useInline !== false; // Default to true\n this.customIcons = options.customIcons || null;\n \n // Lazy-load IconData on first use\n this.inlineData = null;\n \n // Track if warning was already shown (to avoid spam)\n this._warnedAboutMissingData = false;\n }\n \n /**\n * Gets inline icon data reference\n * @private\n */\n _getInlineData() {\n return this.inlineData;\n }\n \n /**\n * Sets the inline icon data (for manual initialization)\n * @param {Object} iconData - Icon data object with planets, signs, aspects\n */\n setInlineData(iconData) {\n this.inlineData = iconData;\n console.log('IconProvider.setInlineData(): Data loaded successfully',\n 'planets:', Object.keys(iconData?.planets || {}).length,\n 'signs:', Object.keys(iconData?.signs || {}).length,\n 'aspects:', Object.keys(iconData?.aspects || {}).length\n );\n }\n\n /**\n * Gets the path or data URL for a planet icon\n * @param {string} planetName - Name of the planet\n * @returns {string} Data URL or file path to the SVG icon\n */\n getPlanetIconPath(planetName) {\n const name = planetName.toLowerCase();\n \n // Check custom icons first\n if (this.customIcons?.planets?.[name]) {\n return this.customIcons.planets[name];\n }\n \n // Try inline data URLs\n if (this.useInline) {\n const inlineData = this._getInlineData();\n if (inlineData?.planets?.[name]) {\n return inlineData.planets[name];\n } else {\n // Debug: log when inline data is not available (only once)\n if (!this._warnedAboutMissingData) {\n this._warnedAboutMissingData = true;\n if (!inlineData) {\n console.warn(`IconProvider: Inline data not loaded, falling back to external paths. Call setInlineData() to load inline icons.`);\n } else if (!inlineData.planets) {\n console.warn(`IconProvider: Inline data missing 'planets' category`);\n }\n }\n }\n }\n \n // Fallback to external path\n return `${this.basePath}zodiac-planet-${name}.svg`;\n }\n \n /**\n * Gets the path or data URL for a zodiac sign icon\n * @param {string} signName - Name of the zodiac sign\n * @returns {string} Data URL or file path to the SVG icon\n */\n getZodiacIconPath(signName) {\n const name = signName.toLowerCase();\n \n // Check custom icons first\n if (this.customIcons?.signs?.[name]) {\n return this.customIcons.signs[name];\n }\n \n // Try inline data URLs\n if (this.useInline) {\n const inlineData = this._getInlineData();\n if (inlineData?.signs?.[name]) {\n return inlineData.signs[name];\n }\n }\n \n // Fallback to external path\n return `${this.basePath}zodiac-sign-${name}.svg`;\n }\n \n /**\n * Gets the path or data URL for an aspect icon\n * @param {string} aspectType - Type of the aspect\n * @returns {string} Data URL or file path to the SVG icon\n */\n getAspectIconPath(aspectType) {\n const name = aspectType.toLowerCase();\n \n // Check custom icons first\n if (this.customIcons?.aspects?.[name]) {\n return this.customIcons.aspects[name];\n }\n \n // Try inline data URLs\n if (this.useInline) {\n const inlineData = this._getInlineData();\n if (inlineData?.aspects?.[name]) {\n return inlineData.aspects[name];\n }\n }\n \n // Fallback to external path\n return `${this.basePath}zodiac-aspect-${name}.svg`;\n }\n \n /**\n * Creates a text element as a fallback when SVG icons fail to load\n * @param {SvgUtils} svgUtils - The SvgUtils instance\n * @param {Object} options - Text element options\n * @param {number} options.x - X coordinate\n * @param {number} options.y - Y coordinate\n * @param {string} options.size - Font size (e.g., '16px')\n * @param {string} options.color - Text color\n * @param {string} options.className - CSS class name\n * @param {string} text - The text to display\n * @returns {Element} The created text element\n */\n createTextFallback(svgUtils, options, text) {\n const { x, y, size = '16px', color = '#000000', className = 'icon-fallback' } = options;\n \n const textElement = svgUtils.createSVGElement(\"text\", {\n x: x,\n y: y,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n 'font-size': size,\n 'class': className,\n 'fill': color\n });\n \n // Use the provided text\n textElement.textContent = text;\n return textElement;\n }\n} ","/**\n * IconData.js\n * Auto-generated module containing inline SVG icons as data URLs\n * Generated at: 2025-11-21T17:08:55.797Z\n * \n * This file is automatically generated by the build process.\n * Do not edit manually - changes will be overwritten.\n */\n\n/**\n * Icon data organized by category\n * All SVG icons are stored as data URLs for inline usage\n */\nexport const IconData = {\n planets: {},\n signs: {},\n aspects: {}\n};\n\n// Planet icons\nIconData.planets['jupiter'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22kVkwGe1VFLANDFw4YKh--3%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20120%20169%20L%20120.41%2052%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22kVkwGe1VFLANDFw4YKh--4%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2055.45%20117%20L%20114.55%20117%20L%20150%20117%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22kVkwGe1VFLANDFw4YKh--5%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2049.17%2039.62%20C%2061.72%2037.13%2074.51%2042.25%2082.68%2053.02%20C%2090.85%2063.79%2093.13%2078.55%2088.66%2091.68%20C%2084.18%20104.81%2073.64%20114.29%2061.06%20116.51%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22zDjTfItpbO8d8TAwGvx0-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['ketu'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-6%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%2265%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-8%22%3E%3Cg%3E%3Cellipse%20cx%3D%22135%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20124.39%2054.39%20Q%20120%2060%20120%2065%20Q%20120%2070%20130%2095%20Q%20140%20120%20130%20135%20Q%20120%20150%20100%20150%20Q%2080%20150%2070%20135%20Q%2060%20120%2070%2095%20Q%2080%2070%2080%2065%20Q%2080%2060%2075.61%2054.39%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22fzDwOAeg_iJ89Dt6VeXd-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['lilith'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22iy5LzPKV1b8-u4Rshwn2-1%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20139%20150%20L%2059%20150%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22iy5LzPKV1b8-u4Rshwn2-2%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2098.2%20117.1%20L%2099%20180%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22iy5LzPKV1b8-u4Rshwn2-3%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2073.37%2033.62%20C%2062.66%2050.93%2065.45%2073.12%2080.13%2087.41%20C%2094.81%20101.7%20117.6%20104.42%20135.38%2093.99%20C%20125.69%20109.66%20107.04%20117.86%2088.56%20114.57%20C%2070.07%20111.28%2055.61%2097.2%2052.23%2079.2%20C%2048.85%2061.21%2057.27%2043.05%2073.37%2033.62%20Z%22%20fill%3D%22%23000000%22%20stroke%3D%22%23000000%22%20stroke-width%3D%222%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(225%2C92.12%2C75.74)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20rgb(0%2C%200%2C%200)%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22skUIsOvDlGxpmukY0j3V-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['mars'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22201px%22%20height%3D%22201px%22%20viewBox%3D%22-0.5%20-0.5%20201%20201%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22dfX1GTXx0dsaOR7s5UN7-2%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%2210%22%20height%3D%2210%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22dfX1GTXx0dsaOR7s5UN7-3%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22115%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22dfX1GTXx0dsaOR7s5UN7-4%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20130%2085%20L%20155.97%2059.03%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20166.05%2048.95%20L%20159.33%2069.11%20L%20155.97%2059.03%20L%20145.89%2055.67%20Z%22%20fill%3D%22%23000000%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22WfpUhmjnT6FgT6mvTSny-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['mercury'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22201px%22%20viewBox%3D%22-0.5%20-0.5%20200%20201%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-5%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%2290%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20129.98%2025.18%20C%20130.36%2034.02%20124.63%2042.31%20115.07%2046.75%20C%20105.51%2051.19%2093.67%2051.07%2084.26%2046.43%20C%2074.85%2041.79%2069.39%2033.39%2070.05%2024.56%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20180%20L%20100%20130%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20160%20L%20140%20160%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22YspeTQYn8OWxfiwJ6-K5-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['moon'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%20%3Cpath%20d%3D%22M%20106.38%2031%20C%20133.61%2035.85%20154.8%2057.4%20159.18%2084.71%20C%20163.56%20112.02%20150.17%20139.12%20125.82%20152.23%20C%20101.46%20165.35%2071.47%20161.61%2051.08%20142.92%20Q%2059.25%20148.63%2089.31%20129.94%20Q%20119.38%20111.25%20119.38%2074.69%20Q%20119.38%2038.13%20108.81%2031.63%20Z%22%20fill%3D%22white%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%20%3C%2Fsvg%3E';\nIconData.planets['neptune'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-13%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20170%20L%20100%2061.18%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20105.67%2072.59%20L%20100%2055.59%20L%2094.33%2072.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-14%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%20140%20L%2060%20140%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-15%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2061.18%20Q%2060%20100%2080%20110%20Q%20100%20120%20120%20110%20Q%20140%20100%20140%2061.18%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%2063.67%2066.59%20L%2060%2055.59%20L%2056.33%2066.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20145.67%2072.59%20L%20140%2055.59%20L%20134.33%2072.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22zbcp-zu0BkE59QIL-Zbj-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['pluto'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-9%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22149%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20129%20L%20100.5%20110%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%2070.4%20C%20139.78%2092.49%20121.69%20110.22%2099.6%20110%20C%2077.51%20109.78%2059.78%2091.69%2060%2069.6%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-12%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%2270%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%227pAuGvqZmXAXuP9MepSf-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['rahu'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-6%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%2265%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-8%22%3E%3Cg%3E%3Cellipse%20cx%3D%22135%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20124.39%2054.39%20Q%20120%2060%20120%2065%20Q%20120%2070%20130%2095%20Q%20140%20120%20130%20135%20Q%20120%20150%20100%20150%20Q%2080%20150%2070%20135%20Q%2060%20120%2070%2095%20Q%2080%2070%2080%2065%20Q%2080%2060%2075.61%2054.39%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%223M6Cx9xprG5cO1lWqNEw-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['saturn'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-5%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2090%20139%20L%2090%2039%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2059%20L%20120%2059%20L%2090%2059%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20150%20169%20Q%20138%20179%20129%20174%20Q%20120%20169%20129%20144%20Q%20138%20119%20134%20104%20Q%20130%2089%20110%2089%20Q%2090%2089%2090%20109%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%226yAxXstixJTfL81ozoQc-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22sU4-NP-8qgTjRoMx9Fv4-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['selena'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%20150%20L%2060%20150%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2099.2%20117.1%20L%20100%20180%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2073.37%2031.14%20C%2062.66%2048.46%2065.45%2070.65%2080.13%2084.94%20C%2094.81%2099.23%20117.6%20101.95%20135.38%2091.52%20C%20125.69%20107.19%20107.04%20115.39%2088.56%20112.1%20C%2070.07%20108.81%2055.61%2094.73%2052.23%2076.73%20C%2048.85%2058.74%2057.27%2040.58%2073.37%2031.14%20Z%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(225%2C92.12%2C73.26)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22B7BV3EczgGRAOl1qaG-U-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['sun'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22KMRcx8_Z6FSBlqI5tEZE-1%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22100%22%20rx%3D%2265%22%20ry%3D%2260%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KMRcx8_Z6FSBlqI5tEZE-2%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22100%22%20rx%3D%2210%22%20ry%3D%2210%22%20fill%3D%22%23000000%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(237%2C%20237%2C%20237))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22adE6InmPBndy7Uo4bRgR-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['uranus'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-4%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-9%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22149%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2080.91%2089.92%20L%20120.91%2089.92%20L%20100.91%2089.92%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20129%20L%20100%2060%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-12%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2052.39%2051.12%20C%2066.57%2052.6%2078%2066.81%2079.77%2085.16%20C%2081.53%20103.5%2073.15%20120.94%2059.69%20126.91%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-13%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20141.64%20127.44%20C%20128.11%20122.27%20119.13%20105.39%20120.07%2086.87%20C%20121.01%2068.35%20131.61%2053.19%20145.55%2050.44%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22An7hOLSuI-_JKes7hUzt-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22XEAaU1rfczp1g1rg0gsK-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['venus'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%2282gSs5GHCCOlAdsS7Y_n-5%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%2279%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2282gSs5GHCCOlAdsS7Y_n-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20180%20L%20100%20119%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2282gSs5GHCCOlAdsS7Y_n-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20150%20L%20140%20150%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22wT5vcnIU1864jlhb-1KB-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\n\n// Zodiac sign icons\nIconData.signs['aquarius'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22pYeec5tt2UMA0w_zhV47-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22pYeec5tt2UMA0w_zhV47-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20161.5%2090%20Q%20151.5%2070%20136.5%2080%20Q%20121.5%2090%20116.5%2075%20Q%20111.5%2060%2096%2075%20Q%2080.5%2090%2074.5%2075%20Q%2068.5%2060%2041.5%2090%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22pYeec5tt2UMA0w_zhV47-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20158.5%20120%20Q%20148.5%20100%20133.5%20110%20Q%20118.5%20120%20113.5%20105%20Q%20108.5%2090%2093%20105%20Q%2077.5%20120%2071.5%20105%20Q%2065.5%2090%2038.5%20120%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22fXDPfsLTpfVXU3cFdg-k-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['aries'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22blLjc4XcNJx5ieieuYer-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22G6Vla6dTyV-LotFg2Pob-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20101%20160%20Q%20100%20100%2095%2075%20Q%2090%2050%2070%2045%20Q%2050%2040%2030%2060%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22G6Vla6dTyV-LotFg2Pob-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20101%20160%20Q%20100%20110%20105%2080%20Q%20110%2050%20130%2045%20Q%20150%2040%20170%2060%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vkXA4BL2LVM82eNTlpCW-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['cancer'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-17%22%3E%3Cg%3E%3Cellipse%20cx%3D%22131%22%20cy%3D%22106.62%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-18%22%3E%3Cg%3E%3Cellipse%20cx%3D%2272.5%22%20cy%3D%2275.62%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-19%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2097.18%20159.61%20C%2081.71%20156.42%2070.06%20134.3%2070%20108%20C%2069.94%2081.71%2081.49%2059.45%2096.95%2056.06%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100.94%2C107.81)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-20%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2097.18%20125.49%20C%2081.71%20122.39%2070.06%20100.94%2070%2075.43%20C%2069.94%2049.93%2081.49%2028.33%2096.95%2025.04%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(90%2C100.94%2C75.25)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-nztp9pWxBHcmyZ08QR4-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['capricorn'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-8%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-9%22%3E%3Cg%3E%3Cellipse%20cx%3D%22135%22%20cy%3D%22118.25%22%20rx%3D%2215%22%20ry%3D%2216.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20120%20112.75%20Q%20120%20130.35%20120%20110.55%20Q%20120%2090.75%20120%2068.75%20Q%20120%2046.75%20107.5%2041.25%20Q%2095%2035.75%2085%2079.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2085%2079.75%20Q%2080%2035.75%2060%2035.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-12%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20145.75%20Q%20110%20145.75%20115%20134.75%20Q%20120%20123.75%20120%20118.25%20Q%20120%20112.75%20124.23%20106.76%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22BpOhtRGwmzoIQpnF7pUJ-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['gemini'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-37%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2097.31%2096.94%20C%2081.84%2093.35%2070.19%2068.48%2070.13%2038.91%20C%2070.07%209.34%2081.62%20-15.7%2097.08%20-19.51%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C101.07%2C38.69)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-38%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2095.68%20223.38%20C%2080.21%20219.76%2068.56%20194.71%2068.5%20164.91%20C%2068.44%20135.12%2079.99%20109.9%2095.45%20106.06%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(90%2C99.44%2C164.69)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-39%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2079.93%20136.79%20L%2079.47%2067.65%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-40%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20119.66%20135.3%20L%20119.73%2067.65%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jCEtXZTTY2g2Gjzo-qMJ-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['leo'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%225dCEg9FfoHjf9y-4Zlng-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%225dCEg9FfoHjf9y-4Zlng-6%22%3E%3Cg%3E%3Cellipse%20cx%3D%2272.5%22%20cy%3D%22100%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%225dCEg9FfoHjf9y-4Zlng-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20160%20140%20Q%20150%20150%20137.5%20150%20Q%20125%20150%20122.5%20135%20Q%20120%20120%20130%2080%20Q%20140%2040%20110%2040%20Q%2080%2040%2095%20100%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['libra'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-5%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2040%20136.78%20L%20160%20136.78%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2040%20108.6%20L%2084.04%20109.09%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20116.38%20109.09%20L%20160%20108.6%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20125.48%2098.82%20C%20119.06%20110.71%20105.66%20116.67%2092.85%20113.33%20C%2080.03%20109.99%2071%2098.19%2070.85%2084.59%20C%2070.7%2070.98%2079.47%2058.98%2092.21%2055.34%20C%20104.95%2051.71%20118.48%2057.35%20125.16%2069.09%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(90%2C100%2C84.25)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22Vif0qCJVHSTV2Csg5cyl-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['pisces'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2057.79%2045.18%20C%2074.33%2047.25%2087.67%2067.3%2089.73%2093.17%20C%2091.79%20119.04%2082.01%20143.63%2066.3%20152.05%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20135.25%20152.82%20C%20119.46%20145.63%20108.98%20122.12%20110.08%2096.34%20C%20111.17%2070.55%20123.54%2049.44%20139.81%2045.61%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2055.01%2099.91%20L%20144.99%2099.86%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222UPBxVXPtNNG9HLaSRjR-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['sagittarius'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2059%20127.75%20L%20138%2048.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2086.75%20L%20100%20126.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2099%2047.75%20L%20141%2047.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20139%2087.75%20L%20139%2045.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bTJtWIvd38qZUwxlYIHf-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['scorpio'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22xiVi_kujB_bSvCnK_Mbj-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20143%20Q%2060%2080%2060%2060%20Q%2060%2040%2060%2035%20Q%2060%2030%2050%2020%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xiVi_kujB_bSvCnK_Mbj-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2090%20143%20Q%2090%2080%2090%2060%20Q%2090%2040%2080%2030.75%20Q%2070%2021.5%2060%2041.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xiVi_kujB_bSvCnK_Mbj-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20152.09%20133.66%20Q%20120%20165.75%20120%20122.88%20Q%20120%2080%20120%2060%20Q%20120%2040%20110%2030.75%20Q%20100%2021.5%2089%2044.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20150.86%20140.07%20L%20156.05%20129.7%20L%20145.68%20134.89%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2278SzmRzQp-I1tTwLOdSe-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['taurus'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22-6Y1EZ5wd5mKBmpr7pZl-13%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20150%2050%20Q%20130%2050%20125%2060%20Q%20120%2070%20115%2075%20Q%20110%2080%20105%2080%20Q%20100%2080%2095%2080%20Q%2090%2080%2085%2075%20Q%2080%2070%2075%2060%20Q%2070%2050%2050%2050%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-6Y1EZ5wd5mKBmpr7pZl-14%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22120%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22UmnKpyvcFwhx0IRVoUol-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['virgo'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-8%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20143%20Q%2060%2080%2060%2060%20Q%2060%2040%2060%2035%20Q%2060%2030%2050%2020%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2090%20143%20Q%2090%2080%2090%2060%20Q%2090%2040%2080%2030.75%20Q%2070%2021.5%2060%2041.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20150%20171.5%20Q%20120%20141.5%20120%20110.75%20Q%20120%2080%20120%2060%20Q%20120%2040%20110%2030.75%20Q%20100%2021.5%2089%2044.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-12%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20110%20161.5%20Q%20130%20141.5%20135%20131.5%20Q%20140%20121.5%20140%20106.5%20Q%20140%2091.5%20135%2086.5%20Q%20130%2081.5%20120%20101.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2234pg9PiOzKNUfzoN4yK9-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\n\n// Aspect icons\nIconData.aspects['conjunction'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22gGTkRmc-nT83Q299-C-k-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22a2c2rf50iBX5W4IijcMr-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22a2c2rf50iBX5W4IijcMr-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20108.47%2092.68%20L%20128.5%2072%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(237%2C%20237%2C%20237))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22a2c2rf50iBX5W4IijcMr-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%2294%22%20cy%3D%22108%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(237%2C%20237%2C%20237))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['opposition'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-6%22%3E%3Cg%3E%3Cellipse%20cx%3D%2275%22%20cy%3D%22125%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%22125%22%20cy%3D%2275%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2089.71%20109.86%20L%20109.27%2089.3%22%20fill%3D%22none%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22EZUqS9dHCJ6ET5sfbTn7-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['quincunx'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['semisextile'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['semisquare'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['sesquisquare'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['sextile'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20100%20L%20140%20100%22%20fill%3D%22none%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2070%20L%20130%20130%22%20fill%3D%22none%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%20130%20L%20130%2070%22%20fill%3D%22none%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%221QpNWf1EhDtsYVpd6CiN-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['square'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22p0KHWF2mTDFWD3EQTWJK-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22p0KHWF2mTDFWD3EQTWJK-6%22%3E%3Cg%3E%3Crect%20x%3D%2270%22%20y%3D%2270%22%20width%3D%2260%22%20height%3D%2260%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22Uxbd23ua_aHTV4gALoXr-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['trine'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\n\n// Export individual categories for convenience\nexport const PlanetIcons = IconData.planets;\nexport const SignIcons = IconData.signs;\nexport const AspectIcons = IconData.aspects;\n\n// Helper function to check if an icon exists\nexport function hasIcon(category, name) {\n return IconData[category] && IconData[category][name] !== undefined;\n}\n\n// Helper function to get an icon data URL\nexport function getIconDataUrl(category, name) {\n if (hasIcon(category, name)) {\n return IconData[category][name];\n }\n return null;\n}\n","/**\n * HouseCalculator.js\n * Responsible for calculating house cusps for various house systems\n * using astronomical formulas.\n * \n * Supported house systems:\n * - Placidus: The most common system in Western astrology, based on time divisions.\n * Includes proper handling of edge cases and extreme latitudes.\n * - Koch: Another time-based system (simplified implementation).\n * - Equal: Simple system with houses exactly 30° apart.\n * - Whole Sign: Uses entire signs as houses.\n * - Porphyry: Divides the ecliptic proportionally between the angles.\n * - Regiomontanus: Space-based system using the celestial equator (simplified implementation).\n * - Campanus: Space-based system using the prime vertical (simplified implementation).\n * - Morinus: Uses equal divisions of the equator (simplified implementation).\n * - Topocentric: A newer system, similar to Placidus but with different math (simplified implementation).\n */\nclass HouseCalculator {\n /**\n * Creates a new house calculator\n */\n constructor() {\n // Define available house systems and their calculation methods\n this.houseSystems = {\n \"Placidus\": this.calculatePlacidus.bind(this),\n \"Koch\": this.calculateKoch.bind(this),\n \"Equal\": this.calculateEqual.bind(this),\n \"Whole Sign\": this.calculateWholeSign.bind(this),\n \"Porphyry\": this.calculatePorphyry.bind(this),\n \"Regiomontanus\": this.calculateRegiomontanus.bind(this),\n \"Campanus\": this.calculateCampanus.bind(this),\n \"Morinus\": this.calculateMorinus.bind(this),\n \"Topocentric\": this.calculateTopocentric.bind(this)\n };\n }\n \n /**\n * Returns a list of available house systems\n * @returns {Array} Array of house system names\n */\n getAvailableHouseSystems() {\n return Object.keys(this.houseSystems);\n }\n \n /**\n * Calculate house cusps for a specified system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {string} system - House system name\n * @param {Object} options - Additional calculation options\n * @param {number} options.latitude - Geographic latitude in degrees (required for most systems)\n * @param {number} options.mc - Midheaven longitude in degrees (required for some systems)\n * @returns {Array} Array of 12 house cusp longitudes\n * @throws {Error} If system is not supported or required parameters are missing\n */\n calculateHouseCusps(ascendant, system = \"Placidus\", options = {}) {\n // Validate inputs\n if (typeof ascendant !== 'number' || ascendant < 0 || ascendant >= 360) {\n throw new Error(\"Ascendant must be a number between 0 and 360\");\n }\n \n // Check if system exists\n if (!this.houseSystems[system]) {\n throw new Error(`House system \"${system}\" is not supported`);\n }\n \n // Calculate house cusps using the appropriate method\n return this.houseSystems[system](ascendant, options);\n }\n \n /**\n * Calculates Placidus house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @param {number} options.latitude - Geographic latitude in degrees\n * @param {number} options.mc - Midheaven longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculatePlacidus(ascendant, { latitude, mc }) {\n // Validate required parameters\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Placidus house system requires latitude and mc\");\n }\n \n // Handle polar circles where traditional Placidus fails\n if (Math.abs(latitude) >= 66.5) {\n // Fallback to Porphyry for extreme latitudes\n return this.calculatePorphyry(ascendant, { mc });\n }\n \n // Standard value for obliquity of the ecliptic (ε)\n // Accurate enough for house calculations\n const obliquity = 23.4367; // degrees\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant; // ASC (1st)\n cusps[9] = mc; // MC (10th)\n cusps[6] = this.normalizeAngle(ascendant + 180); // DSC (7th)\n cusps[3] = this.normalizeAngle(mc + 180); // IC (4th)\n \n // Convert to radians for trigonometric calculations\n const latRad = this.degreesToRadians(latitude);\n const obliqRad = this.degreesToRadians(obliquity);\n \n // Convert MC to right ascension (RAMC)\n const mcRad = this.degreesToRadians(mc);\n const ramc = Math.atan2(\n Math.sin(mcRad) * Math.cos(obliqRad),\n Math.cos(mcRad)\n );\n \n // Calculate intermediate houses using traditional Placidus method\n try {\n // Houses 11 and 12\n cusps[10] = this.calculatePlacidusIntermediateHouse(mc, ascendant, 1/3, latitude, obliquity);\n cusps[11] = this.calculatePlacidusIntermediateHouse(mc, ascendant, 2/3, latitude, obliquity);\n \n // Houses 2 and 3\n cusps[1] = this.calculatePlacidusIntermediateHouse(ascendant, cusps[3], 1/3, latitude, obliquity);\n cusps[2] = this.calculatePlacidusIntermediateHouse(ascendant, cusps[3], 2/3, latitude, obliquity);\n \n // Houses 4-5-6\n cusps[4] = this.calculatePlacidusIntermediateHouse(cusps[3], cusps[6], 1/3, latitude, obliquity);\n cusps[5] = this.calculatePlacidusIntermediateHouse(cusps[3], cusps[6], 2/3, latitude, obliquity);\n \n // Houses 7-8-9\n cusps[7] = this.calculatePlacidusIntermediateHouse(cusps[6], cusps[9], 1/3, latitude, obliquity);\n cusps[8] = this.calculatePlacidusIntermediateHouse(cusps[6], cusps[9], 2/3, latitude, obliquity);\n } catch (error) {\n // If Placidus calculation fails, fall back to Porphyry\n console.warn(`Placidus calculation failed: ${error.message}. Falling back to Porphyry.`);\n return this.calculatePorphyry(ascendant, { mc });\n }\n \n return cusps;\n }\n \n /**\n * Calculates an intermediate house cusp using the Placidus method\n * @param {number} start - Start angle in degrees (e.g., MC for houses 10-11-12)\n * @param {number} end - End angle in degrees (e.g., ASC for houses 10-11-12)\n * @param {number} fraction - Fraction of the arc (1/3 or 2/3)\n * @param {number} latitude - Observer's latitude in degrees\n * @param {number} obliquity - Obliquity of the ecliptic in degrees\n * @returns {number} House cusp longitude in degrees\n */\n calculatePlacidusIntermediateHouse(start, end, fraction, latitude, obliquity) {\n // Simplification: for now we'll use a more reliable approach \n // Calculate intermediate house using proportional arc method\n const arc = this.calculateArc(start, end);\n return this.normalizeAngle(start + arc * fraction);\n }\n \n /**\n * Calculates Koch house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @param {number} options.latitude - Geographic latitude in degrees\n * @param {number} options.mc - Midheaven longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateKoch(ascendant, { latitude, mc }) {\n // Validate required parameters\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Koch house system requires latitude and mc\");\n }\n \n // Implementation of Koch house system formulas\n // Similar structure to Placidus but with different mathematical approach\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Koch calculation logic\n // This would be replaced with the actual Koch formula\n \n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Calculates Equal house cusps (simplest system)\n * @param {number} ascendant - Ascendant longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateEqual(ascendant) {\n const cusps = new Array(12);\n \n // In Equal house system, houses are exactly 30° apart\n // starting from the Ascendant\n for (let i = 0; i < 12; i++) {\n cusps[i] = this.normalizeAngle(ascendant + (i * 30));\n }\n \n return cusps;\n }\n \n /**\n * Calculates Whole Sign house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateWholeSign(ascendant) {\n const cusps = new Array(12);\n \n // In Whole Sign system, the house cusps are at the beginning of each sign\n // starting from the sign that contains the Ascendant\n \n // Determine the sign of the Ascendant (0-11)\n const ascSign = Math.floor(ascendant / 30);\n \n // Set cusps at the beginning of each sign, starting from ascendant's sign\n for (let i = 0; i < 12; i++) {\n cusps[i] = ((ascSign + i) % 12) * 30;\n }\n \n return cusps;\n }\n \n /**\n * Calculates Porphyry house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @param {number} options.mc - Midheaven longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculatePorphyry(ascendant, { mc }) {\n if (typeof mc !== 'number') {\n throw new Error(\"Porphyry house system requires mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses (1, 4, 7, 10)\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Porphyry simply divides the space between angular houses equally\n \n // Calculate houses 11, 12 (between MC and ASC)\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1 / 3));\n \n // Calculate houses 2, 3 (between ASC and IC)\n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2 / 3));\n \n // Calculate houses 5, 6 (between IC and DSC)\n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3 / 3));\n \n // Calculate houses 8, 9 (between DSC and MC)\n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4 / 3));\n \n return cusps;\n }\n \n /**\n * Implementation for Regiomontanus house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateRegiomontanus(ascendant, { latitude, mc }) {\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Regiomontanus house system requires latitude and mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Regiomontanus calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Implementation for Campanus house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateCampanus(ascendant, { latitude, mc }) {\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Campanus house system requires latitude and mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Campanus calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Implementation for Morinus house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateMorinus(ascendant, { mc }) {\n if (typeof mc !== 'number') {\n throw new Error(\"Morinus house system requires mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Morinus calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Implementation for Topocentric house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateTopocentric(ascendant, { latitude, mc }) {\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Topocentric house system requires latitude and mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Topocentric calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Helper method to calculate the smallest arc between two angles\n * @param {number} start - Start angle in degrees\n * @param {number} end - End angle in degrees\n * @returns {number} The smallest arc in degrees\n */\n calculateArc(start, end) {\n const diff = this.normalizeAngle(end - start);\n return diff <= 180 ? diff : 360 - diff;\n }\n \n /**\n * Helper method to normalize an angle to 0-360 range\n * @param {number} angle - Angle in degrees\n * @returns {number} Normalized angle\n */\n normalizeAngle(angle) {\n return ((angle % 360) + 360) % 360;\n }\n \n /**\n * Convert right ascension to ecliptic longitude\n * @param {number} ra - Right ascension in radians\n * @param {number} obliqRad - Obliquity of ecliptic in radians\n * @returns {number} Ecliptic longitude in degrees\n */\n rightAscensionToLongitude(ra, obliqRad) {\n return this.radiansToDegrees(\n Math.atan2(\n Math.sin(ra) * Math.cos(obliqRad),\n Math.cos(ra)\n )\n );\n }\n \n /**\n * Convert ecliptic longitude to right ascension\n * @param {number} long - Ecliptic longitude in degrees\n * @param {number} obliqRad - Obliquity of ecliptic in radians\n * @returns {number} Right ascension in radians\n */\n longitudeToRightAscension(long, obliqRad) {\n const longRad = this.degreesToRadians(long);\n return Math.atan2(\n Math.sin(longRad) * Math.cos(obliqRad),\n Math.cos(longRad)\n );\n }\n \n /**\n * Convert degrees to radians\n * @param {number} degrees - Angle in degrees\n * @returns {number} Angle in radians\n */\n degreesToRadians(degrees) {\n return degrees * Math.PI / 180;\n }\n \n /**\n * Convert radians to degrees\n * @param {number} radians - Angle in radians\n * @returns {number} Angle in degrees\n */\n radiansToDegrees(radians) {\n return radians * 180 / Math.PI;\n }\n}\n\nexport { HouseCalculator }; ","/**\n * ChartConfig.js\n * Configuration class for the natal chart rendering.\n */\nimport { HouseCalculator } from './HouseCalculator.js';\n\nexport class ChartConfig {\n /**\n * Creates a new configuration with default settings\n * @param {Object} customConfig - Custom configuration to merge with defaults\n */\n constructor(customConfig = {}) {\n // Astronomical data - pure positional data without styling\n this.astronomicalData = {\n ascendant: 0, // Ascendant longitude in degrees\n mc: 90, // Midheaven longitude in degrees\n latitude: 51.5, // Default latitude (London)\n houseSystem: \"Placidus\", // Default house system\n planets: {\n // Default planet positions\n sun: 0,\n moon: 0,\n mercury: 0,\n venus: 0,\n mars: 0,\n jupiter: 0,\n saturn: 0,\n uranus: 0,\n neptune: 0,\n pluto: 0\n }\n };\n \n // Primary aspects (outer circle planets to outer circle planets)\n this.primaryAspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#000000', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#E41B17', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n trine: { angle: 120, orb: 6, color: '#4CC417', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n square: { angle: 90, orb: 6, color: '#F62817', enabled: true, lineStyle: 'dashed', strokeWidth: 1 },\n sextile: { angle: 60, orb: 4, color: '#56A5EC', enabled: true, lineStyle: 'dashed', strokeWidth: 1 }\n }\n };\n \n // Secondary aspects (inner circle planets to inner circle planets)\n this.secondaryAspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#AA00AA', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#FF6600', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n trine: { angle: 120, orb: 6, color: '#00AA00', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n square: { angle: 90, orb: 6, color: '#CC0066', enabled: true, lineStyle: 'dashed', strokeWidth: 1 },\n sextile: { angle: 60, orb: 4, color: '#0099CC', enabled: true, lineStyle: 'dashed', strokeWidth: 1 }\n }\n };\n \n // Synastry aspects (outer circle planets to inner circle planets)\n this.synastryAspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#666666', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#9933CC', enabled: true, lineStyle: 'solid', strokeWidth: 0.5 },\n trine: { angle: 120, orb: 6, color: '#33AA55', enabled: true, lineStyle: 'solid', strokeWidth: 0.5 },\n square: { angle: 90, orb: 6, color: '#CC6633', enabled: true, lineStyle: 'dotted', strokeWidth: 0.5 },\n sextile: { angle: 60, orb: 4, color: '#5599DD', enabled: true, lineStyle: 'dotted', strokeWidth: 0.5 }\n }\n };\n \n // Legacy aspectSettings for backward compatibility\n // Will be mapped to primaryAspectSettings if used\n this.aspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#000000', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#E41B17', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n trine: { angle: 120, orb: 6, color: '#4CC417', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n square: { angle: 90, orb: 6, color: '#F62817', enabled: true, lineStyle: 'dashed', strokeWidth: 1 },\n sextile: { angle: 60, orb: 4, color: '#56A5EC', enabled: true, lineStyle: 'dashed', strokeWidth: 1 }\n }\n };\n \n // Planet settings\n this.planetSettings = {\n enabled: true,\n primaryEnabled: true, // Toggle for primary (inner circle) planets\n secondaryEnabled: true, // Toggle for secondary (innermost circle) planets\n dotSize: 3, // Size of the position dot\n iconSize: 24, // Size of the planet icon\n orbs: {\n // Default orbs for each planet\n sun: 8,\n moon: 8,\n mercury: 6,\n venus: 6,\n mars: 6,\n jupiter: 6,\n saturn: 6,\n uranus: 4,\n neptune: 4,\n pluto: 4\n },\n colors: {\n // Default colors for each planet\n sun: \"#ff9900\",\n moon: \"#aaaaaa\",\n mercury: \"#3399cc\",\n venus: \"#cc66cc\",\n mars: \"#cc3333\",\n jupiter: \"#9966cc\",\n saturn: \"#336633\",\n uranus: \"#33cccc\",\n neptune: \"#3366ff\",\n pluto: \"#663366\"\n },\n visible: {\n // Default visibility for each planet\n sun: true,\n moon: true,\n mercury: true,\n venus: true,\n mars: true,\n jupiter: true,\n saturn: true,\n uranus: true,\n neptune: true,\n pluto: true\n }\n };\n \n // House settings - only UI related settings, no calculations\n this.houseSettings = {\n enabled: true,\n lineColor: \"#666666\",\n textColor: \"#333333\",\n fontSize: 10,\n rotationAngle: 0 // Custom rotation angle for house system\n };\n \n // Zodiac settings\n this.zodiacSettings = {\n enabled: true,\n colors: {\n aries: \"#ff6666\",\n taurus: \"#66cc66\",\n gemini: \"#ffcc66\",\n cancer: \"#6699cc\",\n leo: \"#ff9900\",\n virgo: \"#996633\",\n libra: \"#6699ff\",\n scorpio: \"#cc3366\",\n sagittarius: \"#cc66ff\",\n capricorn: \"#339966\",\n aquarius: \"#3399ff\",\n pisces: \"#9966cc\"\n },\n fontSize: 10\n };\n \n // Radii for different chart layers\n this.radius = {\n innermost: 90, // Innermost circle (for dual charts, transits, synastry)\n zodiacInner: 120, // Inner circle (aspect container)\n zodiacMiddle: 150, // Middle circle (house boundaries)\n zodiacOuter: 180, // Outer circle (zodiac ring)\n planet: 105, // Default planet placement radius\n aspectInner: 20, // Center space for aspects\n aspectOuter: 120, // Outer boundary for aspects\n houseNumberRadius: 210 // Radius for house numbers\n };\n \n // SVG settings\n this.svg = {\n width: 460,\n height: 460,\n viewBox: \"0 0 460 460\",\n center: { x: 230, y: 230 }\n };\n \n // Assets settings\n this.assets = {\n basePath: \"./assets/\",\n zodiacIconPath: \"svg/zodiac/\",\n planetIconPath: \"svg/zodiac/\"\n };\n \n // Theme settings\n this.theme = {\n backgroundColor: \"transparent\",\n textColor: \"#333333\",\n lineColor: \"#666666\",\n lightLineColor: \"#cccccc\",\n fontFamily: \"'Arial', sans-serif\"\n };\n \n // House cusps cache - will be populated by HouseCalculator\n this.houseCusps = [];\n \n // Merge custom config with defaults (deep merge)\n this.mergeConfig(customConfig);\n \n // Initialize house cusps if we have enough data\n this._initializeHouseCusps();\n }\n\n /**\n * Merges custom configuration with the default configuration\n * @param {Object} customConfig - Custom configuration object\n */\n mergeConfig(customConfig) {\n // Helper function for deep merge\n const deepMerge = (target, source) => {\n if (typeof source !== 'object' || source === null) {\n return source;\n }\n \n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (typeof source[key] === 'object' && source[key] !== null && \n typeof target[key] === 'object' && target[key] !== null) {\n // If both are objects, recurse\n target[key] = deepMerge(target[key], source[key]);\n } else {\n // Otherwise just copy\n target[key] = source[key];\n }\n }\n }\n \n return target;\n };\n \n // Apply deep merge to all top-level properties\n for (const key in customConfig) {\n if (Object.prototype.hasOwnProperty.call(customConfig, key) && \n Object.prototype.hasOwnProperty.call(this, key)) {\n this[key] = deepMerge(this[key], customConfig[key]);\n }\n }\n }\n\n /**\n * Initializes house cusps using the HouseCalculator\n * @private\n */\n _initializeHouseCusps() {\n // Only calculate if we have the necessary data\n if (typeof this.astronomicalData.ascendant === 'number' && \n typeof this.astronomicalData.mc === 'number') {\n \n try {\n // Create calculator instance\n const houseCalculator = new HouseCalculator();\n \n // Calculate house cusps using the current house system\n this.houseCusps = houseCalculator.calculateHouseCusps(\n this.astronomicalData.ascendant,\n this.astronomicalData.houseSystem,\n {\n latitude: this.astronomicalData.latitude,\n mc: this.astronomicalData.mc\n }\n );\n } catch (error) {\n console.error(\"Failed to calculate house cusps:\", error?.message || error);\n // Set empty cusps array if calculation fails\n this.houseCusps = [];\n }\n }\n }\n\n /**\n * Gets settings for a specific planet\n * @param {string} planetName - Name of the planet\n * @returns {Object} - Planet settings\n */\n getPlanetSettings(planetName) {\n const planetLower = planetName.toLowerCase();\n return {\n color: this.planetSettings.colors[planetLower] || \"#000000\",\n size: this.planetSettings.size,\n visible: this.planetSettings.visible[planetLower] !== false\n };\n }\n\n /**\n * Gets settings for a specific aspect\n * @param {string} aspectType - Type of aspect\n * @returns {Object} - Aspect settings\n */\n getAspectSettings(aspectType) {\n const aspectLower = aspectType.toLowerCase();\n return this.aspectSettings.types[aspectLower] || \n { angle: 0, orb: this.aspectSettings.orb, color: \"#999999\", enabled: true };\n }\n\n /**\n * Gets settings for a specific zodiac sign\n * @param {string} signName - Name of the zodiac sign\n * @returns {Object} - Zodiac sign settings\n */\n getZodiacSettings(signName) {\n const signLower = signName.toLowerCase();\n return {\n color: this.zodiacSettings.colors[signLower] || \"#666666\",\n fontSize: this.zodiacSettings.fontSize\n };\n }\n\n /**\n * Updates aspect settings (legacy method - updates primaryAspectSettings)\n * @param {Object} settings - New aspect settings\n * @deprecated Use updatePrimaryAspectSettings, updateSecondaryAspectSettings, or updateSynastryAspectSettings instead\n */\n updateAspectSettings(settings) {\n this.aspectSettings = { ...this.aspectSettings, ...settings };\n // Also update primaryAspectSettings for backward compatibility\n this.primaryAspectSettings = { ...this.primaryAspectSettings, ...settings };\n }\n \n /**\n * Updates primary aspect settings (outer circle aspects)\n * @param {Object} settings - New aspect settings\n */\n updatePrimaryAspectSettings(settings) {\n this.primaryAspectSettings = { ...this.primaryAspectSettings, ...settings };\n }\n \n /**\n * Updates secondary aspect settings (inner circle aspects)\n * @param {Object} settings - New aspect settings\n */\n updateSecondaryAspectSettings(settings) {\n this.secondaryAspectSettings = { ...this.secondaryAspectSettings, ...settings };\n }\n \n /**\n * Updates synastry aspect settings (cross-circle aspects)\n * @param {Object} settings - New aspect settings\n */\n updateSynastryAspectSettings(settings) {\n this.synastryAspectSettings = { ...this.synastryAspectSettings, ...settings };\n }\n\n /**\n * Updates planet settings\n * @param {Object} settings - New planet settings\n */\n updatePlanetSettings(settings) {\n this.planetSettings = { ...this.planetSettings, ...settings };\n }\n\n /**\n * Updates house settings (visual settings only)\n * @param {Object} settings - New house settings\n */\n updateHouseSettings(settings) {\n this.houseSettings = { ...this.houseSettings, ...settings };\n }\n\n /**\n * Updates zodiac settings\n * @param {Object} settings - New zodiac settings\n */\n updateZodiacSettings(settings) {\n this.zodiacSettings = { ...this.zodiacSettings, ...settings };\n }\n\n /**\n * Sets radius for a specific layer\n * @param {string} layerName - Layer name\n * @param {number} value - Radius value\n */\n setRadius(layerName, value) {\n if (Object.prototype.hasOwnProperty.call(this.radius, layerName)) {\n this.radius[layerName] = value;\n }\n }\n\n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet\n * @param {boolean} visible - Whether the planet should be visible\n */\n togglePlanetVisibility(planetName, visible) {\n if (this.planetSettings && this.planetSettings.visible) {\n this.planetSettings.visible[planetName] = visible;\n }\n }\n \n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Whether houses should be visible\n */\n toggleHousesVisibility(visible) {\n this.houseSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of aspects (legacy - toggles all aspect types)\n * @param {boolean} visible - Whether aspects should be visible\n * @deprecated Use togglePrimaryAspectsVisibility, toggleSecondaryAspectsVisibility, or toggleSynastryAspectsVisibility instead\n */\n toggleAspectsVisibility(visible) {\n this.aspectSettings.enabled = visible;\n this.primaryAspectSettings.enabled = visible;\n this.secondaryAspectSettings.enabled = visible;\n this.synastryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of primary aspects (outer circle)\n * @param {boolean} visible - Whether primary aspects should be visible\n */\n togglePrimaryAspectsVisibility(visible) {\n this.primaryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of secondary aspects (inner circle)\n * @param {boolean} visible - Whether secondary aspects should be visible\n */\n toggleSecondaryAspectsVisibility(visible) {\n this.secondaryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of synastry aspects (cross-circle)\n * @param {boolean} visible - Whether synastry aspects should be visible\n */\n toggleSynastryAspectsVisibility(visible) {\n this.synastryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Whether primary planets should be visible\n */\n togglePrimaryPlanetsVisibility(visible) {\n this.planetSettings.primaryEnabled = visible;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Whether secondary planets should be visible\n */\n toggleSecondaryPlanetsVisibility(visible) {\n this.planetSettings.secondaryEnabled = visible;\n }\n\n /**\n * Sets the current house system and recalculates house cusps\n * @param {string} systemName - Name of the house system to use\n * @returns {boolean} - Success status\n */\n setHouseSystem(systemName) {\n // Update the house system name\n this.astronomicalData.houseSystem = systemName;\n \n // Recalculate house cusps with new system\n this._initializeHouseCusps();\n \n return true;\n }\n \n /**\n * Gets the current house cusps\n * @returns {Array} - Array of house cusps\n */\n getHouseCusps() {\n // If we don't have house cusps data yet, calculate it\n if (!this.houseCusps || this.houseCusps.length === 0) {\n this._initializeHouseCusps();\n }\n \n // Ensure we're returning the correct format - convert to legacy format if needed\n if (this.houseCusps.length > 0 && typeof this.houseCusps[0] === 'number') {\n return this.houseCusps.map(longitude => ({ lon: longitude }));\n }\n \n return this.houseCusps;\n }\n \n /**\n * Sets the Ascendant position and recalculates house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @returns {boolean} - Success status\n */\n setAscendant(ascendant) {\n if (typeof ascendant !== 'number' || ascendant < 0 || ascendant >= 360) {\n return false;\n }\n \n this.astronomicalData.ascendant = ascendant;\n this._initializeHouseCusps();\n return true;\n }\n \n /**\n * Sets the Midheaven position and recalculates house cusps\n * @param {number} mc - Midheaven longitude in degrees\n * @returns {boolean} - Success status\n */\n setMidheaven(mc) {\n if (typeof mc !== 'number' || mc < 0 || mc >= 360) {\n return false;\n }\n \n this.astronomicalData.mc = mc;\n this._initializeHouseCusps();\n return true;\n }\n \n /**\n * Sets the geographic latitude and recalculates house cusps\n * @param {number} latitude - Geographic latitude in degrees\n * @returns {boolean} - Success status\n */\n setLatitude(latitude) {\n if (typeof latitude !== 'number' || latitude < -90 || latitude > 90) {\n return false;\n }\n \n this.astronomicalData.latitude = latitude;\n this._initializeHouseCusps();\n return true;\n }\n \n /**\n * Sets a planet's position\n * @param {string} planetName - Name of the planet\n * @param {number} longitude - Longitude in degrees\n * @returns {boolean} - Success status\n */\n setPlanetPosition(planetName, longitude) {\n const planetLower = planetName.toLowerCase();\n \n if (typeof longitude !== 'number' || longitude < 0 || longitude >= 360) {\n return false;\n }\n \n if (this.astronomicalData.planets.hasOwnProperty(planetLower)) {\n this.astronomicalData.planets[planetLower] = longitude;\n return true;\n }\n \n return false;\n }\n \n /**\n * Gets a planet's position\n * @param {string} planetName - Name of the planet\n * @returns {number|null} - Planet longitude or null if not found\n */\n getPlanetPosition(planetName) {\n const planetLower = planetName.toLowerCase();\n \n if (this.astronomicalData.planets.hasOwnProperty(planetLower)) {\n return this.astronomicalData.planets[planetLower];\n }\n \n return null;\n }\n \n /**\n * Gets the current house system\n * @returns {string} - Name of the current house system\n */\n getHouseSystem() {\n return this.astronomicalData.houseSystem;\n }\n \n /**\n * Gets the available house systems by creating a temporary calculator\n * @returns {Array} - Array of available house system names\n */\n getAvailableHouseSystems() {\n const calculator = new HouseCalculator();\n return calculator.getAvailableHouseSystems();\n }\n} ","/**\r\n * SvgUtils.js\r\n * Utility class for working with SVG elements\r\n */\r\nexport class SvgUtils {\r\n constructor() {\r\n this.svgNS = \"http://www.w3.org/2000/svg\";\r\n }\r\n\r\n /**\r\n * Creates an SVG element with the specified tag\r\n * @param {string} tagName - Name of the SVG tag\r\n * @param {Object} attributes - Object with attributes to set\r\n * @returns {Element} Created SVG element\r\n */\r\n createSVGElement(tagName, attributes = {}) {\r\n const element = document.createElementNS(this.svgNS, tagName);\r\n \r\n for (const [key, value] of Object.entries(attributes)) {\r\n element.setAttribute(key, value);\r\n }\r\n \r\n return element;\r\n }\r\n\r\n /**\r\n * Adds a tooltip (title) to an SVG element\r\n * @param {Element} element - SVG element\r\n * @param {string} text - Tooltip text\r\n * @returns {Element} The element with tooltip\r\n */\r\n addTooltip(element, text) {\r\n const title = document.createElementNS(this.svgNS, \"title\");\r\n title.textContent = text;\r\n element.appendChild(title);\r\n return element;\r\n }\r\n\r\n /**\r\n * Calculates coordinates of a point on a circle\r\n * @param {number} centerX - X coordinate of the center\r\n * @param {number} centerY - Y coordinate of the center\r\n * @param {number} radius - Circle radius\r\n * @param {number} angle - Angle in degrees\r\n * @returns {Object} Object with x and y coordinates\r\n */\r\n pointOnCircle(centerX, centerY, radius, angle) {\r\n // Convert angle to radians (accounting for 0 starting at the top)\r\n const radians = (angle - 90) * (Math.PI / 180);\r\n \r\n return {\r\n x: centerX + radius * Math.cos(radians),\r\n y: centerY + radius * Math.sin(radians)\r\n };\r\n }\r\n} ","/**\r\n * SVGManager.js\r\n * Handles the creation, management, and querying of the main SVG element and its layer groups.\r\n */\r\nimport { ServiceRegistry } from '../services/ServiceRegistry.js';\r\nimport { SvgUtils } from '../utils/SvgUtils.js';\r\n\r\nexport class SVGManager {\r\n /**\r\n * Constructor\r\n * @param {Object} options - Manager options\r\n * @param {SvgUtils} [options.svgUtils] - SvgUtils instance (optional, will use from registry if not provided)\r\n */\r\n constructor(options = {}) {\r\n this.svgNS = \"http://www.w3.org/2000/svg\";\r\n this.svg = null; // Reference to the main SVG element\r\n this.groups = {}; // References to the layer groups (g elements)\r\n \r\n // Use injected svgUtils or get from registry\r\n this.svgUtils = options.svgUtils || ServiceRegistry.getSvgUtils();\r\n \r\n // Define standard group order (bottom to top)\r\n this.groupOrder = [\r\n 'zodiac',\r\n 'houseDivisions',\r\n 'primaryAspects', // Aspects between primary (outer) planets\r\n 'secondaryAspects', // Aspects between secondary (inner) planets\r\n 'synastryAspects', // Aspects between primary and secondary planets\r\n 'aspects', // Legacy aspect group (for backward compatibility)\r\n 'primaryPlanets', // Outer circle planets\r\n 'secondaryPlanets', // Inner circle planets\r\n 'houses' // House numbers on top\r\n // Add other groups if needed, e.g., 'tooltips'\r\n ];\r\n }\r\n\r\n /**\r\n * Initializes the main SVG element within a container.\r\n * @param {string|Element} containerSelector - ID/CSS selector of the container element or the element itself.\r\n * @param {Object} options - SVG attributes (e.g., viewBox, width, height, class, preserveAspectRatio).\r\n * @returns {SVGElement | null} The created SVG element or null if container not found.\r\n */\r\n initialize(containerSelector, options = {}) {\r\n // Handle both string selectors and DOM elements\r\n let container;\r\n if (typeof containerSelector === 'string') {\r\n container = document.querySelector(containerSelector);\r\n if (!container) {\r\n console.error(`SVGManager: Container not found with selector: ${containerSelector}`);\r\n return null;\r\n }\r\n } else if (containerSelector instanceof Element || containerSelector instanceof HTMLElement) {\r\n container = containerSelector;\r\n } else {\r\n console.error(`SVGManager: Invalid container. Expected string selector or DOM element.`);\r\n return null;\r\n }\r\n\r\n // Clear container\r\n container.innerHTML = '';\r\n\r\n // Default options\r\n const defaultOptions = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n viewBox: \"0 0 460 460\", // Default size, should match ChartConfig ideally\r\n preserveAspectRatio: \"xMidYMid meet\",\r\n class: \"nocturna-wheel-svg\" // Default class\r\n };\r\n\r\n const svgOptions = { ...defaultOptions, ...options };\r\n\r\n // Create SVG element\r\n this.svg = document.createElementNS(this.svgNS, \"svg\");\r\n\r\n // Set attributes\r\n for (const [key, value] of Object.entries(svgOptions)) {\r\n this.svg.setAttribute(key, value);\r\n }\r\n\r\n // Append to container\r\n container.appendChild(this.svg);\r\n console.log(\"SVGManager: SVG initialized\");\r\n return this.svg;\r\n }\r\n\r\n /**\r\n * Creates the standard layer groups within the SVG in the predefined order.\r\n */\r\n createStandardGroups() {\r\n if (!this.svg) {\r\n console.error(\"SVGManager: Cannot create groups, SVG not initialized.\");\r\n return;\r\n }\r\n\r\n // Clear existing groups before creating new ones (or check if they exist)\r\n this.groups = {};\r\n // Remove existing group elements from SVG if any\r\n this.svg.querySelectorAll('g').forEach(g => g.remove());\r\n\r\n console.log(\"SVGManager: Creating standard groups:\", this.groupOrder);\r\n this.groupOrder.forEach(groupName => {\r\n this.createGroup(groupName);\r\n });\r\n \r\n // Create a legacy 'planets' group for backward compatibility\r\n // This will be deprecated in future versions\r\n this.createGroup('planets');\r\n }\r\n\r\n /**\r\n * Creates a named group (<g>) element and appends it to the SVG.\r\n * If the group already exists, it returns the existing group.\r\n * @param {string} name - The name (and ID) for the group.\r\n * @returns {SVGElement | null} The created or existing group element, or null if SVG not initialized.\r\n */\r\n createGroup(name) {\r\n if (!this.svg) {\r\n console.error(`SVGManager: Cannot create group '${name}', SVG not initialized.`);\r\n return null;\r\n }\r\n if (this.groups[name]) {\r\n return this.groups[name]; // Return existing group\r\n }\r\n\r\n const group = document.createElementNS(this.svgNS, \"g\");\r\n group.setAttribute(\"id\", `group-${name}`); // Set ID for easy debugging/selection\r\n group.setAttribute(\"class\", `svg-group svg-group-${name}`); // Add class\r\n\r\n this.svg.appendChild(group); // Append to SVG (order matters based on creation sequence)\r\n this.groups[name] = group;\r\n // console.log(`SVGManager: Created group '${name}'`);\r\n return group;\r\n }\r\n\r\n /**\r\n * Retrieves a previously created group element by name.\r\n * @param {string} name - The name of the group.\r\n * @returns {SVGElement | null} The group element or null if not found or not initialized.\r\n */\r\n getGroup(name) {\r\n if (!this.svg) {\r\n console.warn(`SVGManager: Cannot get group '${name}', SVG not initialized.`);\r\n return null;\r\n }\r\n \r\n // For backward compatibility, map 'planets' to 'primaryPlanets'\r\n if (name === 'planets') {\r\n console.warn('SVGManager: Using deprecated \"planets\" group. Use \"primaryPlanets\" or \"secondaryPlanets\" instead.');\r\n name = 'primaryPlanets';\r\n }\r\n \r\n if (!this.groups[name]) {\r\n console.warn(`SVGManager: Group '${name}' not found. Creating it.`);\r\n // Attempt to create if missing, might indicate an issue elsewhere\r\n return this.createGroup(name);\r\n }\r\n return this.groups[name];\r\n }\r\n\r\n /**\r\n * Retrieves all created group elements.\r\n * @returns {Object<string, SVGElement>} An object mapping group names to their SVGElement references.\r\n */\r\n getAllGroups() {\r\n return this.groups;\r\n }\r\n\r\n /**\r\n * Returns the main SVG element.\r\n * @returns {SVGElement | null} The main SVG element or null if not initialized.\r\n */\r\n getSVG() {\r\n return this.svg;\r\n }\r\n\r\n} // End of SVGManager class ","/**\n * BaseRenderer.js\n * Self-contained base class for all renderers.\n * This version has all dependencies inlined to avoid import issues.\n */\n\n// Define a completely self-contained renderer base class\nexport class BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {Object} options.config - Chart configuration object.\n * @param {Object} options.svgUtils - SVG utility service.\n */\n constructor(options) {\n if (!options || !options.svgNS || !options.config) {\n throw new Error(`${this.constructor.name}: Missing required options (svgNS, config)`);\n }\n \n // Store base options\n this.svgNS = options.svgNS;\n this.config = options.config;\n this.options = options;\n \n // Use the provided svgUtils or create minimal internal SVG utilities\n this.svgUtils = options.svgUtils || {\n // Store SVG namespace\n svgNS: this.svgNS,\n \n // Create SVG element\n createSVGElement: (tagName, attributes = {}) => {\n const element = document.createElementNS(this.svgNS, tagName);\n for (const [key, value] of Object.entries(attributes)) {\n element.setAttribute(key, value);\n }\n return element;\n },\n \n // Add tooltip to element\n addTooltip: (element, text) => {\n const title = document.createElementNS(this.svgNS, \"title\");\n title.textContent = text;\n element.appendChild(title);\n return element;\n },\n \n // Calculate point on circle\n pointOnCircle: (centerX, centerY, radius, angle) => {\n const radians = (angle - 90) * (Math.PI / 180);\n return {\n x: centerX + radius * Math.cos(radians),\n y: centerY + radius * Math.sin(radians)\n };\n }\n };\n \n // Get dimensions from config\n this.centerX = this.config.svg.center.x;\n this.centerY = this.config.svg.center.y;\n this.innerRadius = this.config.radius.zodiacInner;\n this.middleRadius = this.config.radius.zodiacMiddle;\n this.outerRadius = this.config.radius.zodiacOuter;\n }\n\n /**\n * Clears all child nodes of the given parent SVG group.\n * @param {Element} parentGroup - The SVG group to clear.\n */\n clearGroup(parentGroup) {\n if (parentGroup) {\n parentGroup.innerHTML = '';\n }\n }\n\n /**\n * Abstract render method to be implemented by subclasses.\n * @param {Element} parentGroup - The parent SVG group element.\n * @returns {Array} Array of rendered SVG elements.\n */\n render(parentGroup) {\n throw new Error(`${this.constructor.name}: render() not implemented.`);\n }\n} ","/**\r\n * AstrologyUtils.js\r\n * Utility class for astrological calculations\r\n */\r\nclass AstrologyUtils {\r\n /**\r\n * Capitalizes the first letter of a string\r\n * @param {string} string - Input string\r\n * @returns {string} String with capitalized first letter\r\n */\r\n static capitalizeFirstLetter(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n }\r\n\r\n /**\r\n * Determines the house based on position and rotation angle\r\n * @param {number} position - Position in degrees (0-359)\r\n * @param {number} rotationAngle - Rotation angle of the house system\r\n * @returns {number} House number (1-12)\r\n */\r\n static getHouseFromPosition(position, rotationAngle = 0) {\r\n // Adjust position relative to house system rotation\r\n const adjustedPosition = (position - rotationAngle + 360) % 360;\r\n // Determine house\r\n return Math.floor(adjustedPosition / 30) + 1;\r\n }\r\n\r\n /**\r\n * Returns the list of zodiac sign names\r\n * @returns {Array} Array of zodiac sign names\r\n */\r\n static getZodiacSigns() {\r\n return [\r\n \"aries\", \"taurus\", \"gemini\", \"cancer\", \"leo\", \"virgo\", \r\n \"libra\", \"scorpio\", \"sagittarius\", \"capricorn\", \"aquarius\", \"pisces\"\r\n ];\r\n }\r\n\r\n /**\r\n * Returns the available house systems with descriptions\r\n * @returns {Object} Object mapping house system names to their descriptions\r\n */\r\n static getHouseSystems() {\r\n return {\r\n \"Placidus\": \"Most commonly used house system in Western astrology, based on time of day\",\r\n \"Koch\": \"Developed by Walter Koch, a time-based system similar to Placidus\",\r\n \"Campanus\": \"Medieval system dividing the prime vertical into equal parts\",\r\n \"Regiomontanus\": \"Similar to Campanus, but using the celestial equator instead of prime vertical\",\r\n \"Equal\": \"Divides the ecliptic into 12 equal segments of 30° each from the Ascendant\",\r\n \"Whole Sign\": \"Assigns the entire rising sign to the 1st house, with subsequent signs as houses\",\r\n \"Porphyry\": \"Simple system that divides each quadrant into three equal parts\",\r\n \"Topocentric\": \"Modern system similar to Placidus but more accurate for extreme latitudes\"\r\n };\r\n }\r\n\r\n /**\r\n * Returns the list of planets\r\n * @returns {Array} Array of planet names\r\n */\r\n static getPlanets() {\r\n return [\r\n \"sun\", \"moon\", \"mercury\", \"venus\", \"mars\", \r\n \"jupiter\", \"saturn\", \"uranus\", \"neptune\", \"pluto\"\r\n ];\r\n }\r\n\r\n /**\r\n * Converts a house number to a Roman numeral\r\n * @param {number} house - House number (1-12)\r\n * @returns {string} Roman numeral\r\n */\r\n static houseToRoman(house) {\r\n const romanNumerals = [\"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\", \"X\", \"XI\", \"XII\"];\r\n return romanNumerals[house - 1] || '';\r\n }\r\n\r\n /**\r\n * Returns the full name of a planet in the specified language\r\n * @param {string} planetCode - Planet code (sun, moon, etc.)\r\n * @param {string} language - Language code (default: 'en')\r\n * @returns {string} Full planet name\r\n */\r\n static getPlanetFullName(planetCode, language = 'en') {\r\n const planetNames = {\r\n en: {\r\n \"sun\": \"Sun\",\r\n \"moon\": \"Moon\",\r\n \"mercury\": \"Mercury\",\r\n \"venus\": \"Venus\",\r\n \"mars\": \"Mars\",\r\n \"jupiter\": \"Jupiter\",\r\n \"saturn\": \"Saturn\",\r\n \"uranus\": \"Uranus\",\r\n \"neptune\": \"Neptune\",\r\n \"pluto\": \"Pluto\"\r\n },\r\n ru: {\r\n \"sun\": \"Солнце\",\r\n \"moon\": \"Луна\",\r\n \"mercury\": \"Меркурий\",\r\n \"venus\": \"Венера\",\r\n \"mars\": \"Марс\",\r\n \"jupiter\": \"Юпитер\",\r\n \"saturn\": \"Сатурн\",\r\n \"uranus\": \"Уран\",\r\n \"neptune\": \"Нептун\",\r\n \"pluto\": \"Плутон\"\r\n }\r\n };\r\n \r\n const names = planetNames[language] || planetNames.en;\r\n return names[planetCode.toLowerCase()] || this.capitalizeFirstLetter(planetCode);\r\n }\r\n\r\n /**\r\n * Returns the full name of a zodiac sign in the specified language\r\n * @param {string} signCode - Zodiac sign code (aries, taurus, etc.)\r\n * @param {string} language - Language code (default: 'en')\r\n * @returns {string} Full zodiac sign name\r\n */\r\n static getZodiacSignFullName(signCode, language = 'en') {\r\n const signNames = {\r\n en: {\r\n \"aries\": \"Aries\",\r\n \"taurus\": \"Taurus\",\r\n \"gemini\": \"Gemini\",\r\n \"cancer\": \"Cancer\",\r\n \"leo\": \"Leo\",\r\n \"virgo\": \"Virgo\",\r\n \"libra\": \"Libra\",\r\n \"scorpio\": \"Scorpio\",\r\n \"sagittarius\": \"Sagittarius\",\r\n \"capricorn\": \"Capricorn\",\r\n \"aquarius\": \"Aquarius\",\r\n \"pisces\": \"Pisces\"\r\n },\r\n ru: {\r\n \"aries\": \"Овен\",\r\n \"taurus\": \"Телец\",\r\n \"gemini\": \"Близнецы\",\r\n \"cancer\": \"Рак\",\r\n \"leo\": \"Лев\",\r\n \"virgo\": \"Дева\",\r\n \"libra\": \"Весы\",\r\n \"scorpio\": \"Скорпион\",\r\n \"sagittarius\": \"Стрелец\",\r\n \"capricorn\": \"Козерог\",\r\n \"aquarius\": \"Водолей\",\r\n \"pisces\": \"Рыбы\"\r\n }\r\n };\r\n \r\n const names = signNames[language] || signNames.en;\r\n return names[signCode.toLowerCase()] || this.capitalizeFirstLetter(signCode);\r\n }\r\n}\r\n\r\nexport { AstrologyUtils }; ","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * ZodiacRenderer.js\n * Class for rendering the zodiac circle and signs.\n */\nexport class ZodiacRenderer extends BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object.\n * @param {string} options.assetBasePath - Base path for assets.\n * @param {IconProvider} [options.iconProvider] - Icon provider service.\n */\n constructor(options) {\n super(options);\n \n // Store the icon provider\n this.iconProvider = options.iconProvider;\n \n // assetBasePath is required only if IconProvider is not available\n if (!options.assetBasePath && !this.iconProvider) {\n throw new Error(\"ZodiacRenderer: Missing required option assetBasePath or iconProvider\");\n }\n \n // Set default assetBasePath if not provided (for backward compatibility)\n this.assetBasePath = options.assetBasePath || './assets/';\n \n this.signIconRadius = (this.outerRadius + this.middleRadius) / 2;\n this.signIconSize = 30;\n }\n\n /**\n * Renders the zodiac wheel components.\n * @param {Element} parentGroup - The parent SVG group element.\n * @returns {Array} Array of rendered SVG elements (or empty array).\n */\n render(parentGroup) {\n if (!parentGroup) {\n console.error(\"ZodiacRenderer: parentGroup is null or undefined.\");\n return [];\n }\n this.clearGroup(parentGroup);\n\n const renderedElements = [];\n\n renderedElements.push(...this.renderBaseCircles(parentGroup));\n renderedElements.push(...this.renderDivisionLines(parentGroup));\n renderedElements.push(...this.renderZodiacSigns(parentGroup));\n\n console.log(\"ZodiacRenderer: Rendering complete.\");\n return renderedElements;\n }\n\n /**\n * Renders the base circles for the chart layout.\n * @param {Element} parentGroup - The parent SVG group.\n * @returns {Array<Element>} Array containing the created circle elements.\n */\n renderBaseCircles(parentGroup) {\n const elements = [];\n const circles = [\n { r: this.outerRadius, class: \"chart-outer-circle\" },\n { r: this.middleRadius, class: \"chart-middle-circle\" },\n { r: this.innerRadius, class: \"chart-inner-circle\" }\n ];\n\n circles.forEach(circleData => {\n // Determine stroke color and width based on circle type\n let strokeColor = \"#999\";\n let strokeWidth = \"0.5\";\n if (circleData.class === \"chart-outer-circle\") {\n strokeColor = \"#666\";\n strokeWidth = \"1\";\n }\n \n const circle = this.svgUtils.createSVGElement(\"circle\", {\n cx: this.centerX,\n cy: this.centerY,\n r: circleData.r,\n fill: \"transparent\", // Explicitly set transparent fill to avoid default black\n stroke: strokeColor, // Explicitly set stroke to ensure visibility\n \"stroke-width\": strokeWidth, // Explicitly set stroke width\n class: `zodiac-element ${circleData.class}` // Add base class\n });\n parentGroup.appendChild(circle);\n elements.push(circle);\n });\n return elements;\n }\n\n /**\n * Renders the division lines between zodiac signs.\n * @param {Element} parentGroup - The parent SVG group.\n * @returns {Array<Element>} Array containing the created line elements.\n */\n renderDivisionLines(parentGroup) {\n const elements = [];\n for (let i = 0; i < 12; i++) {\n const angle = i * 30; // 30 degrees per sign\n\n // Lines span from the inner zodiac ring to the outer zodiac ring\n const point1 = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.middleRadius, angle);\n const point2 = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.outerRadius, angle);\n\n // Instead of skipping lines, use special classes for cardinal points\n let specialClass = \"\";\n if (angle === 0) specialClass = \"aries-point\"; // Aries point (0°)\n else if (angle === 90) specialClass = \"cancer-point\"; // Cancer point (90°)\n else if (angle === 180) specialClass = \"libra-point\"; // Libra point (180°)\n else if (angle === 270) specialClass = \"capricorn-point\"; // Capricorn point (270°)\n\n const line = this.svgUtils.createSVGElement(\"line\", {\n x1: point1.x,\n y1: point1.y,\n x2: point2.x,\n y2: point2.y,\n stroke: \"#999\", // Explicitly set stroke to ensure visibility\n \"stroke-width\": \"0.75\", // Explicitly set stroke width\n class: `zodiac-element zodiac-division-line ${specialClass}`\n });\n\n parentGroup.appendChild(line);\n elements.push(line);\n }\n return elements;\n }\n\n /**\n * Renders the zodiac sign icons.\n * @param {Element} parentGroup - The parent SVG group.\n * @returns {Array<Element>} Array containing the created image elements.\n */\n renderZodiacSigns(parentGroup) {\n const elements = [];\n const zodiacSigns = AstrologyUtils.getZodiacSigns(); // Assumes AstrologyUtils is available\n\n for (let i = 0; i < 12; i++) {\n const signName = zodiacSigns[i];\n // Place icon in the middle of the sign's 30-degree sector\n const angle = i * 30 + 15;\n\n // Calculate position for the icon center\n const point = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.signIconRadius, angle);\n\n // Get icon path using IconProvider if available\n let iconHref;\n if (this.iconProvider) {\n iconHref = this.iconProvider.getZodiacIconPath(signName);\n } else {\n // Fallback to old path construction\n const basePath = this.options.assetBasePath || this.assetBasePath || './assets/';\n iconHref = `${basePath}svg/zodiac/zodiac-sign-${signName}.svg`;\n }\n \n // Log icon path for debugging (only log first time for each sign to avoid spam)\n if (!this._loggedSigns) this._loggedSigns = {};\n if (!this._loggedSigns[signName]) {\n console.log(`ZodiacRenderer: Loading sign '${signName}':`, \n iconHref.startsWith('data:') ? 'inline data URL' : iconHref);\n this._loggedSigns[signName] = true;\n }\n \n const icon = this.svgUtils.createSVGElement(\"image\", {\n x: point.x - this.signIconSize / 2, // Offset to center the icon\n y: point.y - this.signIconSize / 2,\n width: this.signIconSize,\n height: this.signIconSize,\n href: iconHref,\n class: `zodiac-element zodiac-sign zodiac-sign-${signName}` // Add base and specific class\n });\n\n // Fallback for missing icons\n icon.addEventListener('error', () => {\n console.warn(`Zodiac sign icon not found: ${iconHref}`);\n icon.setAttribute('href', ''); // Remove broken link\n \n // Create a text fallback\n const fallbackText = signName.substring(0, 3).toUpperCase();\n \n // Use IconProvider's createTextFallback if available\n let textElement;\n if (this.iconProvider) {\n textElement = this.iconProvider.createTextFallback(\n this.svgUtils,\n {\n x: point.x,\n y: point.y,\n size: '10px',\n color: '#ccc',\n className: `zodiac-element zodiac-sign zodiac-sign-${signName}`\n },\n fallbackText\n );\n } else {\n // Legacy fallback\n textElement = this.svgUtils.createSVGElement('text', {\n x: point.x,\n y: point.y,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'central',\n 'font-size': '10px',\n fill: '#ccc',\n class: `zodiac-element zodiac-sign zodiac-sign-${signName}`\n });\n textElement.textContent = fallbackText;\n }\n \n parentGroup.appendChild(textElement);\n elements.push(textElement); // Add placeholder to rendered elements\n });\n\n\n // Add tooltip with the full sign name\n this.svgUtils.addTooltip(icon, AstrologyUtils.getZodiacSignFullName(signName));\n\n parentGroup.appendChild(icon);\n elements.push(icon);\n }\n return elements;\n }\n} // End of ZodiacRenderer class","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * HouseRenderer.js\n * Class for rendering astrological houses in a natal chart.\n */\nexport class HouseRenderer extends BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object.\n * @param {Object} options.houseData - House cusps data (optional).\n */\n constructor(options) {\n super(options);\n this.houseData = options.houseData || [];\n // Specific radii for house renderer\n this.extendedRadius = this.outerRadius + 25;\n this.numberRadius = this.outerRadius + 30;\n }\n\n /**\n * Renders the house components.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {number} rotationAngle - Rotation angle for the house system (default: 0).\n * @returns {Array} Array of rendered SVG elements.\n */\n render(parentGroup, rotationAngle = 0) {\n if (!parentGroup) {\n console.error(\"HouseRenderer: parentGroup is null or undefined.\");\n return [];\n }\n // Clear the group before rendering\n this.clearGroup(parentGroup);\n \n const renderedElements = [];\n \n renderedElements.push(...this.renderDivisions(parentGroup, rotationAngle));\n renderedElements.push(...this.renderNumbers(parentGroup, rotationAngle));\n \n console.log(\"HouseRenderer: Rendering complete.\");\n return renderedElements;\n }\n\n /**\n * Renders the house division lines.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {number} rotationAngle - Rotation angle for the house system.\n * @returns {Array<Element>} Array containing the created line elements.\n */\n renderDivisions(parentGroup, rotationAngle) {\n const elements = [];\n let ascendantAlignmentOffset = 0;\n \n // Log house data for debugging\n console.log(\"HouseRenderer: House data for divisions:\", this.houseData);\n \n // Calculate offset only if house data is present\n if (this.houseData && this.houseData.length >= 12) {\n // Handle both legacy format { lon: value } and new format [value1, value2, ...]\n const ascendantLon = this.getHouseLongitude(this.houseData[0]);\n // Offset needed to place Ascendant (house 1 cusp) at 0 degrees (top side)\n ascendantAlignmentOffset = (360 - ascendantLon) % 360;\n }\n \n // Add division lines for 12 houses with rotation\n for (let i = 0; i < 12; i++) {\n // Use custom house positions if available, otherwise evenly distribute\n let baseAngle;\n if (this.houseData && this.houseData.length >= 12) {\n baseAngle = this.getHouseLongitude(this.houseData[i]);\n } else {\n baseAngle = i * 30; // Default if no data\n }\n // Apply alignment offset and user rotation\n const angle = (baseAngle + ascendantAlignmentOffset + rotationAngle) % 360;\n \n // Determine the house type/class for styling\n let axisClass = '';\n if (i === 0) axisClass = 'axis asc'; // ASC - Ascendant (1st house cusp)\n else if (i === 3) axisClass = 'axis ic'; // IC - Imum Coeli (4th house cusp)\n else if (i === 6) axisClass = 'axis dsc'; // DSC - Descendant (7th house cusp)\n else if (i === 9) axisClass = 'axis mc'; // MC - Medium Coeli (10th house cusp)\n \n // Calculate points for inner to middle circle lines\n const innerPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.innerRadius, angle);\n const middlePoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.middleRadius, angle);\n \n // Determine stroke color and width based on line type\n let innerStrokeColor = \"#999\";\n let innerStrokeWidth = \"0.75\";\n \n let outerStrokeColor = \"#999\";\n let outerStrokeWidth = \"0.75\";\n let outerStrokeDasharray = null;\n \n if (axisClass.includes('axis')) {\n // Cardinal points (ASC, DSC, IC, MC) - solid, darker\n innerStrokeColor = \"#555\";\n innerStrokeWidth = \"1\";\n outerStrokeColor = \"#555\";\n outerStrokeWidth = \"1\";\n // Axes are always solid\n } else {\n // Regular lines - outer lines are dashed\n outerStrokeDasharray = \"2,2\";\n }\n \n // Create line from inner to middle circle\n const innerLine = this.svgUtils.createSVGElement(\"line\", {\n x1: innerPoint.x,\n y1: innerPoint.y,\n x2: middlePoint.x,\n y2: middlePoint.y,\n stroke: innerStrokeColor, // Explicitly set stroke to ensure visibility\n \"stroke-width\": innerStrokeWidth, // Explicitly set stroke width\n class: `house-element house-division-line ${axisClass}`\n });\n \n // Ensure cardinal points render above zodiac lines\n if (axisClass.includes('axis')) {\n innerLine.style.zIndex = 10;\n }\n \n parentGroup.appendChild(innerLine);\n elements.push(innerLine);\n \n // Calculate points for middle to outer circle lines\n const outerPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.outerRadius, angle);\n \n // We don't render the middle segment anymore (between middle and outer circles)\n // to avoid overlapping with zodiac signs\n \n // Calculate point for extended line outside of the outer circle\n const extendedPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.extendedRadius, angle);\n \n // Create line from outer circle to extended point\n const outerLineAttrs = {\n x1: outerPoint.x,\n y1: outerPoint.y,\n x2: extendedPoint.x,\n y2: extendedPoint.y,\n stroke: outerStrokeColor, // Explicitly set stroke to ensure visibility\n \"stroke-width\": outerStrokeWidth, // Explicitly set stroke width\n class: `house-element house-division-line outer ${axisClass}`\n };\n \n if (outerStrokeDasharray) {\n outerLineAttrs[\"stroke-dasharray\"] = outerStrokeDasharray;\n }\n \n const outerLine = this.svgUtils.createSVGElement(\"line\", outerLineAttrs);\n \n // Ensure cardinal points render above zodiac lines\n if (axisClass.includes('axis')) {\n outerLine.style.zIndex = 10;\n }\n \n parentGroup.appendChild(outerLine);\n elements.push(outerLine);\n }\n \n return elements;\n }\n\n /**\n * Renders the house numbers.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {number} rotationAngle - Rotation angle for the house system.\n * @returns {Array<Element>} Array containing the created text elements.\n */\n renderNumbers(parentGroup, rotationAngle) {\n const elements = [];\n let ascendantAlignmentOffset = 0;\n \n // Log house data for debugging\n console.log(\"HouseRenderer: House data for numbers:\", this.houseData);\n \n // Calculate offset only if house data is present\n if (this.houseData && this.houseData.length >= 12) {\n const ascendantLon = this.getHouseLongitude(this.houseData[0]);\n // Offset needed to place Ascendant (house 1 cusp) at 0 degrees (top side)\n ascendantAlignmentOffset = (360 - ascendantLon) % 360;\n }\n \n // Add Roman numerals for house numbers\n for (let i = 0; i < 12; i++) {\n // Get house angle with rotation\n let baseHouseAngle;\n if (this.houseData && this.houseData.length >= 12) {\n baseHouseAngle = this.getHouseLongitude(this.houseData[i]);\n } else {\n baseHouseAngle = i * 30; // Default if no data\n }\n // Apply alignment offset and user rotation\n const houseAngle = (baseHouseAngle + ascendantAlignmentOffset + rotationAngle) % 360;\n \n // Offset text from house line clockwise\n const angle = (houseAngle + 15) % 360; // Place in middle of house segment, apply modulo\n \n // Calculate position for house number\n const point = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.numberRadius, angle);\n \n // Create text element for house number\n const text = this.svgUtils.createSVGElement(\"text\", {\n x: point.x,\n y: point.y,\n class: \"house-element house-number\"\n });\n \n // Set text alignment based on position\n if ((angle >= 315 || angle < 45)) {\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"dominant-baseline\", \"auto\");\n }\n // For right side (houses on right)\n else if (angle >= 45 && angle < 135) {\n text.setAttribute(\"text-anchor\", \"start\");\n text.setAttribute(\"dominant-baseline\", \"middle\");\n }\n // For bottom half (houses at bottom)\n else if (angle >= 135 && angle < 225) {\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"dominant-baseline\", \"hanging\");\n }\n // For left side (houses on left)\n else {\n text.setAttribute(\"text-anchor\", \"end\");\n text.setAttribute(\"dominant-baseline\", \"middle\");\n }\n \n // Set house number as text (Roman numeral)\n text.textContent = AstrologyUtils.houseToRoman(i + 1);\n \n // Add tooltip with house information\n this.svgUtils.addTooltip(text, `House ${i + 1}`);\n \n parentGroup.appendChild(text);\n elements.push(text);\n }\n \n return elements;\n }\n \n /**\n * Helper method to get the longitude from various house data formats\n * @param {Object|number} houseData - House cusp data (can be object with lon property or direct number)\n * @returns {number} The house cusp longitude in degrees\n */\n getHouseLongitude(houseData) {\n // Handle different data formats\n if (houseData === null || houseData === undefined) {\n console.warn(\"HouseRenderer: Null or undefined house data\");\n return 0;\n }\n \n // If it's an object with a lon property (legacy format)\n if (typeof houseData === 'object' && houseData !== null && 'lon' in houseData) {\n return houseData.lon;\n }\n \n // If it's a direct number (new format from HouseCalculator)\n if (typeof houseData === 'number') {\n return houseData;\n }\n \n // If it's some other format we don't recognize\n console.warn(\"HouseRenderer: Unrecognized house data format\", houseData);\n return 0;\n }\n} ","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * BasePlanetRenderer.js\n * Base class for all planet renderers, extending BaseRenderer.\n * Contains common functionality used by specialized planet renderers.\n */\nexport class BasePlanetRenderer extends BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object.\n * @param {string} options.assetBasePath - Base path for assets.\n * @param {IconProvider} [options.iconProvider] - Icon provider service.\n */\n constructor(options) {\n super(options);\n \n // Store the icon provider\n this.iconProvider = options.iconProvider;\n \n // assetBasePath is required only if IconProvider is not available\n if (!options.assetBasePath && !this.iconProvider) {\n throw new Error(`${this.constructor.name}: Missing required option assetBasePath or iconProvider`);\n }\n \n // Set default assetBasePath if not provided (for backward compatibility)\n this.assetBasePath = options.assetBasePath || './assets/';\n }\n\n /**\n * Calculate base positions (dot and icon) for planets.\n * @param {Array} planets - Array of planet objects.\n * @param {number} dotRadius - Radius for planet dots\n * @param {number} iconRadius - Radius for planet icons\n */\n calculateBasePositions(planets, dotRadius, iconRadius) {\n planets.forEach(planet => {\n // Convert position to radians (0 degrees = East, anti-clockwise)\n // Subtract 90 to make 0 degrees = North (top)\n const radians = (planet.position - 90) * (Math.PI / 180);\n planet.radians = radians;\n\n // Calculate position on the dot radius circle\n const point = this.svgUtils.pointOnCircle(this.centerX, this.centerY, dotRadius, planet.position);\n planet.x = point.x;\n planet.y = point.y;\n\n // Calculate base position for the planet icon\n const iconPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, iconRadius, planet.position);\n planet.iconX = iconPoint.x;\n planet.iconY = iconPoint.y;\n\n // Initialize adjusted coordinates to base coordinates\n planet.adjustedIconX = planet.iconX;\n planet.adjustedIconY = planet.iconY;\n });\n }\n\n /**\n * Prepare planet data with common properties.\n * @param {Array} planetsData - Raw planet data\n * @param {string} planetType - Type of planet ('primary' or 'secondary')\n * @param {number} dotRadius - Radius for planet dots\n * @param {number} iconRadius - Radius for planet icons\n * @returns {Array} - Prepared planet data with calculated properties\n */\n preparePlanetData(planetsData, planetType, dotRadius, iconRadius) {\n return planetsData.map(p => ({\n ...p,\n name: p.name || 'unknown',\n position: p.position !== undefined ? p.position : 0,\n // Fields to be calculated:\n x: 0, y: 0, // Dot coordinates\n iconX: 0, iconY: 0, // Base icon coordinates\n adjustedIconX: 0, adjustedIconY: 0, // Icon coordinates after overlap adjustment\n radians: 0,\n // Calculate sign index and get name from AstrologyUtils\n zodiacSign: AstrologyUtils.getZodiacSigns()[Math.floor(p.position / 30) % 12],\n position_in_sign: p.position % 30, // Calculate position within sign\n isPrimary: planetType === 'primary',\n type: planetType,\n color: p.color || '#000000',\n // Retrograde flag - whether the planet is retrograde\n retrograde: p.retrograde === true,\n // Track which radius this planet is being rendered at\n dotRadius: dotRadius,\n iconRadius: iconRadius\n }));\n }\n\n /**\n * Abstract method to be implemented by subclasses.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} - Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n throw new Error(`${this.constructor.name}: render() not implemented.`);\n }\n} ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * PlanetSymbolRenderer.js\n * Class for rendering planet symbols and glyphs.\n */\nexport class PlanetSymbolRenderer extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n */\n constructor(options) {\n super(options);\n }\n \n /**\n * Renders a symbol for a planet\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} iconSize - Size of the icon in pixels\n * @returns {Element} - The created symbol element\n */\n renderPlanetSymbol(parentGroup, planet, iconSize = 24) {\n // Get the icon path using IconProvider if available\n let iconPath;\n if (this.iconProvider) {\n iconPath = this.iconProvider.getPlanetIconPath(planet.name);\n } else {\n // Fallback to old path construction if IconProvider is not available\n const basePath = this.options.assetBasePath || this.assetBasePath || './assets/';\n iconPath = `${basePath}svg/zodiac/zodiac-planet-${planet.name.toLowerCase()}.svg`;\n }\n \n // Calculate top-left position of the icon (centered on the calculated point)\n const iconX = planet.adjustedIconX - iconSize/2;\n const iconY = planet.adjustedIconY - iconSize/2;\n \n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n const icon = this.svgUtils.createSVGElement(\"image\", {\n x: iconX,\n y: iconY,\n width: iconSize,\n height: iconSize,\n href: iconPath,\n class: `planet-icon planet-${planet.name}-icon planet-${typeClass}-icon`\n });\n \n // Add error handling for missing icons\n icon.addEventListener('error', () => {\n console.warn(`Planet icon not found: ${iconPath}`);\n icon.setAttribute('href', ''); // Remove broken link\n \n // Create a text fallback with first letter\n const fallbackText = planet.name.charAt(0).toUpperCase();\n \n // Use IconProvider's createTextFallback if available\n let textIcon;\n if (this.iconProvider) {\n textIcon = this.iconProvider.createTextFallback(\n this.svgUtils,\n {\n x: planet.adjustedIconX,\n y: planet.adjustedIconY,\n size: `${iconSize}px`,\n color: planet.color || '#000000',\n className: `planet-symbol planet-${planet.name}-symbol planet-${typeClass}-symbol`\n },\n fallbackText\n );\n } else {\n // Legacy fallback if IconProvider is not available\n textIcon = this.svgUtils.createSVGElement(\"text\", {\n x: planet.adjustedIconX,\n y: planet.adjustedIconY,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n 'font-size': `${iconSize}px`,\n class: `planet-symbol planet-${planet.name}-symbol planet-${typeClass}-symbol`,\n fill: planet.color || '#000000'\n });\n textIcon.textContent = planet.name.charAt(0).toUpperCase();\n }\n \n parentGroup.appendChild(textIcon);\n });\n \n return icon;\n }\n \n /**\n * Renders a retrograde indicator (small \"R\" symbol) in the bottom-right corner of the planet icon\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} iconSize - Size of the icon in pixels\n * @returns {Element} - The created retrograde indicator element\n */\n renderRetrogradeIndicator(parentGroup, planet, iconSize = 24) {\n // Calculate position for \"R\" symbol in bottom-right corner of icon\n // Offset from icon center to bottom-right corner\n const offsetX = iconSize / 2 - 2; // Small offset from edge (2px from right edge)\n const offsetY = iconSize / 2 - 2; // Small offset from bottom edge\n \n // Position relative to adjusted icon center\n const rX = planet.adjustedIconX + offsetX;\n const rY = planet.adjustedIconY + offsetY;\n \n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n // Use planet color, but ensure visibility with darker shade if color is too light\n const planetColor = planet.color || '#000000';\n \n // Create small \"R\" text element\n const retrogradeText = this.svgUtils.createSVGElement(\"text\", {\n x: rX,\n y: rY,\n 'text-anchor': 'end',\n 'dominant-baseline': 'alphabetic',\n 'font-size': `${Math.max(7, iconSize * 0.3)}px`, // Scale with icon size, minimum 7px\n 'font-weight': 'bold',\n 'font-family': 'Arial, sans-serif',\n class: `planet-retrograde planet-${planet.name}-retrograde planet-${typeClass}-retrograde`,\n fill: planetColor,\n 'stroke': '#ffffff', // White stroke for better visibility\n 'stroke-width': '0.5',\n 'paint-order': 'stroke fill'\n });\n \n retrogradeText.textContent = 'R';\n \n return retrogradeText;\n }\n \n /**\n * Renders a dot to mark the exact planet position\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} dotSize - Size of the dot in pixels\n * @returns {Element} - The created dot element\n */\n renderPlanetDot(parentGroup, planet, dotSize = 3) {\n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n // Draw the position dot (small circle at exact planet position)\n const dot = this.svgUtils.createSVGElement(\"circle\", {\n cx: planet.x,\n cy: planet.y,\n r: dotSize, // Small fixed size for position indicator\n class: `planet-dot planet-${planet.name}-dot planet-${typeClass}-dot`,\n fill: planet.color || '#000000'\n });\n \n return dot;\n }\n \n /**\n * Renders a connector line between the dot and symbol if they're far enough apart\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} minDistance - Minimum distance required to draw a connector\n * @returns {Element|null} - The created connector element or null if not needed\n */\n renderConnector(parentGroup, planet, iconSize, minDistanceFactor = 0.3) {\n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n // Calculate distance between dot and adjusted icon position\n const distX = planet.x - planet.adjustedIconX;\n const distY = planet.y - planet.adjustedIconY;\n const distance = Math.sqrt(distX * distX + distY * distY);\n \n // Only draw connector if the distance is significant\n if (distance > iconSize * minDistanceFactor) {\n const connector = this.svgUtils.createSVGElement('line', {\n x1: planet.x,\n y1: planet.y,\n x2: planet.adjustedIconX,\n y2: planet.adjustedIconY,\n class: `planet-element planet-${planet.name.toLowerCase()} planet-connector planet-${typeClass}-connector`,\n stroke: planet.color || '#000000',\n 'stroke-width': 0.75,\n 'stroke-opacity': 0.5\n });\n \n return connector;\n }\n \n return null;\n }\n \n /**\n * Adds a tooltip to a planet element\n * @param {Element} element - Element to add tooltip to\n * @param {Object} planet - Planet object\n */\n addPlanetTooltip(element, planet) {\n const typeLabel = planet.isPrimary ? \"Primary\" : \"Secondary\";\n const tooltipText = `${typeLabel} ${AstrologyUtils.getPlanetFullName(planet.name)}: ${planet.position.toFixed(1)}° ${planet.zodiacSign.toUpperCase()} (${planet.position_in_sign.toFixed(1)}°)`;\n this.svgUtils.addTooltip(element, tooltipText);\n }\n \n /**\n * Render method implementation from BasePlanetRenderer\n * This should not be called directly in this class, but is needed to fulfill the interface\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n throw new Error(`${this.constructor.name}: This is a utility renderer, use specific rendering methods instead.`);\n }\n} ","/**\r\n * PlanetPositionCalculator.js\r\n * Utility class for calculating planet positions on any circle\r\n */\r\nimport { SvgUtils } from './SvgUtils.js';\r\n\r\nclass PlanetPositionCalculator {\r\n /**\r\n * Calculate position for a planet on a circle\r\n * @param {Object} params - Position parameters\r\n * @param {number} params.centerX - X coordinate of center\r\n * @param {number} params.centerY - Y coordinate of center\r\n * @param {number} params.radius - Circle radius \r\n * @param {number} params.longitude - Planet longitude in degrees\r\n * @param {number} params.iconSize - Size of the icon (optional)\r\n * @returns {Object} Position data with dot and icon coordinates\r\n */\r\n static calculatePosition(params) {\r\n const { centerX, centerY, radius, longitude, iconSize = 24 } = params;\r\n const svgUtils = new SvgUtils();\r\n \r\n // Calculate point on circle\r\n const point = svgUtils.pointOnCircle(centerX, centerY, radius, longitude);\r\n \r\n // Calculate icon position (centered on the point)\r\n const iconX = point.x - (iconSize / 2);\r\n const iconY = point.y - (iconSize / 2);\r\n \r\n return {\r\n x: point.x, // Dot center X\r\n y: point.y, // Dot center Y\r\n iconX: iconX, // Icon top-left X\r\n iconY: iconY, // Icon top-left Y\r\n iconCenterX: point.x, // Icon center X\r\n iconCenterY: point.y, // Icon center Y\r\n longitude: longitude, // Original longitude\r\n radius: radius // Original radius\r\n };\r\n }\r\n \r\n /**\r\n * Detects if planets are too close to each other\r\n * @param {Array} positions - Array of position objects\r\n * @param {number} minDistance - Minimum distance between planets\r\n * @returns {Array} Arrays of overlapping planet indices\r\n */\r\n static detectOverlaps(positions, minDistance = 24) {\r\n const clusters = [];\r\n const processed = new Set();\r\n \r\n // Check each pair of planets\r\n for (let i = 0; i < positions.length; i++) {\r\n if (processed.has(i)) continue;\r\n \r\n const cluster = [i];\r\n processed.add(i);\r\n \r\n for (let j = 0; j < positions.length; j++) {\r\n if (i === j || processed.has(j)) continue;\r\n \r\n const distance = Math.sqrt(\r\n Math.pow(positions[i].x - positions[j].x, 2) + \r\n Math.pow(positions[i].y - positions[j].y, 2)\r\n );\r\n \r\n if (distance < minDistance) {\r\n cluster.push(j);\r\n processed.add(j);\r\n }\r\n }\r\n \r\n if (cluster.length > 1) {\r\n clusters.push(cluster);\r\n }\r\n }\r\n \r\n return clusters;\r\n }\r\n \r\n /**\r\n * Adjusts positions to resolve overlaps using improved clustering algorithm\r\n * @param {Array} positions - Array of position objects\r\n * @param {Object} options - Adjustment options\r\n * @returns {Array} Adjusted positions\r\n */\r\n static adjustOverlaps(positions, options = {}) {\r\n const { \r\n minDistance = 24,\r\n centerX,\r\n centerY,\r\n baseRadius,\r\n iconSize = 24\r\n } = options;\r\n \r\n if (!positions || positions.length <= 1) {\r\n return positions; // Nothing to adjust with 0 or 1 planets\r\n }\r\n \r\n if (!centerX || !centerY || !baseRadius) {\r\n console.error(\"PlanetPositionCalculator: Missing required parameters (centerX, centerY, or baseRadius)\");\r\n return positions; // Return original positions if missing required parameters\r\n }\r\n \r\n console.log(`PlanetPositionCalculator: Adjusting overlaps for ${positions.length} positions`);\r\n \r\n // Make a copy to not modify originals\r\n const adjustedPositions = [...positions];\r\n \r\n // The minimum angular distance needed to prevent overlap at base radius\r\n // Add safety factor to ensure visual separation\r\n const minAngularDistance = (minDistance / baseRadius) * (180 / Math.PI) * 1.3; // 30% extra spacing\r\n console.log(`PlanetPositionCalculator: Minimum angular distance: ${minAngularDistance.toFixed(2)}°`);\r\n \r\n // Sort positions by longitude for overlap detection\r\n const sortedPositionIndices = adjustedPositions\r\n .map((pos, idx) => ({ pos, idx }))\r\n .sort((a, b) => a.pos.longitude - b.pos.longitude);\r\n \r\n const sortedPositions = sortedPositionIndices.map(item => ({\r\n ...adjustedPositions[item.idx],\r\n originalIndex: item.idx\r\n }));\r\n \r\n // Find clusters of planets that are too close angularly\r\n const clusters = this._findOverlappingClusters(sortedPositions, minAngularDistance);\r\n console.log(`PlanetPositionCalculator: Found ${clusters.length} clusters of overlapping positions`);\r\n clusters.forEach((cluster, i) => {\r\n console.log(`PlanetPositionCalculator: Cluster ${i+1} has ${cluster.length} positions`);\r\n });\r\n \r\n // Process each cluster\r\n clusters.forEach((cluster, clusterIndex) => {\r\n console.log(`PlanetPositionCalculator: Processing cluster ${clusterIndex+1}`);\r\n \r\n if (cluster.length <= 1) {\r\n // Single planet - just place at exact base radius with no angle change\r\n const planet = cluster[0];\r\n console.log(`PlanetPositionCalculator: Single position in cluster, keeping at original longitude ${planet.longitude.toFixed(2)}°`);\r\n this._setExactPosition(planet, planet.longitude, baseRadius, centerX, centerY, iconSize);\r\n } else {\r\n // Handle cluster with multiple planets - distribute by angle\r\n console.log(`PlanetPositionCalculator: Distributing ${cluster.length} positions in cluster`);\r\n this._distributeClusterByAngle(cluster, baseRadius, minAngularDistance, centerX, centerY, iconSize);\r\n \r\n // Log the distributions\r\n cluster.forEach((pos, i) => {\r\n console.log(`PlanetPositionCalculator: Position ${i+1} in cluster ${clusterIndex+1} adjusted from ${pos.longitude.toFixed(2)}° to ${pos.adjustedLongitude.toFixed(2)}°`);\r\n });\r\n }\r\n });\r\n \r\n // Copy adjusted positions back to the original array order\r\n sortedPositions.forEach(pos => {\r\n const origIndex = pos.originalIndex;\r\n \r\n // Only copy if we have valid data\r\n if (origIndex !== undefined && origIndex >= 0 && origIndex < adjustedPositions.length) {\r\n adjustedPositions[origIndex].x = pos.x;\r\n adjustedPositions[origIndex].y = pos.y;\r\n adjustedPositions[origIndex].iconX = pos.iconX;\r\n adjustedPositions[origIndex].iconY = pos.iconY;\r\n adjustedPositions[origIndex].iconCenterX = pos.iconCenterX;\r\n adjustedPositions[origIndex].iconCenterY = pos.iconCenterY;\r\n \r\n // Also add any adjusted longitude for reference\r\n if (pos.adjustedLongitude !== undefined) {\r\n adjustedPositions[origIndex].adjustedLongitude = pos.adjustedLongitude;\r\n }\r\n }\r\n });\r\n \r\n return adjustedPositions;\r\n }\r\n \r\n /**\r\n * Find clusters of positions that are too close angularly\r\n * @private\r\n * @param {Array} sortedPositions - Positions sorted by longitude\r\n * @param {number} minAngularDistance - Minimum angular separation needed\r\n * @returns {Array} Array of arrays containing positions in each cluster\r\n */\r\n static _findOverlappingClusters(sortedPositions, minAngularDistance) {\r\n if (!sortedPositions.length) return [];\r\n if (sortedPositions.length === 1) return [sortedPositions];\r\n \r\n const clusters = [];\r\n let currentCluster = [sortedPositions[0]];\r\n const posCount = sortedPositions.length;\r\n \r\n // Check for wrap-around at the edges (e.g., planet at 359° and another at 1°)\r\n // Add the first planet to the end of the array for checking wraparound\r\n const wrappedCheck = [...sortedPositions];\r\n const firstPlanet = {...sortedPositions[0], longitude: sortedPositions[0].longitude + 360};\r\n wrappedCheck.push(firstPlanet);\r\n \r\n // First identify standard clusters within the 0-360° range\r\n for (let i = 1; i < posCount; i++) {\r\n const prevPosition = sortedPositions[i-1];\r\n const currPosition = sortedPositions[i];\r\n \r\n // Check angular distance, considering wrap-around at 360°\r\n let angleDiff = currPosition.longitude - prevPosition.longitude;\r\n if (angleDiff < 0) angleDiff += 360;\r\n \r\n if (angleDiff < minAngularDistance) {\r\n // Too close - add to current cluster\r\n currentCluster.push(currPosition);\r\n } else {\r\n // Far enough - finish current cluster and start a new one\r\n if (currentCluster.length > 0) {\r\n clusters.push(currentCluster);\r\n }\r\n currentCluster = [currPosition];\r\n }\r\n }\r\n \r\n // Add the final regular cluster if it exists\r\n if (currentCluster.length > 0) {\r\n clusters.push(currentCluster);\r\n }\r\n \r\n // Check for a wrap-around cluster (where last and first planets are close)\r\n const lastPlanet = sortedPositions[posCount - 1];\r\n const firstPlanetOriginal = sortedPositions[0];\r\n \r\n let wrapDiff = (firstPlanetOriginal.longitude + 360) - lastPlanet.longitude;\r\n if (wrapDiff < 0) wrapDiff += 360;\r\n \r\n if (wrapDiff < minAngularDistance) {\r\n // We have a wraparound cluster\r\n // If first and last clusters both exist, merge them\r\n if (clusters.length >= 2) {\r\n const firstCluster = clusters[0];\r\n const lastCluster = clusters[clusters.length - 1];\r\n \r\n // If first element is in first cluster and last element is in last cluster\r\n if (firstCluster.includes(firstPlanetOriginal) && lastCluster.includes(lastPlanet)) {\r\n // Merge the first and last clusters\r\n const mergedCluster = [...lastCluster, ...firstCluster];\r\n clusters.pop(); // Remove last cluster\r\n clusters[0] = mergedCluster; // Replace first cluster with merged\r\n }\r\n }\r\n }\r\n \r\n return clusters;\r\n }\r\n \r\n /**\r\n * Distribute positions in a cluster by adjusting only their angles\r\n * @private\r\n * @param {Array} positions - Array of positions in the cluster\r\n * @param {number} radius - The exact radius to place all positions\r\n * @param {number} minAngularDistance - Minimum angular distance needed\r\n * @param {number} centerX - X coordinate of center\r\n * @param {number} centerY - Y coordinate of center\r\n * @param {number} iconSize - Size of the icon\r\n */\r\n static _distributeClusterByAngle(positions, radius, minAngularDistance, centerX, centerY, iconSize) {\r\n const n = positions.length;\r\n \r\n // If only one planet, keep its original position\r\n if (n === 1) {\r\n this._setExactPosition(positions[0], positions[0].longitude, radius, centerX, centerY, iconSize);\r\n return;\r\n }\r\n \r\n // Sort positions by their original longitude to maintain order\r\n positions.sort((a, b) => a.longitude - b.longitude);\r\n \r\n // Calculate central angle and total span\r\n const firstPos = positions[0].longitude;\r\n const lastPos = positions[n-1].longitude;\r\n let totalArc = lastPos - firstPos;\r\n \r\n // Handle wrap-around case (e.g., positions at 350° and 10°)\r\n if (totalArc < 0 || totalArc > 180) {\r\n totalArc = (360 + lastPos - firstPos) % 360;\r\n }\r\n \r\n // Calculate the center of the cluster (weighted average of all positions)\r\n let sumAngles = 0;\r\n for (let i = 0; i < n; i++) {\r\n sumAngles += positions[i].longitude;\r\n }\r\n let centerAngle = (sumAngles / n) % 360;\r\n \r\n // Determine minimum arc needed for n planets with minimum spacing\r\n // Add extra spacing factor to ensure planets don't overlap\r\n const minRequiredArc = (n - 1) * minAngularDistance * 1.2; // 20% extra spacing\r\n \r\n // Always use at least the minimum required arc\r\n const spanToUse = Math.max(minRequiredArc, totalArc);\r\n \r\n // Calculate start angle (center - half of span)\r\n const startAngle = (centerAngle - spanToUse/2 + 360) % 360;\r\n \r\n // Distribute planets evenly from the start angle\r\n for (let i = 0; i < n; i++) {\r\n const angle = (startAngle + i * (spanToUse / (n-1))) % 360;\r\n this._setExactPosition(positions[i], angle, radius, centerX, centerY, iconSize);\r\n }\r\n }\r\n \r\n /**\r\n * Set a position's exact coordinates at the given angle and radius\r\n * @private\r\n * @param {Object} position - The position object to update\r\n * @param {number} angle - The angle in degrees (0-360)\r\n * @param {number} radius - The exact radius to place the position\r\n * @param {number} centerX - X coordinate of center\r\n * @param {number} centerY - Y coordinate of center\r\n * @param {number} iconSize - Size of the icon\r\n */\r\n static _setExactPosition(position, angle, radius, centerX, centerY, iconSize) {\r\n const svgUtils = new SvgUtils();\r\n const point = svgUtils.pointOnCircle(centerX, centerY, radius, angle);\r\n \r\n position.x = point.x;\r\n position.y = point.y;\r\n position.iconCenterX = point.x;\r\n position.iconCenterY = point.y;\r\n position.iconX = point.x - (iconSize / 2);\r\n position.iconY = point.y - (iconSize / 2);\r\n position.adjustedLongitude = angle;\r\n }\r\n}\r\n\r\nexport { PlanetPositionCalculator }; ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\nimport { PlanetPositionCalculator } from '../utils/PlanetPositionCalculator.js';\n\n/**\n * PrimaryPlanetRenderer.js\n * Class for rendering primary planets on the inner circle of the chart.\n */\nexport class PrimaryPlanetRenderer extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {PlanetSymbolRenderer} options.symbolRenderer - The symbol renderer to use.\n */\n constructor(options) {\n super(options);\n \n this.symbolRenderer = options.symbolRenderer;\n \n // Define the circle configuration for primary planets\n this.circleConfig = {\n circle: 'inner'\n };\n }\n \n /**\n * Calculates actual radius values based on circle configuration and chart dimensions\n * @param {Object} config - Chart configuration with radius values\n * @returns {Object} Object with calculated dotRadius and iconRadius\n */\n calculateRadii(config = null) {\n const baseRadius = config?.radius?.inner || this.innerRadius;\n const nextRadius = config?.radius?.middle || this.middleRadius;\n \n // Fixed relationship between circle and dots/icons\n // - Dots are placed exactly on the circle\n // - Icons are placed halfway between this circle and the next\n const dotRadius = baseRadius;\n const iconRadius = baseRadius + (nextRadius - baseRadius) / 2;\n \n return { dotRadius, iconRadius };\n }\n \n /**\n * Adjusts the positions of overlapping planets.\n * @param {Array} planets - Array of planet objects.\n */\n adjustOverlappingPlanets(planets) {\n if (planets.length <= 1) return; // Nothing to adjust with 0 or 1 planets\n \n // Define parameters for collision detection and distribution\n const iconSize = 24;\n const baseRadius = planets[0].iconRadius; // Use the iconRadius from the first planet\n const minDistance = iconSize * 1.2;\n \n // Prepare planets array in format expected by PlanetPositionCalculator\n const positions = planets.map((planet, index) => ({\n x: planet.iconX,\n y: planet.iconY,\n iconX: planet.iconX,\n iconY: planet.iconY,\n iconCenterX: planet.iconX,\n iconCenterY: planet.iconY,\n longitude: planet.position,\n radius: baseRadius,\n originalIndex: index,\n name: planet.name\n }));\n \n // Use the PlanetPositionCalculator for overlap adjustment\n const adjustedPositions = PlanetPositionCalculator.adjustOverlaps(positions, {\n minDistance: minDistance,\n centerX: this.centerX,\n centerY: this.centerY,\n baseRadius: baseRadius,\n iconSize: iconSize\n });\n \n // Apply the adjusted positions back to the planets\n adjustedPositions.forEach((pos, idx) => {\n const planet = planets[idx];\n const originalPos = planet.position;\n \n // Set the adjusted icon position\n planet.adjustedIconX = pos.iconCenterX;\n planet.adjustedIconY = pos.iconCenterY;\n \n // If there was an adjustment, store it\n if (pos.adjustedLongitude !== undefined) {\n planet.adjustedPosition = pos.adjustedLongitude;\n }\n });\n }\n \n /**\n * Renders primary planets on the chart.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n if (!parentGroup) {\n console.error(\"PrimaryPlanetRenderer: parentGroup is null or undefined.\");\n return [];\n }\n \n // Calculate radii based on circle configuration\n const { dotRadius, iconRadius } = options.dotRadius && options.iconRadius \n ? { dotRadius: options.dotRadius, iconRadius: options.iconRadius } \n : this.calculateRadii(options.config || this.config);\n \n if (!dotRadius || !iconRadius) {\n console.error(\"PrimaryPlanetRenderer: Could not determine radius values\");\n return [];\n }\n \n // Clear the group before rendering new planets\n this.clearGroup(parentGroup);\n \n // Prepare planets with additional properties\n const planets = this.preparePlanetData(planetsData, 'primary', dotRadius, iconRadius);\n \n // Sort planets by position for overlap calculations\n planets.sort((a, b) => a.position - b.position);\n \n // Calculate base positions (dot and icon)\n this.calculateBasePositions(planets, dotRadius, iconRadius);\n \n // Calculate adjustments for overlapping planets\n this.adjustOverlappingPlanets(planets);\n \n // Draw the planets onto the SVG group\n this.drawPlanets(parentGroup, planets);\n \n // Return the planets array with calculated coordinates\n return planets;\n }\n \n /**\n * Draw the planets on the SVG group with their dots and icons.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {Array} planets - Array of planet objects with calculated positions.\n */\n drawPlanets(parentGroup, planets) {\n const iconSize = 24; // Standard icon size\n \n planets.forEach(planet => {\n // Create group for this planet (contains dot, symbol, and connector)\n const planetGroup = this.svgUtils.createSVGElement(\"g\", {\n 'data-planet': planet.name,\n 'data-type': planet.type,\n class: `planet-element planet-${planet.name} planet-primary`,\n transform: `translate(0,0)`\n });\n \n // Render planet dot \n const dot = this.symbolRenderer.renderPlanetDot(planetGroup, planet);\n planetGroup.appendChild(dot);\n \n // Render planet symbol\n const icon = this.symbolRenderer.renderPlanetSymbol(planetGroup, planet, iconSize);\n planetGroup.appendChild(icon);\n \n // Add retrograde indicator if planet is retrograde\n if (planet.retrograde) {\n const retrogradeIndicator = this.symbolRenderer.renderRetrogradeIndicator(planetGroup, planet, iconSize);\n planetGroup.appendChild(retrogradeIndicator);\n }\n \n // Add tooltip\n this.symbolRenderer.addPlanetTooltip(planetGroup, planet);\n \n // Render connector if needed\n const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);\n if (connector) {\n planetGroup.appendChild(connector);\n }\n \n // Add to parent group\n parentGroup.appendChild(planetGroup);\n });\n }\n} ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\nimport { PlanetPositionCalculator } from '../utils/PlanetPositionCalculator.js';\n\n/**\n * SecondaryPlanetRenderer.js\n * Class for rendering secondary planets on the innermost circle of the chart.\n */\nexport class SecondaryPlanetRenderer extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {PlanetSymbolRenderer} options.symbolRenderer - The symbol renderer to use.\n */\n constructor(options) {\n super(options);\n \n this.symbolRenderer = options.symbolRenderer;\n \n // Define the circle configuration for secondary planets\n this.circleConfig = {\n circle: 'innermost'\n };\n }\n \n /**\n * Calculates actual radius values based on circle configuration and chart dimensions\n * @param {Object} config - Chart configuration with radius values\n * @returns {Object} Object with calculated dotRadius and iconRadius\n */\n calculateRadii(config = null) {\n const baseRadius = config?.radius?.innermost || (this.innerRadius * 0.5); // Fallback\n const nextRadius = config?.radius?.zodiacInner || this.innerRadius;\n \n // Fixed relationship between circle and dots/icons\n // - Dots are placed exactly on the circle\n // - Icons are placed halfway between this circle and the next\n const dotRadius = baseRadius;\n const iconRadius = baseRadius + (nextRadius - baseRadius) / 2;\n \n return { dotRadius, iconRadius };\n }\n \n /**\n * Adjusts the positions of overlapping planets.\n * @param {Array} planets - Array of planet objects.\n */\n adjustOverlappingPlanets(planets) {\n if (planets.length <= 1) return; // Nothing to adjust with 0 or 1 planets\n \n // Define parameters for collision detection and distribution\n const iconSize = 18; // Smaller size for secondary planets\n const baseRadius = planets[0].iconRadius; // Use the iconRadius from the first planet\n const minDistance = iconSize * 1.1; // Slightly tighter packing\n \n // Prepare planets array in format expected by PlanetPositionCalculator\n const positions = planets.map((planet, index) => ({\n x: planet.iconX,\n y: planet.iconY,\n iconX: planet.iconX,\n iconY: planet.iconY,\n iconCenterX: planet.iconX,\n iconCenterY: planet.iconY,\n longitude: planet.position,\n radius: baseRadius,\n originalIndex: index,\n name: planet.name\n }));\n \n // Use the PlanetPositionCalculator for overlap adjustment\n const adjustedPositions = PlanetPositionCalculator.adjustOverlaps(positions, {\n minDistance: minDistance,\n centerX: this.centerX,\n centerY: this.centerY,\n baseRadius: baseRadius,\n iconSize: iconSize\n });\n \n // Apply the adjusted positions back to the planets\n adjustedPositions.forEach((pos, idx) => {\n const planet = planets[idx];\n \n // Set the adjusted icon position\n planet.adjustedIconX = pos.iconCenterX;\n planet.adjustedIconY = pos.iconCenterY;\n \n // If there was an adjustment, store it\n if (pos.adjustedLongitude !== undefined) {\n planet.adjustedPosition = pos.adjustedLongitude;\n }\n });\n }\n \n /**\n * Renders secondary planets on the chart.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n if (!parentGroup) {\n console.error(\"SecondaryPlanetRenderer: parentGroup is null or undefined.\");\n return [];\n }\n \n // Calculate radii based on circle configuration\n const { dotRadius, iconRadius } = options.dotRadius && options.iconRadius \n ? { dotRadius: options.dotRadius, iconRadius: options.iconRadius } \n : this.calculateRadii(options.config || this.config);\n \n if (!dotRadius || !iconRadius) {\n console.error(\"SecondaryPlanetRenderer: Could not determine radius values\");\n return [];\n }\n \n // Clear the group before rendering new planets\n this.clearGroup(parentGroup);\n \n // Prepare planets with additional properties\n const planets = this.preparePlanetData(planetsData, 'secondary', dotRadius, iconRadius);\n \n // Sort planets by position for overlap calculations\n planets.sort((a, b) => a.position - b.position);\n \n // Calculate base positions (dot and icon)\n this.calculateBasePositions(planets, dotRadius, iconRadius);\n \n // Calculate adjustments for overlapping planets\n this.adjustOverlappingPlanets(planets);\n \n // Draw the planets onto the SVG group\n this.drawPlanets(parentGroup, planets);\n \n // Return the planets array with calculated coordinates\n return planets;\n }\n \n /**\n * Draw the planets on the SVG group with their dots and icons.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {Array} planets - Array of planet objects with calculated positions.\n */\n drawPlanets(parentGroup, planets) {\n const iconSize = 18; // Smaller icon size for secondary planets\n \n planets.forEach(planet => {\n // Create group for this planet (contains dot, symbol, and connector)\n const planetGroup = this.svgUtils.createSVGElement(\"g\", {\n 'data-planet': planet.name,\n 'data-type': planet.type,\n class: `planet-element planet-${planet.name} planet-secondary`,\n transform: `translate(0,0)`\n });\n \n // Render planet dot with smaller size\n const dot = this.symbolRenderer.renderPlanetDot(planetGroup, planet, 2);\n planetGroup.appendChild(dot);\n \n // Render planet symbol with smaller size\n const icon = this.symbolRenderer.renderPlanetSymbol(planetGroup, planet, iconSize);\n planetGroup.appendChild(icon);\n \n // Add retrograde indicator if planet is retrograde\n if (planet.retrograde) {\n const retrogradeIndicator = this.symbolRenderer.renderRetrogradeIndicator(planetGroup, planet, iconSize);\n planetGroup.appendChild(retrogradeIndicator);\n }\n \n // Add tooltip\n this.symbolRenderer.addPlanetTooltip(planetGroup, planet);\n \n // Render connector if needed\n const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);\n if (connector) {\n planetGroup.appendChild(connector);\n }\n \n // Add to parent group\n parentGroup.appendChild(planetGroup);\n });\n }\n} ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\n\n/**\n * PlanetRendererCoordinator.js\n * Coordinator class that maintains the original PlanetRenderer API\n * but delegates rendering tasks to specialized renderers.\n */\nexport class PlanetRendererCoordinator extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {PrimaryPlanetRenderer} options.primaryRenderer - Primary planet renderer.\n * @param {SecondaryPlanetRenderer} options.secondaryRenderer - Secondary planet renderer.\n * @param {PlanetSymbolRenderer} options.symbolRenderer - Planet symbol renderer.\n */\n constructor(options) {\n super(options);\n \n this.primaryRenderer = options.primaryRenderer;\n this.secondaryRenderer = options.secondaryRenderer;\n this.symbolRenderer = options.symbolRenderer;\n \n // Define the circle configurations - which circle each planet type should be placed on\n this.circleConfigs = {\n // Primary planets placed on inner circle\n primary: {\n circle: 'inner'\n },\n // Secondary planets placed on innermost circle\n secondary: {\n circle: 'innermost'\n }\n };\n }\n \n /**\n * Calculates actual radius values based on circle configuration and chart dimensions\n * @param {string} planetType - Type of planet (primary, secondary, etc.)\n * @param {Object} config - Chart configuration with radius values\n * @returns {Object} Object with calculated dotRadius and iconRadius\n */\n calculateRadii(planetType, config = null) {\n const circleConfig = this.circleConfigs[planetType];\n if (!circleConfig) {\n console.error(`PlanetRendererCoordinator: No circle configuration found for planet type: ${planetType}`);\n return { dotRadius: null, iconRadius: null };\n }\n \n switch (planetType) {\n case 'primary':\n return this.primaryRenderer.calculateRadii(config);\n case 'secondary':\n return this.secondaryRenderer.calculateRadii(config);\n default:\n console.error(`PlanetRendererCoordinator: Unknown planet type: ${planetType}`);\n return { dotRadius: null, iconRadius: null };\n }\n }\n \n /**\n * Renders planets on the chart. Delegates to the appropriate specialized renderer.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n // Determine planet type (primary or secondary)\n const planetType = options.type || 'primary';\n \n console.log(`PlanetRendererCoordinator: Rendering ${planetType} planets, count:`, planetsData.length);\n \n // Delegate to appropriate renderer based on planet type\n switch (planetType) {\n case 'primary':\n return this.primaryRenderer.render(parentGroup, planetsData, houseRotationAngle, options);\n case 'secondary':\n return this.secondaryRenderer.render(parentGroup, planetsData, houseRotationAngle, options);\n default:\n console.error(`PlanetRendererCoordinator: Unknown planet type: ${planetType}`);\n return [];\n }\n }\n \n /**\n * Renders both primary and secondary planets in one call.\n * This consolidated method handles rendering all planets.\n * \n * @param {Object} params - Rendering parameters\n * @param {SVGManager} params.svgManager - SVG manager instance\n * @param {Object} params.planetsData - Planet data object\n * @param {Object} params.config - Chart configuration with radii\n * @param {boolean} params.primaryEnabled - Whether primary planets are enabled\n * @param {boolean} params.secondaryEnabled - Whether secondary planets are enabled\n * @returns {Object} Object containing both sets of rendered planets\n */\n renderAllPlanetTypes(params) {\n const { \n svgManager, \n planetsData, \n config,\n enabledTypes = { primary: true, secondary: true }\n } = params;\n \n if (!svgManager || !planetsData || !config) {\n console.error(\"PlanetRendererCoordinator: Missing required parameters\");\n return {};\n }\n \n // Convert planet data to array format, filtering by visibility\n const planetsArray = Object.entries(planetsData)\n .filter(([name, data]) => config.planetSettings.visible?.[name] !== false)\n .map(([name, data]) => ({\n name: name,\n position: data.lon,\n color: data.color || '#000000'\n }));\n \n const result = {};\n \n // Save and update center coordinates\n const originalCenterX = this.centerX;\n const originalCenterY = this.centerY;\n this.centerX = config.svg.center.x;\n this.centerY = config.svg.center.y;\n \n // Update center coordinates in specialized renderers too\n this.primaryRenderer.centerX = this.centerX;\n this.primaryRenderer.centerY = this.centerY;\n this.secondaryRenderer.centerX = this.centerX;\n this.secondaryRenderer.centerY = this.centerY;\n \n // Render primary planets if enabled\n if (enabledTypes.primary) {\n const primaryGroup = svgManager.getGroup('primaryPlanets');\n result.primary = this.primaryRenderer.render(primaryGroup, planetsArray, 0, {\n config: config\n });\n console.log(`PlanetRendererCoordinator: Rendered ${result.primary.length} primary planets`);\n } else {\n result.primary = [];\n }\n \n // Render secondary planets if enabled\n if (enabledTypes.secondary) {\n const secondaryGroup = svgManager.getGroup('secondaryPlanets');\n result.secondary = this.secondaryRenderer.render(secondaryGroup, planetsArray, 0, {\n config: config\n });\n console.log(`PlanetRendererCoordinator: Rendered ${result.secondary.length} secondary planets`);\n } else {\n result.secondary = [];\n }\n \n // Restore original center values\n this.centerX = originalCenterX;\n this.centerY = originalCenterY;\n this.primaryRenderer.centerX = originalCenterX;\n this.primaryRenderer.centerY = originalCenterY;\n this.secondaryRenderer.centerX = originalCenterX;\n this.secondaryRenderer.centerY = originalCenterY;\n \n return result;\n }\n \n /**\n * Legacy method - deprecated, use renderAllPlanetTypes instead\n */\n renderAllPlanets(params) {\n console.warn(\"PlanetRendererCoordinator: renderAllPlanets is deprecated, use renderAllPlanetTypes instead\");\n return this.renderAllPlanetTypes(params);\n }\n} ","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * ClientSideAspectRenderer.js\n * Renders aspects based on client-side calculations using planet coordinates.\n */\nexport class ClientSideAspectRenderer extends BaseRenderer { // No longer extends IAspectRenderer\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object. Contains aspect settings like orb.\n * @param {string} options.assetBasePath - Base path for assets (unused here but standard).\n * @param {IconProvider} [options.iconProvider] - Icon provider service.\n */\n constructor(options) {\n super(options);\n this.astrologyUtils = AstrologyUtils; // Assuming AstrologyUtils is available\n this.renderedAspects = []; // Store calculated aspects\n this._aspectCacheKey = null; // Cache key for aspect calculations\n this._aspectCache = []; // Cached aspect results\n this.assetBasePath = options.assetBasePath || './assets/'; // Store asset base path with fallback\n this.iconProvider = options.iconProvider; // Store the icon provider\n \n // Define major aspects and their angles (can be overridden/extended by config)\n this.defaultAspectDefinitions = {\n 'conjunction': { angle: 0, orb: 8, color: '#FF4500', abbr: 'CON' }, // OrangeRed\n 'opposition': { angle: 180, orb: 6, color: '#DC143C', abbr: 'OPP' }, // Crimson\n 'trine': { angle: 120, orb: 6, color: '#2E8B57', abbr: 'TRI' }, // SeaGreen\n 'square': { angle: 90, orb: 6, color: '#FF0000', abbr: 'SQR' }, // Red\n 'sextile': { angle: 60, orb: 4, color: '#4682B4', abbr: 'SEX' }, // SteelBlue\n // Add minors if needed\n // 'semisextile': { angle: 30, orb: 2, color: '#90EE90', abbr: 'SSX' }, // LightGreen\n // 'quincunx': { angle: 150, orb: 2, color: '#DAA520', abbr: 'QCX' } // Goldenrod\n };\n }\n\n /**\n * Calculates the angular distance between two positions (0-180 degrees).\n * @param {number} pos1 - Position 1 (degrees).\n * @param {number} pos2 - Position 2 (degrees).\n * @returns {number} The smallest angle between pos1 and pos2 (0-180).\n */\n _angularDistance(pos1, pos2) {\n const diff = Math.abs(pos1 - pos2) % 360;\n return Math.min(diff, 360 - diff);\n }\n\n /**\n * Calculates aspects between planets based on their positions.\n * @param {Array} planets - Array of planet objects MUST include `position` property.\n * @param {Object} aspectSettings - Aspect settings to use (optional, defaults to config.aspectSettings)\n * @returns {Array} Array of calculated aspect objects.\n */\n calculateAspects(planets, aspectSettings = null) {\n const aspects = [];\n if (!planets || planets.length < 2) {\n return aspects;\n }\n\n // Use provided aspectSettings or fall back to config\n const settings = aspectSettings || this.config.aspectSettings || {};\n \n // Generate a cache key based on aspectSettings and planet positions\n const settingsString = JSON.stringify(settings);\n const planetKey = planets.map(p => `${p.name}:${p.position}`).join('|');\n const cacheKey = `${settingsString}|${planetKey}`;\n if (cacheKey === this._aspectCacheKey) {\n console.log(`ClientSideAspectRenderer: Using cached aspects (${this._aspectCache.length})`);\n return this._aspectCache;\n }\n\n // Get aspect types and orbs from settings, falling back to defaults\n const calculationOrb = settings.orb || 6; // Default orb if not specified per aspect\n const aspectTypes = settings.types || this.defaultAspectDefinitions;\n\n // Iterate through all unique pairs of planets\n for (let i = 0; i < planets.length; i++) {\n for (let j = i + 1; j < planets.length; j++) {\n const p1 = planets[i];\n const p2 = planets[j];\n\n const angleDiff = this._angularDistance(p1.position, p2.position);\n\n // Check against each defined aspect type\n for (const aspectName in aspectTypes) {\n const aspectDef = aspectTypes[aspectName];\n const targetAngle = aspectDef.angle;\n const orb = aspectDef.orb !== undefined ? aspectDef.orb : calculationOrb; // Use specific orb or default\n\n if (Math.abs(angleDiff - targetAngle) <= orb) {\n // Aspect found!\n aspects.push({\n planet1: p1.name,\n planet2: p2.name,\n type: aspectName,\n angle: targetAngle, // The ideal angle of the aspect type\n angleDiff: angleDiff, // The actual angle difference between planets\n orb: Math.abs(angleDiff - targetAngle), // How exact the aspect is\n // Include planet objects for coordinate lookup during rendering\n p1: p1,\n p2: p2,\n // Add default color/style from definition\n color: aspectDef.color || '#888', // Default color\n lineStyle: aspectDef.lineStyle, // e.g., 'dashed', 'dotted' (used later in styling)\n abbr: aspectDef.abbr || aspectName.substring(0, 3).toUpperCase() // Use abbreviation from definition or default\n });\n }\n }\n }\n }\n console.log(`ClientSideAspectRenderer: Calculated ${aspects.length} aspects.`);\n // Cache results and key\n this._aspectCacheKey = cacheKey;\n this._aspectCache = aspects;\n return aspects;\n }\n \n /**\n * Calculates cross-aspects (synastry) between two different planet sets.\n * @param {Array} planets1 - First array of planet objects (e.g., primary/outer planets)\n * @param {Array} planets2 - Second array of planet objects (e.g., secondary/inner planets)\n * @param {Object} aspectSettings - Aspect settings to use\n * @returns {Array} Array of calculated cross-aspect objects.\n */\n calculateCrossAspects(planets1, planets2, aspectSettings = null) {\n const aspects = [];\n if (!planets1 || planets1.length < 1 || !planets2 || planets2.length < 1) {\n return aspects;\n }\n\n // Use provided aspectSettings or fall back to synastry settings\n const settings = aspectSettings || this.config.synastryAspectSettings || {};\n \n // Get aspect types and orbs from settings\n const calculationOrb = settings.orb || 6;\n const aspectTypes = settings.types || this.defaultAspectDefinitions;\n\n // Iterate through all pairs between the two planet sets\n for (let i = 0; i < planets1.length; i++) {\n for (let j = 0; j < planets2.length; j++) {\n const p1 = planets1[i];\n const p2 = planets2[j];\n\n const angleDiff = this._angularDistance(p1.position, p2.position);\n\n // Check against each defined aspect type\n for (const aspectName in aspectTypes) {\n const aspectDef = aspectTypes[aspectName];\n const targetAngle = aspectDef.angle;\n const orb = aspectDef.orb !== undefined ? aspectDef.orb : calculationOrb;\n\n if (Math.abs(angleDiff - targetAngle) <= orb) {\n // Cross-aspect found!\n aspects.push({\n planet1: p1.name,\n planet2: p2.name,\n type: aspectName,\n angle: targetAngle,\n angleDiff: angleDiff,\n orb: Math.abs(angleDiff - targetAngle),\n p1: p1,\n p2: p2,\n color: aspectDef.color || '#888',\n lineStyle: aspectDef.lineStyle,\n abbr: aspectDef.abbr || aspectName.substring(0, 3).toUpperCase(),\n isCross: true // Mark as cross-aspect for identification\n });\n }\n }\n }\n }\n \n console.log(`ClientSideAspectRenderer: Calculated ${aspects.length} cross-aspects (synastry).`);\n return aspects;\n }\n\n\n /**\n * Renders aspect lines based on planet coordinates.\n * @param {Element} parentGroup - The parent SVG group for aspect lines.\n * @param {Array} planetsWithCoords - Array of planet objects returned by PlanetRenderer, MUST include `x`, `y`, `name`, and `position`.\n * @param {Object} aspectSettings - Aspect settings to use (optional)\n * @returns {Array<Element>} Array containing the created line elements.\n */\n render(parentGroup, planetsWithCoords, aspectSettings = null) {\n if (!parentGroup) {\n console.error(\"ClientSideAspectRenderer.render: parentGroup is null or undefined.\");\n return [];\n }\n this.clearGroup(parentGroup); // Clear previous aspects\n const renderedElements = [];\n\n if (!planetsWithCoords || planetsWithCoords.length < 2) {\n console.warn(\"ClientSideAspectRenderer: Not enough planet data with coordinates to render aspects.\");\n this.renderedAspects = [];\n return [];\n }\n\n // Calculate aspects based on planet positions\n const aspects = this.calculateAspects(planetsWithCoords, aspectSettings);\n this.renderedAspects = aspects; // Store the calculated aspects\n\n console.log(`ClientSideAspectRenderer: Rendering ${aspects.length} aspects.`);\n\n // Get enabled aspect types from config\n const settings = aspectSettings || this.config.aspectSettings || {};\n const aspectTypesConfig = settings.types || {};\n\n // Map planets by name for quick coordinate lookup\n const planetCoords = {};\n planetsWithCoords.forEach(p => {\n planetCoords[p.name] = { x: p.x, y: p.y }; // Use the dot coordinates (p.x, p.y)\n });\n\n aspects.forEach(aspect => {\n const coords1 = planetCoords[aspect.planet1];\n const coords2 = planetCoords[aspect.planet2];\n\n // Check if aspect type is enabled in config (and handle default case)\n const aspectDef = aspectTypesConfig[aspect.type];\n const isEnabled = aspectDef ? (aspectDef.enabled !== false) : true; // Default to true if not specified\n const lineStyle = aspectDef ? aspectDef.lineStyle : 'solid'; // Get style from config or default to solid\n\n if (!isEnabled || lineStyle === 'none') {\n // If aspect type is disabled or style is none, don't render line or icon\n return;\n }\n\n if (!coords1 || !coords2) {\n console.warn(`ClientSideAspectRenderer: Could not find coordinates for aspect: ${aspect.planet1} ${aspect.type} ${aspect.planet2}`);\n return; // Skip this aspect if coordinates are missing\n }\n\n // Sanitize planet names for CSS classes\n const p1SafeName = (aspect.planet1 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n const p2SafeName = (aspect.planet2 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n\n // Define stroke dash array based on lineStyle\n let strokeDasharray = 'none';\n if (lineStyle === 'dashed') {\n strokeDasharray = '5, 5';\n } else if (lineStyle === 'dotted') {\n strokeDasharray = '1, 3';\n }\n\n const line = this.svgUtils.createSVGElement(\"line\", {\n x1: coords1.x,\n y1: coords1.y,\n x2: coords2.x,\n y2: coords2.y,\n class: `aspect-element aspect-line aspect-${aspect.type} aspect-planet-${p1SafeName} aspect-planet-${p2SafeName}`, // Add classes for type and involved planets\n stroke: aspect.color || '#888888', // Apply color from definition or default\n 'stroke-dasharray': strokeDasharray // Apply calculated dash style\n });\n\n // Add tooltip with details\n const tooltipText = `${this.astrologyUtils.capitalizeFirstLetter(aspect.planet1)} ${aspect.type} ${this.astrologyUtils.capitalizeFirstLetter(aspect.planet2)} (${aspect.angleDiff.toFixed(1)}°, orb ${aspect.orb.toFixed(1)}°)`;\n this.svgUtils.addTooltip(line, tooltipText);\n\n parentGroup.appendChild(line);\n renderedElements.push(line);\n\n // Optionally add aspect glyphs at the midpoint\n this._addAspectIcon(parentGroup, aspect, coords1, coords2, tooltipText);\n });\n \n return renderedElements;\n }\n \n /**\n * Renders cross-aspect lines (synastry) between two planet sets.\n * @param {Element} parentGroup - The parent SVG group for aspect lines.\n * @param {Array} primaryPlanets - Array of primary planet objects with coordinates\n * @param {Array} secondaryPlanets - Array of secondary planet objects with coordinates\n * @param {Object} aspectSettings - Aspect settings to use\n * @returns {Array<Element>} Array containing the created line elements.\n */\n renderCrossAspects(parentGroup, primaryPlanets, secondaryPlanets, aspectSettings = null) {\n if (!parentGroup) {\n console.error(\"ClientSideAspectRenderer.renderCrossAspects: parentGroup is null or undefined.\");\n return [];\n }\n this.clearGroup(parentGroup);\n const renderedElements = [];\n\n if (!primaryPlanets || primaryPlanets.length < 1 || !secondaryPlanets || secondaryPlanets.length < 1) {\n console.warn(\"ClientSideAspectRenderer: Not enough planet data to render cross-aspects.\");\n return [];\n }\n\n // Calculate cross-aspects\n const aspects = this.calculateCrossAspects(primaryPlanets, secondaryPlanets, aspectSettings);\n\n console.log(`ClientSideAspectRenderer: Rendering ${aspects.length} cross-aspects.`);\n\n // Get enabled aspect types from config\n const settings = aspectSettings || this.config.synastryAspectSettings || {};\n const aspectTypesConfig = settings.types || {};\n\n // Map planets by name for coordinate lookup - keep separate to avoid overwriting\n const primaryCoords = {};\n primaryPlanets.forEach(p => {\n primaryCoords[p.name] = { x: p.x, y: p.y };\n });\n \n const secondaryCoords = {};\n secondaryPlanets.forEach(p => {\n secondaryCoords[p.name] = { x: p.x, y: p.y };\n });\n\n aspects.forEach(aspect => {\n // For cross-aspects: \n // - aspect.planet1 is from primary (outer circle) \n // - aspect.planet2 is from secondary (inner circle)\n // We need to draw line from secondary planet to PRIMARY's projection on inner circle\n \n // Get the primary planet to calculate its projection on inner circle\n const primaryPlanet = aspect.p1; // This has the position (degrees)\n const secondaryPlanet = aspect.p2;\n \n // Calculate projection of primary planet onto inner circle radius\n // Using the same angle but inner circle radius\n const innerRadius = this.config.radius.innermost || 90;\n const angle = primaryPlanet.position;\n const radians = (angle - 90) * (Math.PI / 180); // Adjust for SVG coordinate system\n \n const projectionX = this.centerX + innerRadius * Math.cos(radians);\n const projectionY = this.centerY + innerRadius * Math.sin(radians);\n \n // coords1 is the projection of primary planet on inner circle\n const coords1 = { x: projectionX, y: projectionY };\n // coords2 is the actual secondary planet position\n const coords2 = secondaryCoords[aspect.planet2];\n\n const aspectDef = aspectTypesConfig[aspect.type];\n const isEnabled = aspectDef ? (aspectDef.enabled !== false) : true;\n const lineStyle = aspectDef ? aspectDef.lineStyle : 'solid';\n\n if (!isEnabled || lineStyle === 'none') {\n return;\n }\n\n if (!coords1 || !coords2) {\n console.warn(`ClientSideAspectRenderer: Could not find coordinates for cross-aspect: ${aspect.planet1} ${aspect.type} ${aspect.planet2}`);\n return;\n }\n\n const p1SafeName = (aspect.planet1 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n const p2SafeName = (aspect.planet2 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n\n let strokeDasharray = 'none';\n if (lineStyle === 'dashed') {\n strokeDasharray = '5, 5';\n } else if (lineStyle === 'dotted') {\n strokeDasharray = '1, 3';\n }\n\n const line = this.svgUtils.createSVGElement(\"line\", {\n x1: coords1.x,\n y1: coords1.y,\n x2: coords2.x,\n y2: coords2.y,\n class: `aspect-element aspect-line aspect-${aspect.type} aspect-cross aspect-planet-${p1SafeName} aspect-planet-${p2SafeName}`,\n stroke: aspect.color || '#888888',\n 'stroke-dasharray': strokeDasharray\n });\n\n const tooltipText = `${this.astrologyUtils.capitalizeFirstLetter(aspect.planet1)} ${aspect.type} ${this.astrologyUtils.capitalizeFirstLetter(aspect.planet2)} (${aspect.angleDiff.toFixed(1)}°, orb ${aspect.orb.toFixed(1)}°) [Synastry]`;\n this.svgUtils.addTooltip(line, tooltipText);\n\n parentGroup.appendChild(line);\n renderedElements.push(line);\n\n this._addAspectIcon(parentGroup, aspect, coords1, coords2, tooltipText);\n });\n \n // Render projection dots (hollow circles) for primary planets on inner circle\n this._renderProjectionDots(parentGroup, primaryPlanets);\n\n return renderedElements;\n }\n \n /**\n * Renders projection dots (hollow circles) for primary planets on the inner circle\n * @private\n * @param {Element} parentGroup - The SVG group for aspect lines\n * @param {Array} primaryPlanets - Array of primary planet objects\n */\n _renderProjectionDots(parentGroup, primaryPlanets) {\n const innerRadius = this.config.radius.innermost || 90;\n const dotRadius = 3; // Size of the hollow circle\n \n primaryPlanets.forEach(planet => {\n const angle = planet.position;\n const radians = (angle - 90) * (Math.PI / 180); // Adjust for SVG coordinate system\n \n const x = this.centerX + innerRadius * Math.cos(radians);\n const y = this.centerY + innerRadius * Math.sin(radians);\n \n // Create hollow circle (stroke only, no fill)\n const circle = this.svgUtils.createSVGElement(\"circle\", {\n cx: x,\n cy: y,\n r: dotRadius,\n class: `projection-dot projection-${planet.name}`,\n fill: 'none',\n stroke: planet.color || '#666666',\n 'stroke-width': '1'\n });\n \n // Add tooltip\n const tooltipText = `${this.astrologyUtils.capitalizeFirstLetter(planet.name)} projection (${angle.toFixed(1)}°)`;\n this.svgUtils.addTooltip(circle, tooltipText);\n \n parentGroup.appendChild(circle);\n });\n }\n\n /**\n * Overrides the BaseRenderer clearGroup method to ensure custom cleanup.\n * @param {Element} parentGroup - The parent SVG group to clear.\n */\n clearGroup(parentGroup) {\n super.clearGroup(parentGroup);\n // Additional cleanup here if needed\n }\n\n /**\n * Gets the currently rendered aspects\n * @returns {Array} Array of aspect objects\n */\n getCurrentAspects() {\n return this.renderedAspects;\n }\n\n /**\n * Adds an aspect icon at the midpoint of the aspect line\n * @private\n * @param {Element} parentGroup - The SVG group for aspect lines\n * @param {Object} aspect - The aspect object\n * @param {Object} coords1 - Coordinates of first planet\n * @param {Object} coords2 - Coordinates of second planet\n * @param {string} tooltipText - Tooltip text\n */\n _addAspectIcon(parentGroup, aspect, coords1, coords2, tooltipText) {\n // Calculate midpoint of the line\n const midX = (coords1.x + coords2.x) / 2;\n const midY = (coords1.y + coords2.y) / 2;\n \n // Calculate distance from center to place the icon correctly\n const dx = midX - this.centerX;\n const dy = midY - this.centerY;\n const distanceFromCenter = Math.sqrt(dx * dx + dy * dy);\n \n // Only add icon if not too close to center (to avoid clutter)\n if (distanceFromCenter < 20) {\n return; // Skip icon if too close to center\n }\n \n // Define the icon size\n const iconSize = 16;\n \n // Get icon path using IconProvider if available\n let iconPath;\n if (this.iconProvider) {\n iconPath = this.iconProvider.getAspectIconPath(aspect.type);\n } else {\n // Fallback to old path construction\n iconPath = `${this.assetBasePath}/svg/zodiac/zodiac-aspect-${aspect.type}.svg`;\n }\n \n // Create the aspect glyph/symbol image\n const symbol = this.svgUtils.createSVGElement(\"image\", {\n x: midX - iconSize/2, // Offset by half the icon width\n y: midY - iconSize/2, // Offset by half the icon height\n width: iconSize,\n height: iconSize,\n href: iconPath,\n class: `aspect-element aspect-symbol aspect-${aspect.type}`\n });\n \n // Add error handling for image loading\n symbol.addEventListener('error', () => {\n console.warn(`Failed to load aspect icon for ${aspect.type} from path: ${iconPath}`);\n \n // Get the abbreviation for text fallback from aspect definition or default to first 3 letters\n const aspectDef = this.defaultAspectDefinitions[aspect.type];\n const fallbackText = aspectDef && aspectDef.abbr \n ? aspectDef.abbr \n : aspect.type.substring(0, 3).toUpperCase();\n \n // Use IconProvider's createTextFallback if available\n let textSymbol;\n if (this.iconProvider) {\n textSymbol = this.iconProvider.createTextFallback(\n this.svgUtils,\n {\n x: midX,\n y: midY,\n size: '12px',\n color: aspect.color || '#888888',\n className: `aspect-element aspect-symbol aspect-${aspect.type}`\n },\n fallbackText\n );\n } else {\n // Legacy fallback\n textSymbol = this.svgUtils.createSVGElement(\"text\", {\n x: midX,\n y: midY,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n 'font-size': '12px',\n 'font-weight': 'bold',\n class: `aspect-element aspect-symbol aspect-${aspect.type}`,\n fill: aspect.color || '#888888'\n });\n textSymbol.textContent = fallbackText;\n }\n \n // Add tooltip\n this.svgUtils.addTooltip(textSymbol, tooltipText);\n \n // Add to parent group\n parentGroup.appendChild(textSymbol);\n });\n \n // Add tooltip\n this.svgUtils.addTooltip(symbol, tooltipText);\n \n parentGroup.appendChild(symbol);\n }\n} ","/**\n * RendererFactory.js\n * Factory class for creating renderer instances with proper dependency injection.\n */\nimport { ServiceRegistry } from '../services/ServiceRegistry.js';\nimport { ZodiacRenderer } from '../renderers/ZodiacRenderer.js';\nimport { HouseRenderer } from '../renderers/HouseRenderer.js';\nimport { PlanetSymbolRenderer } from '../renderers/PlanetSymbolRenderer.js';\nimport { PrimaryPlanetRenderer } from '../renderers/PrimaryPlanetRenderer.js';\nimport { SecondaryPlanetRenderer } from '../renderers/SecondaryPlanetRenderer.js';\nimport { PlanetRendererCoordinator } from '../renderers/PlanetRendererCoordinator.js';\nimport { ClientSideAspectRenderer } from '../renderers/ClientSideAspectRenderer.js';\n\nexport class RendererFactory {\n /**\n * Constructor\n * @param {Object} config - Chart configuration\n * @param {string} svgNS - SVG namespace\n */\n constructor(config, svgNS) {\n this.config = config;\n this.svgNS = svgNS;\n this.svgUtils = ServiceRegistry.getSvgUtils();\n this.iconProvider = ServiceRegistry.getIconProvider();\n \n // If IconProvider is null, log error for debugging\n if (!this.iconProvider) {\n console.error('RendererFactory: IconProvider not available. Icons will not render correctly.');\n }\n }\n \n /**\n * Creates a ZodiacRenderer instance\n * @param {Object} options - Additional options for the renderer\n * @returns {ZodiacRenderer} The ZodiacRenderer instance\n */\n createZodiacRenderer(options = {}) {\n return new ZodiacRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n ...options\n });\n }\n \n /**\n * Creates a HouseRenderer instance\n * @param {Object} options - Additional options for the renderer\n * @returns {HouseRenderer} The HouseRenderer instance\n */\n createHouseRenderer(options = {}) {\n return new HouseRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n ...options\n });\n }\n \n /**\n * Creates a PlanetRenderer instance\n * This now creates a PlanetRendererCoordinator with specialized renderers\n * @param {Object} options - Additional options for the renderer\n * @returns {PlanetRendererCoordinator} The PlanetRendererCoordinator instance\n */\n createPlanetRenderer(options = {}) {\n // First create the symbol renderer\n const symbolRenderer = new PlanetSymbolRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n \n // Create primary planet renderer\n const primaryRenderer = new PrimaryPlanetRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n symbolRenderer: symbolRenderer,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n \n // Create secondary planet renderer\n const secondaryRenderer = new SecondaryPlanetRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n symbolRenderer: symbolRenderer,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n \n // Create and return the coordinator\n return new PlanetRendererCoordinator({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n primaryRenderer: primaryRenderer,\n secondaryRenderer: secondaryRenderer,\n symbolRenderer: symbolRenderer,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n }\n \n /**\n * Creates a ClientSideAspectRenderer instance\n * @param {Object} options - Additional options for the renderer\n * @returns {ClientSideAspectRenderer} The ClientSideAspectRenderer instance\n */\n createAspectRenderer(options = {}) {\n return new ClientSideAspectRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n ...options\n });\n }\n} ","/**\n * RenderingCoordinator.js\n * Coordinates all rendering operations for the chart\n */\nimport { RendererFactory } from '../factories/RendererFactory.js';\n\nexport class RenderingCoordinator {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {Object} options.config - Chart configuration\n * @param {Object} options.svgManager - SVG manager instance\n * @param {Object} options.planets - Planet data\n * @param {Array} options.houses - House data\n */\n constructor(options) {\n this.config = options.config;\n this.svgManager = options.svgManager;\n this.planets = options.planets || {};\n this.houses = options.houses || [];\n \n // Initialize renderers dictionary\n this.renderers = {};\n \n // Initialize renderers if SVG manager is available\n if (this.svgManager && this.svgManager.getSVG()) {\n this._initializeRenderers();\n }\n }\n \n /**\n * Initializes all renderers using the factory\n * @private\n */\n _initializeRenderers() {\n // Create renderer factory\n this.rendererFactory = new RendererFactory(\n this.config, \n this.svgManager.svgNS\n );\n \n // Initialize zodiac renderer\n this.renderers.zodiac = this.rendererFactory.createZodiacRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize house renderer with house data\n const houseCusps = this.config.getHouseCusps();\n const houseData = (houseCusps && houseCusps.length > 0) \n ? houseCusps \n : this.houses;\n \n this.renderers.house = this.rendererFactory.createHouseRenderer({\n houseData: houseData\n });\n \n // Initialize planet renderer\n this.renderers.planet = this.rendererFactory.createPlanetRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize aspect renderer\n this.renderers.aspect = this.rendererFactory.createAspectRenderer({\n assetBasePath: this.config.assets.basePath\n });\n }\n \n /**\n * Updates planet data\n * @param {Object} planets - New planet data\n */\n updatePlanets(planets) {\n this.planets = planets;\n }\n \n /**\n * Updates house data\n * @param {Array} houses - New house data\n */\n updateHouses(houses) {\n this.houses = houses;\n if (this.renderers.house) {\n this.renderers.house.houseData = this.houses;\n }\n }\n \n /**\n * Renders all chart elements\n */\n renderAll() {\n if (!this.svgManager.getSVG()) {\n return;\n }\n \n // Clear all groups\n Object.values(this.svgManager.getAllGroups()).forEach(group => {\n group.innerHTML = '';\n });\n \n this.renderZodiac();\n this.renderHouses();\n const planetsWithCoords = this.renderPlanets();\n this.renderAspects(planetsWithCoords);\n \n console.log(\"RenderingCoordinator: Chart rendered\");\n }\n \n /**\n * Renders the zodiac ring\n * @returns {boolean} Success indicator\n */\n renderZodiac() {\n if (!this.config.zodiacSettings.enabled || !this.renderers.zodiac) {\n return false;\n }\n \n this.renderers.zodiac.render(this.svgManager.getGroup('zodiac'));\n return true;\n }\n \n /**\n * Renders the houses\n * @returns {boolean} Success indicator\n */\n renderHouses() {\n if (!this.config.houseSettings.enabled || !this.renderers.house) {\n return false;\n }\n \n const houseGroup = this.svgManager.getGroup('houses');\n const houseDivisionsGroup = this.svgManager.getGroup('houseDivisions');\n \n // Get the current house cusps based on selected system\n const houseCusps = this.config.getHouseCusps();\n if (houseCusps && houseCusps.length > 0) {\n // Update house renderer with current house system cusps\n this.renderers.house.houseData = houseCusps;\n }\n \n // Render house divisions and numbers\n this.renderers.house.renderDivisions(houseDivisionsGroup, this.config.houseSettings.rotationAngle);\n this.renderers.house.renderNumbers(houseGroup, this.config.houseSettings.rotationAngle);\n \n return true;\n }\n \n /**\n * Renders the planets\n * @returns {Array} Array of rendered planets with coordinates for aspect calculation\n */\n renderPlanets() {\n if (!this.config.planetSettings.enabled || !this.renderers.planet) {\n return [];\n }\n \n // Get the enabled states for primary and secondary planets\n const primaryEnabled = this.config.planetSettings.primaryEnabled !== false;\n const secondaryEnabled = this.config.planetSettings.secondaryEnabled !== false;\n \n // Use the consolidated renderAllPlanetTypes method\n const renderedPlanets = this.renderers.planet.renderAllPlanetTypes({\n svgManager: this.svgManager,\n planetsData: this.planets,\n config: this.config,\n primaryEnabled: primaryEnabled,\n secondaryEnabled: secondaryEnabled\n });\n \n console.log(`RenderingCoordinator: Rendered ${renderedPlanets.primary.length} primary planets and ${renderedPlanets.secondary.length} secondary planets`);\n \n // For aspect rendering, use primary planets by default\n return renderedPlanets.primary;\n }\n \n /**\n * Renders the aspects between planets\n * @param {Array} planetsWithCoords - Array of planets with coordinates\n * @returns {boolean} Success indicator\n */\n renderAspects(planetsWithCoords) {\n if (!this.config.aspectSettings.enabled || !this.renderers.aspect) {\n return false;\n }\n \n this.renderers.aspect.render(this.svgManager.getGroup('aspects'), planetsWithCoords);\n return true;\n }\n} ","/**\n * ChartStateManager.js\n * Manages the state and configuration settings for the chart\n */\n\nexport class ChartStateManager {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {Object} options.config - Chart configuration\n * @param {Object} options.svgManager - SVG manager instance\n */\n constructor(options) {\n this.config = options.config;\n this.svgManager = options.svgManager;\n }\n \n /**\n * Updates chart configuration\n * @param {Object} configUpdate - Configuration updates\n * @returns {boolean} Success indicator\n */\n updateConfig(configUpdate) {\n this.config.mergeConfig(configUpdate);\n \n // Update aspect settings specifically if provided\n if (configUpdate.aspectSettings) {\n this.config.updateAspectSettings(configUpdate.aspectSettings);\n }\n \n console.log(\"ChartStateManager: Updated configuration\");\n return true;\n }\n \n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet to toggle\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n togglePlanetVisibility(planetName, visible) {\n this.config.togglePlanetVisibility(planetName, visible);\n return true;\n }\n \n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n toggleHousesVisibility(visible) {\n this.config.toggleHousesVisibility(visible);\n return true;\n }\n \n /**\n * Toggles the visibility of aspects\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n toggleAspectsVisibility(visible) {\n this.config.toggleAspectsVisibility(visible);\n return true;\n }\n \n /**\n * Sets the house system rotation angle\n * @param {number} angle - Rotation angle in degrees\n * @returns {boolean} Success indicator\n */\n setHouseRotation(angle) {\n this.config.houseSettings.rotationAngle = angle;\n return true;\n }\n \n /**\n * Sets the house system\n * @param {string} systemName - Name of the house system to use\n * @returns {boolean} Success indicator\n */\n setHouseSystem(systemName) {\n return this.config.setHouseSystem(systemName);\n }\n \n /**\n * Gets the available house systems\n * @returns {Array} Array of available house system names\n */\n getAvailableHouseSystems() {\n return this.config.getAvailableHouseSystems();\n }\n \n /**\n * Gets the current house system\n * @returns {string} Current house system name\n */\n getCurrentHouseSystem() {\n return this.config.getHouseSystem();\n }\n \n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n togglePrimaryPlanets(visible) {\n // Update the config settings\n this.config.togglePrimaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM if svgManager is available\n if (this.svgManager) {\n const primaryGroup = this.svgManager.getGroup('primaryPlanets');\n if (primaryGroup) {\n primaryGroup.style.display = visible ? 'block' : 'none';\n }\n }\n \n console.log(`ChartStateManager: Primary planets ${visible ? 'enabled' : 'disabled'}`);\n return true;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n toggleSecondaryPlanets(visible) {\n // Update the config settings\n this.config.toggleSecondaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM if svgManager is available\n if (this.svgManager) {\n const secondaryGroup = this.svgManager.getGroup('secondaryPlanets');\n if (secondaryGroup) {\n secondaryGroup.style.display = visible ? 'block' : 'none';\n }\n \n // Update the innermost circle visibility\n const innermostCircle = document.querySelector('.chart-innermost-circle');\n if (innermostCircle) {\n innermostCircle.style.display = visible ? 'block' : 'none';\n }\n }\n \n console.log(`ChartStateManager: Secondary planets ${visible ? 'enabled' : 'disabled'}`);\n return true;\n }\n} ","/**\n * ChartManager.js\n * Main class for the nocturna-wheel.js library.\n * Serves as the facade for all chart rendering operations.\n */\nimport { ChartConfig } from '../core/ChartConfig.js';\nimport { SVGManager } from '../managers/SVGManager.js';\nimport { ServiceRegistry } from '../services/ServiceRegistry.js';\nimport { RenderingCoordinator } from './RenderingCoordinator.js';\nimport { ChartStateManager } from './ChartStateManager.js';\n\nexport class ChartManager {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {string|Element} options.container - Container element or selector\n * @param {Object} options.planets - Planet positions data\n * @param {Array} options.houses - House cusps data (optional)\n * @param {Object} options.aspectSettings - Aspect calculation settings (optional)\n * @param {Object} options.config - Additional configuration (optional)\n */\n constructor(options) {\n if (!options || !options.container) {\n throw new Error(\"ChartManager: Container element or selector is required\");\n }\n\n this.options = options;\n this.container = typeof options.container === 'string' \n ? document.querySelector(options.container)\n : options.container;\n \n if (!this.container) {\n throw new Error(`ChartManager: Container not found: ${options.container}`);\n }\n\n // Initialize configuration\n this.config = new ChartConfig(options.config || {});\n \n // Set data\n this.planets = options.planets || {};\n this.houses = options.houses || [];\n \n // Override aspect settings if provided\n if (options.aspectSettings) {\n this.config.updateAspectSettings(options.aspectSettings);\n }\n \n // Initialize services\n ServiceRegistry.initializeServices();\n \n // Initialize SVG manager with shared svgUtils instance\n const svgUtils = ServiceRegistry.getSvgUtils();\n this.svgManager = new SVGManager({ svgUtils });\n \n // Initialize component classes\n this.renderingCoordinator = new RenderingCoordinator({\n config: this.config,\n svgManager: this.svgManager,\n planets: this.planets,\n houses: this.houses\n });\n \n this.stateManager = new ChartStateManager({\n config: this.config,\n svgManager: this.svgManager\n });\n \n console.log(\"ChartManager: Initialized\");\n }\n\n /**\n * Initializes and sets up the chart\n * @private\n */\n _initialize() {\n const svgOptions = {\n width: this.config.svg.width,\n height: this.config.svg.height,\n viewBox: this.config.svg.viewBox\n };\n \n // Create SVG element\n this.svgManager.initialize(this.container, svgOptions);\n \n // Create standard layer groups\n this.svgManager.createStandardGroups();\n }\n\n /**\n * Renders the chart\n * @returns {ChartManager} - Instance for chaining\n */\n render() {\n if (!this.svgManager.getSVG()) {\n this._initialize();\n }\n \n // Delegate to rendering coordinator\n this.renderingCoordinator.renderAll();\n \n console.log(\"ChartManager: Chart rendered\");\n return this;\n }\n\n /**\n * Updates chart configuration\n * @param {Object} config - New configuration\n * @returns {ChartManager} - Instance for chaining\n */\n update(config) {\n if (config.planets) {\n this.planets = config.planets;\n this.renderingCoordinator.updatePlanets(this.planets);\n }\n \n if (config.houses) {\n this.houses = config.houses;\n this.renderingCoordinator.updateHouses(this.houses);\n }\n \n if (config.config) {\n this.stateManager.updateConfig(config.config);\n }\n \n // Re-render the chart\n this.render();\n \n return this;\n }\n\n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet to toggle\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n togglePlanet(planetName, visible) {\n this.stateManager.togglePlanetVisibility(planetName, visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n toggleHouses(visible) {\n this.stateManager.toggleHousesVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of aspects\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n toggleAspects(visible) {\n this.stateManager.toggleAspectsVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Sets the house system rotation angle\n * @param {number} angle - Rotation angle in degrees\n * @returns {ChartManager} - Instance for chaining\n */\n setHouseRotation(angle) {\n this.stateManager.setHouseRotation(angle);\n this.render();\n return this;\n }\n\n /**\n * Destroys the chart and cleans up resources\n */\n destroy() {\n // Remove the SVG element\n if (this.svgManager.getSVG()) {\n this.svgManager.getSVG().remove();\n }\n \n // Clear references\n this.renderingCoordinator = null;\n this.stateManager = null;\n this.planets = {};\n this.houses = [];\n \n console.log(\"ChartManager: Destroyed\");\n }\n\n /**\n * Updates chart data (planets, houses)\n * @param {Object} data - Object containing new data, e.g., { planets: {...}, houses: [...] }\n * @returns {ChartManager} - Instance for chaining\n */\n updateData(data) {\n if (data.planets) {\n // Update internal planets data\n // Ensure it matches the format expected internally (object)\n if (typeof data.planets === 'object' && !Array.isArray(data.planets)) {\n this.planets = { ...this.planets, ...data.planets };\n this.renderingCoordinator.updatePlanets(this.planets);\n console.log(\"ChartManager: Updated planets data.\");\n } else {\n console.warn(\"ChartManager.updateData: Invalid planets data format. Expected object.\");\n }\n }\n if (data.houses) {\n // Update internal houses data\n if (Array.isArray(data.houses)) {\n this.houses = data.houses;\n this.renderingCoordinator.updateHouses(this.houses);\n console.log(\"ChartManager: Updated houses data.\");\n } else {\n console.warn(\"ChartManager.updateData: Invalid houses data format. Expected array.\");\n }\n }\n // Re-render the chart with updated data\n this.render();\n return this;\n }\n\n /**\n * Updates chart configuration (aspects, assets, etc.)\n * @param {Object} configUpdate - Object containing configuration updates\n * @returns {ChartManager} - Instance for chaining\n */\n updateConfig(configUpdate) {\n this.stateManager.updateConfig(configUpdate);\n \n console.log(\"ChartManager: Updated configuration.\");\n // Re-render the chart with updated configuration\n this.render();\n return this;\n }\n\n /**\n * Sets the house system\n * @param {string} systemName - Name of the house system to use\n * @returns {ChartManager} - Instance for chaining\n */\n setHouseSystem(systemName) {\n this.stateManager.setHouseSystem(systemName);\n this.render();\n return this;\n }\n \n /**\n * Gets the available house systems\n * @returns {Array} - Array of available house system names\n */\n getAvailableHouseSystems() {\n return this.stateManager.getAvailableHouseSystems();\n }\n \n /**\n * Gets the current house system\n * @returns {string} - Current house system name\n */\n getCurrentHouseSystem() {\n return this.stateManager.getCurrentHouseSystem();\n }\n\n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n togglePrimaryPlanets(visible) {\n this.stateManager.togglePrimaryPlanets(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n toggleSecondaryPlanets(visible) {\n this.stateManager.toggleSecondaryPlanets(visible);\n this.render();\n return this;\n }\n} ","/**\n * NocturnaWheel.js\n * Main class for the nocturna-wheel.js library.\n * Serves as the facade for all chart rendering operations.\n */\nimport { ChartConfig } from './core/ChartConfig.js';\nimport { SVGManager } from './managers/SVGManager.js';\nimport { ServiceRegistry } from './services/ServiceRegistry.js';\nimport { RendererFactory } from './factories/RendererFactory.js';\n\nexport class NocturnaWheel {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {string|Element} options.container - Container element or selector\n * @param {Object} options.planets - Primary planet positions data (outer circle)\n * @param {Object} options.secondaryPlanets - Secondary planet positions data (inner circle, optional)\n * @param {Array} options.houses - House cusps data (optional)\n * @param {Object} options.aspectSettings - Aspect calculation settings (optional, legacy)\n * @param {Object} options.primaryAspectSettings - Primary aspect settings (optional)\n * @param {Object} options.secondaryAspectSettings - Secondary aspect settings (optional)\n * @param {Object} options.synastryAspectSettings - Synastry aspect settings (optional)\n * @param {Object} options.config - Additional configuration (optional)\n */\n constructor(options) {\n if (!options || !options.container) {\n throw new Error(\"NocturnaWheel: Container element or selector is required\");\n }\n\n this.options = options;\n this.container = typeof options.container === 'string' \n ? document.querySelector(options.container)\n : options.container;\n \n if (!this.container) {\n throw new Error(`NocturnaWheel: Container not found: ${options.container}`);\n }\n\n // Initialize configuration\n this.config = new ChartConfig(options.config || {});\n \n // Set data - primary planets (outer circle)\n this.planets = options.planets || {};\n \n // Set secondary planets (inner circle) - independent data\n // If not provided, initialize as empty object (user must explicitly set)\n this.secondaryPlanets = options.secondaryPlanets || {};\n \n this.houses = options.houses || [];\n \n // Override aspect settings if provided (legacy support)\n if (options.aspectSettings) {\n this.config.updateAspectSettings(options.aspectSettings);\n }\n \n // Override specific aspect settings if provided\n if (options.primaryAspectSettings) {\n this.config.updatePrimaryAspectSettings(options.primaryAspectSettings);\n }\n if (options.secondaryAspectSettings) {\n this.config.updateSecondaryAspectSettings(options.secondaryAspectSettings);\n }\n if (options.synastryAspectSettings) {\n this.config.updateSynastryAspectSettings(options.synastryAspectSettings);\n }\n \n // Initialize services\n ServiceRegistry.initializeServices();\n \n // Initialize SVG manager with shared svgUtils instance\n const svgUtils = ServiceRegistry.getSvgUtils();\n this.svgManager = new SVGManager({ svgUtils });\n \n // Initialize renderers dictionary\n this.renderers = {};\n \n console.log(\"NocturnaWheel: Initialized\");\n }\n\n /**\n * Initializes and sets up the chart\n * @private\n */\n _initialize() {\n const svgOptions = {\n width: this.config.svg.width,\n height: this.config.svg.height,\n viewBox: this.config.svg.viewBox\n };\n \n // Create SVG element\n this.svgManager.initialize(this.container, svgOptions);\n \n // Create standard layer groups\n this.svgManager.createStandardGroups();\n \n // Initialize renderers\n this._initializeRenderers();\n }\n\n /**\n * Initializes all renderers using the factory\n * @private\n */\n _initializeRenderers() {\n // Create renderer factory\n this.rendererFactory = new RendererFactory(\n this.config, \n this.svgManager.svgNS\n );\n \n // Initialize zodiac renderer\n this.renderers.zodiac = this.rendererFactory.createZodiacRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize house renderer with house data\n const houseCusps = this.config.getHouseCusps();\n const houseData = (houseCusps && houseCusps.length > 0) \n ? houseCusps \n : this.houses;\n \n this.renderers.house = this.rendererFactory.createHouseRenderer({\n houseData: houseData\n });\n \n // Initialize planet renderer\n this.renderers.planet = this.rendererFactory.createPlanetRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize aspect renderer\n this.renderers.aspect = this.rendererFactory.createAspectRenderer({\n assetBasePath: this.config.assets.basePath\n });\n }\n\n /**\n * Renders the chart\n */\n render() {\n if (!this.svgManager.getSVG()) {\n this._initialize();\n }\n \n // Clear all groups\n Object.values(this.svgManager.getAllGroups()).forEach(group => {\n group.innerHTML = '';\n });\n \n // Render zodiac if enabled\n if (this.config.zodiacSettings.enabled) {\n this.renderers.zodiac.render(this.svgManager.getGroup('zodiac'));\n }\n \n // Render houses if enabled\n if (this.config.houseSettings.enabled) {\n const houseGroup = this.svgManager.getGroup('houses');\n const houseDivisionsGroup = this.svgManager.getGroup('houseDivisions');\n \n // Get the current house cusps based on selected system\n const houseCusps = this.config.getHouseCusps();\n if (houseCusps && houseCusps.length > 0) {\n // Update house renderer with current house system cusps\n this.renderers.house.houseData = houseCusps;\n }\n \n // Render house divisions and numbers\n this.renderers.house.renderDivisions(houseDivisionsGroup, this.config.houseSettings.rotationAngle);\n this.renderers.house.renderNumbers(houseGroup, this.config.houseSettings.rotationAngle);\n }\n \n // Render planets using the consolidated approach\n let primaryPlanetsWithCoords = [];\n let secondaryPlanetsWithCoords = [];\n if (this.config.planetSettings.enabled) {\n // Get the enabled states for primary and secondary planets\n const primaryEnabled = this.config.planetSettings.primaryEnabled !== false;\n const secondaryEnabled = this.config.planetSettings.secondaryEnabled !== false;\n \n // Render primary planets (outer circle)\n if (primaryEnabled && Object.keys(this.planets).length > 0) {\n const primaryGroup = this.svgManager.getGroup('primaryPlanets');\n const primaryArray = Object.entries(this.planets)\n .filter(([name, data]) => this.config.planetSettings.visible?.[name] !== false)\n .map(([name, data]) => ({\n name: name,\n position: data.lon,\n color: data.color || '#000000',\n retrograde: !!data.retrograde\n }));\n primaryPlanetsWithCoords = this.renderers.planet.primaryRenderer.render(primaryGroup, primaryArray, 0, {\n config: this.config\n });\n }\n \n // Render secondary planets (inner circle) using SEPARATE data\n if (secondaryEnabled && Object.keys(this.secondaryPlanets).length > 0) {\n const secondaryGroup = this.svgManager.getGroup('secondaryPlanets');\n const secondaryArray = Object.entries(this.secondaryPlanets)\n .filter(([name, data]) => this.config.planetSettings.visible?.[name] !== false)\n .map(([name, data]) => ({\n name: name,\n position: data.lon,\n color: data.color || '#000000',\n retrograde: !!data.retrograde\n }));\n secondaryPlanetsWithCoords = this.renderers.planet.secondaryRenderer.render(secondaryGroup, secondaryArray, 0, {\n config: this.config\n });\n }\n \n }\n \n // Render three independent aspect types\n \n // 1. Primary aspects (outer circle to outer circle)\n if (this.config.primaryAspectSettings.enabled && primaryPlanetsWithCoords.length >= 2) {\n const primaryAspectsGroup = this.svgManager.getGroup('primaryAspects');\n this.renderers.aspect.render(primaryAspectsGroup, primaryPlanetsWithCoords, this.config.primaryAspectSettings);\n }\n \n // 2. Secondary aspects (inner circle to inner circle)\n if (this.config.secondaryAspectSettings.enabled && secondaryPlanetsWithCoords.length >= 2) {\n const secondaryAspectsGroup = this.svgManager.getGroup('secondaryAspects');\n this.renderers.aspect.render(secondaryAspectsGroup, secondaryPlanetsWithCoords, this.config.secondaryAspectSettings);\n }\n \n // 3. Synastry aspects (outer circle to inner circle)\n if (this.config.synastryAspectSettings.enabled && \n primaryPlanetsWithCoords.length >= 1 && \n secondaryPlanetsWithCoords.length >= 1) {\n const synastryAspectsGroup = this.svgManager.getGroup('synastryAspects');\n this.renderers.aspect.renderCrossAspects(\n synastryAspectsGroup, \n primaryPlanetsWithCoords, \n secondaryPlanetsWithCoords, \n this.config.synastryAspectSettings\n );\n }\n \n return this;\n }\n\n /**\n * Updates chart configuration\n * @param {Object} config - New configuration\n * @returns {NocturnaWheel} - Instance for chaining\n */\n update(config) {\n if (config.planets) {\n this.planets = config.planets;\n }\n \n if (config.houses) {\n this.houses = config.houses;\n if (this.renderers.house) {\n this.renderers.house.houseData = this.houses;\n }\n }\n \n if (config.config) {\n this.config.mergeConfig(config.config);\n }\n \n // Re-render the chart\n this.render();\n \n return this;\n }\n\n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet to toggle\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n togglePlanet(planetName, visible) {\n this.config.togglePlanetVisibility(planetName, visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleHouses(visible) {\n this.config.toggleHousesVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of aspects (legacy - toggles all)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n * @deprecated Use togglePrimaryAspects, toggleSecondaryAspects, or toggleSynastryAspects instead\n */\n toggleAspects(visible) {\n this.config.toggleAspectsVisibility(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of primary aspects (outer circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n togglePrimaryAspects(visible) {\n this.config.togglePrimaryAspectsVisibility(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of secondary aspects (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleSecondaryAspects(visible) {\n this.config.toggleSecondaryAspectsVisibility(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of synastry aspects (cross-circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleSynastryAspects(visible) {\n this.config.toggleSynastryAspectsVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Sets the house system rotation angle\n * @param {number} angle - Rotation angle in degrees\n * @returns {NocturnaWheel} - Instance for chaining\n */\n setHouseRotation(angle) {\n this.config.houseSettings.rotationAngle = angle;\n this.render();\n return this;\n }\n\n /**\n * Destroys the chart and cleans up resources\n */\n destroy() {\n // Remove the SVG element\n if (this.svgManager.getSVG()) {\n this.svgManager.getSVG().remove();\n }\n \n // Clear references\n this.renderers = {};\n this.planets = {};\n this.houses = [];\n \n console.log(\"NocturnaWheel: Destroyed\");\n }\n\n /**\n * Updates chart data (planets, secondaryPlanets, houses)\n * @param {Object} data - Object containing new data, e.g., { planets: {...}, secondaryPlanets: {...}, houses: [...] }\n * @returns {NocturnaWheel} - Instance for chaining\n */\n updateData(data) {\n if (data.planets) {\n // Update internal planets data\n // Ensure it matches the format expected internally (object)\n if (typeof data.planets === 'object' && !Array.isArray(data.planets)) {\n // Perform a deep merge for each planet\n for (const planetName in data.planets) {\n if (this.planets[planetName]) {\n this.planets[planetName] = { ...this.planets[planetName], ...data.planets[planetName] };\n } else {\n this.planets[planetName] = data.planets[planetName];\n }\n }\n // Log retrograde flags specifically\n Object.keys(this.planets).forEach(key => {\n // console.log(` ${key}: retrograde = ${this.planets[key].retrograde}`);\n });\n } else {\n console.warn(\"NocturnaWheel.updateData: Invalid planets data format. Expected object.\");\n }\n }\n if (data.secondaryPlanets) {\n // Update internal secondary planets data\n if (typeof data.secondaryPlanets === 'object' && !Array.isArray(data.secondaryPlanets)) {\n // Perform a deep merge for each secondary planet\n for (const planetName in data.secondaryPlanets) {\n if (this.secondaryPlanets[planetName]) {\n this.secondaryPlanets[planetName] = { ...this.secondaryPlanets[planetName], ...data.secondaryPlanets[planetName] };\n } else {\n this.secondaryPlanets[planetName] = data.secondaryPlanets[planetName];\n }\n }\n // console.log(\"NocturnaWheel: Updated secondary planets data (deep merged).\");\n } else {\n console.warn(\"NocturnaWheel.updateData: Invalid secondaryPlanets data format. Expected object.\");\n }\n }\n if (data.houses) {\n // Update internal houses data\n if (Array.isArray(data.houses)) {\n this.houses = data.houses;\n // Need to inform HouseRenderer if it holds its own copy\n if (this.renderers.house) {\n this.renderers.house.houseData = this.houses;\n }\n // console.log(\"NocturnaWheel: Updated houses data.\");\n } else {\n console.warn(\"NocturnaWheel.updateData: Invalid houses data format. Expected array.\");\n }\n }\n // Re-render the chart with updated data\n this.render();\n return this;\n }\n\n /**\n * Updates chart configuration (aspects, assets, etc.)\n * @param {Object} configUpdate - Object containing configuration updates\n * @returns {NocturnaWheel} - Instance for chaining\n */\n updateConfig(configUpdate) {\n this.config.mergeConfig(configUpdate); // Use the existing mergeConfig method\n \n // Update aspect settings specifically if provided\n if (configUpdate.aspectSettings) {\n this.config.updateAspectSettings(configUpdate.aspectSettings);\n }\n \n // console.log(\"NocturnaWheel: Updated configuration.\");\n // Re-render the chart with updated configuration\n this.render();\n return this;\n }\n\n /**\n * Sets the house system\n * @param {string} systemName - Name of the house system to use\n * @returns {NocturnaWheel} - Instance for chaining\n */\n setHouseSystem(systemName) {\n this.config.setHouseSystem(systemName);\n this.render();\n return this;\n }\n \n /**\n * Gets the available house systems\n * @returns {Array} - Array of available house system names\n */\n getAvailableHouseSystems() {\n return this.config.getAvailableHouseSystems();\n }\n \n /**\n * Gets the current house system\n * @returns {string} - Current house system name\n */\n getCurrentHouseSystem() {\n return this.config.getHouseSystem();\n }\n\n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n togglePrimaryPlanets(visible) {\n // Use the config's method to update the settings\n this.config.togglePrimaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM\n const primaryGroup = this.svgManager.getGroup('primaryPlanets');\n if (primaryGroup) {\n primaryGroup.style.display = visible ? 'block' : 'none';\n }\n \n // console.log(`NocturnaWheel: Primary planets ${visible ? 'enabled' : 'disabled'}`);\n return this;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleSecondaryPlanets(visible) {\n // Use the config's method to update the settings\n this.config.toggleSecondaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM\n const secondaryGroup = this.svgManager.getGroup('secondaryPlanets');\n if (secondaryGroup) {\n secondaryGroup.style.display = visible ? 'block' : 'none';\n }\n\n // Update the innermost circle visibility\n const innermostCircle = document.querySelector('.chart-innermost-circle');\n if (innermostCircle) {\n innermostCircle.style.display = visible ? 'block' : 'none';\n }\n \n // console.log(`NocturnaWheel: Secondary planets ${visible ? 'enabled' : 'disabled'}`);\n return this;\n }\n}\n\n// Export for module environments or expose globally for browser\n// if (typeof module !== 'undefined' && module.exports) {\n// module.exports = NocturnaWheel;\n// } else {\n// window.NocturnaWheel = NocturnaWheel;\n// } ","/**\r\n * ChartRenderer.js\r\n * Responsible for rendering chart elements\r\n */\r\nimport { SvgUtils } from '../utils/SvgUtils';\r\n\r\nexport class ChartRenderer {\r\n /**\r\n * Constructor\r\n * @param {WheelChart} wheelChart - WheelChart instance\r\n * @param {Object} options - Chart options\r\n */\r\n constructor(wheelChart, options = {}) {\r\n this.wheelChart = wheelChart; // Store reference to WheelChart instance\r\n this.chart = wheelChart.chart; // Store direct reference to underlying NocturnaWheel instance\r\n this.options = options;\r\n this.svgUtils = new SvgUtils();\r\n console.log(\"ChartRenderer: Initialized with chart\", this.chart);\r\n }\r\n \r\n /**\r\n * Renders inner circle and planets\r\n */\r\n renderInnerElements() {\r\n // Make sure we have a valid NocturnaWheel instance with svgManager\r\n if (!this.chart || !this.chart.svgManager) {\r\n console.error(\"ChartRenderer: Invalid chart or missing svgManager\");\r\n return;\r\n }\r\n \r\n const svg = this.chart.svgManager.getSVG();\r\n if (!svg) {\r\n console.error(\"ChartRenderer: SVG not found\");\r\n return;\r\n }\r\n \r\n const zodiacGroup = this.chart.svgManager.getGroup('zodiac');\r\n if (!zodiacGroup) {\r\n console.error(\"ChartRenderer: Zodiac group not found\");\r\n return;\r\n }\r\n \r\n // Remove only the previous innermost circle if it exists\r\n const prevCircle = zodiacGroup.querySelector('.chart-innermost-circle');\r\n if (prevCircle) {\r\n zodiacGroup.removeChild(prevCircle);\r\n }\r\n\r\n const centerX = this.chart.config.svg.center.x;\r\n const centerY = this.chart.config.svg.center.y;\r\n const c3Radius = this.chart.config.radius.innermost; // C3\r\n \r\n // Only draw the innermost circle if secondary planets are enabled\r\n if (this.chart.config.planetSettings.secondaryEnabled !== false) {\r\n this.drawInnermostCircle(zodiacGroup, this.svgUtils, centerX, centerY, c3Radius);\r\n }\r\n \r\n // Note: Planet rendering is now fully handled by NocturnaWheel.js\r\n // using the PlanetRenderer.renderAllPlanetTypes method\r\n console.log('ChartRenderer: Innermost circle rendered (if enabled). Planet rendering is now handled by NocturnaWheel.');\r\n }\r\n \r\n /**\r\n * Draws the innermost circle\r\n * @param {SVGElement} zodiacGroup - SVG group for zodiac elements\r\n * @param {SvgUtils} svgUtils - SVG utilities\r\n * @param {number} centerX - X coordinate of center\r\n * @param {number} centerY - Y coordinate of center\r\n * @param {number} radius - Radius of circle\r\n */\r\n drawInnermostCircle(zodiacGroup, svgUtils, centerX, centerY, radius) {\r\n const innermostCircle = svgUtils.createSVGElement('circle', {\r\n cx: centerX,\r\n cy: centerY,\r\n r: radius,\r\n fill: \"transparent\", // Explicitly set transparent fill to avoid default black\r\n stroke: \"#999\", // Explicitly set stroke to ensure visibility\r\n \"stroke-width\": \"0.5\", // Explicitly set stroke width\r\n class: 'zodiac-element chart-innermost-circle'\r\n });\r\n zodiacGroup.appendChild(innermostCircle);\r\n }\r\n \r\n /**\r\n * @deprecated Planet rendering is now fully handled by NocturnaWheel\r\n */\r\n renderPlanets(centerX, centerY, dotRadius, iconRadius) {\r\n console.warn('ChartRenderer: renderPlanets is deprecated. Planet rendering is now handled by NocturnaWheel.');\r\n return [];\r\n }\r\n \r\n /**\r\n * @deprecated Use renderPlanets instead\r\n */\r\n drawPlanetsAndIcons(svgUtils, centerX, centerY, dotRadius, iconRadius) {\r\n console.warn('ChartRenderer: drawPlanetsAndIcons is deprecated, use renderPlanets instead');\r\n return this.renderPlanets(centerX, centerY, dotRadius, iconRadius);\r\n }\r\n \r\n /**\r\n * @deprecated \r\n */\r\n drawPlanetDot(svgUtils, planetGroup, x, y, name, color) {\r\n console.warn('ChartRenderer: drawPlanetDot is deprecated');\r\n // No implementation - method kept for backward compatibility\r\n }\r\n \r\n /**\r\n * @deprecated \r\n */\r\n drawPlanetIcon(svgUtils, planetGroup, x, y, name) {\r\n console.warn('ChartRenderer: drawPlanetIcon is deprecated');\r\n // No implementation - method kept for backward compatibility\r\n }\r\n \r\n /**\r\n * @deprecated \r\n */\r\n drawConnector(svgUtils, planetGroup, x1, y1, x2, y2, name, color) {\r\n console.warn('ChartRenderer: drawConnector is deprecated');\r\n // No implementation - method kept for backward compatibility\r\n }\r\n} ","/**\r\n * WheelChart.js\r\n * Component class for rendering astrological wheel chart with customizable circles\r\n */\r\nimport { NocturnaWheel } from '../NocturnaWheel';\r\nimport { ChartRenderer } from './ChartRenderer';\r\n\r\nexport class WheelChart {\r\n /**\r\n * Constructor\r\n * @param {Object} options - Configuration options\r\n * @param {string|Element} options.container - Container element or selector\r\n * @param {Object} options.planets - Primary planet positions data (outer circle)\r\n * @param {Object} options.secondaryPlanets - Secondary planet positions data (inner circle, optional)\r\n * @param {Array} options.houses - House cusps data (optional)\r\n * @param {Object} options.aspectSettings - Aspect calculation settings (optional, legacy)\r\n * @param {Object} options.primaryAspectSettings - Primary aspect settings (optional)\r\n * @param {Object} options.secondaryAspectSettings - Secondary aspect settings (optional)\r\n * @param {Object} options.synastryAspectSettings - Synastry aspect settings (optional)\r\n * @param {Object} options.config - Additional configuration (optional)\r\n * @param {Function} [chartFactory=null] - Factory function to create the chart instance\r\n * Function signature: (options) => ChartInstance\r\n */\r\n constructor(options, chartFactory = null) {\r\n if (!options || !options.container) {\r\n throw new Error(\"WheelChart: Container element or selector is required\");\r\n }\r\n\r\n this.options = options;\r\n \r\n // Initialize configuration\r\n const config = options.config || {};\r\n \r\n // Use the factory function if provided\r\n if (typeof chartFactory === 'function') {\r\n console.log(\"WheelChart: Using provided chart factory function\");\r\n this.chart = chartFactory(options);\r\n } else {\r\n // Fallback to the original behavior for backward compatibility\r\n console.log(\"WheelChart: Using default chart creation\");\r\n \r\n // Create a new NocturnaWheel instance directly using the imported class\r\n this.chart = new NocturnaWheel({\r\n ...options,\r\n config: config\r\n });\r\n }\r\n \r\n // Validate the created chart instance has required methods\r\n if (!this.chart || typeof this.chart.render !== 'function') {\r\n throw new Error(\"WheelChart: Invalid chart instance created. Missing required methods.\");\r\n }\r\n \r\n // Create the renderer\r\n this.renderer = new ChartRenderer(this, options);\r\n \r\n console.log(\"WheelChart: Initialized\");\r\n }\r\n \r\n /**\r\n * Renders the chart\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n render() {\r\n // First render the base chart\r\n this.chart.render();\r\n \r\n // Add the innermost circle after rendering the main chart\r\n // Wrap in setTimeout to ensure the chart rendering has completed\r\n setTimeout(() => {\r\n try {\r\n console.log(\"WheelChart: Rendering inner elements\");\r\n this.renderer.renderInnerElements();\r\n } catch (error) {\r\n console.error(\"WheelChart: Error rendering inner elements:\", error);\r\n }\r\n }, 0);\r\n \r\n console.log(\"WheelChart: Chart rendered with inner circle\");\r\n return this;\r\n }\r\n \r\n /**\r\n * Updates chart configuration\r\n * @param {Object} config - New configuration\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n update(config) {\r\n this.chart.update(config);\r\n \r\n // Redraw the innermost circle\r\n this.renderer.renderInnerElements();\r\n \r\n return this;\r\n }\r\n \r\n /**\r\n * Delegates method calls to the NocturnaWheel instance\r\n * @param {string} method - Method name\r\n * @param {Array} args - Method arguments\r\n * @returns {*} - Return value from the method\r\n */\r\n _delegateToChart(method, ...args) {\r\n if (typeof this.chart[method] === 'function') {\r\n return this.chart[method](...args);\r\n }\r\n throw new Error(`WheelChart: Method ${method} not found in NocturnaWheel`);\r\n }\r\n \r\n /**\r\n * Delegates method calls and redraws inner circle\r\n * @param {string} method - Method name\r\n * @param {Array} args - Method arguments\r\n * @returns {*} - Return value from the method\r\n * @private\r\n */\r\n _delegateAndRedraw(method, ...args) {\r\n const result = this._delegateToChart(method, ...args);\r\n this.renderer.renderInnerElements();\r\n return result;\r\n }\r\n \r\n // Delegate common methods to the NocturnaWheel instance\r\n togglePlanet(planetName, visible) {\r\n return this._delegateAndRedraw('togglePlanet', planetName, visible);\r\n }\r\n \r\n toggleHouses(visible) {\r\n return this._delegateAndRedraw('toggleHouses', visible);\r\n }\r\n \r\n toggleAspects(visible) {\r\n return this._delegateAndRedraw('toggleAspects', visible);\r\n }\r\n \r\n togglePrimaryAspects(visible) {\r\n return this._delegateAndRedraw('togglePrimaryAspects', visible);\r\n }\r\n \r\n toggleSecondaryAspects(visible) {\r\n return this._delegateAndRedraw('toggleSecondaryAspects', visible);\r\n }\r\n \r\n toggleSynastryAspects(visible) {\r\n return this._delegateAndRedraw('toggleSynastryAspects', visible);\r\n }\r\n \r\n /**\r\n * Toggles the visibility of primary planets (inner circle)\r\n * @param {boolean} visible - Visibility state\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n togglePrimaryPlanets(visible) {\r\n return this._delegateAndRedraw('togglePrimaryPlanets', visible);\r\n }\r\n \r\n /**\r\n * Toggles the visibility of secondary planets (innermost circle)\r\n * @param {boolean} visible - Visibility state\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n toggleSecondaryPlanets(visible) {\r\n // First delegate to NocturnaWheel instance\r\n const result = this._delegateToChart('toggleSecondaryPlanets', visible);\r\n \r\n // Explicitly handle innermost circle visibility\r\n try {\r\n const container = typeof this.options.container === 'string' ?\r\n document.querySelector(this.options.container) :\r\n this.options.container;\r\n \r\n if (container) {\r\n const innermostCircle = container.querySelector('.chart-innermost-circle');\r\n if (innermostCircle) {\r\n console.log(`WheelChart: Setting innermost circle display to ${visible ? 'block' : 'none'}`);\r\n innermostCircle.style.display = visible ? 'block' : 'none';\r\n } else {\r\n console.log('WheelChart: No innermost circle found to toggle visibility');\r\n }\r\n }\r\n } catch (error) {\r\n console.error('WheelChart: Error toggling innermost circle visibility:', error);\r\n }\r\n \r\n // Also redraw inner elements to ensure everything is in sync\r\n this.renderer.renderInnerElements();\r\n \r\n return result;\r\n }\r\n \r\n setHouseRotation(angle) {\r\n return this._delegateAndRedraw('setHouseRotation', angle);\r\n }\r\n \r\n destroy() {\r\n return this._delegateToChart('destroy');\r\n }\r\n \r\n setHouseSystem(systemName) {\r\n return this._delegateAndRedraw('setHouseSystem', systemName);\r\n }\r\n \r\n // Add direct access to the chart's config for convenience\r\n get config() {\r\n return this.chart.config;\r\n }\r\n \r\n // Add direct access to updateData method\r\n updateData(data) {\r\n return this._delegateAndRedraw('updateData', data);\r\n }\r\n \r\n // Add direct access to getCurrentHouseSystem method\r\n getCurrentHouseSystem() {\r\n return this.chart.getCurrentHouseSystem();\r\n }\r\n} ","/**\n * Nocturna Wheel JS - Main Entry Point\n * \n * This file serves as the primary entry point for the Nocturna Wheel library.\n * It provides a clean public API with ES module exports.\n * \n * Factory Injection Pattern:\n * The WheelChart supports Factory Injection for better decoupling:\n * \n * ```javascript\n * // Example usage with factory injection\n * const chartFactory = (opts) => new CustomChart(opts);\n * const chart = new WheelChart(options, chartFactory);\n * ```\n * \n * See examples/factory-injection-example.js for more advanced usage patterns.\n */\n\n// Import core services\nimport { ServiceRegistry } from './services/ServiceRegistry.js';\nimport { IconProvider } from './services/IconProvider.js';\n\n// Import inline icon data (auto-generated during build)\nimport { IconData } from './data/IconData.js';\n\n// CRITICAL: Register IconProvider BEFORE initializing other services\n// This ensures renderers get the inline-capable provider, not a legacy stub\nconst iconProvider = new IconProvider({\n useInline: true,\n basePath: './assets/svg/zodiac/' // Fallback for external mode\n});\n\n// Initialize with inline data if available\nif (IconData && Object.keys(IconData.planets || {}).length > 0) {\n iconProvider.setInlineData(IconData);\n console.log('IconProvider: Initialized with inline icons -', \n 'Planets:', Object.keys(IconData.planets).length,\n 'Signs:', Object.keys(IconData.signs).length,\n 'Aspects:', Object.keys(IconData.aspects).length\n );\n} else {\n console.warn('IconProvider: IconData not loaded, will use external paths');\n}\n\n// Register IconProvider BEFORE initializing services\nServiceRegistry.register('iconProvider', iconProvider);\n\n// Now initialize other core services\nServiceRegistry.initializeServices();\n\n// Import main components for the public API\nimport { ChartManager, WheelChart } from './components/index.js';\nimport { ChartConfig } from './core/ChartConfig';\nimport { SvgUtils } from './utils/SvgUtils.js';\nimport { AstrologyUtils } from './utils/AstrologyUtils.js';\n\n// Library version\nconst VERSION = '0.2.0';\n\n// For backward compatibility (temporary)\nimport { NocturnaWheel } from './NocturnaWheel';\n\n// Clean exports for ES modules\nexport {\n ChartManager,\n NocturnaWheel, // For backward compatibility\n WheelChart,\n ChartConfig,\n VERSION,\n ServiceRegistry,\n SvgUtils,\n AstrologyUtils,\n IconProvider,\n IconData\n};\n\n/**\n * Main entry point for the Nocturna Wheel development environment\n * This file sets up the chart and handles hot module replacement for Vite\n */\n\n// Sample chart data - for development and testing\nconst chartData = {\n planets: {\n sun: { lon: 0, lat: 0, color: '#F9A825' },\n moon: { lon: 45, lat: 0, color: '#CFD8DC' },\n mercury: { lon: 15, lat: 0, color: '#7E57C2' },\n venus: { lon: 30, lat: 0, color: '#26A69A' },\n mars: { lon: 60, lat: 0, color: '#EF5350' },\n jupiter: { lon: 90, lat: 0, color: '#5C6BC0' },\n saturn: { lon: 120, lat: 0, color: '#455A64' },\n uranus: { lon: 150, lat: 0, color: '#42A5F5' },\n neptune: { lon: 180, lat: 0, color: '#29B6F6' },\n pluto: { lon: 210, lat: 0, color: '#8D6E63' }\n },\n houses: [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330],\n config: {\n zodiacSettings: {\n enabled: true\n },\n houseSettings: {\n enabled: true,\n rotationAngle: 0\n },\n planetSettings: {\n enabled: true\n },\n aspectSettings: {\n enabled: true\n }\n }\n};\n\n// Chart instance\nlet chart;\n\n/**\n * Initialize the chart\n */\nfunction initChart() {\n // Get the container element\n const container = document.getElementById('chart-container');\n \n // Configuration for the chart\n const options = {\n container: container,\n planets: chartData.planets,\n houses: chartData.houses,\n config: chartData.config\n };\n \n // Initialize the chart with the new ChartManager\n chart = new ChartManager(options);\n \n // Render the chart\n chart.render();\n \n // Setup event listeners for controls\n setupEventListeners();\n}\n\n/**\n * Setup event listeners for various controls\n */\nfunction setupEventListeners() {\n // Example: House system selector\n const houseSystemSelect = document.getElementById('house-system');\n if (houseSystemSelect) {\n houseSystemSelect.addEventListener('change', (e) => {\n chart.setHouseSystem(e.target.value);\n });\n }\n \n // Initialize secondary planets toggle to match current state (enabled)\n const secondaryPlanetsToggle = document.getElementById('toggle-secondary-planets');\n if (secondaryPlanetsToggle) {\n secondaryPlanetsToggle.checked = true;\n }\n \n // Add more event listeners for other controls as needed\n}\n\n/**\n * Clean up resources when the module is replaced (for Vite HMR)\n */\nfunction cleanup() {\n if (chart) {\n chart.destroy();\n chart = null;\n }\n}\n\n// Auto-initialization is DISABLED in production builds to prevent conflicts.\n// This demo code should only run in development mode with Vite dev server.\n// In production, users explicitly create their own chart instances.\n\n// Handle hot module replacement for Vite (development only)\nif (import.meta.hot) {\n // Initialize the chart when the DOM is ready (ONLY in development)\n document.addEventListener('DOMContentLoaded', () => {\n const container = document.getElementById('chart-container');\n if (container && container.children.length === 0) {\n console.log('DEV MODE: Auto-initializing demo chart');\n initChart();\n }\n });\n\n import.meta.hot.accept((newModule) => {\n console.log('HMR update for main.js');\n cleanup();\n initChart();\n });\n \n // Cleanup when disposing\n import.meta.hot.dispose(() => {\n console.log('HMR dispose for main.js');\n cleanup();\n });\n}\n\n// Default export for easier imports\nexport default {\n ChartManager,\n NocturnaWheel, // For backward compatibility\n WheelChart,\n ChartConfig,\n ServiceRegistry,\n SvgUtils,\n AstrologyUtils,\n IconProvider,\n IconData\n}; "],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nocturna-wheel.umd.js","sources":["../src/services/ServiceRegistry.js","../src/services/IconProvider.js","../src/data/IconData.js","../src/core/HouseCalculator.js","../src/core/ChartConfig.js","../src/utils/SvgUtils.js","../src/managers/SVGManager.js","../src/renderers/BaseRenderer.js","../src/utils/AstrologyUtils.js","../src/renderers/ZodiacRenderer.js","../src/renderers/HouseRenderer.js","../src/renderers/BasePlanetRenderer.js","../src/renderers/PlanetSymbolRenderer.js","../src/utils/PlanetPositionCalculator.js","../src/renderers/PrimaryPlanetRenderer.js","../src/renderers/SecondaryPlanetRenderer.js","../src/renderers/PlanetRendererCoordinator.js","../src/renderers/ClientSideAspectRenderer.js","../src/factories/RendererFactory.js","../src/components/RenderingCoordinator.js","../src/components/ChartStateManager.js","../src/components/ChartManager.js","../src/NocturnaWheel.js","../src/components/ChartRenderer.js","../src/components/WheelChart.js","../src/main.js"],"sourcesContent":["/**\n * ServiceRegistry.js\n * A simple service locator/registry with all dependencies inlined.\n */\n\n// Self-contained implementation\nexport class ServiceRegistry {\n // Private map to store service instances\n static #instances = new Map();\n \n /**\n * Registers a service instance with the registry\n * @param {string} key - Service identifier\n * @param {Object} instance - Service instance\n */\n static register(key, instance) {\n this.#instances.set(key, instance);\n }\n \n /**\n * Retrieves a service instance from the registry\n * @param {string} key - Service identifier\n * @returns {Object|undefined} The service instance, or undefined if not found\n */\n static get(key) {\n return this.#instances.get(key);\n }\n \n /**\n * Checks if a service is registered\n * @param {string} key - Service identifier\n * @returns {boolean} True if the service is registered\n */\n static has(key) {\n return this.#instances.has(key);\n }\n \n /**\n * Clears all registered services\n * Useful for testing or reinitialization\n */\n static clear() {\n this.#instances.clear();\n }\n \n /**\n * Gets or creates a basic SvgUtils-compatible instance\n * @returns {Object} An object with SVG utility methods\n */\n static getSvgUtils() {\n if (!this.has('svgUtils')) {\n // Create a simple SVG utilities object\n const svgUtils = {\n svgNS: \"http://www.w3.org/2000/svg\",\n \n createSVGElement(tagName, attributes = {}) {\n const element = document.createElementNS(this.svgNS, tagName);\n for (const [key, value] of Object.entries(attributes)) {\n element.setAttribute(key, value);\n }\n return element;\n },\n \n addTooltip(element, text) {\n const title = document.createElementNS(this.svgNS, \"title\");\n title.textContent = text;\n element.appendChild(title);\n return element;\n },\n \n pointOnCircle(centerX, centerY, radius, angle) {\n const radians = (angle - 90) * (Math.PI / 180);\n return {\n x: centerX + radius * Math.cos(radians),\n y: centerY + radius * Math.sin(radians)\n };\n }\n };\n \n this.register('svgUtils', svgUtils);\n }\n return this.get('svgUtils');\n }\n \n /**\n * Gets the IconProvider instance\n * NOTE: IconProvider should be registered externally before use\n * This method only retrieves, does not create\n * @returns {Object|undefined} The IconProvider instance if registered\n */\n static getIconProvider() {\n if (!this.has('iconProvider')) {\n console.warn('ServiceRegistry: IconProvider not registered. Icons may not work correctly.');\n console.warn('ServiceRegistry: This should be initialized in main.js with inline IconData.');\n return null;\n }\n return this.get('iconProvider');\n }\n \n /**\n * Initializes all core services at once\n * @param {Object} options - Initialization options\n */\n static initializeServices(options = {}) {\n // Initialize SvgUtils\n this.getSvgUtils();\n \n // Note: IconProvider should be registered externally in main.js\n // with inline IconData before calling this method\n \n console.log(\"ServiceRegistry: Core services initialized\");\n }\n} ","/**\n * IconProvider.js\n * Service to handle all SVG icon path management and fallback strategies.\n * This ensures consistent icon handling across the application.\n * \n * Supports two modes:\n * 1. Inline mode (default): Uses bundled data URLs for icons\n * 2. External mode: Uses external file paths (for custom icons)\n */\n\nexport class IconProvider {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {string} options.basePath - Base path for external SVG assets\n * @param {boolean} options.useInline - Whether to use inline data URLs (default: true)\n * @param {Object} options.customIcons - Custom icon data URLs (optional)\n */\n constructor(options = {}) {\n // Support legacy string argument for backwards compatibility\n if (typeof options === 'string') {\n options = { basePath: options, useInline: false };\n }\n \n this.basePath = options.basePath || './assets/svg/zodiac/';\n this.useInline = options.useInline !== false; // Default to true\n this.customIcons = options.customIcons || null;\n \n // Lazy-load IconData on first use\n this.inlineData = null;\n \n // Track if warning was already shown (to avoid spam)\n this._warnedAboutMissingData = false;\n }\n \n /**\n * Gets inline icon data reference\n * @private\n */\n _getInlineData() {\n return this.inlineData;\n }\n \n /**\n * Sets the inline icon data (for manual initialization)\n * @param {Object} iconData - Icon data object with planets, signs, aspects\n */\n setInlineData(iconData) {\n this.inlineData = iconData;\n console.log('IconProvider.setInlineData(): Data loaded successfully',\n 'planets:', Object.keys(iconData?.planets || {}).length,\n 'signs:', Object.keys(iconData?.signs || {}).length,\n 'aspects:', Object.keys(iconData?.aspects || {}).length\n );\n }\n\n /**\n * Gets the path or data URL for a planet icon\n * @param {string} planetName - Name of the planet\n * @returns {string} Data URL or file path to the SVG icon\n */\n getPlanetIconPath(planetName) {\n const name = planetName.toLowerCase();\n \n // Check custom icons first\n if (this.customIcons?.planets?.[name]) {\n return this.customIcons.planets[name];\n }\n \n // Try inline data URLs\n if (this.useInline) {\n const inlineData = this._getInlineData();\n if (inlineData?.planets?.[name]) {\n return inlineData.planets[name];\n } else {\n // Debug: log when inline data is not available (only once)\n if (!this._warnedAboutMissingData) {\n this._warnedAboutMissingData = true;\n if (!inlineData) {\n console.warn(`IconProvider: Inline data not loaded, falling back to external paths. Call setInlineData() to load inline icons.`);\n } else if (!inlineData.planets) {\n console.warn(`IconProvider: Inline data missing 'planets' category`);\n }\n }\n }\n }\n \n // Fallback to external path\n return `${this.basePath}zodiac-planet-${name}.svg`;\n }\n \n /**\n * Gets the path or data URL for a zodiac sign icon\n * @param {string} signName - Name of the zodiac sign\n * @returns {string} Data URL or file path to the SVG icon\n */\n getZodiacIconPath(signName) {\n const name = signName.toLowerCase();\n \n // Check custom icons first\n if (this.customIcons?.signs?.[name]) {\n return this.customIcons.signs[name];\n }\n \n // Try inline data URLs\n if (this.useInline) {\n const inlineData = this._getInlineData();\n if (inlineData?.signs?.[name]) {\n return inlineData.signs[name];\n }\n }\n \n // Fallback to external path\n return `${this.basePath}zodiac-sign-${name}.svg`;\n }\n \n /**\n * Gets the path or data URL for an aspect icon\n * @param {string} aspectType - Type of the aspect\n * @returns {string} Data URL or file path to the SVG icon\n */\n getAspectIconPath(aspectType) {\n const name = aspectType.toLowerCase();\n \n // Check custom icons first\n if (this.customIcons?.aspects?.[name]) {\n return this.customIcons.aspects[name];\n }\n \n // Try inline data URLs\n if (this.useInline) {\n const inlineData = this._getInlineData();\n if (inlineData?.aspects?.[name]) {\n return inlineData.aspects[name];\n }\n }\n \n // Fallback to external path\n return `${this.basePath}zodiac-aspect-${name}.svg`;\n }\n \n /**\n * Creates a text element as a fallback when SVG icons fail to load\n * @param {SvgUtils} svgUtils - The SvgUtils instance\n * @param {Object} options - Text element options\n * @param {number} options.x - X coordinate\n * @param {number} options.y - Y coordinate\n * @param {string} options.size - Font size (e.g., '16px')\n * @param {string} options.color - Text color\n * @param {string} options.className - CSS class name\n * @param {string} text - The text to display\n * @returns {Element} The created text element\n */\n createTextFallback(svgUtils, options, text) {\n const { x, y, size = '16px', color = '#000000', className = 'icon-fallback' } = options;\n \n const textElement = svgUtils.createSVGElement(\"text\", {\n x: x,\n y: y,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n 'font-size': size,\n 'class': className,\n 'fill': color\n });\n \n // Use the provided text\n textElement.textContent = text;\n return textElement;\n }\n} ","/**\n * IconData.js\n * Auto-generated module containing inline SVG icons as data URLs\n * Generated at: 2025-11-27T18:13:39.048Z\n * \n * This file is automatically generated by the build process.\n * Do not edit manually - changes will be overwritten.\n */\n\n/**\n * Icon data organized by category\n * All SVG icons are stored as data URLs for inline usage\n */\nexport const IconData = {\n planets: {},\n signs: {},\n aspects: {}\n};\n\n// Planet icons\nIconData.planets['jupiter'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22kVkwGe1VFLANDFw4YKh--3%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20120%20169%20L%20120.41%2052%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22kVkwGe1VFLANDFw4YKh--4%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2055.45%20117%20L%20114.55%20117%20L%20150%20117%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22kVkwGe1VFLANDFw4YKh--5%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2049.17%2039.62%20C%2061.72%2037.13%2074.51%2042.25%2082.68%2053.02%20C%2090.85%2063.79%2093.13%2078.55%2088.66%2091.68%20C%2084.18%20104.81%2073.64%20114.29%2061.06%20116.51%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22zDjTfItpbO8d8TAwGvx0-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['ketu'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-6%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%2265%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-8%22%3E%3Cg%3E%3Cellipse%20cx%3D%22135%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nZi6tGyZIidbp-v6qjZQ-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20124.39%2054.39%20Q%20120%2060%20120%2065%20Q%20120%2070%20130%2095%20Q%20140%20120%20130%20135%20Q%20120%20150%20100%20150%20Q%2080%20150%2070%20135%20Q%2060%20120%2070%2095%20Q%2080%2070%2080%2065%20Q%2080%2060%2075.61%2054.39%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22fzDwOAeg_iJ89Dt6VeXd-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['lilith'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22iy5LzPKV1b8-u4Rshwn2-1%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20139%20150%20L%2059%20150%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22iy5LzPKV1b8-u4Rshwn2-2%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2098.2%20117.1%20L%2099%20180%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22iy5LzPKV1b8-u4Rshwn2-3%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2073.37%2033.62%20C%2062.66%2050.93%2065.45%2073.12%2080.13%2087.41%20C%2094.81%20101.7%20117.6%20104.42%20135.38%2093.99%20C%20125.69%20109.66%20107.04%20117.86%2088.56%20114.57%20C%2070.07%20111.28%2055.61%2097.2%2052.23%2079.2%20C%2048.85%2061.21%2057.27%2043.05%2073.37%2033.62%20Z%22%20fill%3D%22%23000000%22%20stroke%3D%22%23000000%22%20stroke-width%3D%222%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(225%2C92.12%2C75.74)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20rgb(0%2C%200%2C%200)%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22skUIsOvDlGxpmukY0j3V-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['mars'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22201px%22%20height%3D%22201px%22%20viewBox%3D%22-0.5%20-0.5%20201%20201%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22dfX1GTXx0dsaOR7s5UN7-2%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%2210%22%20height%3D%2210%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22dfX1GTXx0dsaOR7s5UN7-3%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22115%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22dfX1GTXx0dsaOR7s5UN7-4%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20130%2085%20L%20155.97%2059.03%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20166.05%2048.95%20L%20159.33%2069.11%20L%20155.97%2059.03%20L%20145.89%2055.67%20Z%22%20fill%3D%22%23000000%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22WfpUhmjnT6FgT6mvTSny-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['mercury'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22201px%22%20viewBox%3D%22-0.5%20-0.5%20200%20201%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-5%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%2290%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20129.98%2025.18%20C%20130.36%2034.02%20124.63%2042.31%20115.07%2046.75%20C%20105.51%2051.19%2093.67%2051.07%2084.26%2046.43%20C%2074.85%2041.79%2069.39%2033.39%2070.05%2024.56%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20180%20L%20100%20130%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22P34d2Aacb0rAMBlJQ82S-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20160%20L%20140%20160%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22YspeTQYn8OWxfiwJ6-K5-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['moon'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%20%3Cpath%20d%3D%22M%20106.38%2031%20C%20133.61%2035.85%20154.8%2057.4%20159.18%2084.71%20C%20163.56%20112.02%20150.17%20139.12%20125.82%20152.23%20C%20101.46%20165.35%2071.47%20161.61%2051.08%20142.92%20Q%2059.25%20148.63%2089.31%20129.94%20Q%20119.38%20111.25%20119.38%2074.69%20Q%20119.38%2038.13%20108.81%2031.63%20Z%22%20fill%3D%22white%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%20%3C%2Fsvg%3E';\nIconData.planets['neptune'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-13%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20170%20L%20100%2061.18%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20105.67%2072.59%20L%20100%2055.59%20L%2094.33%2072.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-14%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%20140%20L%2060%20140%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xklInLVkXW5TzGvFd8Wp-15%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2061.18%20Q%2060%20100%2080%20110%20Q%20100%20120%20120%20110%20Q%20140%20100%20140%2061.18%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%2063.67%2066.59%20L%2060%2055.59%20L%2056.33%2066.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20145.67%2072.59%20L%20140%2055.59%20L%20134.33%2072.59%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22zbcp-zu0BkE59QIL-Zbj-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['pluto'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-9%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22149%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20129%20L%20100.5%20110%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%2070.4%20C%20139.78%2092.49%20121.69%20110.22%2099.6%20110%20C%2077.51%20109.78%2059.78%2091.69%2060%2069.6%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222_PLy7GvWnqgv2neW7ed-12%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%2270%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%227pAuGvqZmXAXuP9MepSf-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['rahu'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-6%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%2265%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-8%22%3E%3Cg%3E%3Cellipse%20cx%3D%22135%22%20cy%3D%2265%22%20rx%3D%2215%22%20ry%3D%2215%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22nMoK0GtzClMlq9khWL09-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20124.39%2054.39%20Q%20120%2060%20120%2065%20Q%20120%2070%20130%2095%20Q%20140%20120%20130%20135%20Q%20120%20150%20100%20150%20Q%2080%20150%2070%20135%20Q%2060%20120%2070%2095%20Q%2080%2070%2080%2065%20Q%2080%2060%2075.61%2054.39%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%223M6Cx9xprG5cO1lWqNEw-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['saturn'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-5%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2090%20139%20L%2090%2039%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2059%20L%20120%2059%20L%2090%2059%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22PGt55_aUy3Njtwruwuk4-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20150%20169%20Q%20138%20179%20129%20174%20Q%20120%20169%20129%20144%20Q%20138%20119%20134%20104%20Q%20130%2089%20110%2089%20Q%2090%2089%2090%20109%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%226yAxXstixJTfL81ozoQc-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22sU4-NP-8qgTjRoMx9Fv4-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['selena'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20140%20150%20L%2060%20150%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2099.2%20117.1%20L%20100%20180%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jFIPWhlccuGsN_-w-8e2-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2073.37%2031.14%20C%2062.66%2048.46%2065.45%2070.65%2080.13%2084.94%20C%2094.81%2099.23%20117.6%20101.95%20135.38%2091.52%20C%20125.69%20107.19%20107.04%20115.39%2088.56%20112.1%20C%2070.07%20108.81%2055.61%2094.73%2052.23%2076.73%20C%2048.85%2058.74%2057.27%2040.58%2073.37%2031.14%20Z%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(225%2C92.12%2C73.26)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22B7BV3EczgGRAOl1qaG-U-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['sun'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22KMRcx8_Z6FSBlqI5tEZE-1%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22100%22%20rx%3D%2265%22%20ry%3D%2260%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22KMRcx8_Z6FSBlqI5tEZE-2%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22100%22%20rx%3D%2210%22%20ry%3D%2210%22%20fill%3D%22%23000000%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(237%2C%20237%2C%20237))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22adE6InmPBndy7Uo4bRgR-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['uranus'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-4%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-9%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22149%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2080.91%2089.92%20L%20120.91%2089.92%20L%20100.91%2089.92%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20129%20L%20100%2060%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-12%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2052.39%2051.12%20C%2066.57%2052.6%2078%2066.81%2079.77%2085.16%20C%2081.53%20103.5%2073.15%20120.94%2059.69%20126.91%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-Ga99g4WFrNk1u2N47Tz-13%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20141.64%20127.44%20C%20128.11%20122.27%20119.13%20105.39%20120.07%2086.87%20C%20121.01%2068.35%20131.61%2053.19%20145.55%2050.44%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22An7hOLSuI-_JKes7hUzt-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22XEAaU1rfczp1g1rg0gsK-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.planets['venus'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%2282gSs5GHCCOlAdsS7Y_n-5%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%2279%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2282gSs5GHCCOlAdsS7Y_n-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20180%20L%20100%20119%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2282gSs5GHCCOlAdsS7Y_n-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20150%20L%20140%20150%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22wT5vcnIU1864jlhb-1KB-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\n\n// Zodiac sign icons\nIconData.signs['aquarius'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22pYeec5tt2UMA0w_zhV47-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22pYeec5tt2UMA0w_zhV47-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20161.5%2090%20Q%20151.5%2070%20136.5%2080%20Q%20121.5%2090%20116.5%2075%20Q%20111.5%2060%2096%2075%20Q%2080.5%2090%2074.5%2075%20Q%2068.5%2060%2041.5%2090%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22pYeec5tt2UMA0w_zhV47-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20158.5%20120%20Q%20148.5%20100%20133.5%20110%20Q%20118.5%20120%20113.5%20105%20Q%20108.5%2090%2093%20105%20Q%2077.5%20120%2071.5%20105%20Q%2065.5%2090%2038.5%20120%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22fXDPfsLTpfVXU3cFdg-k-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['aries'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22blLjc4XcNJx5ieieuYer-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22G6Vla6dTyV-LotFg2Pob-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20101%20160%20Q%20100%20100%2095%2075%20Q%2090%2050%2070%2045%20Q%2050%2040%2030%2060%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22G6Vla6dTyV-LotFg2Pob-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20101%20160%20Q%20100%20110%20105%2080%20Q%20110%2050%20130%2045%20Q%20150%2040%20170%2060%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vkXA4BL2LVM82eNTlpCW-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['cancer'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-17%22%3E%3Cg%3E%3Cellipse%20cx%3D%22131%22%20cy%3D%22106.62%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-18%22%3E%3Cg%3E%3Cellipse%20cx%3D%2272.5%22%20cy%3D%2275.62%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-19%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2097.18%20159.61%20C%2081.71%20156.42%2070.06%20134.3%2070%20108%20C%2069.94%2081.71%2081.49%2059.45%2096.95%2056.06%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100.94%2C107.81)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22F9CagPl8JsqmlfRdU_IR-20%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2097.18%20125.49%20C%2081.71%20122.39%2070.06%20100.94%2070%2075.43%20C%2069.94%2049.93%2081.49%2028.33%2096.95%2025.04%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(90%2C100.94%2C75.25)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-nztp9pWxBHcmyZ08QR4-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['capricorn'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-8%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-9%22%3E%3Cg%3E%3Cellipse%20cx%3D%22135%22%20cy%3D%22118.25%22%20rx%3D%2215%22%20ry%3D%2216.5%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20120%20112.75%20Q%20120%20130.35%20120%20110.55%20Q%20120%2090.75%20120%2068.75%20Q%20120%2046.75%20107.5%2041.25%20Q%2095%2035.75%2085%2079.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2085%2079.75%20Q%2080%2035.75%2060%2035.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22FCZELrIV3grwh7Eqi1pe-12%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20100%20145.75%20Q%20110%20145.75%20115%20134.75%20Q%20120%20123.75%20120%20118.25%20Q%20120%20112.75%20124.23%20106.76%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22BpOhtRGwmzoIQpnF7pUJ-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['gemini'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-37%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2097.31%2096.94%20C%2081.84%2093.35%2070.19%2068.48%2070.13%2038.91%20C%2070.07%209.34%2081.62%20-15.7%2097.08%20-19.51%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C101.07%2C38.69)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-38%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2095.68%20223.38%20C%2080.21%20219.76%2068.56%20194.71%2068.5%20164.91%20C%2068.44%20135.12%2079.99%20109.9%2095.45%20106.06%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(90%2C99.44%2C164.69)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-39%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2079.93%20136.79%20L%2079.47%2067.65%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22vdI9q3M43HH2vRBbEY2U-40%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20119.66%20135.3%20L%20119.73%2067.65%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22jCEtXZTTY2g2Gjzo-qMJ-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['leo'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%225dCEg9FfoHjf9y-4Zlng-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%225dCEg9FfoHjf9y-4Zlng-6%22%3E%3Cg%3E%3Cellipse%20cx%3D%2272.5%22%20cy%3D%22100%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%225dCEg9FfoHjf9y-4Zlng-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20160%20140%20Q%20150%20150%20137.5%20150%20Q%20125%20150%20122.5%20135%20Q%20120%20120%20130%2080%20Q%20140%2040%20110%2040%20Q%2080%2040%2095%20100%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['libra'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-5%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2040%20136.78%20L%20160%20136.78%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2040%20108.6%20L%2084.04%20109.09%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20116.38%20109.09%20L%20160%20108.6%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22DDuQtP-VmcjbW8JG7HV6-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20125.48%2098.82%20C%20119.06%20110.71%20105.66%20116.67%2092.85%20113.33%20C%2080.03%20109.99%2071%2098.19%2070.85%2084.59%20C%2070.7%2070.98%2079.47%2058.98%2092.21%2055.34%20C%20104.95%2051.71%20118.48%2057.35%20125.16%2069.09%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(90%2C100%2C84.25)%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22Vif0qCJVHSTV2Csg5cyl-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['pisces'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2057.79%2045.18%20C%2074.33%2047.25%2087.67%2067.3%2089.73%2093.17%20C%2091.79%20119.04%2082.01%20143.63%2066.3%20152.05%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20135.25%20152.82%20C%20119.46%20145.63%20108.98%20122.12%20110.08%2096.34%20C%20111.17%2070.55%20123.54%2049.44%20139.81%2045.61%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22ufDh7fpc4K_yNdC7vCHW-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2055.01%2099.91%20L%20144.99%2099.86%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222UPBxVXPtNNG9HLaSRjR-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['sagittarius'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2059%20127.75%20L%20138%2048.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%2086.75%20L%20100%20126.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2099%2047.75%20L%20141%2047.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bNOf38aV_gRLlzT1H2mC-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20139%2087.75%20L%20139%2045.75%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bTJtWIvd38qZUwxlYIHf-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['scorpio'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22xiVi_kujB_bSvCnK_Mbj-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20143%20Q%2060%2080%2060%2060%20Q%2060%2040%2060%2035%20Q%2060%2030%2050%2020%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xiVi_kujB_bSvCnK_Mbj-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2090%20143%20Q%2090%2080%2090%2060%20Q%2090%2040%2080%2030.75%20Q%2070%2021.5%2060%2041.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xiVi_kujB_bSvCnK_Mbj-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20152.09%20133.66%20Q%20120%20165.75%20120%20122.88%20Q%20120%2080%20120%2060%20Q%20120%2040%20110%2030.75%20Q%20100%2021.5%2089%2044.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3Cpath%20d%3D%22M%20150.86%20140.07%20L%20156.05%20129.7%20L%20145.68%20134.89%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22all%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2278SzmRzQp-I1tTwLOdSe-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['taurus'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22-6Y1EZ5wd5mKBmpr7pZl-13%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20150%2050%20Q%20130%2050%20125%2060%20Q%20120%2070%20115%2075%20Q%20110%2080%20105%2080%20Q%20100%2080%2095%2080%20Q%2090%2080%2085%2075%20Q%2080%2070%2075%2060%20Q%2070%2050%2050%2050%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22-6Y1EZ5wd5mKBmpr7pZl-14%22%3E%3Cg%3E%3Cellipse%20cx%3D%22100%22%20cy%3D%22120%22%20rx%3D%2240%22%20ry%3D%2240%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22UmnKpyvcFwhx0IRVoUol-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.signs['virgo'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-8%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-9%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20143%20Q%2060%2080%2060%2060%20Q%2060%2040%2060%2035%20Q%2060%2030%2050%2020%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-10%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2090%20143%20Q%2090%2080%2090%2060%20Q%2090%2040%2080%2030.75%20Q%2070%2021.5%2060%2041.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-11%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20150%20171.5%20Q%20120%20141.5%20120%20110.75%20Q%20120%2080%20120%2060%20Q%20120%2040%20110%2030.75%20Q%20100%2021.5%2089%2044.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22NISO0k0YKw3UAR4flL04-12%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20110%20161.5%20Q%20130%20141.5%20135%20131.5%20Q%20140%20121.5%20140%20106.5%20Q%20140%2091.5%20135%2086.5%20Q%20130%2081.5%20120%20101.5%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(255%2C%20255%2C%20255))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%2234pg9PiOzKNUfzoN4yK9-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\n\n// Aspect icons\nIconData.aspects['conjunction'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22gGTkRmc-nT83Q299-C-k-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22a2c2rf50iBX5W4IijcMr-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22a2c2rf50iBX5W4IijcMr-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%20108.47%2092.68%20L%20128.5%2072%22%20fill%3D%22none%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(237%2C%20237%2C%20237))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22a2c2rf50iBX5W4IijcMr-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%2294%22%20cy%3D%22108%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23000000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%200%2C%200)%2C%20rgb(237%2C%20237%2C%20237))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['opposition'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-6%22%3E%3Cg%3E%3Cellipse%20cx%3D%2275%22%20cy%3D%22125%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-7%22%3E%3Cg%3E%3Cellipse%20cx%3D%22125%22%20cy%3D%2275%22%20rx%3D%2222.5%22%20ry%3D%2220%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22xVQDPyRT5oTKQHZ23-IM-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2089.71%20109.86%20L%20109.27%2089.3%22%20fill%3D%22none%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22EZUqS9dHCJ6ET5sfbTn7-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['quincunx'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['semisextile'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['semisquare'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['sesquisquare'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['sextile'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2060%20100%20L%20140%20100%22%20fill%3D%22none%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-7%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2070%20L%20130%20130%22%20fill%3D%22none%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%222H47zmM80uQNvDx8u0mK-8%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%20130%20L%20130%2070%22%20fill%3D%22none%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20pointer-events%3D%22stroke%22%20style%3D%22stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%221QpNWf1EhDtsYVpd6CiN-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['square'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22p0KHWF2mTDFWD3EQTWJK-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22p0KHWF2mTDFWD3EQTWJK-6%22%3E%3Cg%3E%3Crect%20x%3D%2270%22%20y%3D%2270%22%20width%3D%2260%22%20height%3D%2260%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23990000%22%20stroke-width%3D%225%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(153%2C%200%2C%200)%2C%20rgb(255%2C%20181%2C%20181))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22Uxbd23ua_aHTV4gALoXr-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\nIconData.aspects['trine'] = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%20%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11.dtd%22%3E%20%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20style%3D%22background%3A%20transparent%3B%20background-color%3A%20transparent%3B%20color-scheme%3A%20light%20dark%3B%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20version%3D%221.1%22%20width%3D%22200px%22%20height%3D%22200px%22%20viewBox%3D%22-0.5%20-0.5%20200%20200%22%3E%3Cdefs%2F%3E%3Cg%3E%3Cg%20data-cell-id%3D%220%22%3E%3Cg%20data-cell-id%3D%221%22%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-1%22%3E%3Cg%2F%3E%3Cg%20data-cell-id%3D%22vdzi6F08xrY5ULLa3aSw-6%22%3E%3Cg%3E%3Cpath%20d%3D%22M%2070%2065%20L%20130%20100%20L%2070%20135%20Z%22%20fill%3D%22%23ffffff%22%20stroke%3D%22%23009900%22%20stroke-width%3D%225%22%20stroke-miterlimit%3D%2210%22%20transform%3D%22rotate(-90%2C100%2C100)%22%20pointer-events%3D%22all%22%20style%3D%22fill%3A%20light-dark(%23ffffff%2C%20var(--ge-dark-color%2C%20%23121212))%3B%20stroke%3A%20light-dark(rgb(0%2C%20153%2C%200)%2C%20rgb(50%2C%20181%2C%2050))%3B%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3Cg%20data-cell-id%3D%22bWTqftR76DX4mWTuiE5u-1%22%3E%3Cg%3E%3Crect%20x%3D%220%22%20y%3D%220%22%20width%3D%22200%22%20height%3D%22200%22%20fill%3D%22none%22%20stroke%3D%22none%22%20pointer-events%3D%22all%22%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E';\n\n// Export individual categories for convenience\nexport const PlanetIcons = IconData.planets;\nexport const SignIcons = IconData.signs;\nexport const AspectIcons = IconData.aspects;\n\n// Helper function to check if an icon exists\nexport function hasIcon(category, name) {\n return IconData[category] && IconData[category][name] !== undefined;\n}\n\n// Helper function to get an icon data URL\nexport function getIconDataUrl(category, name) {\n if (hasIcon(category, name)) {\n return IconData[category][name];\n }\n return null;\n}\n","/**\n * HouseCalculator.js\n * Responsible for calculating house cusps for various house systems\n * using astronomical formulas.\n * \n * Supported house systems:\n * - Placidus: The most common system in Western astrology, based on time divisions.\n * Includes proper handling of edge cases and extreme latitudes.\n * - Koch: Another time-based system (simplified implementation).\n * - Equal: Simple system with houses exactly 30° apart.\n * - Whole Sign: Uses entire signs as houses.\n * - Porphyry: Divides the ecliptic proportionally between the angles.\n * - Regiomontanus: Space-based system using the celestial equator (simplified implementation).\n * - Campanus: Space-based system using the prime vertical (simplified implementation).\n * - Morinus: Uses equal divisions of the equator (simplified implementation).\n * - Topocentric: A newer system, similar to Placidus but with different math (simplified implementation).\n */\nclass HouseCalculator {\n /**\n * Creates a new house calculator\n */\n constructor() {\n // Define available house systems and their calculation methods\n this.houseSystems = {\n \"Placidus\": this.calculatePlacidus.bind(this),\n \"Koch\": this.calculateKoch.bind(this),\n \"Equal\": this.calculateEqual.bind(this),\n \"Whole Sign\": this.calculateWholeSign.bind(this),\n \"Porphyry\": this.calculatePorphyry.bind(this),\n \"Regiomontanus\": this.calculateRegiomontanus.bind(this),\n \"Campanus\": this.calculateCampanus.bind(this),\n \"Morinus\": this.calculateMorinus.bind(this),\n \"Topocentric\": this.calculateTopocentric.bind(this)\n };\n }\n \n /**\n * Returns a list of available house systems\n * @returns {Array} Array of house system names\n */\n getAvailableHouseSystems() {\n return Object.keys(this.houseSystems);\n }\n \n /**\n * Calculate house cusps for a specified system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {string} system - House system name\n * @param {Object} options - Additional calculation options\n * @param {number} options.latitude - Geographic latitude in degrees (required for most systems)\n * @param {number} options.mc - Midheaven longitude in degrees (required for some systems)\n * @returns {Array} Array of 12 house cusp longitudes\n * @throws {Error} If system is not supported or required parameters are missing\n */\n calculateHouseCusps(ascendant, system = \"Placidus\", options = {}) {\n // Validate inputs\n if (typeof ascendant !== 'number' || ascendant < 0 || ascendant >= 360) {\n throw new Error(\"Ascendant must be a number between 0 and 360\");\n }\n \n // Check if system exists\n if (!this.houseSystems[system]) {\n throw new Error(`House system \"${system}\" is not supported`);\n }\n \n // Calculate house cusps using the appropriate method\n return this.houseSystems[system](ascendant, options);\n }\n \n /**\n * Calculates Placidus house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @param {number} options.latitude - Geographic latitude in degrees\n * @param {number} options.mc - Midheaven longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculatePlacidus(ascendant, { latitude, mc }) {\n // Validate required parameters\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Placidus house system requires latitude and mc\");\n }\n \n // Handle polar circles where traditional Placidus fails\n if (Math.abs(latitude) >= 66.5) {\n // Fallback to Porphyry for extreme latitudes\n return this.calculatePorphyry(ascendant, { mc });\n }\n \n // Standard value for obliquity of the ecliptic (ε)\n // Accurate enough for house calculations\n const obliquity = 23.4367; // degrees\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant; // ASC (1st)\n cusps[9] = mc; // MC (10th)\n cusps[6] = this.normalizeAngle(ascendant + 180); // DSC (7th)\n cusps[3] = this.normalizeAngle(mc + 180); // IC (4th)\n \n // Convert to radians for trigonometric calculations\n const latRad = this.degreesToRadians(latitude);\n const obliqRad = this.degreesToRadians(obliquity);\n \n // Convert MC to right ascension (RAMC)\n const mcRad = this.degreesToRadians(mc);\n const ramc = Math.atan2(\n Math.sin(mcRad) * Math.cos(obliqRad),\n Math.cos(mcRad)\n );\n \n // Calculate intermediate houses using traditional Placidus method\n try {\n // Houses 11 and 12\n cusps[10] = this.calculatePlacidusIntermediateHouse(mc, ascendant, 1/3, latitude, obliquity);\n cusps[11] = this.calculatePlacidusIntermediateHouse(mc, ascendant, 2/3, latitude, obliquity);\n \n // Houses 2 and 3\n cusps[1] = this.calculatePlacidusIntermediateHouse(ascendant, cusps[3], 1/3, latitude, obliquity);\n cusps[2] = this.calculatePlacidusIntermediateHouse(ascendant, cusps[3], 2/3, latitude, obliquity);\n \n // Houses 4-5-6\n cusps[4] = this.calculatePlacidusIntermediateHouse(cusps[3], cusps[6], 1/3, latitude, obliquity);\n cusps[5] = this.calculatePlacidusIntermediateHouse(cusps[3], cusps[6], 2/3, latitude, obliquity);\n \n // Houses 7-8-9\n cusps[7] = this.calculatePlacidusIntermediateHouse(cusps[6], cusps[9], 1/3, latitude, obliquity);\n cusps[8] = this.calculatePlacidusIntermediateHouse(cusps[6], cusps[9], 2/3, latitude, obliquity);\n } catch (error) {\n // If Placidus calculation fails, fall back to Porphyry\n console.warn(`Placidus calculation failed: ${error.message}. Falling back to Porphyry.`);\n return this.calculatePorphyry(ascendant, { mc });\n }\n \n return cusps;\n }\n \n /**\n * Calculates an intermediate house cusp using the Placidus method\n * @param {number} start - Start angle in degrees (e.g., MC for houses 10-11-12)\n * @param {number} end - End angle in degrees (e.g., ASC for houses 10-11-12)\n * @param {number} fraction - Fraction of the arc (1/3 or 2/3)\n * @param {number} latitude - Observer's latitude in degrees\n * @param {number} obliquity - Obliquity of the ecliptic in degrees\n * @returns {number} House cusp longitude in degrees\n */\n calculatePlacidusIntermediateHouse(start, end, fraction, latitude, obliquity) {\n // Simplification: for now we'll use a more reliable approach \n // Calculate intermediate house using proportional arc method\n const arc = this.calculateArc(start, end);\n return this.normalizeAngle(start + arc * fraction);\n }\n \n /**\n * Calculates Koch house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @param {number} options.latitude - Geographic latitude in degrees\n * @param {number} options.mc - Midheaven longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateKoch(ascendant, { latitude, mc }) {\n // Validate required parameters\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Koch house system requires latitude and mc\");\n }\n \n // Implementation of Koch house system formulas\n // Similar structure to Placidus but with different mathematical approach\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Koch calculation logic\n // This would be replaced with the actual Koch formula\n \n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Calculates Equal house cusps (simplest system)\n * @param {number} ascendant - Ascendant longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateEqual(ascendant) {\n const cusps = new Array(12);\n \n // In Equal house system, houses are exactly 30° apart\n // starting from the Ascendant\n for (let i = 0; i < 12; i++) {\n cusps[i] = this.normalizeAngle(ascendant + (i * 30));\n }\n \n return cusps;\n }\n \n /**\n * Calculates Whole Sign house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateWholeSign(ascendant) {\n const cusps = new Array(12);\n \n // In Whole Sign system, the house cusps are at the beginning of each sign\n // starting from the sign that contains the Ascendant\n \n // Determine the sign of the Ascendant (0-11)\n const ascSign = Math.floor(ascendant / 30);\n \n // Set cusps at the beginning of each sign, starting from ascendant's sign\n for (let i = 0; i < 12; i++) {\n cusps[i] = ((ascSign + i) % 12) * 30;\n }\n \n return cusps;\n }\n \n /**\n * Calculates Porphyry house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @param {number} options.mc - Midheaven longitude in degrees\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculatePorphyry(ascendant, { mc }) {\n if (typeof mc !== 'number') {\n throw new Error(\"Porphyry house system requires mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses (1, 4, 7, 10)\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Porphyry simply divides the space between angular houses equally\n \n // Calculate houses 11, 12 (between MC and ASC)\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1 / 3));\n \n // Calculate houses 2, 3 (between ASC and IC)\n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2 / 3));\n \n // Calculate houses 5, 6 (between IC and DSC)\n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3 / 3));\n \n // Calculate houses 8, 9 (between DSC and MC)\n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4 / 3));\n \n return cusps;\n }\n \n /**\n * Implementation for Regiomontanus house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateRegiomontanus(ascendant, { latitude, mc }) {\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Regiomontanus house system requires latitude and mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Regiomontanus calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Implementation for Campanus house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateCampanus(ascendant, { latitude, mc }) {\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Campanus house system requires latitude and mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Campanus calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Implementation for Morinus house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateMorinus(ascendant, { mc }) {\n if (typeof mc !== 'number') {\n throw new Error(\"Morinus house system requires mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Morinus calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Implementation for Topocentric house system\n * @param {number} ascendant - Ascendant longitude in degrees\n * @param {Object} options - Calculation options\n * @returns {Array} Array of 12 house cusp longitudes\n */\n calculateTopocentric(ascendant, { latitude, mc }) {\n if (typeof latitude !== 'number' || typeof mc !== 'number') {\n throw new Error(\"Topocentric house system requires latitude and mc\");\n }\n \n const cusps = new Array(12);\n \n // Set angular houses\n cusps[0] = ascendant;\n cusps[9] = mc;\n cusps[6] = this.normalizeAngle(ascendant + 180);\n cusps[3] = this.normalizeAngle(mc + 180);\n \n // Placeholder for Topocentric calculation\n // For now, similar to Placidus but with slight variations\n const arc1 = this.calculateArc(cusps[9], cusps[0]);\n cusps[10] = this.normalizeAngle(cusps[9] + arc1 / 3);\n cusps[11] = this.normalizeAngle(cusps[9] + (2 * arc1) / 3);\n \n const arc2 = this.calculateArc(cusps[0], cusps[3]);\n cusps[1] = this.normalizeAngle(cusps[0] + arc2 / 3);\n cusps[2] = this.normalizeAngle(cusps[0] + (2 * arc2) / 3);\n \n const arc3 = this.calculateArc(cusps[3], cusps[6]);\n cusps[4] = this.normalizeAngle(cusps[3] + arc3 / 3);\n cusps[5] = this.normalizeAngle(cusps[3] + (2 * arc3) / 3);\n \n const arc4 = this.calculateArc(cusps[6], cusps[9]);\n cusps[7] = this.normalizeAngle(cusps[6] + arc4 / 3);\n cusps[8] = this.normalizeAngle(cusps[6] + (2 * arc4) / 3);\n \n return cusps;\n }\n \n /**\n * Helper method to calculate the smallest arc between two angles\n * @param {number} start - Start angle in degrees\n * @param {number} end - End angle in degrees\n * @returns {number} The smallest arc in degrees\n */\n calculateArc(start, end) {\n const diff = this.normalizeAngle(end - start);\n return diff <= 180 ? diff : 360 - diff;\n }\n \n /**\n * Helper method to normalize an angle to 0-360 range\n * @param {number} angle - Angle in degrees\n * @returns {number} Normalized angle\n */\n normalizeAngle(angle) {\n return ((angle % 360) + 360) % 360;\n }\n \n /**\n * Convert right ascension to ecliptic longitude\n * @param {number} ra - Right ascension in radians\n * @param {number} obliqRad - Obliquity of ecliptic in radians\n * @returns {number} Ecliptic longitude in degrees\n */\n rightAscensionToLongitude(ra, obliqRad) {\n return this.radiansToDegrees(\n Math.atan2(\n Math.sin(ra) * Math.cos(obliqRad),\n Math.cos(ra)\n )\n );\n }\n \n /**\n * Convert ecliptic longitude to right ascension\n * @param {number} long - Ecliptic longitude in degrees\n * @param {number} obliqRad - Obliquity of ecliptic in radians\n * @returns {number} Right ascension in radians\n */\n longitudeToRightAscension(long, obliqRad) {\n const longRad = this.degreesToRadians(long);\n return Math.atan2(\n Math.sin(longRad) * Math.cos(obliqRad),\n Math.cos(longRad)\n );\n }\n \n /**\n * Convert degrees to radians\n * @param {number} degrees - Angle in degrees\n * @returns {number} Angle in radians\n */\n degreesToRadians(degrees) {\n return degrees * Math.PI / 180;\n }\n \n /**\n * Convert radians to degrees\n * @param {number} radians - Angle in radians\n * @returns {number} Angle in degrees\n */\n radiansToDegrees(radians) {\n return radians * 180 / Math.PI;\n }\n}\n\nexport { HouseCalculator }; ","/**\n * ChartConfig.js\n * Configuration class for the natal chart rendering.\n */\nimport { HouseCalculator } from './HouseCalculator.js';\n\nexport class ChartConfig {\n /**\n * Creates a new configuration with default settings\n * @param {Object} customConfig - Custom configuration to merge with defaults\n */\n constructor(customConfig = {}) {\n // Astronomical data - pure positional data without styling\n this.astronomicalData = {\n ascendant: 0, // Ascendant longitude in degrees\n mc: 90, // Midheaven longitude in degrees\n latitude: 51.5, // Default latitude (London)\n houseSystem: \"Placidus\", // Default house system\n planets: {\n // Default planet positions\n sun: 0,\n moon: 0,\n mercury: 0,\n venus: 0,\n mars: 0,\n jupiter: 0,\n saturn: 0,\n uranus: 0,\n neptune: 0,\n pluto: 0\n }\n };\n \n // Primary aspects (outer circle planets to outer circle planets)\n this.primaryAspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#000000', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#E41B17', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n trine: { angle: 120, orb: 6, color: '#4CC417', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n square: { angle: 90, orb: 6, color: '#F62817', enabled: true, lineStyle: 'dashed', strokeWidth: 1 },\n sextile: { angle: 60, orb: 4, color: '#56A5EC', enabled: true, lineStyle: 'dashed', strokeWidth: 1 }\n }\n };\n \n // Secondary aspects (inner circle planets to inner circle planets)\n this.secondaryAspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#AA00AA', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#FF6600', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n trine: { angle: 120, orb: 6, color: '#00AA00', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n square: { angle: 90, orb: 6, color: '#CC0066', enabled: true, lineStyle: 'dashed', strokeWidth: 1 },\n sextile: { angle: 60, orb: 4, color: '#0099CC', enabled: true, lineStyle: 'dashed', strokeWidth: 1 }\n }\n };\n \n // Synastry aspects (outer circle planets to inner circle planets)\n this.synastryAspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#666666', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#9933CC', enabled: true, lineStyle: 'solid', strokeWidth: 0.5 },\n trine: { angle: 120, orb: 6, color: '#33AA55', enabled: true, lineStyle: 'solid', strokeWidth: 0.5 },\n square: { angle: 90, orb: 6, color: '#CC6633', enabled: true, lineStyle: 'dotted', strokeWidth: 0.5 },\n sextile: { angle: 60, orb: 4, color: '#5599DD', enabled: true, lineStyle: 'dotted', strokeWidth: 0.5 }\n }\n };\n \n // Legacy aspectSettings for backward compatibility\n // Will be mapped to primaryAspectSettings if used\n this.aspectSettings = {\n enabled: true,\n orb: 6,\n types: {\n conjunction: { angle: 0, orb: 8, color: '#000000', enabled: true, lineStyle: 'none', strokeWidth: 1 },\n opposition: { angle: 180, orb: 6, color: '#E41B17', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n trine: { angle: 120, orb: 6, color: '#4CC417', enabled: true, lineStyle: 'solid', strokeWidth: 1 },\n square: { angle: 90, orb: 6, color: '#F62817', enabled: true, lineStyle: 'dashed', strokeWidth: 1 },\n sextile: { angle: 60, orb: 4, color: '#56A5EC', enabled: true, lineStyle: 'dashed', strokeWidth: 1 }\n }\n };\n \n // Planet settings\n this.planetSettings = {\n enabled: true,\n primaryEnabled: true, // Toggle for primary (inner circle) planets\n secondaryEnabled: true, // Toggle for secondary (innermost circle) planets\n dotSize: 3, // Size of the position dot\n iconSize: 24, // Size of the planet icon\n orbs: {\n // Default orbs for each planet\n sun: 8,\n moon: 8,\n mercury: 6,\n venus: 6,\n mars: 6,\n jupiter: 6,\n saturn: 6,\n uranus: 4,\n neptune: 4,\n pluto: 4\n },\n colors: {\n // Default colors for each planet\n sun: \"#ff9900\",\n moon: \"#aaaaaa\",\n mercury: \"#3399cc\",\n venus: \"#cc66cc\",\n mars: \"#cc3333\",\n jupiter: \"#9966cc\",\n saturn: \"#336633\",\n uranus: \"#33cccc\",\n neptune: \"#3366ff\",\n pluto: \"#663366\"\n },\n visible: {\n // Default visibility for each planet\n sun: true,\n moon: true,\n mercury: true,\n venus: true,\n mars: true,\n jupiter: true,\n saturn: true,\n uranus: true,\n neptune: true,\n pluto: true\n }\n };\n \n // House settings - only UI related settings, no calculations\n this.houseSettings = {\n enabled: true,\n lineColor: \"#666666\",\n textColor: \"#333333\",\n fontSize: 10,\n rotationAngle: 0 // Custom rotation angle for house system\n };\n \n // Zodiac settings\n this.zodiacSettings = {\n enabled: true,\n colors: {\n aries: \"#ff6666\",\n taurus: \"#66cc66\",\n gemini: \"#ffcc66\",\n cancer: \"#6699cc\",\n leo: \"#ff9900\",\n virgo: \"#996633\",\n libra: \"#6699ff\",\n scorpio: \"#cc3366\",\n sagittarius: \"#cc66ff\",\n capricorn: \"#339966\",\n aquarius: \"#3399ff\",\n pisces: \"#9966cc\"\n },\n fontSize: 10\n };\n \n // Radii for different chart layers\n this.radius = {\n innermost: 90, // Innermost circle (for dual charts, transits, synastry)\n zodiacInner: 120, // Inner circle (aspect container)\n zodiacMiddle: 150, // Middle circle (house boundaries)\n zodiacOuter: 180, // Outer circle (zodiac ring)\n planet: 105, // Default planet placement radius\n aspectInner: 20, // Center space for aspects\n aspectOuter: 120, // Outer boundary for aspects\n houseNumberRadius: 210 // Radius for house numbers\n };\n \n // SVG settings\n this.svg = {\n width: 460,\n height: 460,\n viewBox: \"0 0 460 460\",\n center: { x: 230, y: 230 }\n };\n \n // Assets settings\n this.assets = {\n basePath: \"./assets/\",\n zodiacIconPath: \"svg/zodiac/\",\n planetIconPath: \"svg/zodiac/\"\n };\n \n // Theme settings\n this.theme = {\n backgroundColor: \"transparent\",\n textColor: \"#333333\",\n lineColor: \"#666666\",\n lightLineColor: \"#cccccc\",\n fontFamily: \"'Arial', sans-serif\"\n };\n \n // House cusps cache - will be populated by HouseCalculator\n this.houseCusps = [];\n \n // Merge custom config with defaults (deep merge)\n this.mergeConfig(customConfig);\n \n // Initialize house cusps if we have enough data\n this._initializeHouseCusps();\n }\n\n /**\n * Merges custom configuration with the default configuration\n * @param {Object} customConfig - Custom configuration object\n */\n mergeConfig(customConfig) {\n // Helper function for deep merge\n const deepMerge = (target, source) => {\n if (typeof source !== 'object' || source === null) {\n return source;\n }\n \n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (typeof source[key] === 'object' && source[key] !== null && \n typeof target[key] === 'object' && target[key] !== null) {\n // If both are objects, recurse\n target[key] = deepMerge(target[key], source[key]);\n } else {\n // Otherwise just copy\n target[key] = source[key];\n }\n }\n }\n \n return target;\n };\n \n // Apply deep merge to all top-level properties\n for (const key in customConfig) {\n if (Object.prototype.hasOwnProperty.call(customConfig, key) && \n Object.prototype.hasOwnProperty.call(this, key)) {\n this[key] = deepMerge(this[key], customConfig[key]);\n }\n }\n }\n\n /**\n * Initializes house cusps using the HouseCalculator\n * @private\n */\n _initializeHouseCusps() {\n // Only calculate if we have the necessary data\n if (typeof this.astronomicalData.ascendant === 'number' && \n typeof this.astronomicalData.mc === 'number') {\n \n try {\n // Create calculator instance\n const houseCalculator = new HouseCalculator();\n \n // Calculate house cusps using the current house system\n this.houseCusps = houseCalculator.calculateHouseCusps(\n this.astronomicalData.ascendant,\n this.astronomicalData.houseSystem,\n {\n latitude: this.astronomicalData.latitude,\n mc: this.astronomicalData.mc\n }\n );\n \n // Auto-rotate the wheel to position the Ascendant at 9 o'clock\n // Only set if not already explicitly configured\n if (this.houseCusps.length > 0 && this.houseSettings.rotationAngle === 0) {\n console.log(`ChartConfig: Auto-rotating wheel to Ascendant at ${this.astronomicalData.ascendant}°`);\n this.houseSettings.rotationAngle = this.astronomicalData.ascendant;\n }\n } catch (error) {\n console.error(\"Failed to calculate house cusps:\", error?.message || error);\n // Set empty cusps array if calculation fails\n this.houseCusps = [];\n }\n }\n }\n\n /**\n * Gets settings for a specific planet\n * @param {string} planetName - Name of the planet\n * @returns {Object} - Planet settings\n */\n getPlanetSettings(planetName) {\n const planetLower = planetName.toLowerCase();\n return {\n color: this.planetSettings.colors[planetLower] || \"#000000\",\n size: this.planetSettings.size,\n visible: this.planetSettings.visible[planetLower] !== false\n };\n }\n\n /**\n * Gets settings for a specific aspect\n * @param {string} aspectType - Type of aspect\n * @returns {Object} - Aspect settings\n */\n getAspectSettings(aspectType) {\n const aspectLower = aspectType.toLowerCase();\n return this.aspectSettings.types[aspectLower] || \n { angle: 0, orb: this.aspectSettings.orb, color: \"#999999\", enabled: true };\n }\n\n /**\n * Gets settings for a specific zodiac sign\n * @param {string} signName - Name of the zodiac sign\n * @returns {Object} - Zodiac sign settings\n */\n getZodiacSettings(signName) {\n const signLower = signName.toLowerCase();\n return {\n color: this.zodiacSettings.colors[signLower] || \"#666666\",\n fontSize: this.zodiacSettings.fontSize\n };\n }\n\n /**\n * Updates aspect settings (legacy method - updates primaryAspectSettings)\n * @param {Object} settings - New aspect settings\n * @deprecated Use updatePrimaryAspectSettings, updateSecondaryAspectSettings, or updateSynastryAspectSettings instead\n */\n updateAspectSettings(settings) {\n this.aspectSettings = { ...this.aspectSettings, ...settings };\n // Also update primaryAspectSettings for backward compatibility\n this.primaryAspectSettings = { ...this.primaryAspectSettings, ...settings };\n }\n \n /**\n * Updates primary aspect settings (outer circle aspects)\n * @param {Object} settings - New aspect settings\n */\n updatePrimaryAspectSettings(settings) {\n this.primaryAspectSettings = { ...this.primaryAspectSettings, ...settings };\n }\n \n /**\n * Updates secondary aspect settings (inner circle aspects)\n * @param {Object} settings - New aspect settings\n */\n updateSecondaryAspectSettings(settings) {\n this.secondaryAspectSettings = { ...this.secondaryAspectSettings, ...settings };\n }\n \n /**\n * Updates synastry aspect settings (cross-circle aspects)\n * @param {Object} settings - New aspect settings\n */\n updateSynastryAspectSettings(settings) {\n this.synastryAspectSettings = { ...this.synastryAspectSettings, ...settings };\n }\n\n /**\n * Updates planet settings\n * @param {Object} settings - New planet settings\n */\n updatePlanetSettings(settings) {\n this.planetSettings = { ...this.planetSettings, ...settings };\n }\n\n /**\n * Updates house settings (visual settings only)\n * @param {Object} settings - New house settings\n */\n updateHouseSettings(settings) {\n this.houseSettings = { ...this.houseSettings, ...settings };\n }\n\n /**\n * Updates zodiac settings\n * @param {Object} settings - New zodiac settings\n */\n updateZodiacSettings(settings) {\n this.zodiacSettings = { ...this.zodiacSettings, ...settings };\n }\n\n /**\n * Sets radius for a specific layer\n * @param {string} layerName - Layer name\n * @param {number} value - Radius value\n */\n setRadius(layerName, value) {\n if (Object.prototype.hasOwnProperty.call(this.radius, layerName)) {\n this.radius[layerName] = value;\n }\n }\n\n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet\n * @param {boolean} visible - Whether the planet should be visible\n */\n togglePlanetVisibility(planetName, visible) {\n if (this.planetSettings && this.planetSettings.visible) {\n this.planetSettings.visible[planetName] = visible;\n }\n }\n \n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Whether houses should be visible\n */\n toggleHousesVisibility(visible) {\n this.houseSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of aspects (legacy - toggles all aspect types)\n * @param {boolean} visible - Whether aspects should be visible\n * @deprecated Use togglePrimaryAspectsVisibility, toggleSecondaryAspectsVisibility, or toggleSynastryAspectsVisibility instead\n */\n toggleAspectsVisibility(visible) {\n this.aspectSettings.enabled = visible;\n this.primaryAspectSettings.enabled = visible;\n this.secondaryAspectSettings.enabled = visible;\n this.synastryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of primary aspects (outer circle)\n * @param {boolean} visible - Whether primary aspects should be visible\n */\n togglePrimaryAspectsVisibility(visible) {\n this.primaryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of secondary aspects (inner circle)\n * @param {boolean} visible - Whether secondary aspects should be visible\n */\n toggleSecondaryAspectsVisibility(visible) {\n this.secondaryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of synastry aspects (cross-circle)\n * @param {boolean} visible - Whether synastry aspects should be visible\n */\n toggleSynastryAspectsVisibility(visible) {\n this.synastryAspectSettings.enabled = visible;\n }\n \n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Whether primary planets should be visible\n */\n togglePrimaryPlanetsVisibility(visible) {\n this.planetSettings.primaryEnabled = visible;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Whether secondary planets should be visible\n */\n toggleSecondaryPlanetsVisibility(visible) {\n this.planetSettings.secondaryEnabled = visible;\n }\n\n /**\n * Sets the current house system and recalculates house cusps\n * @param {string} systemName - Name of the house system to use\n * @returns {boolean} - Success status\n */\n setHouseSystem(systemName) {\n // Update the house system name\n this.astronomicalData.houseSystem = systemName;\n \n // Recalculate house cusps with new system\n this._initializeHouseCusps();\n \n return true;\n }\n \n /**\n * Gets the current house cusps\n * @returns {Array} - Array of house cusps\n */\n getHouseCusps() {\n // If we don't have house cusps data yet, calculate it\n if (!this.houseCusps || this.houseCusps.length === 0) {\n this._initializeHouseCusps();\n }\n \n // Ensure we're returning the correct format - convert to legacy format if needed\n if (this.houseCusps.length > 0 && typeof this.houseCusps[0] === 'number') {\n return this.houseCusps.map(longitude => ({ lon: longitude }));\n }\n \n return this.houseCusps;\n }\n \n /**\n * Sets the Ascendant position and recalculates house cusps\n * @param {number} ascendant - Ascendant longitude in degrees\n * @returns {boolean} - Success status\n */\n setAscendant(ascendant) {\n if (typeof ascendant !== 'number' || ascendant < 0 || ascendant >= 360) {\n return false;\n }\n \n this.astronomicalData.ascendant = ascendant;\n this._initializeHouseCusps();\n return true;\n }\n \n /**\n * Sets the Midheaven position and recalculates house cusps\n * @param {number} mc - Midheaven longitude in degrees\n * @returns {boolean} - Success status\n */\n setMidheaven(mc) {\n if (typeof mc !== 'number' || mc < 0 || mc >= 360) {\n return false;\n }\n \n this.astronomicalData.mc = mc;\n this._initializeHouseCusps();\n return true;\n }\n \n /**\n * Sets the geographic latitude and recalculates house cusps\n * @param {number} latitude - Geographic latitude in degrees\n * @returns {boolean} - Success status\n */\n setLatitude(latitude) {\n if (typeof latitude !== 'number' || latitude < -90 || latitude > 90) {\n return false;\n }\n \n this.astronomicalData.latitude = latitude;\n this._initializeHouseCusps();\n return true;\n }\n \n /**\n * Sets a planet's position\n * @param {string} planetName - Name of the planet\n * @param {number} longitude - Longitude in degrees\n * @returns {boolean} - Success status\n */\n setPlanetPosition(planetName, longitude) {\n const planetLower = planetName.toLowerCase();\n \n if (typeof longitude !== 'number' || longitude < 0 || longitude >= 360) {\n return false;\n }\n \n if (this.astronomicalData.planets.hasOwnProperty(planetLower)) {\n this.astronomicalData.planets[planetLower] = longitude;\n return true;\n }\n \n return false;\n }\n \n /**\n * Gets a planet's position\n * @param {string} planetName - Name of the planet\n * @returns {number|null} - Planet longitude or null if not found\n */\n getPlanetPosition(planetName) {\n const planetLower = planetName.toLowerCase();\n \n if (this.astronomicalData.planets.hasOwnProperty(planetLower)) {\n return this.astronomicalData.planets[planetLower];\n }\n \n return null;\n }\n \n /**\n * Gets the current house system\n * @returns {string} - Name of the current house system\n */\n getHouseSystem() {\n return this.astronomicalData.houseSystem;\n }\n \n /**\n * Gets the available house systems by creating a temporary calculator\n * @returns {Array} - Array of available house system names\n */\n getAvailableHouseSystems() {\n const calculator = new HouseCalculator();\n return calculator.getAvailableHouseSystems();\n }\n} ","/**\r\n * SvgUtils.js\r\n * Utility class for working with SVG elements\r\n */\r\nexport class SvgUtils {\r\n constructor() {\r\n this.svgNS = \"http://www.w3.org/2000/svg\";\r\n }\r\n\r\n /**\r\n * Creates an SVG element with the specified tag\r\n * @param {string} tagName - Name of the SVG tag\r\n * @param {Object} attributes - Object with attributes to set\r\n * @returns {Element} Created SVG element\r\n */\r\n createSVGElement(tagName, attributes = {}) {\r\n const element = document.createElementNS(this.svgNS, tagName);\r\n \r\n for (const [key, value] of Object.entries(attributes)) {\r\n element.setAttribute(key, value);\r\n }\r\n \r\n return element;\r\n }\r\n\r\n /**\r\n * Adds a tooltip (title) to an SVG element\r\n * @param {Element} element - SVG element\r\n * @param {string} text - Tooltip text\r\n * @returns {Element} The element with tooltip\r\n */\r\n addTooltip(element, text) {\r\n const title = document.createElementNS(this.svgNS, \"title\");\r\n title.textContent = text;\r\n element.appendChild(title);\r\n return element;\r\n }\r\n\r\n /**\r\n * Calculates coordinates of a point on a circle\r\n * @param {number} centerX - X coordinate of the center\r\n * @param {number} centerY - Y coordinate of the center\r\n * @param {number} radius - Circle radius\r\n * @param {number} angle - Angle in degrees\r\n * @returns {Object} Object with x and y coordinates\r\n */\r\n pointOnCircle(centerX, centerY, radius, angle) {\r\n // Convert angle to radians (accounting for 0 starting at the top)\r\n const radians = (angle - 90) * (Math.PI / 180);\r\n \r\n return {\r\n x: centerX + radius * Math.cos(radians),\r\n y: centerY + radius * Math.sin(radians)\r\n };\r\n }\r\n} ","/**\r\n * SVGManager.js\r\n * Handles the creation, management, and querying of the main SVG element and its layer groups.\r\n */\r\nimport { ServiceRegistry } from '../services/ServiceRegistry.js';\r\nimport { SvgUtils } from '../utils/SvgUtils.js';\r\n\r\nexport class SVGManager {\r\n /**\r\n * Constructor\r\n * @param {Object} options - Manager options\r\n * @param {SvgUtils} [options.svgUtils] - SvgUtils instance (optional, will use from registry if not provided)\r\n */\r\n constructor(options = {}) {\r\n this.svgNS = \"http://www.w3.org/2000/svg\";\r\n this.svg = null; // Reference to the main SVG element\r\n this.groups = {}; // References to the layer groups (g elements)\r\n \r\n // Use injected svgUtils or get from registry\r\n this.svgUtils = options.svgUtils || ServiceRegistry.getSvgUtils();\r\n \r\n // Define standard group order (bottom to top)\r\n this.groupOrder = [\r\n 'zodiac',\r\n 'houseDivisions',\r\n 'primaryAspects', // Aspects between primary (outer) planets\r\n 'secondaryAspects', // Aspects between secondary (inner) planets\r\n 'synastryAspects', // Aspects between primary and secondary planets\r\n 'aspects', // Legacy aspect group (for backward compatibility)\r\n 'primaryPlanets', // Outer circle planets\r\n 'secondaryPlanets', // Inner circle planets\r\n 'houses' // House numbers on top\r\n // Add other groups if needed, e.g., 'tooltips'\r\n ];\r\n }\r\n\r\n /**\r\n * Initializes the main SVG element within a container.\r\n * @param {string|Element} containerSelector - ID/CSS selector of the container element or the element itself.\r\n * @param {Object} options - SVG attributes (e.g., viewBox, width, height, class, preserveAspectRatio).\r\n * @returns {SVGElement | null} The created SVG element or null if container not found.\r\n */\r\n initialize(containerSelector, options = {}) {\r\n // Handle both string selectors and DOM elements\r\n let container;\r\n if (typeof containerSelector === 'string') {\r\n container = document.querySelector(containerSelector);\r\n if (!container) {\r\n console.error(`SVGManager: Container not found with selector: ${containerSelector}`);\r\n return null;\r\n }\r\n } else if (containerSelector instanceof Element || containerSelector instanceof HTMLElement) {\r\n container = containerSelector;\r\n } else {\r\n console.error(`SVGManager: Invalid container. Expected string selector or DOM element.`);\r\n return null;\r\n }\r\n\r\n // Clear container\r\n container.innerHTML = '';\r\n\r\n // Default options\r\n const defaultOptions = {\r\n width: \"100%\",\r\n height: \"100%\",\r\n viewBox: \"0 0 460 460\", // Default size, should match ChartConfig ideally\r\n preserveAspectRatio: \"xMidYMid meet\",\r\n class: \"nocturna-wheel-svg\" // Default class\r\n };\r\n\r\n const svgOptions = { ...defaultOptions, ...options };\r\n\r\n // Create SVG element\r\n this.svg = document.createElementNS(this.svgNS, \"svg\");\r\n\r\n // Set attributes\r\n for (const [key, value] of Object.entries(svgOptions)) {\r\n this.svg.setAttribute(key, value);\r\n }\r\n\r\n // Append to container\r\n container.appendChild(this.svg);\r\n console.log(\"SVGManager: SVG initialized\");\r\n return this.svg;\r\n }\r\n\r\n /**\r\n * Creates the standard layer groups within the SVG in the predefined order.\r\n */\r\n createStandardGroups() {\r\n if (!this.svg) {\r\n console.error(\"SVGManager: Cannot create groups, SVG not initialized.\");\r\n return;\r\n }\r\n\r\n // Clear existing groups before creating new ones (or check if they exist)\r\n this.groups = {};\r\n // Remove existing group elements from SVG if any\r\n this.svg.querySelectorAll('g').forEach(g => g.remove());\r\n\r\n console.log(\"SVGManager: Creating standard groups:\", this.groupOrder);\r\n this.groupOrder.forEach(groupName => {\r\n this.createGroup(groupName);\r\n });\r\n \r\n // Create a legacy 'planets' group for backward compatibility\r\n // This will be deprecated in future versions\r\n this.createGroup('planets');\r\n }\r\n\r\n /**\r\n * Creates a named group (<g>) element and appends it to the SVG.\r\n * If the group already exists, it returns the existing group.\r\n * @param {string} name - The name (and ID) for the group.\r\n * @returns {SVGElement | null} The created or existing group element, or null if SVG not initialized.\r\n */\r\n createGroup(name) {\r\n if (!this.svg) {\r\n console.error(`SVGManager: Cannot create group '${name}', SVG not initialized.`);\r\n return null;\r\n }\r\n if (this.groups[name]) {\r\n return this.groups[name]; // Return existing group\r\n }\r\n\r\n const group = document.createElementNS(this.svgNS, \"g\");\r\n group.setAttribute(\"id\", `group-${name}`); // Set ID for easy debugging/selection\r\n group.setAttribute(\"class\", `svg-group svg-group-${name}`); // Add class\r\n\r\n this.svg.appendChild(group); // Append to SVG (order matters based on creation sequence)\r\n this.groups[name] = group;\r\n // console.log(`SVGManager: Created group '${name}'`);\r\n return group;\r\n }\r\n\r\n /**\r\n * Retrieves a previously created group element by name.\r\n * @param {string} name - The name of the group.\r\n * @returns {SVGElement | null} The group element or null if not found or not initialized.\r\n */\r\n getGroup(name) {\r\n if (!this.svg) {\r\n console.warn(`SVGManager: Cannot get group '${name}', SVG not initialized.`);\r\n return null;\r\n }\r\n \r\n // For backward compatibility, map 'planets' to 'primaryPlanets'\r\n if (name === 'planets') {\r\n console.warn('SVGManager: Using deprecated \"planets\" group. Use \"primaryPlanets\" or \"secondaryPlanets\" instead.');\r\n name = 'primaryPlanets';\r\n }\r\n \r\n if (!this.groups[name]) {\r\n console.warn(`SVGManager: Group '${name}' not found. Creating it.`);\r\n // Attempt to create if missing, might indicate an issue elsewhere\r\n return this.createGroup(name);\r\n }\r\n return this.groups[name];\r\n }\r\n\r\n /**\r\n * Retrieves all created group elements.\r\n * @returns {Object<string, SVGElement>} An object mapping group names to their SVGElement references.\r\n */\r\n getAllGroups() {\r\n return this.groups;\r\n }\r\n\r\n /**\r\n * Returns the main SVG element.\r\n * @returns {SVGElement | null} The main SVG element or null if not initialized.\r\n */\r\n getSVG() {\r\n return this.svg;\r\n }\r\n\r\n} // End of SVGManager class ","/**\n * BaseRenderer.js\n * Self-contained base class for all renderers.\n * This version has all dependencies inlined to avoid import issues.\n */\n\n// Define a completely self-contained renderer base class\nexport class BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {Object} options.config - Chart configuration object.\n * @param {Object} options.svgUtils - SVG utility service.\n */\n constructor(options) {\n if (!options || !options.svgNS || !options.config) {\n throw new Error(`${this.constructor.name}: Missing required options (svgNS, config)`);\n }\n \n // Store base options\n this.svgNS = options.svgNS;\n this.config = options.config;\n this.options = options;\n \n // Use the provided svgUtils or create minimal internal SVG utilities\n this.svgUtils = options.svgUtils || {\n // Store SVG namespace\n svgNS: this.svgNS,\n \n // Create SVG element\n createSVGElement: (tagName, attributes = {}) => {\n const element = document.createElementNS(this.svgNS, tagName);\n for (const [key, value] of Object.entries(attributes)) {\n element.setAttribute(key, value);\n }\n return element;\n },\n \n // Add tooltip to element\n addTooltip: (element, text) => {\n const title = document.createElementNS(this.svgNS, \"title\");\n title.textContent = text;\n element.appendChild(title);\n return element;\n },\n \n // Calculate point on circle\n pointOnCircle: (centerX, centerY, radius, angle) => {\n const radians = (angle - 90) * (Math.PI / 180);\n return {\n x: centerX + radius * Math.cos(radians),\n y: centerY + radius * Math.sin(radians)\n };\n }\n };\n \n // Get dimensions from config\n this.centerX = this.config.svg.center.x;\n this.centerY = this.config.svg.center.y;\n this.innerRadius = this.config.radius.zodiacInner;\n this.middleRadius = this.config.radius.zodiacMiddle;\n this.outerRadius = this.config.radius.zodiacOuter;\n }\n\n /**\n * Clears all child nodes of the given parent SVG group.\n * @param {Element} parentGroup - The SVG group to clear.\n */\n clearGroup(parentGroup) {\n if (parentGroup) {\n parentGroup.innerHTML = '';\n }\n }\n\n /**\n * Abstract render method to be implemented by subclasses.\n * @param {Element} parentGroup - The parent SVG group element.\n * @returns {Array} Array of rendered SVG elements.\n */\n render(parentGroup) {\n throw new Error(`${this.constructor.name}: render() not implemented.`);\n }\n} ","/**\r\n * AstrologyUtils.js\r\n * Utility class for astrological calculations\r\n */\r\nclass AstrologyUtils {\r\n /**\r\n * Capitalizes the first letter of a string\r\n * @param {string} string - Input string\r\n * @returns {string} String with capitalized first letter\r\n */\r\n static capitalizeFirstLetter(string) {\r\n return string.charAt(0).toUpperCase() + string.slice(1);\r\n }\r\n\r\n /**\r\n * Determines the house based on position and rotation angle\r\n * @param {number} position - Position in degrees (0-359)\r\n * @param {number} rotationAngle - Rotation angle of the house system\r\n * @returns {number} House number (1-12)\r\n */\r\n static getHouseFromPosition(position, rotationAngle = 0) {\r\n // Adjust position relative to house system rotation\r\n const adjustedPosition = (position - rotationAngle + 360) % 360;\r\n // Determine house\r\n return Math.floor(adjustedPosition / 30) + 1;\r\n }\r\n\r\n /**\r\n * Returns the list of zodiac sign names\r\n * @returns {Array} Array of zodiac sign names\r\n */\r\n static getZodiacSigns() {\r\n return [\r\n \"aries\", \"taurus\", \"gemini\", \"cancer\", \"leo\", \"virgo\", \r\n \"libra\", \"scorpio\", \"sagittarius\", \"capricorn\", \"aquarius\", \"pisces\"\r\n ];\r\n }\r\n\r\n /**\r\n * Returns the available house systems with descriptions\r\n * @returns {Object} Object mapping house system names to their descriptions\r\n */\r\n static getHouseSystems() {\r\n return {\r\n \"Placidus\": \"Most commonly used house system in Western astrology, based on time of day\",\r\n \"Koch\": \"Developed by Walter Koch, a time-based system similar to Placidus\",\r\n \"Campanus\": \"Medieval system dividing the prime vertical into equal parts\",\r\n \"Regiomontanus\": \"Similar to Campanus, but using the celestial equator instead of prime vertical\",\r\n \"Equal\": \"Divides the ecliptic into 12 equal segments of 30° each from the Ascendant\",\r\n \"Whole Sign\": \"Assigns the entire rising sign to the 1st house, with subsequent signs as houses\",\r\n \"Porphyry\": \"Simple system that divides each quadrant into three equal parts\",\r\n \"Topocentric\": \"Modern system similar to Placidus but more accurate for extreme latitudes\"\r\n };\r\n }\r\n\r\n /**\r\n * Returns the list of planets\r\n * @returns {Array} Array of planet names\r\n */\r\n static getPlanets() {\r\n return [\r\n \"sun\", \"moon\", \"mercury\", \"venus\", \"mars\", \r\n \"jupiter\", \"saturn\", \"uranus\", \"neptune\", \"pluto\"\r\n ];\r\n }\r\n\r\n /**\r\n * Converts a house number to a Roman numeral\r\n * @param {number} house - House number (1-12)\r\n * @returns {string} Roman numeral\r\n */\r\n static houseToRoman(house) {\r\n const romanNumerals = [\"I\", \"II\", \"III\", \"IV\", \"V\", \"VI\", \"VII\", \"VIII\", \"IX\", \"X\", \"XI\", \"XII\"];\r\n return romanNumerals[house - 1] || '';\r\n }\r\n\r\n /**\r\n * Returns the full name of a planet in the specified language\r\n * @param {string} planetCode - Planet code (sun, moon, etc.)\r\n * @param {string} language - Language code (default: 'en')\r\n * @returns {string} Full planet name\r\n */\r\n static getPlanetFullName(planetCode, language = 'en') {\r\n const planetNames = {\r\n en: {\r\n \"sun\": \"Sun\",\r\n \"moon\": \"Moon\",\r\n \"mercury\": \"Mercury\",\r\n \"venus\": \"Venus\",\r\n \"mars\": \"Mars\",\r\n \"jupiter\": \"Jupiter\",\r\n \"saturn\": \"Saturn\",\r\n \"uranus\": \"Uranus\",\r\n \"neptune\": \"Neptune\",\r\n \"pluto\": \"Pluto\"\r\n },\r\n ru: {\r\n \"sun\": \"Солнце\",\r\n \"moon\": \"Луна\",\r\n \"mercury\": \"Меркурий\",\r\n \"venus\": \"Венера\",\r\n \"mars\": \"Марс\",\r\n \"jupiter\": \"Юпитер\",\r\n \"saturn\": \"Сатурн\",\r\n \"uranus\": \"Уран\",\r\n \"neptune\": \"Нептун\",\r\n \"pluto\": \"Плутон\"\r\n }\r\n };\r\n \r\n const names = planetNames[language] || planetNames.en;\r\n return names[planetCode.toLowerCase()] || this.capitalizeFirstLetter(planetCode);\r\n }\r\n\r\n /**\r\n * Returns the full name of a zodiac sign in the specified language\r\n * @param {string} signCode - Zodiac sign code (aries, taurus, etc.)\r\n * @param {string} language - Language code (default: 'en')\r\n * @returns {string} Full zodiac sign name\r\n */\r\n static getZodiacSignFullName(signCode, language = 'en') {\r\n const signNames = {\r\n en: {\r\n \"aries\": \"Aries\",\r\n \"taurus\": \"Taurus\",\r\n \"gemini\": \"Gemini\",\r\n \"cancer\": \"Cancer\",\r\n \"leo\": \"Leo\",\r\n \"virgo\": \"Virgo\",\r\n \"libra\": \"Libra\",\r\n \"scorpio\": \"Scorpio\",\r\n \"sagittarius\": \"Sagittarius\",\r\n \"capricorn\": \"Capricorn\",\r\n \"aquarius\": \"Aquarius\",\r\n \"pisces\": \"Pisces\"\r\n },\r\n ru: {\r\n \"aries\": \"Овен\",\r\n \"taurus\": \"Телец\",\r\n \"gemini\": \"Близнецы\",\r\n \"cancer\": \"Рак\",\r\n \"leo\": \"Лев\",\r\n \"virgo\": \"Дева\",\r\n \"libra\": \"Весы\",\r\n \"scorpio\": \"Скорпион\",\r\n \"sagittarius\": \"Стрелец\",\r\n \"capricorn\": \"Козерог\",\r\n \"aquarius\": \"Водолей\",\r\n \"pisces\": \"Рыбы\"\r\n }\r\n };\r\n \r\n const names = signNames[language] || signNames.en;\r\n return names[signCode.toLowerCase()] || this.capitalizeFirstLetter(signCode);\r\n }\r\n}\r\n\r\nexport { AstrologyUtils }; ","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * ZodiacRenderer.js\n * Class for rendering the zodiac circle and signs.\n */\nexport class ZodiacRenderer extends BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object.\n * @param {string} options.assetBasePath - Base path for assets.\n * @param {IconProvider} [options.iconProvider] - Icon provider service.\n */\n constructor(options) {\n super(options);\n \n // Store the icon provider\n this.iconProvider = options.iconProvider;\n \n // assetBasePath is required only if IconProvider is not available\n if (!options.assetBasePath && !this.iconProvider) {\n throw new Error(\"ZodiacRenderer: Missing required option assetBasePath or iconProvider\");\n }\n \n // Set default assetBasePath if not provided (for backward compatibility)\n this.assetBasePath = options.assetBasePath || './assets/';\n \n this.signIconRadius = (this.outerRadius + this.middleRadius) / 2;\n this.signIconSize = 30;\n }\n\n /**\n * Renders the zodiac wheel components.\n * @param {Element} parentGroup - The parent SVG group element.\n * @returns {Array} Array of rendered SVG elements (or empty array).\n */\n render(parentGroup) {\n if (!parentGroup) {\n console.error(\"ZodiacRenderer: parentGroup is null or undefined.\");\n return [];\n }\n this.clearGroup(parentGroup);\n\n const renderedElements = [];\n\n renderedElements.push(...this.renderBaseCircles(parentGroup));\n renderedElements.push(...this.renderDivisionLines(parentGroup));\n renderedElements.push(...this.renderZodiacSigns(parentGroup));\n\n console.log(\"ZodiacRenderer: Rendering complete.\");\n return renderedElements;\n }\n\n /**\n * Renders the base circles for the chart layout.\n * @param {Element} parentGroup - The parent SVG group.\n * @returns {Array<Element>} Array containing the created circle elements.\n */\n renderBaseCircles(parentGroup) {\n const elements = [];\n const circles = [\n { r: this.outerRadius, class: \"chart-outer-circle\" },\n { r: this.middleRadius, class: \"chart-middle-circle\" },\n { r: this.innerRadius, class: \"chart-inner-circle\" }\n ];\n\n circles.forEach(circleData => {\n // Determine stroke color and width based on circle type\n let strokeColor = \"#999\";\n let strokeWidth = \"0.5\";\n if (circleData.class === \"chart-outer-circle\") {\n strokeColor = \"#666\";\n strokeWidth = \"1\";\n }\n \n const circle = this.svgUtils.createSVGElement(\"circle\", {\n cx: this.centerX,\n cy: this.centerY,\n r: circleData.r,\n fill: \"transparent\", // Explicitly set transparent fill to avoid default black\n stroke: strokeColor, // Explicitly set stroke to ensure visibility\n \"stroke-width\": strokeWidth, // Explicitly set stroke width\n class: `zodiac-element ${circleData.class}` // Add base class\n });\n parentGroup.appendChild(circle);\n elements.push(circle);\n });\n return elements;\n }\n\n /**\n * Renders the division lines between zodiac signs.\n * @param {Element} parentGroup - The parent SVG group.\n * @returns {Array<Element>} Array containing the created line elements.\n */\n renderDivisionLines(parentGroup) {\n const elements = [];\n for (let i = 0; i < 12; i++) {\n const angle = i * 30; // 30 degrees per sign\n\n // Lines span from the inner zodiac ring to the outer zodiac ring\n const point1 = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.middleRadius, angle);\n const point2 = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.outerRadius, angle);\n\n // Instead of skipping lines, use special classes for cardinal points\n let specialClass = \"\";\n if (angle === 0) specialClass = \"aries-point\"; // Aries point (0°)\n else if (angle === 90) specialClass = \"cancer-point\"; // Cancer point (90°)\n else if (angle === 180) specialClass = \"libra-point\"; // Libra point (180°)\n else if (angle === 270) specialClass = \"capricorn-point\"; // Capricorn point (270°)\n\n const line = this.svgUtils.createSVGElement(\"line\", {\n x1: point1.x,\n y1: point1.y,\n x2: point2.x,\n y2: point2.y,\n stroke: \"#999\", // Explicitly set stroke to ensure visibility\n \"stroke-width\": \"0.75\", // Explicitly set stroke width\n class: `zodiac-element zodiac-division-line ${specialClass}`\n });\n\n parentGroup.appendChild(line);\n elements.push(line);\n }\n return elements;\n }\n\n /**\n * Renders the zodiac sign icons.\n * @param {Element} parentGroup - The parent SVG group.\n * @returns {Array<Element>} Array containing the created image elements.\n */\n renderZodiacSigns(parentGroup) {\n const elements = [];\n const zodiacSigns = AstrologyUtils.getZodiacSigns(); // Assumes AstrologyUtils is available\n\n for (let i = 0; i < 12; i++) {\n const signName = zodiacSigns[i];\n // Place icon in the middle of the sign's 30-degree sector\n const angle = i * 30 + 15;\n\n // Calculate position for the icon center\n const point = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.signIconRadius, angle);\n\n // Get icon path using IconProvider if available\n let iconHref;\n if (this.iconProvider) {\n iconHref = this.iconProvider.getZodiacIconPath(signName);\n } else {\n // Fallback to old path construction\n const basePath = this.options.assetBasePath || this.assetBasePath || './assets/';\n iconHref = `${basePath}svg/zodiac/zodiac-sign-${signName}.svg`;\n }\n \n // Log icon path for debugging (only log first time for each sign to avoid spam)\n if (!this._loggedSigns) this._loggedSigns = {};\n if (!this._loggedSigns[signName]) {\n console.log(`ZodiacRenderer: Loading sign '${signName}':`, \n iconHref.startsWith('data:') ? 'inline data URL' : iconHref);\n this._loggedSigns[signName] = true;\n }\n \n const icon = this.svgUtils.createSVGElement(\"image\", {\n x: point.x - this.signIconSize / 2, // Offset to center the icon\n y: point.y - this.signIconSize / 2,\n width: this.signIconSize,\n height: this.signIconSize,\n href: iconHref,\n class: `zodiac-element zodiac-sign zodiac-sign-${signName}` // Add base and specific class\n });\n\n // Fallback for missing icons\n icon.addEventListener('error', () => {\n console.warn(`Zodiac sign icon not found: ${iconHref}`);\n icon.setAttribute('href', ''); // Remove broken link\n \n // Create a text fallback\n const fallbackText = signName.substring(0, 3).toUpperCase();\n \n // Use IconProvider's createTextFallback if available\n let textElement;\n if (this.iconProvider) {\n textElement = this.iconProvider.createTextFallback(\n this.svgUtils,\n {\n x: point.x,\n y: point.y,\n size: '10px',\n color: '#ccc',\n className: `zodiac-element zodiac-sign zodiac-sign-${signName}`\n },\n fallbackText\n );\n } else {\n // Legacy fallback\n textElement = this.svgUtils.createSVGElement('text', {\n x: point.x,\n y: point.y,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'central',\n 'font-size': '10px',\n fill: '#ccc',\n class: `zodiac-element zodiac-sign zodiac-sign-${signName}`\n });\n textElement.textContent = fallbackText;\n }\n \n parentGroup.appendChild(textElement);\n elements.push(textElement); // Add placeholder to rendered elements\n });\n\n\n // Add tooltip with the full sign name\n this.svgUtils.addTooltip(icon, AstrologyUtils.getZodiacSignFullName(signName));\n\n parentGroup.appendChild(icon);\n elements.push(icon);\n }\n return elements;\n }\n} // End of ZodiacRenderer class","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * HouseRenderer.js\n * Class for rendering astrological houses in a natal chart.\n */\nexport class HouseRenderer extends BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object.\n * @param {Object} options.houseData - House cusps data (optional).\n */\n constructor(options) {\n super(options);\n this.houseData = options.houseData || [];\n // Specific radii for house renderer\n this.extendedRadius = this.outerRadius + 25;\n this.numberRadius = this.outerRadius + 30;\n }\n\n /**\n * Renders the house components.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {number} rotationAngle - Rotation angle for the house system (default: 0).\n * @returns {Array} Array of rendered SVG elements.\n */\n render(parentGroup, rotationAngle = 0) {\n if (!parentGroup) {\n console.error(\"HouseRenderer: parentGroup is null or undefined.\");\n return [];\n }\n // Clear the group before rendering\n this.clearGroup(parentGroup);\n \n const renderedElements = [];\n \n renderedElements.push(...this.renderDivisions(parentGroup, rotationAngle));\n renderedElements.push(...this.renderNumbers(parentGroup, rotationAngle));\n \n console.log(\"HouseRenderer: Rendering complete.\");\n return renderedElements;\n }\n\n /**\n * Renders the house division lines.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {number} rotationAngle - Rotation angle for the house system.\n * @returns {Array<Element>} Array containing the created line elements.\n */\n renderDivisions(parentGroup, rotationAngle) {\n const elements = [];\n let ascendantAlignmentOffset = 0;\n \n // Log house data for debugging\n console.log(\"HouseRenderer: House data for divisions:\", this.houseData);\n \n // Calculate offset only if house data is present\n if (this.houseData && this.houseData.length >= 12) {\n // Handle both legacy format { lon: value } and new format [value1, value2, ...]\n const ascendantLon = this.getHouseLongitude(this.houseData[0]);\n // Offset needed to place Ascendant (house 1 cusp) at 0 degrees (top side)\n ascendantAlignmentOffset = (360 - ascendantLon) % 360;\n }\n \n // Add division lines for 12 houses with rotation\n for (let i = 0; i < 12; i++) {\n // Use custom house positions if available, otherwise evenly distribute\n let baseAngle;\n if (this.houseData && this.houseData.length >= 12) {\n baseAngle = this.getHouseLongitude(this.houseData[i]);\n } else {\n baseAngle = i * 30; // Default if no data\n }\n // Apply alignment offset and user rotation\n const angle = (baseAngle + ascendantAlignmentOffset + rotationAngle) % 360;\n \n // Determine the house type/class for styling\n let axisClass = '';\n if (i === 0) axisClass = 'axis asc'; // ASC - Ascendant (1st house cusp)\n else if (i === 3) axisClass = 'axis ic'; // IC - Imum Coeli (4th house cusp)\n else if (i === 6) axisClass = 'axis dsc'; // DSC - Descendant (7th house cusp)\n else if (i === 9) axisClass = 'axis mc'; // MC - Medium Coeli (10th house cusp)\n \n // Calculate points for inner to middle circle lines\n const innerPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.innerRadius, angle);\n const middlePoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.middleRadius, angle);\n \n // Determine stroke color and width based on line type\n let innerStrokeColor = \"#999\";\n let innerStrokeWidth = \"0.75\";\n \n let outerStrokeColor = \"#999\";\n let outerStrokeWidth = \"0.75\";\n let outerStrokeDasharray = null;\n \n if (axisClass.includes('axis')) {\n // Cardinal points (ASC, DSC, IC, MC) - solid, darker\n innerStrokeColor = \"#555\";\n innerStrokeWidth = \"1\";\n outerStrokeColor = \"#555\";\n outerStrokeWidth = \"1\";\n // Axes are always solid\n } else {\n // Regular lines - outer lines are dashed\n outerStrokeDasharray = \"2,2\";\n }\n \n // Create line from inner to middle circle\n const innerLine = this.svgUtils.createSVGElement(\"line\", {\n x1: innerPoint.x,\n y1: innerPoint.y,\n x2: middlePoint.x,\n y2: middlePoint.y,\n stroke: innerStrokeColor, // Explicitly set stroke to ensure visibility\n \"stroke-width\": innerStrokeWidth, // Explicitly set stroke width\n class: `house-element house-division-line ${axisClass}`\n });\n \n // Ensure cardinal points render above zodiac lines\n if (axisClass.includes('axis')) {\n innerLine.style.zIndex = 10;\n }\n \n parentGroup.appendChild(innerLine);\n elements.push(innerLine);\n \n // Calculate points for middle to outer circle lines\n const outerPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.outerRadius, angle);\n \n // We don't render the middle segment anymore (between middle and outer circles)\n // to avoid overlapping with zodiac signs\n \n // Calculate point for extended line outside of the outer circle\n const extendedPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.extendedRadius, angle);\n \n // Create line from outer circle to extended point\n const outerLineAttrs = {\n x1: outerPoint.x,\n y1: outerPoint.y,\n x2: extendedPoint.x,\n y2: extendedPoint.y,\n stroke: outerStrokeColor, // Explicitly set stroke to ensure visibility\n \"stroke-width\": outerStrokeWidth, // Explicitly set stroke width\n class: `house-element house-division-line outer ${axisClass}`\n };\n \n if (outerStrokeDasharray) {\n outerLineAttrs[\"stroke-dasharray\"] = outerStrokeDasharray;\n }\n \n const outerLine = this.svgUtils.createSVGElement(\"line\", outerLineAttrs);\n \n // Ensure cardinal points render above zodiac lines\n if (axisClass.includes('axis')) {\n outerLine.style.zIndex = 10;\n }\n \n parentGroup.appendChild(outerLine);\n elements.push(outerLine);\n }\n \n return elements;\n }\n\n /**\n * Renders the house numbers.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {number} rotationAngle - Rotation angle for the house system.\n * @returns {Array<Element>} Array containing the created text elements.\n */\n renderNumbers(parentGroup, rotationAngle) {\n const elements = [];\n let ascendantAlignmentOffset = 0;\n \n // Log house data for debugging\n console.log(\"HouseRenderer: House data for numbers:\", this.houseData);\n \n // Calculate offset only if house data is present\n if (this.houseData && this.houseData.length >= 12) {\n const ascendantLon = this.getHouseLongitude(this.houseData[0]);\n // Offset needed to place Ascendant (house 1 cusp) at 0 degrees (top side)\n ascendantAlignmentOffset = (360 - ascendantLon) % 360;\n }\n \n // Create array of houses with their rotated angles and original indices\n const housesWithAngles = [];\n for (let i = 0; i < 12; i++) {\n let baseAngle;\n if (this.houseData && this.houseData.length >= 12) {\n baseAngle = this.getHouseLongitude(this.houseData[i]);\n } else {\n baseAngle = i * 30; // Default if no data\n }\n const rotatedAngle = (baseAngle + ascendantAlignmentOffset + rotationAngle) % 360;\n \n housesWithAngles.push({\n originalIndex: i,\n baseAngle: baseAngle,\n rotatedAngle: rotatedAngle\n });\n }\n \n // Sort by rotated angle to determine visual order\n housesWithAngles.sort((a, b) => a.rotatedAngle - b.rotatedAngle);\n \n // Find which house is Ascendant (originally index 0) after rotation\n const ascendantVisualIndex = housesWithAngles.findIndex(h => h.originalIndex === 0);\n \n // Render houses with correct numbering based on visual position\n housesWithAngles.forEach((house, visualIndex) => {\n const houseAngle = house.rotatedAngle;\n \n // Calculate house number based on position relative to Ascendant\n // Counter-clockwise from Ascendant\n const houseNumber = ((visualIndex - ascendantVisualIndex + 12) % 12) + 1;\n \n // Offset text from house line clockwise\n const angle = (houseAngle + 15) % 360; // Place in middle of house segment, apply modulo\n \n // Calculate position for house number\n const point = this.svgUtils.pointOnCircle(this.centerX, this.centerY, this.numberRadius, angle);\n \n // Create text element for house number\n const text = this.svgUtils.createSVGElement(\"text\", {\n x: point.x,\n y: point.y,\n class: \"house-element house-number\"\n });\n \n // Set text alignment based on position\n if ((angle >= 315 || angle < 45)) {\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"dominant-baseline\", \"auto\");\n }\n // For right side (houses on right)\n else if (angle >= 45 && angle < 135) {\n text.setAttribute(\"text-anchor\", \"start\");\n text.setAttribute(\"dominant-baseline\", \"middle\");\n }\n // For bottom half (houses at bottom)\n else if (angle >= 135 && angle < 225) {\n text.setAttribute(\"text-anchor\", \"middle\");\n text.setAttribute(\"dominant-baseline\", \"hanging\");\n }\n // For left side (houses on left)\n else {\n text.setAttribute(\"text-anchor\", \"end\");\n text.setAttribute(\"dominant-baseline\", \"middle\");\n }\n \n // Set house number as text (Roman numeral) - now based on visual position\n text.textContent = AstrologyUtils.houseToRoman(houseNumber);\n \n // Add tooltip with house information\n this.svgUtils.addTooltip(text, `House ${houseNumber}`);\n \n parentGroup.appendChild(text);\n elements.push(text);\n });\n \n return elements;\n }\n \n /**\n * Helper method to get the longitude from various house data formats\n * @param {Object|number} houseData - House cusp data (can be object with lon property or direct number)\n * @returns {number} The house cusp longitude in degrees\n */\n getHouseLongitude(houseData) {\n // Handle different data formats\n if (houseData === null || houseData === undefined) {\n console.warn(\"HouseRenderer: Null or undefined house data\");\n return 0;\n }\n \n // If it's an object with a lon property (legacy format)\n if (typeof houseData === 'object' && houseData !== null && 'lon' in houseData) {\n return houseData.lon;\n }\n \n // If it's a direct number (new format from HouseCalculator)\n if (typeof houseData === 'number') {\n return houseData;\n }\n \n // If it's some other format we don't recognize\n console.warn(\"HouseRenderer: Unrecognized house data format\", houseData);\n return 0;\n }\n} ","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * BasePlanetRenderer.js\n * Base class for all planet renderers, extending BaseRenderer.\n * Contains common functionality used by specialized planet renderers.\n */\nexport class BasePlanetRenderer extends BaseRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object.\n * @param {string} options.assetBasePath - Base path for assets.\n * @param {IconProvider} [options.iconProvider] - Icon provider service.\n */\n constructor(options) {\n super(options);\n \n // Store the icon provider\n this.iconProvider = options.iconProvider;\n \n // assetBasePath is required only if IconProvider is not available\n if (!options.assetBasePath && !this.iconProvider) {\n throw new Error(`${this.constructor.name}: Missing required option assetBasePath or iconProvider`);\n }\n \n // Set default assetBasePath if not provided (for backward compatibility)\n this.assetBasePath = options.assetBasePath || './assets/';\n }\n\n /**\n * Calculate base positions (dot and icon) for planets.\n * @param {Array} planets - Array of planet objects.\n * @param {number} dotRadius - Radius for planet dots\n * @param {number} iconRadius - Radius for planet icons\n */\n calculateBasePositions(planets, dotRadius, iconRadius) {\n planets.forEach(planet => {\n // Convert position to radians (0 degrees = East, anti-clockwise)\n // Subtract 90 to make 0 degrees = North (top)\n const radians = (planet.position - 90) * (Math.PI / 180);\n planet.radians = radians;\n\n // Calculate position on the dot radius circle\n const point = this.svgUtils.pointOnCircle(this.centerX, this.centerY, dotRadius, planet.position);\n planet.x = point.x;\n planet.y = point.y;\n\n // Calculate base position for the planet icon\n const iconPoint = this.svgUtils.pointOnCircle(this.centerX, this.centerY, iconRadius, planet.position);\n planet.iconX = iconPoint.x;\n planet.iconY = iconPoint.y;\n\n // Initialize adjusted coordinates to base coordinates\n planet.adjustedIconX = planet.iconX;\n planet.adjustedIconY = planet.iconY;\n });\n }\n\n /**\n * Prepare planet data with common properties.\n * @param {Array} planetsData - Raw planet data\n * @param {string} planetType - Type of planet ('primary' or 'secondary')\n * @param {number} dotRadius - Radius for planet dots\n * @param {number} iconRadius - Radius for planet icons\n * @returns {Array} - Prepared planet data with calculated properties\n */\n preparePlanetData(planetsData, planetType, dotRadius, iconRadius) {\n return planetsData.map(p => ({\n ...p,\n name: p.name || 'unknown',\n position: p.position !== undefined ? p.position : 0,\n // Fields to be calculated:\n x: 0, y: 0, // Dot coordinates\n iconX: 0, iconY: 0, // Base icon coordinates\n adjustedIconX: 0, adjustedIconY: 0, // Icon coordinates after overlap adjustment\n radians: 0,\n // Calculate sign index and get name from AstrologyUtils\n zodiacSign: AstrologyUtils.getZodiacSigns()[Math.floor(p.position / 30) % 12],\n position_in_sign: p.position % 30, // Calculate position within sign\n isPrimary: planetType === 'primary',\n type: planetType,\n color: p.color || '#000000',\n // Retrograde flag - whether the planet is retrograde\n retrograde: p.retrograde === true,\n // Track which radius this planet is being rendered at\n dotRadius: dotRadius,\n iconRadius: iconRadius\n }));\n }\n\n /**\n * Abstract method to be implemented by subclasses.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} - Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n throw new Error(`${this.constructor.name}: render() not implemented.`);\n }\n} ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * PlanetSymbolRenderer.js\n * Class for rendering planet symbols and glyphs.\n */\nexport class PlanetSymbolRenderer extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n */\n constructor(options) {\n super(options);\n }\n \n /**\n * Renders a symbol for a planet\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} iconSize - Size of the icon in pixels\n * @returns {Element} - The created symbol element\n */\n renderPlanetSymbol(parentGroup, planet, iconSize = 24) {\n // Get the icon path using IconProvider if available\n let iconPath;\n if (this.iconProvider) {\n iconPath = this.iconProvider.getPlanetIconPath(planet.name);\n } else {\n // Fallback to old path construction if IconProvider is not available\n const basePath = this.options.assetBasePath || this.assetBasePath || './assets/';\n iconPath = `${basePath}svg/zodiac/zodiac-planet-${planet.name.toLowerCase()}.svg`;\n }\n \n // Calculate top-left position of the icon (centered on the calculated point)\n const iconX = planet.adjustedIconX - iconSize/2;\n const iconY = planet.adjustedIconY - iconSize/2;\n \n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n const icon = this.svgUtils.createSVGElement(\"image\", {\n x: iconX,\n y: iconY,\n width: iconSize,\n height: iconSize,\n href: iconPath,\n class: `planet-icon planet-${planet.name}-icon planet-${typeClass}-icon`\n });\n \n // Add error handling for missing icons\n icon.addEventListener('error', () => {\n console.warn(`Planet icon not found: ${iconPath}`);\n icon.setAttribute('href', ''); // Remove broken link\n \n // Create a text fallback with first letter\n const fallbackText = planet.name.charAt(0).toUpperCase();\n \n // Use IconProvider's createTextFallback if available\n let textIcon;\n if (this.iconProvider) {\n textIcon = this.iconProvider.createTextFallback(\n this.svgUtils,\n {\n x: planet.adjustedIconX,\n y: planet.adjustedIconY,\n size: `${iconSize}px`,\n color: planet.color || '#000000',\n className: `planet-symbol planet-${planet.name}-symbol planet-${typeClass}-symbol`\n },\n fallbackText\n );\n } else {\n // Legacy fallback if IconProvider is not available\n textIcon = this.svgUtils.createSVGElement(\"text\", {\n x: planet.adjustedIconX,\n y: planet.adjustedIconY,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n 'font-size': `${iconSize}px`,\n class: `planet-symbol planet-${planet.name}-symbol planet-${typeClass}-symbol`,\n fill: planet.color || '#000000'\n });\n textIcon.textContent = planet.name.charAt(0).toUpperCase();\n }\n \n parentGroup.appendChild(textIcon);\n });\n \n return icon;\n }\n \n /**\n * Renders a retrograde indicator (small \"R\" symbol) in the bottom-right corner of the planet icon\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} iconSize - Size of the icon in pixels\n * @returns {Element} - The created retrograde indicator element\n */\n renderRetrogradeIndicator(parentGroup, planet, iconSize = 24) {\n // Calculate position for \"R\" symbol in bottom-right corner of icon\n // Offset from icon center to bottom-right corner\n const offsetX = iconSize / 2 - 2; // Small offset from edge (2px from right edge)\n const offsetY = iconSize / 2 - 2; // Small offset from bottom edge\n \n // Position relative to adjusted icon center\n const rX = planet.adjustedIconX + offsetX;\n const rY = planet.adjustedIconY + offsetY;\n \n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n // Use planet color, but ensure visibility with darker shade if color is too light\n const planetColor = planet.color || '#000000';\n \n // Create small \"R\" text element\n const retrogradeText = this.svgUtils.createSVGElement(\"text\", {\n x: rX,\n y: rY,\n 'text-anchor': 'end',\n 'dominant-baseline': 'alphabetic',\n 'font-size': `${Math.max(7, iconSize * 0.3)}px`, // Scale with icon size, minimum 7px\n 'font-weight': 'bold',\n 'font-family': 'Arial, sans-serif',\n class: `planet-retrograde planet-${planet.name}-retrograde planet-${typeClass}-retrograde`,\n fill: planetColor,\n 'stroke': '#ffffff', // White stroke for better visibility\n 'stroke-width': '0.5',\n 'paint-order': 'stroke fill'\n });\n \n retrogradeText.textContent = 'R';\n \n return retrogradeText;\n }\n \n /**\n * Renders a dot to mark the exact planet position\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} dotSize - Size of the dot in pixels\n * @returns {Element} - The created dot element\n */\n renderPlanetDot(parentGroup, planet, dotSize = 3) {\n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n // Draw the position dot (small circle at exact planet position)\n const dot = this.svgUtils.createSVGElement(\"circle\", {\n cx: planet.x,\n cy: planet.y,\n r: dotSize, // Small fixed size for position indicator\n class: `planet-dot planet-${planet.name}-dot planet-${typeClass}-dot`,\n fill: planet.color || '#000000'\n });\n \n return dot;\n }\n \n /**\n * Renders a connector line between the dot and symbol if they're far enough apart\n * @param {Element} parentGroup - The parent SVG group\n * @param {Object} planet - Planet object with calculated positions\n * @param {number} minDistance - Minimum distance required to draw a connector\n * @returns {Element|null} - The created connector element or null if not needed\n */\n renderConnector(parentGroup, planet, iconSize, minDistanceFactor = 0.3) {\n // Get planet type for CSS classes\n const typeClass = planet.isPrimary ? 'primary' : 'secondary';\n \n // Calculate distance between dot and adjusted icon position\n const distX = planet.x - planet.adjustedIconX;\n const distY = planet.y - planet.adjustedIconY;\n const distance = Math.sqrt(distX * distX + distY * distY);\n \n // Only draw connector if the distance is significant\n if (distance > iconSize * minDistanceFactor) {\n const connector = this.svgUtils.createSVGElement('line', {\n x1: planet.x,\n y1: planet.y,\n x2: planet.adjustedIconX,\n y2: planet.adjustedIconY,\n class: `planet-element planet-${planet.name.toLowerCase()} planet-connector planet-${typeClass}-connector`,\n stroke: planet.color || '#000000',\n 'stroke-width': 0.75,\n 'stroke-opacity': 0.5\n });\n \n return connector;\n }\n \n return null;\n }\n \n /**\n * Adds a tooltip to a planet element\n * @param {Element} element - Element to add tooltip to\n * @param {Object} planet - Planet object\n */\n addPlanetTooltip(element, planet) {\n const typeLabel = planet.isPrimary ? \"Primary\" : \"Secondary\";\n const tooltipText = `${typeLabel} ${AstrologyUtils.getPlanetFullName(planet.name)}: ${planet.position.toFixed(1)}° ${planet.zodiacSign.toUpperCase()} (${planet.position_in_sign.toFixed(1)}°)`;\n this.svgUtils.addTooltip(element, tooltipText);\n }\n \n /**\n * Render method implementation from BasePlanetRenderer\n * This should not be called directly in this class, but is needed to fulfill the interface\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n throw new Error(`${this.constructor.name}: This is a utility renderer, use specific rendering methods instead.`);\n }\n} ","/**\r\n * PlanetPositionCalculator.js\r\n * Utility class for calculating planet positions on any circle\r\n */\r\nimport { SvgUtils } from './SvgUtils.js';\r\n\r\nclass PlanetPositionCalculator {\r\n /**\r\n * Calculate position for a planet on a circle\r\n * @param {Object} params - Position parameters\r\n * @param {number} params.centerX - X coordinate of center\r\n * @param {number} params.centerY - Y coordinate of center\r\n * @param {number} params.radius - Circle radius \r\n * @param {number} params.longitude - Planet longitude in degrees\r\n * @param {number} params.iconSize - Size of the icon (optional)\r\n * @returns {Object} Position data with dot and icon coordinates\r\n */\r\n static calculatePosition(params) {\r\n const { centerX, centerY, radius, longitude, iconSize = 24 } = params;\r\n const svgUtils = new SvgUtils();\r\n \r\n // Calculate point on circle\r\n const point = svgUtils.pointOnCircle(centerX, centerY, radius, longitude);\r\n \r\n // Calculate icon position (centered on the point)\r\n const iconX = point.x - (iconSize / 2);\r\n const iconY = point.y - (iconSize / 2);\r\n \r\n return {\r\n x: point.x, // Dot center X\r\n y: point.y, // Dot center Y\r\n iconX: iconX, // Icon top-left X\r\n iconY: iconY, // Icon top-left Y\r\n iconCenterX: point.x, // Icon center X\r\n iconCenterY: point.y, // Icon center Y\r\n longitude: longitude, // Original longitude\r\n radius: radius // Original radius\r\n };\r\n }\r\n \r\n /**\r\n * Detects if planets are too close to each other\r\n * @param {Array} positions - Array of position objects\r\n * @param {number} minDistance - Minimum distance between planets\r\n * @returns {Array} Arrays of overlapping planet indices\r\n */\r\n static detectOverlaps(positions, minDistance = 24) {\r\n const clusters = [];\r\n const processed = new Set();\r\n \r\n // Check each pair of planets\r\n for (let i = 0; i < positions.length; i++) {\r\n if (processed.has(i)) continue;\r\n \r\n const cluster = [i];\r\n processed.add(i);\r\n \r\n for (let j = 0; j < positions.length; j++) {\r\n if (i === j || processed.has(j)) continue;\r\n \r\n const distance = Math.sqrt(\r\n Math.pow(positions[i].x - positions[j].x, 2) + \r\n Math.pow(positions[i].y - positions[j].y, 2)\r\n );\r\n \r\n if (distance < minDistance) {\r\n cluster.push(j);\r\n processed.add(j);\r\n }\r\n }\r\n \r\n if (cluster.length > 1) {\r\n clusters.push(cluster);\r\n }\r\n }\r\n \r\n return clusters;\r\n }\r\n \r\n /**\r\n * Adjusts positions to resolve overlaps using improved clustering algorithm\r\n * @param {Array} positions - Array of position objects\r\n * @param {Object} options - Adjustment options\r\n * @returns {Array} Adjusted positions\r\n */\r\n static adjustOverlaps(positions, options = {}) {\r\n const { \r\n minDistance = 24,\r\n centerX,\r\n centerY,\r\n baseRadius,\r\n iconSize = 24\r\n } = options;\r\n \r\n if (!positions || positions.length <= 1) {\r\n return positions; // Nothing to adjust with 0 or 1 planets\r\n }\r\n \r\n if (!centerX || !centerY || !baseRadius) {\r\n console.error(\"PlanetPositionCalculator: Missing required parameters (centerX, centerY, or baseRadius)\");\r\n return positions; // Return original positions if missing required parameters\r\n }\r\n \r\n console.log(`PlanetPositionCalculator: Adjusting overlaps for ${positions.length} positions`);\r\n \r\n // Make a copy to not modify originals\r\n const adjustedPositions = [...positions];\r\n \r\n // The minimum angular distance needed to prevent overlap at base radius\r\n // Add safety factor to ensure visual separation\r\n const minAngularDistance = (minDistance / baseRadius) * (180 / Math.PI) * 1.3; // 30% extra spacing\r\n console.log(`PlanetPositionCalculator: Minimum angular distance: ${minAngularDistance.toFixed(2)}°`);\r\n \r\n // Sort positions by longitude for overlap detection\r\n const sortedPositionIndices = adjustedPositions\r\n .map((pos, idx) => ({ pos, idx }))\r\n .sort((a, b) => a.pos.longitude - b.pos.longitude);\r\n \r\n const sortedPositions = sortedPositionIndices.map(item => ({\r\n ...adjustedPositions[item.idx],\r\n originalIndex: item.idx\r\n }));\r\n \r\n // Find clusters of planets that are too close angularly\r\n const clusters = this._findOverlappingClusters(sortedPositions, minAngularDistance);\r\n console.log(`PlanetPositionCalculator: Found ${clusters.length} clusters of overlapping positions`);\r\n clusters.forEach((cluster, i) => {\r\n console.log(`PlanetPositionCalculator: Cluster ${i+1} has ${cluster.length} positions`);\r\n });\r\n \r\n // Process each cluster\r\n clusters.forEach((cluster, clusterIndex) => {\r\n console.log(`PlanetPositionCalculator: Processing cluster ${clusterIndex+1}`);\r\n \r\n if (cluster.length <= 1) {\r\n // Single planet - just place at exact base radius with no angle change\r\n const planet = cluster[0];\r\n console.log(`PlanetPositionCalculator: Single position in cluster, keeping at original longitude ${planet.longitude.toFixed(2)}°`);\r\n this._setExactPosition(planet, planet.longitude, baseRadius, centerX, centerY, iconSize);\r\n } else {\r\n // Handle cluster with multiple planets - distribute by angle\r\n console.log(`PlanetPositionCalculator: Distributing ${cluster.length} positions in cluster`);\r\n this._distributeClusterByAngle(cluster, baseRadius, minAngularDistance, centerX, centerY, iconSize);\r\n \r\n // Log the distributions\r\n cluster.forEach((pos, i) => {\r\n console.log(`PlanetPositionCalculator: Position ${i+1} in cluster ${clusterIndex+1} adjusted from ${pos.longitude.toFixed(2)}° to ${pos.adjustedLongitude.toFixed(2)}°`);\r\n });\r\n }\r\n });\r\n \r\n // Copy adjusted positions back to the original array order\r\n sortedPositions.forEach(pos => {\r\n const origIndex = pos.originalIndex;\r\n \r\n // Only copy if we have valid data\r\n if (origIndex !== undefined && origIndex >= 0 && origIndex < adjustedPositions.length) {\r\n adjustedPositions[origIndex].x = pos.x;\r\n adjustedPositions[origIndex].y = pos.y;\r\n adjustedPositions[origIndex].iconX = pos.iconX;\r\n adjustedPositions[origIndex].iconY = pos.iconY;\r\n adjustedPositions[origIndex].iconCenterX = pos.iconCenterX;\r\n adjustedPositions[origIndex].iconCenterY = pos.iconCenterY;\r\n \r\n // Also add any adjusted longitude for reference\r\n if (pos.adjustedLongitude !== undefined) {\r\n adjustedPositions[origIndex].adjustedLongitude = pos.adjustedLongitude;\r\n }\r\n }\r\n });\r\n \r\n return adjustedPositions;\r\n }\r\n \r\n /**\r\n * Find clusters of positions that are too close angularly\r\n * @private\r\n * @param {Array} sortedPositions - Positions sorted by longitude\r\n * @param {number} minAngularDistance - Minimum angular separation needed\r\n * @returns {Array} Array of arrays containing positions in each cluster\r\n */\r\n static _findOverlappingClusters(sortedPositions, minAngularDistance) {\r\n if (!sortedPositions.length) return [];\r\n if (sortedPositions.length === 1) return [sortedPositions];\r\n \r\n const clusters = [];\r\n let currentCluster = [sortedPositions[0]];\r\n const posCount = sortedPositions.length;\r\n \r\n // Check for wrap-around at the edges (e.g., planet at 359° and another at 1°)\r\n // Add the first planet to the end of the array for checking wraparound\r\n const wrappedCheck = [...sortedPositions];\r\n const firstPlanet = {...sortedPositions[0], longitude: sortedPositions[0].longitude + 360};\r\n wrappedCheck.push(firstPlanet);\r\n \r\n // First identify standard clusters within the 0-360° range\r\n for (let i = 1; i < posCount; i++) {\r\n const prevPosition = sortedPositions[i-1];\r\n const currPosition = sortedPositions[i];\r\n \r\n // Check angular distance, considering wrap-around at 360°\r\n let angleDiff = currPosition.longitude - prevPosition.longitude;\r\n if (angleDiff < 0) angleDiff += 360;\r\n \r\n if (angleDiff < minAngularDistance) {\r\n // Too close - add to current cluster\r\n currentCluster.push(currPosition);\r\n } else {\r\n // Far enough - finish current cluster and start a new one\r\n if (currentCluster.length > 0) {\r\n clusters.push(currentCluster);\r\n }\r\n currentCluster = [currPosition];\r\n }\r\n }\r\n \r\n // Add the final regular cluster if it exists\r\n if (currentCluster.length > 0) {\r\n clusters.push(currentCluster);\r\n }\r\n \r\n // Check for a wrap-around cluster (where last and first planets are close)\r\n const lastPlanet = sortedPositions[posCount - 1];\r\n const firstPlanetOriginal = sortedPositions[0];\r\n \r\n let wrapDiff = (firstPlanetOriginal.longitude + 360) - lastPlanet.longitude;\r\n if (wrapDiff < 0) wrapDiff += 360;\r\n \r\n if (wrapDiff < minAngularDistance) {\r\n // We have a wraparound cluster\r\n // If first and last clusters both exist, merge them\r\n if (clusters.length >= 2) {\r\n const firstCluster = clusters[0];\r\n const lastCluster = clusters[clusters.length - 1];\r\n \r\n // If first element is in first cluster and last element is in last cluster\r\n if (firstCluster.includes(firstPlanetOriginal) && lastCluster.includes(lastPlanet)) {\r\n // Merge the first and last clusters\r\n const mergedCluster = [...lastCluster, ...firstCluster];\r\n clusters.pop(); // Remove last cluster\r\n clusters[0] = mergedCluster; // Replace first cluster with merged\r\n }\r\n }\r\n }\r\n \r\n return clusters;\r\n }\r\n \r\n /**\r\n * Distribute positions in a cluster by adjusting only their angles\r\n * @private\r\n * @param {Array} positions - Array of positions in the cluster\r\n * @param {number} radius - The exact radius to place all positions\r\n * @param {number} minAngularDistance - Minimum angular distance needed\r\n * @param {number} centerX - X coordinate of center\r\n * @param {number} centerY - Y coordinate of center\r\n * @param {number} iconSize - Size of the icon\r\n */\r\n static _distributeClusterByAngle(positions, radius, minAngularDistance, centerX, centerY, iconSize) {\r\n const n = positions.length;\r\n \r\n // If only one planet, keep its original position\r\n if (n === 1) {\r\n this._setExactPosition(positions[0], positions[0].longitude, radius, centerX, centerY, iconSize);\r\n return;\r\n }\r\n \r\n // Sort positions by their original longitude to maintain order\r\n positions.sort((a, b) => a.longitude - b.longitude);\r\n \r\n // Calculate central angle and total span\r\n const firstPos = positions[0].longitude;\r\n const lastPos = positions[n-1].longitude;\r\n let totalArc = lastPos - firstPos;\r\n \r\n // Handle wrap-around case (e.g., positions at 350° and 10°)\r\n if (totalArc < 0 || totalArc > 180) {\r\n totalArc = (360 + lastPos - firstPos) % 360;\r\n }\r\n \r\n // Calculate the center of the cluster (weighted average of all positions)\r\n let sumAngles = 0;\r\n for (let i = 0; i < n; i++) {\r\n sumAngles += positions[i].longitude;\r\n }\r\n let centerAngle = (sumAngles / n) % 360;\r\n \r\n // Determine minimum arc needed for n planets with minimum spacing\r\n // Add extra spacing factor to ensure planets don't overlap\r\n const minRequiredArc = (n - 1) * minAngularDistance * 1.2; // 20% extra spacing\r\n \r\n // Always use at least the minimum required arc\r\n const spanToUse = Math.max(minRequiredArc, totalArc);\r\n \r\n // Calculate start angle (center - half of span)\r\n const startAngle = (centerAngle - spanToUse/2 + 360) % 360;\r\n \r\n // Distribute planets evenly from the start angle\r\n for (let i = 0; i < n; i++) {\r\n const angle = (startAngle + i * (spanToUse / (n-1))) % 360;\r\n this._setExactPosition(positions[i], angle, radius, centerX, centerY, iconSize);\r\n }\r\n }\r\n \r\n /**\r\n * Set a position's exact coordinates at the given angle and radius\r\n * @private\r\n * @param {Object} position - The position object to update\r\n * @param {number} angle - The angle in degrees (0-360)\r\n * @param {number} radius - The exact radius to place the position\r\n * @param {number} centerX - X coordinate of center\r\n * @param {number} centerY - Y coordinate of center\r\n * @param {number} iconSize - Size of the icon\r\n */\r\n static _setExactPosition(position, angle, radius, centerX, centerY, iconSize) {\r\n const svgUtils = new SvgUtils();\r\n const point = svgUtils.pointOnCircle(centerX, centerY, radius, angle);\r\n \r\n position.x = point.x;\r\n position.y = point.y;\r\n position.iconCenterX = point.x;\r\n position.iconCenterY = point.y;\r\n position.iconX = point.x - (iconSize / 2);\r\n position.iconY = point.y - (iconSize / 2);\r\n position.adjustedLongitude = angle;\r\n }\r\n}\r\n\r\nexport { PlanetPositionCalculator }; ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\nimport { PlanetPositionCalculator } from '../utils/PlanetPositionCalculator.js';\n\n/**\n * PrimaryPlanetRenderer.js\n * Class for rendering primary planets on the inner circle of the chart.\n */\nexport class PrimaryPlanetRenderer extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {PlanetSymbolRenderer} options.symbolRenderer - The symbol renderer to use.\n */\n constructor(options) {\n super(options);\n \n this.symbolRenderer = options.symbolRenderer;\n \n // Define the circle configuration for primary planets\n this.circleConfig = {\n circle: 'inner'\n };\n }\n \n /**\n * Calculates actual radius values based on circle configuration and chart dimensions\n * @param {Object} config - Chart configuration with radius values\n * @returns {Object} Object with calculated dotRadius and iconRadius\n */\n calculateRadii(config = null) {\n const baseRadius = config?.radius?.inner || this.innerRadius;\n const nextRadius = config?.radius?.middle || this.middleRadius;\n \n // Fixed relationship between circle and dots/icons\n // - Dots are placed exactly on the circle\n // - Icons are placed halfway between this circle and the next\n const dotRadius = baseRadius;\n const iconRadius = baseRadius + (nextRadius - baseRadius) / 2;\n \n return { dotRadius, iconRadius };\n }\n \n /**\n * Adjusts the positions of overlapping planets.\n * @param {Array} planets - Array of planet objects.\n */\n adjustOverlappingPlanets(planets) {\n if (planets.length <= 1) return; // Nothing to adjust with 0 or 1 planets\n \n // Define parameters for collision detection and distribution\n const iconSize = 24;\n const baseRadius = planets[0].iconRadius; // Use the iconRadius from the first planet\n const minDistance = iconSize * 1.2;\n \n // Prepare planets array in format expected by PlanetPositionCalculator\n const positions = planets.map((planet, index) => ({\n x: planet.iconX,\n y: planet.iconY,\n iconX: planet.iconX,\n iconY: planet.iconY,\n iconCenterX: planet.iconX,\n iconCenterY: planet.iconY,\n longitude: planet.position,\n radius: baseRadius,\n originalIndex: index,\n name: planet.name\n }));\n \n // Use the PlanetPositionCalculator for overlap adjustment\n const adjustedPositions = PlanetPositionCalculator.adjustOverlaps(positions, {\n minDistance: minDistance,\n centerX: this.centerX,\n centerY: this.centerY,\n baseRadius: baseRadius,\n iconSize: iconSize\n });\n \n // Apply the adjusted positions back to the planets\n adjustedPositions.forEach((pos, idx) => {\n const planet = planets[idx];\n const originalPos = planet.position;\n \n // Set the adjusted icon position\n planet.adjustedIconX = pos.iconCenterX;\n planet.adjustedIconY = pos.iconCenterY;\n \n // If there was an adjustment, store it\n if (pos.adjustedLongitude !== undefined) {\n planet.adjustedPosition = pos.adjustedLongitude;\n }\n });\n }\n \n /**\n * Renders primary planets on the chart.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n if (!parentGroup) {\n console.error(\"PrimaryPlanetRenderer: parentGroup is null or undefined.\");\n return [];\n }\n \n // Calculate radii based on circle configuration\n const { dotRadius, iconRadius } = options.dotRadius && options.iconRadius \n ? { dotRadius: options.dotRadius, iconRadius: options.iconRadius } \n : this.calculateRadii(options.config || this.config);\n \n if (!dotRadius || !iconRadius) {\n console.error(\"PrimaryPlanetRenderer: Could not determine radius values\");\n return [];\n }\n \n // Clear the group before rendering new planets\n this.clearGroup(parentGroup);\n \n // Prepare planets with additional properties\n const planets = this.preparePlanetData(planetsData, 'primary', dotRadius, iconRadius);\n \n // Sort planets by position for overlap calculations\n planets.sort((a, b) => a.position - b.position);\n \n // Calculate base positions (dot and icon)\n this.calculateBasePositions(planets, dotRadius, iconRadius);\n \n // Calculate adjustments for overlapping planets\n this.adjustOverlappingPlanets(planets);\n \n // Draw the planets onto the SVG group\n this.drawPlanets(parentGroup, planets);\n \n // Return the planets array with calculated coordinates\n return planets;\n }\n \n /**\n * Draw the planets on the SVG group with their dots and icons.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {Array} planets - Array of planet objects with calculated positions.\n */\n drawPlanets(parentGroup, planets) {\n const iconSize = 24; // Standard icon size\n \n planets.forEach(planet => {\n // Create group for this planet (contains dot, symbol, and connector)\n const planetGroup = this.svgUtils.createSVGElement(\"g\", {\n 'data-planet': planet.name,\n 'data-type': planet.type,\n class: `planet-element planet-${planet.name} planet-primary`,\n transform: `translate(0,0)`\n });\n \n // Render planet dot \n const dot = this.symbolRenderer.renderPlanetDot(planetGroup, planet);\n planetGroup.appendChild(dot);\n \n // Render planet symbol\n const icon = this.symbolRenderer.renderPlanetSymbol(planetGroup, planet, iconSize);\n planetGroup.appendChild(icon);\n \n // Add retrograde indicator if planet is retrograde\n if (planet.retrograde) {\n const retrogradeIndicator = this.symbolRenderer.renderRetrogradeIndicator(planetGroup, planet, iconSize);\n planetGroup.appendChild(retrogradeIndicator);\n }\n \n // Add tooltip\n this.symbolRenderer.addPlanetTooltip(planetGroup, planet);\n \n // Render connector if needed\n const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);\n if (connector) {\n planetGroup.appendChild(connector);\n }\n \n // Add to parent group\n parentGroup.appendChild(planetGroup);\n });\n }\n} ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\nimport { PlanetPositionCalculator } from '../utils/PlanetPositionCalculator.js';\n\n/**\n * SecondaryPlanetRenderer.js\n * Class for rendering secondary planets on the innermost circle of the chart.\n */\nexport class SecondaryPlanetRenderer extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {PlanetSymbolRenderer} options.symbolRenderer - The symbol renderer to use.\n */\n constructor(options) {\n super(options);\n \n this.symbolRenderer = options.symbolRenderer;\n \n // Define the circle configuration for secondary planets\n this.circleConfig = {\n circle: 'innermost'\n };\n }\n \n /**\n * Calculates actual radius values based on circle configuration and chart dimensions\n * @param {Object} config - Chart configuration with radius values\n * @returns {Object} Object with calculated dotRadius and iconRadius\n */\n calculateRadii(config = null) {\n const baseRadius = config?.radius?.innermost || (this.innerRadius * 0.5); // Fallback\n const nextRadius = config?.radius?.zodiacInner || this.innerRadius;\n \n // Fixed relationship between circle and dots/icons\n // - Dots are placed exactly on the circle\n // - Icons are placed halfway between this circle and the next\n const dotRadius = baseRadius;\n const iconRadius = baseRadius + (nextRadius - baseRadius) / 2;\n \n return { dotRadius, iconRadius };\n }\n \n /**\n * Adjusts the positions of overlapping planets.\n * @param {Array} planets - Array of planet objects.\n */\n adjustOverlappingPlanets(planets) {\n if (planets.length <= 1) return; // Nothing to adjust with 0 or 1 planets\n \n // Define parameters for collision detection and distribution\n const iconSize = 18; // Smaller size for secondary planets\n const baseRadius = planets[0].iconRadius; // Use the iconRadius from the first planet\n const minDistance = iconSize * 1.1; // Slightly tighter packing\n \n // Prepare planets array in format expected by PlanetPositionCalculator\n const positions = planets.map((planet, index) => ({\n x: planet.iconX,\n y: planet.iconY,\n iconX: planet.iconX,\n iconY: planet.iconY,\n iconCenterX: planet.iconX,\n iconCenterY: planet.iconY,\n longitude: planet.position,\n radius: baseRadius,\n originalIndex: index,\n name: planet.name\n }));\n \n // Use the PlanetPositionCalculator for overlap adjustment\n const adjustedPositions = PlanetPositionCalculator.adjustOverlaps(positions, {\n minDistance: minDistance,\n centerX: this.centerX,\n centerY: this.centerY,\n baseRadius: baseRadius,\n iconSize: iconSize\n });\n \n // Apply the adjusted positions back to the planets\n adjustedPositions.forEach((pos, idx) => {\n const planet = planets[idx];\n \n // Set the adjusted icon position\n planet.adjustedIconX = pos.iconCenterX;\n planet.adjustedIconY = pos.iconCenterY;\n \n // If there was an adjustment, store it\n if (pos.adjustedLongitude !== undefined) {\n planet.adjustedPosition = pos.adjustedLongitude;\n }\n });\n }\n \n /**\n * Renders secondary planets on the chart.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n if (!parentGroup) {\n console.error(\"SecondaryPlanetRenderer: parentGroup is null or undefined.\");\n return [];\n }\n \n // Calculate radii based on circle configuration\n const { dotRadius, iconRadius } = options.dotRadius && options.iconRadius \n ? { dotRadius: options.dotRadius, iconRadius: options.iconRadius } \n : this.calculateRadii(options.config || this.config);\n \n if (!dotRadius || !iconRadius) {\n console.error(\"SecondaryPlanetRenderer: Could not determine radius values\");\n return [];\n }\n \n // Clear the group before rendering new planets\n this.clearGroup(parentGroup);\n \n // Prepare planets with additional properties\n const planets = this.preparePlanetData(planetsData, 'secondary', dotRadius, iconRadius);\n \n // Sort planets by position for overlap calculations\n planets.sort((a, b) => a.position - b.position);\n \n // Calculate base positions (dot and icon)\n this.calculateBasePositions(planets, dotRadius, iconRadius);\n \n // Calculate adjustments for overlapping planets\n this.adjustOverlappingPlanets(planets);\n \n // Draw the planets onto the SVG group\n this.drawPlanets(parentGroup, planets);\n \n // Return the planets array with calculated coordinates\n return planets;\n }\n \n /**\n * Draw the planets on the SVG group with their dots and icons.\n * @param {Element} parentGroup - The parent SVG group.\n * @param {Array} planets - Array of planet objects with calculated positions.\n */\n drawPlanets(parentGroup, planets) {\n const iconSize = 18; // Smaller icon size for secondary planets\n \n planets.forEach(planet => {\n // Create group for this planet (contains dot, symbol, and connector)\n const planetGroup = this.svgUtils.createSVGElement(\"g\", {\n 'data-planet': planet.name,\n 'data-type': planet.type,\n class: `planet-element planet-${planet.name} planet-secondary`,\n transform: `translate(0,0)`\n });\n \n // Render planet dot with smaller size\n const dot = this.symbolRenderer.renderPlanetDot(planetGroup, planet, 2);\n planetGroup.appendChild(dot);\n \n // Render planet symbol with smaller size\n const icon = this.symbolRenderer.renderPlanetSymbol(planetGroup, planet, iconSize);\n planetGroup.appendChild(icon);\n \n // Add retrograde indicator if planet is retrograde\n if (planet.retrograde) {\n const retrogradeIndicator = this.symbolRenderer.renderRetrogradeIndicator(planetGroup, planet, iconSize);\n planetGroup.appendChild(retrogradeIndicator);\n }\n \n // Add tooltip\n this.symbolRenderer.addPlanetTooltip(planetGroup, planet);\n \n // Render connector if needed\n const connector = this.symbolRenderer.renderConnector(planetGroup, planet, iconSize);\n if (connector) {\n planetGroup.appendChild(connector);\n }\n \n // Add to parent group\n parentGroup.appendChild(planetGroup);\n });\n }\n} ","import { BasePlanetRenderer } from './BasePlanetRenderer.js';\n\n/**\n * PlanetRendererCoordinator.js\n * Coordinator class that maintains the original PlanetRenderer API\n * but delegates rendering tasks to specialized renderers.\n */\nexport class PlanetRendererCoordinator extends BasePlanetRenderer {\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {PrimaryPlanetRenderer} options.primaryRenderer - Primary planet renderer.\n * @param {SecondaryPlanetRenderer} options.secondaryRenderer - Secondary planet renderer.\n * @param {PlanetSymbolRenderer} options.symbolRenderer - Planet symbol renderer.\n */\n constructor(options) {\n super(options);\n \n this.primaryRenderer = options.primaryRenderer;\n this.secondaryRenderer = options.secondaryRenderer;\n this.symbolRenderer = options.symbolRenderer;\n \n // Define the circle configurations - which circle each planet type should be placed on\n this.circleConfigs = {\n // Primary planets placed on inner circle\n primary: {\n circle: 'inner'\n },\n // Secondary planets placed on innermost circle\n secondary: {\n circle: 'innermost'\n }\n };\n }\n \n /**\n * Calculates actual radius values based on circle configuration and chart dimensions\n * @param {string} planetType - Type of planet (primary, secondary, etc.)\n * @param {Object} config - Chart configuration with radius values\n * @returns {Object} Object with calculated dotRadius and iconRadius\n */\n calculateRadii(planetType, config = null) {\n const circleConfig = this.circleConfigs[planetType];\n if (!circleConfig) {\n console.error(`PlanetRendererCoordinator: No circle configuration found for planet type: ${planetType}`);\n return { dotRadius: null, iconRadius: null };\n }\n \n switch (planetType) {\n case 'primary':\n return this.primaryRenderer.calculateRadii(config);\n case 'secondary':\n return this.secondaryRenderer.calculateRadii(config);\n default:\n console.error(`PlanetRendererCoordinator: Unknown planet type: ${planetType}`);\n return { dotRadius: null, iconRadius: null };\n }\n }\n \n /**\n * Renders planets on the chart. Delegates to the appropriate specialized renderer.\n * @param {Element} parentGroup - The parent SVG group element.\n * @param {Array} planetsData - Array of planet objects { name: string, position: number }.\n * @param {number} houseRotationAngle - House system rotation angle.\n * @param {Object} options - Additional rendering options.\n * @returns {Array} Array of planet objects with added coordinates.\n */\n render(parentGroup, planetsData, houseRotationAngle = 0, options = {}) {\n // Determine planet type (primary or secondary)\n const planetType = options.type || 'primary';\n \n console.log(`PlanetRendererCoordinator: Rendering ${planetType} planets, count:`, planetsData.length);\n \n // Delegate to appropriate renderer based on planet type\n switch (planetType) {\n case 'primary':\n return this.primaryRenderer.render(parentGroup, planetsData, houseRotationAngle, options);\n case 'secondary':\n return this.secondaryRenderer.render(parentGroup, planetsData, houseRotationAngle, options);\n default:\n console.error(`PlanetRendererCoordinator: Unknown planet type: ${planetType}`);\n return [];\n }\n }\n \n /**\n * Renders both primary and secondary planets in one call.\n * This consolidated method handles rendering all planets.\n * \n * @param {Object} params - Rendering parameters\n * @param {SVGManager} params.svgManager - SVG manager instance\n * @param {Object} params.planetsData - Planet data object\n * @param {Object} params.config - Chart configuration with radii\n * @param {boolean} params.primaryEnabled - Whether primary planets are enabled\n * @param {boolean} params.secondaryEnabled - Whether secondary planets are enabled\n * @returns {Object} Object containing both sets of rendered planets\n */\n renderAllPlanetTypes(params) {\n const { \n svgManager, \n planetsData, \n config,\n enabledTypes = { primary: true, secondary: true }\n } = params;\n \n if (!svgManager || !planetsData || !config) {\n console.error(\"PlanetRendererCoordinator: Missing required parameters\");\n return {};\n }\n \n // Convert planet data to array format, filtering by visibility\n const planetsArray = Object.entries(planetsData)\n .filter(([name, data]) => config.planetSettings.visible?.[name] !== false)\n .map(([name, data]) => ({\n name: name,\n position: data.lon,\n color: data.color || '#000000'\n }));\n \n const result = {};\n \n // Save and update center coordinates\n const originalCenterX = this.centerX;\n const originalCenterY = this.centerY;\n this.centerX = config.svg.center.x;\n this.centerY = config.svg.center.y;\n \n // Update center coordinates in specialized renderers too\n this.primaryRenderer.centerX = this.centerX;\n this.primaryRenderer.centerY = this.centerY;\n this.secondaryRenderer.centerX = this.centerX;\n this.secondaryRenderer.centerY = this.centerY;\n \n // Render primary planets if enabled\n if (enabledTypes.primary) {\n const primaryGroup = svgManager.getGroup('primaryPlanets');\n result.primary = this.primaryRenderer.render(primaryGroup, planetsArray, 0, {\n config: config\n });\n console.log(`PlanetRendererCoordinator: Rendered ${result.primary.length} primary planets`);\n } else {\n result.primary = [];\n }\n \n // Render secondary planets if enabled\n if (enabledTypes.secondary) {\n const secondaryGroup = svgManager.getGroup('secondaryPlanets');\n result.secondary = this.secondaryRenderer.render(secondaryGroup, planetsArray, 0, {\n config: config\n });\n console.log(`PlanetRendererCoordinator: Rendered ${result.secondary.length} secondary planets`);\n } else {\n result.secondary = [];\n }\n \n // Restore original center values\n this.centerX = originalCenterX;\n this.centerY = originalCenterY;\n this.primaryRenderer.centerX = originalCenterX;\n this.primaryRenderer.centerY = originalCenterY;\n this.secondaryRenderer.centerX = originalCenterX;\n this.secondaryRenderer.centerY = originalCenterY;\n \n return result;\n }\n \n /**\n * Legacy method - deprecated, use renderAllPlanetTypes instead\n */\n renderAllPlanets(params) {\n console.warn(\"PlanetRendererCoordinator: renderAllPlanets is deprecated, use renderAllPlanetTypes instead\");\n return this.renderAllPlanetTypes(params);\n }\n} ","import { BaseRenderer } from './BaseRenderer.js';\nimport { AstrologyUtils } from '../utils/AstrologyUtils.js';\n\n/**\n * ClientSideAspectRenderer.js\n * Renders aspects based on client-side calculations using planet coordinates.\n */\nexport class ClientSideAspectRenderer extends BaseRenderer { // No longer extends IAspectRenderer\n /**\n * Constructor\n * @param {Object} options - Renderer options.\n * @param {string} options.svgNS - SVG namespace.\n * @param {ChartConfig} options.config - Chart configuration object. Contains aspect settings like orb.\n * @param {string} options.assetBasePath - Base path for assets (unused here but standard).\n * @param {IconProvider} [options.iconProvider] - Icon provider service.\n */\n constructor(options) {\n super(options);\n this.astrologyUtils = AstrologyUtils; // Assuming AstrologyUtils is available\n this.renderedAspects = []; // Store calculated aspects\n this._aspectCacheKey = null; // Cache key for aspect calculations\n this._aspectCache = []; // Cached aspect results\n this.assetBasePath = options.assetBasePath || './assets/'; // Store asset base path with fallback\n this.iconProvider = options.iconProvider; // Store the icon provider\n \n // Define major aspects and their angles (can be overridden/extended by config)\n this.defaultAspectDefinitions = {\n 'conjunction': { angle: 0, orb: 8, color: '#FF4500', abbr: 'CON' }, // OrangeRed\n 'opposition': { angle: 180, orb: 6, color: '#DC143C', abbr: 'OPP' }, // Crimson\n 'trine': { angle: 120, orb: 6, color: '#2E8B57', abbr: 'TRI' }, // SeaGreen\n 'square': { angle: 90, orb: 6, color: '#FF0000', abbr: 'SQR' }, // Red\n 'sextile': { angle: 60, orb: 4, color: '#4682B4', abbr: 'SEX' }, // SteelBlue\n // Add minors if needed\n // 'semisextile': { angle: 30, orb: 2, color: '#90EE90', abbr: 'SSX' }, // LightGreen\n // 'quincunx': { angle: 150, orb: 2, color: '#DAA520', abbr: 'QCX' } // Goldenrod\n };\n }\n\n /**\n * Calculates the angular distance between two positions (0-180 degrees).\n * @param {number} pos1 - Position 1 (degrees).\n * @param {number} pos2 - Position 2 (degrees).\n * @returns {number} The smallest angle between pos1 and pos2 (0-180).\n */\n _angularDistance(pos1, pos2) {\n const diff = Math.abs(pos1 - pos2) % 360;\n return Math.min(diff, 360 - diff);\n }\n\n /**\n * Calculates aspects between planets based on their positions.\n * @param {Array} planets - Array of planet objects MUST include `position` property.\n * @param {Object} aspectSettings - Aspect settings to use (optional, defaults to config.aspectSettings)\n * @returns {Array} Array of calculated aspect objects.\n */\n calculateAspects(planets, aspectSettings = null) {\n const aspects = [];\n if (!planets || planets.length < 2) {\n return aspects;\n }\n\n // Use provided aspectSettings or fall back to config\n const settings = aspectSettings || this.config.aspectSettings || {};\n \n // Generate a cache key based on aspectSettings and planet positions\n const settingsString = JSON.stringify(settings);\n const planetKey = planets.map(p => `${p.name}:${p.position}`).join('|');\n const cacheKey = `${settingsString}|${planetKey}`;\n if (cacheKey === this._aspectCacheKey) {\n console.log(`ClientSideAspectRenderer: Using cached aspects (${this._aspectCache.length})`);\n return this._aspectCache;\n }\n\n // Get aspect types and orbs from settings, falling back to defaults\n const calculationOrb = settings.orb || 6; // Default orb if not specified per aspect\n const aspectTypes = settings.types || this.defaultAspectDefinitions;\n\n // Iterate through all unique pairs of planets\n for (let i = 0; i < planets.length; i++) {\n for (let j = i + 1; j < planets.length; j++) {\n const p1 = planets[i];\n const p2 = planets[j];\n\n const angleDiff = this._angularDistance(p1.position, p2.position);\n\n // Check against each defined aspect type\n for (const aspectName in aspectTypes) {\n const aspectDef = aspectTypes[aspectName];\n const targetAngle = aspectDef.angle;\n const orb = aspectDef.orb !== undefined ? aspectDef.orb : calculationOrb; // Use specific orb or default\n\n if (Math.abs(angleDiff - targetAngle) <= orb) {\n // Aspect found!\n aspects.push({\n planet1: p1.name,\n planet2: p2.name,\n type: aspectName,\n angle: targetAngle, // The ideal angle of the aspect type\n angleDiff: angleDiff, // The actual angle difference between planets\n orb: Math.abs(angleDiff - targetAngle), // How exact the aspect is\n // Include planet objects for coordinate lookup during rendering\n p1: p1,\n p2: p2,\n // Add default color/style from definition\n color: aspectDef.color || '#888', // Default color\n lineStyle: aspectDef.lineStyle, // e.g., 'dashed', 'dotted' (used later in styling)\n abbr: aspectDef.abbr || aspectName.substring(0, 3).toUpperCase() // Use abbreviation from definition or default\n });\n }\n }\n }\n }\n console.log(`ClientSideAspectRenderer: Calculated ${aspects.length} aspects.`);\n // Cache results and key\n this._aspectCacheKey = cacheKey;\n this._aspectCache = aspects;\n return aspects;\n }\n \n /**\n * Calculates cross-aspects (synastry) between two different planet sets.\n * @param {Array} planets1 - First array of planet objects (e.g., primary/outer planets)\n * @param {Array} planets2 - Second array of planet objects (e.g., secondary/inner planets)\n * @param {Object} aspectSettings - Aspect settings to use\n * @returns {Array} Array of calculated cross-aspect objects.\n */\n calculateCrossAspects(planets1, planets2, aspectSettings = null) {\n const aspects = [];\n if (!planets1 || planets1.length < 1 || !planets2 || planets2.length < 1) {\n return aspects;\n }\n\n // Use provided aspectSettings or fall back to synastry settings\n const settings = aspectSettings || this.config.synastryAspectSettings || {};\n \n // Get aspect types and orbs from settings\n const calculationOrb = settings.orb || 6;\n const aspectTypes = settings.types || this.defaultAspectDefinitions;\n\n // Iterate through all pairs between the two planet sets\n for (let i = 0; i < planets1.length; i++) {\n for (let j = 0; j < planets2.length; j++) {\n const p1 = planets1[i];\n const p2 = planets2[j];\n\n const angleDiff = this._angularDistance(p1.position, p2.position);\n\n // Check against each defined aspect type\n for (const aspectName in aspectTypes) {\n const aspectDef = aspectTypes[aspectName];\n const targetAngle = aspectDef.angle;\n const orb = aspectDef.orb !== undefined ? aspectDef.orb : calculationOrb;\n\n if (Math.abs(angleDiff - targetAngle) <= orb) {\n // Cross-aspect found!\n aspects.push({\n planet1: p1.name,\n planet2: p2.name,\n type: aspectName,\n angle: targetAngle,\n angleDiff: angleDiff,\n orb: Math.abs(angleDiff - targetAngle),\n p1: p1,\n p2: p2,\n color: aspectDef.color || '#888',\n lineStyle: aspectDef.lineStyle,\n abbr: aspectDef.abbr || aspectName.substring(0, 3).toUpperCase(),\n isCross: true // Mark as cross-aspect for identification\n });\n }\n }\n }\n }\n \n console.log(`ClientSideAspectRenderer: Calculated ${aspects.length} cross-aspects (synastry).`);\n return aspects;\n }\n\n\n /**\n * Renders aspect lines based on planet coordinates.\n * @param {Element} parentGroup - The parent SVG group for aspect lines.\n * @param {Array} planetsWithCoords - Array of planet objects returned by PlanetRenderer, MUST include `x`, `y`, `name`, and `position`.\n * @param {Object} aspectSettings - Aspect settings to use (optional)\n * @returns {Array<Element>} Array containing the created line elements.\n */\n render(parentGroup, planetsWithCoords, aspectSettings = null) {\n if (!parentGroup) {\n console.error(\"ClientSideAspectRenderer.render: parentGroup is null or undefined.\");\n return [];\n }\n this.clearGroup(parentGroup); // Clear previous aspects\n const renderedElements = [];\n\n if (!planetsWithCoords || planetsWithCoords.length < 2) {\n console.warn(\"ClientSideAspectRenderer: Not enough planet data with coordinates to render aspects.\");\n this.renderedAspects = [];\n return [];\n }\n\n // Calculate aspects based on planet positions\n const aspects = this.calculateAspects(planetsWithCoords, aspectSettings);\n this.renderedAspects = aspects; // Store the calculated aspects\n\n console.log(`ClientSideAspectRenderer: Rendering ${aspects.length} aspects.`);\n\n // Get enabled aspect types from config\n const settings = aspectSettings || this.config.aspectSettings || {};\n const aspectTypesConfig = settings.types || {};\n\n // Map planets by name for quick coordinate lookup\n const planetCoords = {};\n planetsWithCoords.forEach(p => {\n planetCoords[p.name] = { x: p.x, y: p.y }; // Use the dot coordinates (p.x, p.y)\n });\n\n aspects.forEach(aspect => {\n const coords1 = planetCoords[aspect.planet1];\n const coords2 = planetCoords[aspect.planet2];\n\n // Check if aspect type is enabled in config (and handle default case)\n const aspectDef = aspectTypesConfig[aspect.type];\n const isEnabled = aspectDef ? (aspectDef.enabled !== false) : true; // Default to true if not specified\n const lineStyle = aspectDef ? aspectDef.lineStyle : 'solid'; // Get style from config or default to solid\n\n if (!isEnabled || lineStyle === 'none') {\n // If aspect type is disabled or style is none, don't render line or icon\n return;\n }\n\n if (!coords1 || !coords2) {\n console.warn(`ClientSideAspectRenderer: Could not find coordinates for aspect: ${aspect.planet1} ${aspect.type} ${aspect.planet2}`);\n return; // Skip this aspect if coordinates are missing\n }\n\n // Sanitize planet names for CSS classes\n const p1SafeName = (aspect.planet1 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n const p2SafeName = (aspect.planet2 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n\n // Define stroke dash array based on lineStyle\n let strokeDasharray = 'none';\n if (lineStyle === 'dashed') {\n strokeDasharray = '5, 5';\n } else if (lineStyle === 'dotted') {\n strokeDasharray = '1, 3';\n }\n\n const line = this.svgUtils.createSVGElement(\"line\", {\n x1: coords1.x,\n y1: coords1.y,\n x2: coords2.x,\n y2: coords2.y,\n class: `aspect-element aspect-line aspect-${aspect.type} aspect-planet-${p1SafeName} aspect-planet-${p2SafeName}`, // Add classes for type and involved planets\n stroke: aspect.color || '#888888', // Apply color from definition or default\n 'stroke-dasharray': strokeDasharray // Apply calculated dash style\n });\n\n // Add tooltip with details\n const tooltipText = `${this.astrologyUtils.capitalizeFirstLetter(aspect.planet1)} ${aspect.type} ${this.astrologyUtils.capitalizeFirstLetter(aspect.planet2)} (${aspect.angleDiff.toFixed(1)}°, orb ${aspect.orb.toFixed(1)}°)`;\n this.svgUtils.addTooltip(line, tooltipText);\n\n parentGroup.appendChild(line);\n renderedElements.push(line);\n\n // Optionally add aspect glyphs at the midpoint\n this._addAspectIcon(parentGroup, aspect, coords1, coords2, tooltipText);\n });\n \n return renderedElements;\n }\n \n /**\n * Renders cross-aspect lines (synastry) between two planet sets.\n * @param {Element} parentGroup - The parent SVG group for aspect lines.\n * @param {Array} primaryPlanets - Array of primary planet objects with coordinates\n * @param {Array} secondaryPlanets - Array of secondary planet objects with coordinates\n * @param {Object} aspectSettings - Aspect settings to use\n * @returns {Array<Element>} Array containing the created line elements.\n */\n renderCrossAspects(parentGroup, primaryPlanets, secondaryPlanets, aspectSettings = null) {\n if (!parentGroup) {\n console.error(\"ClientSideAspectRenderer.renderCrossAspects: parentGroup is null or undefined.\");\n return [];\n }\n this.clearGroup(parentGroup);\n const renderedElements = [];\n\n if (!primaryPlanets || primaryPlanets.length < 1 || !secondaryPlanets || secondaryPlanets.length < 1) {\n console.warn(\"ClientSideAspectRenderer: Not enough planet data to render cross-aspects.\");\n return [];\n }\n\n // Calculate cross-aspects\n const aspects = this.calculateCrossAspects(primaryPlanets, secondaryPlanets, aspectSettings);\n\n console.log(`ClientSideAspectRenderer: Rendering ${aspects.length} cross-aspects.`);\n\n // Get enabled aspect types from config\n const settings = aspectSettings || this.config.synastryAspectSettings || {};\n const aspectTypesConfig = settings.types || {};\n\n // Map planets by name for coordinate lookup - keep separate to avoid overwriting\n const primaryCoords = {};\n primaryPlanets.forEach(p => {\n primaryCoords[p.name] = { x: p.x, y: p.y };\n });\n \n const secondaryCoords = {};\n secondaryPlanets.forEach(p => {\n secondaryCoords[p.name] = { x: p.x, y: p.y };\n });\n\n aspects.forEach(aspect => {\n // For cross-aspects: \n // - aspect.planet1 is from primary (outer circle) \n // - aspect.planet2 is from secondary (inner circle)\n // We need to draw line from secondary planet to PRIMARY's projection on inner circle\n \n // Get the primary planet to calculate its projection on inner circle\n const primaryPlanet = aspect.p1; // This has the position (degrees)\n const secondaryPlanet = aspect.p2;\n \n // Calculate projection of primary planet onto inner circle radius\n // Using the same angle but inner circle radius\n const innerRadius = this.config.radius.innermost || 90;\n const angle = primaryPlanet.position;\n const radians = (angle - 90) * (Math.PI / 180); // Adjust for SVG coordinate system\n \n const projectionX = this.centerX + innerRadius * Math.cos(radians);\n const projectionY = this.centerY + innerRadius * Math.sin(radians);\n \n // coords1 is the projection of primary planet on inner circle\n const coords1 = { x: projectionX, y: projectionY };\n // coords2 is the actual secondary planet position\n const coords2 = secondaryCoords[aspect.planet2];\n\n const aspectDef = aspectTypesConfig[aspect.type];\n const isEnabled = aspectDef ? (aspectDef.enabled !== false) : true;\n const lineStyle = aspectDef ? aspectDef.lineStyle : 'solid';\n\n if (!isEnabled || lineStyle === 'none') {\n return;\n }\n\n if (!coords1 || !coords2) {\n console.warn(`ClientSideAspectRenderer: Could not find coordinates for cross-aspect: ${aspect.planet1} ${aspect.type} ${aspect.planet2}`);\n return;\n }\n\n const p1SafeName = (aspect.planet1 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n const p2SafeName = (aspect.planet2 || '').toLowerCase().replace(/[^a-z0-9]/g, '-');\n\n let strokeDasharray = 'none';\n if (lineStyle === 'dashed') {\n strokeDasharray = '5, 5';\n } else if (lineStyle === 'dotted') {\n strokeDasharray = '1, 3';\n }\n\n const line = this.svgUtils.createSVGElement(\"line\", {\n x1: coords1.x,\n y1: coords1.y,\n x2: coords2.x,\n y2: coords2.y,\n class: `aspect-element aspect-line aspect-${aspect.type} aspect-cross aspect-planet-${p1SafeName} aspect-planet-${p2SafeName}`,\n stroke: aspect.color || '#888888',\n 'stroke-dasharray': strokeDasharray\n });\n\n const tooltipText = `${this.astrologyUtils.capitalizeFirstLetter(aspect.planet1)} ${aspect.type} ${this.astrologyUtils.capitalizeFirstLetter(aspect.planet2)} (${aspect.angleDiff.toFixed(1)}°, orb ${aspect.orb.toFixed(1)}°) [Synastry]`;\n this.svgUtils.addTooltip(line, tooltipText);\n\n parentGroup.appendChild(line);\n renderedElements.push(line);\n\n this._addAspectIcon(parentGroup, aspect, coords1, coords2, tooltipText);\n });\n \n // Render projection dots (hollow circles) for primary planets on inner circle\n this._renderProjectionDots(parentGroup, primaryPlanets);\n\n return renderedElements;\n }\n \n /**\n * Renders projection dots (hollow circles) for primary planets on the inner circle\n * @private\n * @param {Element} parentGroup - The SVG group for aspect lines\n * @param {Array} primaryPlanets - Array of primary planet objects\n */\n _renderProjectionDots(parentGroup, primaryPlanets) {\n const innerRadius = this.config.radius.innermost || 90;\n const dotRadius = 3; // Size of the hollow circle\n \n primaryPlanets.forEach(planet => {\n const angle = planet.position;\n const radians = (angle - 90) * (Math.PI / 180); // Adjust for SVG coordinate system\n \n const x = this.centerX + innerRadius * Math.cos(radians);\n const y = this.centerY + innerRadius * Math.sin(radians);\n \n // Create hollow circle (stroke only, no fill)\n const circle = this.svgUtils.createSVGElement(\"circle\", {\n cx: x,\n cy: y,\n r: dotRadius,\n class: `projection-dot projection-${planet.name}`,\n fill: 'none',\n stroke: planet.color || '#666666',\n 'stroke-width': '1'\n });\n \n // Add tooltip\n const tooltipText = `${this.astrologyUtils.capitalizeFirstLetter(planet.name)} projection (${angle.toFixed(1)}°)`;\n this.svgUtils.addTooltip(circle, tooltipText);\n \n parentGroup.appendChild(circle);\n });\n }\n\n /**\n * Overrides the BaseRenderer clearGroup method to ensure custom cleanup.\n * @param {Element} parentGroup - The parent SVG group to clear.\n */\n clearGroup(parentGroup) {\n super.clearGroup(parentGroup);\n // Additional cleanup here if needed\n }\n\n /**\n * Gets the currently rendered aspects\n * @returns {Array} Array of aspect objects\n */\n getCurrentAspects() {\n return this.renderedAspects;\n }\n\n /**\n * Adds an aspect icon at the midpoint of the aspect line\n * @private\n * @param {Element} parentGroup - The SVG group for aspect lines\n * @param {Object} aspect - The aspect object\n * @param {Object} coords1 - Coordinates of first planet\n * @param {Object} coords2 - Coordinates of second planet\n * @param {string} tooltipText - Tooltip text\n */\n _addAspectIcon(parentGroup, aspect, coords1, coords2, tooltipText) {\n // Calculate midpoint of the line\n const midX = (coords1.x + coords2.x) / 2;\n const midY = (coords1.y + coords2.y) / 2;\n \n // Calculate distance from center to place the icon correctly\n const dx = midX - this.centerX;\n const dy = midY - this.centerY;\n const distanceFromCenter = Math.sqrt(dx * dx + dy * dy);\n \n // Only add icon if not too close to center (to avoid clutter)\n if (distanceFromCenter < 20) {\n return; // Skip icon if too close to center\n }\n \n // Define the icon size\n const iconSize = 16;\n \n // Get icon path using IconProvider if available\n let iconPath;\n if (this.iconProvider) {\n iconPath = this.iconProvider.getAspectIconPath(aspect.type);\n } else {\n // Fallback to old path construction\n iconPath = `${this.assetBasePath}/svg/zodiac/zodiac-aspect-${aspect.type}.svg`;\n }\n \n // Create the aspect glyph/symbol image\n const symbol = this.svgUtils.createSVGElement(\"image\", {\n x: midX - iconSize/2, // Offset by half the icon width\n y: midY - iconSize/2, // Offset by half the icon height\n width: iconSize,\n height: iconSize,\n href: iconPath,\n class: `aspect-element aspect-symbol aspect-${aspect.type}`\n });\n \n // Add error handling for image loading\n symbol.addEventListener('error', () => {\n console.warn(`Failed to load aspect icon for ${aspect.type} from path: ${iconPath}`);\n \n // Get the abbreviation for text fallback from aspect definition or default to first 3 letters\n const aspectDef = this.defaultAspectDefinitions[aspect.type];\n const fallbackText = aspectDef && aspectDef.abbr \n ? aspectDef.abbr \n : aspect.type.substring(0, 3).toUpperCase();\n \n // Use IconProvider's createTextFallback if available\n let textSymbol;\n if (this.iconProvider) {\n textSymbol = this.iconProvider.createTextFallback(\n this.svgUtils,\n {\n x: midX,\n y: midY,\n size: '12px',\n color: aspect.color || '#888888',\n className: `aspect-element aspect-symbol aspect-${aspect.type}`\n },\n fallbackText\n );\n } else {\n // Legacy fallback\n textSymbol = this.svgUtils.createSVGElement(\"text\", {\n x: midX,\n y: midY,\n 'text-anchor': 'middle',\n 'dominant-baseline': 'middle',\n 'font-size': '12px',\n 'font-weight': 'bold',\n class: `aspect-element aspect-symbol aspect-${aspect.type}`,\n fill: aspect.color || '#888888'\n });\n textSymbol.textContent = fallbackText;\n }\n \n // Add tooltip\n this.svgUtils.addTooltip(textSymbol, tooltipText);\n \n // Add to parent group\n parentGroup.appendChild(textSymbol);\n });\n \n // Add tooltip\n this.svgUtils.addTooltip(symbol, tooltipText);\n \n parentGroup.appendChild(symbol);\n }\n} ","/**\n * RendererFactory.js\n * Factory class for creating renderer instances with proper dependency injection.\n */\nimport { ServiceRegistry } from '../services/ServiceRegistry.js';\nimport { ZodiacRenderer } from '../renderers/ZodiacRenderer.js';\nimport { HouseRenderer } from '../renderers/HouseRenderer.js';\nimport { PlanetSymbolRenderer } from '../renderers/PlanetSymbolRenderer.js';\nimport { PrimaryPlanetRenderer } from '../renderers/PrimaryPlanetRenderer.js';\nimport { SecondaryPlanetRenderer } from '../renderers/SecondaryPlanetRenderer.js';\nimport { PlanetRendererCoordinator } from '../renderers/PlanetRendererCoordinator.js';\nimport { ClientSideAspectRenderer } from '../renderers/ClientSideAspectRenderer.js';\n\nexport class RendererFactory {\n /**\n * Constructor\n * @param {Object} config - Chart configuration\n * @param {string} svgNS - SVG namespace\n */\n constructor(config, svgNS) {\n this.config = config;\n this.svgNS = svgNS;\n this.svgUtils = ServiceRegistry.getSvgUtils();\n this.iconProvider = ServiceRegistry.getIconProvider();\n \n // If IconProvider is null, log error for debugging\n if (!this.iconProvider) {\n console.error('RendererFactory: IconProvider not available. Icons will not render correctly.');\n }\n }\n \n /**\n * Creates a ZodiacRenderer instance\n * @param {Object} options - Additional options for the renderer\n * @returns {ZodiacRenderer} The ZodiacRenderer instance\n */\n createZodiacRenderer(options = {}) {\n return new ZodiacRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n ...options\n });\n }\n \n /**\n * Creates a HouseRenderer instance\n * @param {Object} options - Additional options for the renderer\n * @returns {HouseRenderer} The HouseRenderer instance\n */\n createHouseRenderer(options = {}) {\n return new HouseRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n ...options\n });\n }\n \n /**\n * Creates a PlanetRenderer instance\n * This now creates a PlanetRendererCoordinator with specialized renderers\n * @param {Object} options - Additional options for the renderer\n * @returns {PlanetRendererCoordinator} The PlanetRendererCoordinator instance\n */\n createPlanetRenderer(options = {}) {\n // First create the symbol renderer\n const symbolRenderer = new PlanetSymbolRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n \n // Create primary planet renderer\n const primaryRenderer = new PrimaryPlanetRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n symbolRenderer: symbolRenderer,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n \n // Create secondary planet renderer\n const secondaryRenderer = new SecondaryPlanetRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n symbolRenderer: symbolRenderer,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n \n // Create and return the coordinator\n return new PlanetRendererCoordinator({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n primaryRenderer: primaryRenderer,\n secondaryRenderer: secondaryRenderer,\n symbolRenderer: symbolRenderer,\n assetBasePath: options.assetBasePath || this.config.assets?.basePath,\n ...options\n });\n }\n \n /**\n * Creates a ClientSideAspectRenderer instance\n * @param {Object} options - Additional options for the renderer\n * @returns {ClientSideAspectRenderer} The ClientSideAspectRenderer instance\n */\n createAspectRenderer(options = {}) {\n return new ClientSideAspectRenderer({\n svgNS: this.svgNS,\n config: this.config,\n svgUtils: this.svgUtils,\n iconProvider: this.iconProvider,\n ...options\n });\n }\n} ","/**\n * RenderingCoordinator.js\n * Coordinates all rendering operations for the chart\n */\nimport { RendererFactory } from '../factories/RendererFactory.js';\n\nexport class RenderingCoordinator {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {Object} options.config - Chart configuration\n * @param {Object} options.svgManager - SVG manager instance\n * @param {Object} options.planets - Planet data\n * @param {Array} options.houses - House data\n */\n constructor(options) {\n this.config = options.config;\n this.svgManager = options.svgManager;\n this.planets = options.planets || {};\n this.houses = options.houses || [];\n \n // Initialize renderers dictionary\n this.renderers = {};\n \n // Initialize renderers if SVG manager is available\n if (this.svgManager && this.svgManager.getSVG()) {\n this._initializeRenderers();\n }\n }\n \n /**\n * Initializes all renderers using the factory\n * @private\n */\n _initializeRenderers() {\n // Create renderer factory\n this.rendererFactory = new RendererFactory(\n this.config, \n this.svgManager.svgNS\n );\n \n // Initialize zodiac renderer\n this.renderers.zodiac = this.rendererFactory.createZodiacRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize house renderer with house data\n const houseCusps = this.config.getHouseCusps();\n const houseData = (houseCusps && houseCusps.length > 0) \n ? houseCusps \n : this.houses;\n \n this.renderers.house = this.rendererFactory.createHouseRenderer({\n houseData: houseData\n });\n \n // Initialize planet renderer\n this.renderers.planet = this.rendererFactory.createPlanetRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize aspect renderer\n this.renderers.aspect = this.rendererFactory.createAspectRenderer({\n assetBasePath: this.config.assets.basePath\n });\n }\n \n /**\n * Updates planet data\n * @param {Object} planets - New planet data\n */\n updatePlanets(planets) {\n this.planets = planets;\n }\n \n /**\n * Updates house data\n * @param {Array} houses - New house data\n */\n updateHouses(houses) {\n this.houses = houses;\n if (this.renderers.house) {\n this.renderers.house.houseData = this.houses;\n }\n }\n \n /**\n * Renders all chart elements\n */\n renderAll() {\n if (!this.svgManager.getSVG()) {\n return;\n }\n \n // Clear all groups\n Object.values(this.svgManager.getAllGroups()).forEach(group => {\n group.innerHTML = '';\n });\n \n this.renderZodiac();\n this.renderHouses();\n const planetsWithCoords = this.renderPlanets();\n this.renderAspects(planetsWithCoords);\n \n console.log(\"RenderingCoordinator: Chart rendered\");\n }\n \n /**\n * Renders the zodiac ring\n * @returns {boolean} Success indicator\n */\n renderZodiac() {\n if (!this.config.zodiacSettings.enabled || !this.renderers.zodiac) {\n return false;\n }\n \n this.renderers.zodiac.render(this.svgManager.getGroup('zodiac'));\n return true;\n }\n \n /**\n * Renders the houses\n * @returns {boolean} Success indicator\n */\n renderHouses() {\n if (!this.config.houseSettings.enabled || !this.renderers.house) {\n return false;\n }\n \n const houseGroup = this.svgManager.getGroup('houses');\n const houseDivisionsGroup = this.svgManager.getGroup('houseDivisions');\n \n // Get the current house cusps based on selected system\n const houseCusps = this.config.getHouseCusps();\n if (houseCusps && houseCusps.length > 0) {\n // Update house renderer with current house system cusps\n this.renderers.house.houseData = houseCusps;\n }\n \n // Render house divisions and numbers\n this.renderers.house.renderDivisions(houseDivisionsGroup, this.config.houseSettings.rotationAngle);\n this.renderers.house.renderNumbers(houseGroup, this.config.houseSettings.rotationAngle);\n \n return true;\n }\n \n /**\n * Renders the planets\n * @returns {Array} Array of rendered planets with coordinates for aspect calculation\n */\n renderPlanets() {\n if (!this.config.planetSettings.enabled || !this.renderers.planet) {\n return [];\n }\n \n // Get the enabled states for primary and secondary planets\n const primaryEnabled = this.config.planetSettings.primaryEnabled !== false;\n const secondaryEnabled = this.config.planetSettings.secondaryEnabled !== false;\n \n // Use the consolidated renderAllPlanetTypes method\n const renderedPlanets = this.renderers.planet.renderAllPlanetTypes({\n svgManager: this.svgManager,\n planetsData: this.planets,\n config: this.config,\n primaryEnabled: primaryEnabled,\n secondaryEnabled: secondaryEnabled\n });\n \n console.log(`RenderingCoordinator: Rendered ${renderedPlanets.primary.length} primary planets and ${renderedPlanets.secondary.length} secondary planets`);\n \n // For aspect rendering, use primary planets by default\n return renderedPlanets.primary;\n }\n \n /**\n * Renders the aspects between planets\n * @param {Array} planetsWithCoords - Array of planets with coordinates\n * @returns {boolean} Success indicator\n */\n renderAspects(planetsWithCoords) {\n if (!this.config.aspectSettings.enabled || !this.renderers.aspect) {\n return false;\n }\n \n this.renderers.aspect.render(this.svgManager.getGroup('aspects'), planetsWithCoords);\n return true;\n }\n} ","/**\n * ChartStateManager.js\n * Manages the state and configuration settings for the chart\n */\n\nexport class ChartStateManager {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {Object} options.config - Chart configuration\n * @param {Object} options.svgManager - SVG manager instance\n */\n constructor(options) {\n this.config = options.config;\n this.svgManager = options.svgManager;\n }\n \n /**\n * Updates chart configuration\n * @param {Object} configUpdate - Configuration updates\n * @returns {boolean} Success indicator\n */\n updateConfig(configUpdate) {\n this.config.mergeConfig(configUpdate);\n \n // Update aspect settings specifically if provided\n if (configUpdate.aspectSettings) {\n this.config.updateAspectSettings(configUpdate.aspectSettings);\n }\n \n console.log(\"ChartStateManager: Updated configuration\");\n return true;\n }\n \n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet to toggle\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n togglePlanetVisibility(planetName, visible) {\n this.config.togglePlanetVisibility(planetName, visible);\n return true;\n }\n \n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n toggleHousesVisibility(visible) {\n this.config.toggleHousesVisibility(visible);\n return true;\n }\n \n /**\n * Toggles the visibility of aspects\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n toggleAspectsVisibility(visible) {\n this.config.toggleAspectsVisibility(visible);\n return true;\n }\n \n /**\n * Sets the house system rotation angle\n * @param {number} angle - Rotation angle in degrees\n * @returns {boolean} Success indicator\n */\n setHouseRotation(angle) {\n this.config.houseSettings.rotationAngle = angle;\n return true;\n }\n \n /**\n * Sets the house system\n * @param {string} systemName - Name of the house system to use\n * @returns {boolean} Success indicator\n */\n setHouseSystem(systemName) {\n return this.config.setHouseSystem(systemName);\n }\n \n /**\n * Gets the available house systems\n * @returns {Array} Array of available house system names\n */\n getAvailableHouseSystems() {\n return this.config.getAvailableHouseSystems();\n }\n \n /**\n * Gets the current house system\n * @returns {string} Current house system name\n */\n getCurrentHouseSystem() {\n return this.config.getHouseSystem();\n }\n \n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n togglePrimaryPlanets(visible) {\n // Update the config settings\n this.config.togglePrimaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM if svgManager is available\n if (this.svgManager) {\n const primaryGroup = this.svgManager.getGroup('primaryPlanets');\n if (primaryGroup) {\n primaryGroup.style.display = visible ? 'block' : 'none';\n }\n }\n \n console.log(`ChartStateManager: Primary planets ${visible ? 'enabled' : 'disabled'}`);\n return true;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Visibility state\n * @returns {boolean} Success indicator\n */\n toggleSecondaryPlanets(visible) {\n // Update the config settings\n this.config.toggleSecondaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM if svgManager is available\n if (this.svgManager) {\n const secondaryGroup = this.svgManager.getGroup('secondaryPlanets');\n if (secondaryGroup) {\n secondaryGroup.style.display = visible ? 'block' : 'none';\n }\n \n // Update the innermost circle visibility\n const innermostCircle = document.querySelector('.chart-innermost-circle');\n if (innermostCircle) {\n innermostCircle.style.display = visible ? 'block' : 'none';\n }\n }\n \n console.log(`ChartStateManager: Secondary planets ${visible ? 'enabled' : 'disabled'}`);\n return true;\n }\n} ","/**\n * ChartManager.js\n * Main class for the nocturna-wheel.js library.\n * Serves as the facade for all chart rendering operations.\n */\nimport { ChartConfig } from '../core/ChartConfig.js';\nimport { SVGManager } from '../managers/SVGManager.js';\nimport { ServiceRegistry } from '../services/ServiceRegistry.js';\nimport { RenderingCoordinator } from './RenderingCoordinator.js';\nimport { ChartStateManager } from './ChartStateManager.js';\n\nexport class ChartManager {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {string|Element} options.container - Container element or selector\n * @param {Object} options.planets - Planet positions data\n * @param {Array} options.houses - House cusps data (optional)\n * @param {Object} options.aspectSettings - Aspect calculation settings (optional)\n * @param {Object} options.config - Additional configuration (optional)\n */\n constructor(options) {\n if (!options || !options.container) {\n throw new Error(\"ChartManager: Container element or selector is required\");\n }\n\n this.options = options;\n this.container = typeof options.container === 'string' \n ? document.querySelector(options.container)\n : options.container;\n \n if (!this.container) {\n throw new Error(`ChartManager: Container not found: ${options.container}`);\n }\n\n // Initialize configuration\n this.config = new ChartConfig(options.config || {});\n \n // Set data\n this.planets = options.planets || {};\n this.houses = options.houses || [];\n \n // Override aspect settings if provided\n if (options.aspectSettings) {\n this.config.updateAspectSettings(options.aspectSettings);\n }\n \n // Initialize services\n ServiceRegistry.initializeServices();\n \n // Initialize SVG manager with shared svgUtils instance\n const svgUtils = ServiceRegistry.getSvgUtils();\n this.svgManager = new SVGManager({ svgUtils });\n \n // Initialize component classes\n this.renderingCoordinator = new RenderingCoordinator({\n config: this.config,\n svgManager: this.svgManager,\n planets: this.planets,\n houses: this.houses\n });\n \n this.stateManager = new ChartStateManager({\n config: this.config,\n svgManager: this.svgManager\n });\n \n console.log(\"ChartManager: Initialized\");\n }\n\n /**\n * Initializes and sets up the chart\n * @private\n */\n _initialize() {\n const svgOptions = {\n width: this.config.svg.width,\n height: this.config.svg.height,\n viewBox: this.config.svg.viewBox\n };\n \n // Create SVG element\n this.svgManager.initialize(this.container, svgOptions);\n \n // Create standard layer groups\n this.svgManager.createStandardGroups();\n }\n\n /**\n * Renders the chart\n * @returns {ChartManager} - Instance for chaining\n */\n render() {\n if (!this.svgManager.getSVG()) {\n this._initialize();\n }\n \n // Delegate to rendering coordinator\n this.renderingCoordinator.renderAll();\n \n console.log(\"ChartManager: Chart rendered\");\n return this;\n }\n\n /**\n * Updates chart configuration\n * @param {Object} config - New configuration\n * @returns {ChartManager} - Instance for chaining\n */\n update(config) {\n if (config.planets) {\n this.planets = config.planets;\n this.renderingCoordinator.updatePlanets(this.planets);\n }\n \n if (config.houses) {\n this.houses = config.houses;\n this.renderingCoordinator.updateHouses(this.houses);\n }\n \n if (config.config) {\n this.stateManager.updateConfig(config.config);\n }\n \n // Re-render the chart\n this.render();\n \n return this;\n }\n\n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet to toggle\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n togglePlanet(planetName, visible) {\n this.stateManager.togglePlanetVisibility(planetName, visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n toggleHouses(visible) {\n this.stateManager.toggleHousesVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of aspects\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n toggleAspects(visible) {\n this.stateManager.toggleAspectsVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Sets the house system rotation angle\n * @param {number} angle - Rotation angle in degrees\n * @returns {ChartManager} - Instance for chaining\n */\n setHouseRotation(angle) {\n this.stateManager.setHouseRotation(angle);\n this.render();\n return this;\n }\n\n /**\n * Destroys the chart and cleans up resources\n */\n destroy() {\n // Remove the SVG element\n if (this.svgManager.getSVG()) {\n this.svgManager.getSVG().remove();\n }\n \n // Clear references\n this.renderingCoordinator = null;\n this.stateManager = null;\n this.planets = {};\n this.houses = [];\n \n console.log(\"ChartManager: Destroyed\");\n }\n\n /**\n * Updates chart data (planets, houses)\n * @param {Object} data - Object containing new data, e.g., { planets: {...}, houses: [...] }\n * @returns {ChartManager} - Instance for chaining\n */\n updateData(data) {\n if (data.planets) {\n // Update internal planets data\n // Ensure it matches the format expected internally (object)\n if (typeof data.planets === 'object' && !Array.isArray(data.planets)) {\n this.planets = { ...this.planets, ...data.planets };\n this.renderingCoordinator.updatePlanets(this.planets);\n console.log(\"ChartManager: Updated planets data.\");\n } else {\n console.warn(\"ChartManager.updateData: Invalid planets data format. Expected object.\");\n }\n }\n if (data.houses) {\n // Update internal houses data\n if (Array.isArray(data.houses)) {\n this.houses = data.houses;\n this.renderingCoordinator.updateHouses(this.houses);\n console.log(\"ChartManager: Updated houses data.\");\n } else {\n console.warn(\"ChartManager.updateData: Invalid houses data format. Expected array.\");\n }\n }\n // Re-render the chart with updated data\n this.render();\n return this;\n }\n\n /**\n * Updates chart configuration (aspects, assets, etc.)\n * @param {Object} configUpdate - Object containing configuration updates\n * @returns {ChartManager} - Instance for chaining\n */\n updateConfig(configUpdate) {\n this.stateManager.updateConfig(configUpdate);\n \n console.log(\"ChartManager: Updated configuration.\");\n // Re-render the chart with updated configuration\n this.render();\n return this;\n }\n\n /**\n * Sets the house system\n * @param {string} systemName - Name of the house system to use\n * @returns {ChartManager} - Instance for chaining\n */\n setHouseSystem(systemName) {\n this.stateManager.setHouseSystem(systemName);\n this.render();\n return this;\n }\n \n /**\n * Gets the available house systems\n * @returns {Array} - Array of available house system names\n */\n getAvailableHouseSystems() {\n return this.stateManager.getAvailableHouseSystems();\n }\n \n /**\n * Gets the current house system\n * @returns {string} - Current house system name\n */\n getCurrentHouseSystem() {\n return this.stateManager.getCurrentHouseSystem();\n }\n\n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n togglePrimaryPlanets(visible) {\n this.stateManager.togglePrimaryPlanets(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Visibility state\n * @returns {ChartManager} - Instance for chaining\n */\n toggleSecondaryPlanets(visible) {\n this.stateManager.toggleSecondaryPlanets(visible);\n this.render();\n return this;\n }\n} ","/**\n * NocturnaWheel.js\n * Main class for the nocturna-wheel.js library.\n * Serves as the facade for all chart rendering operations.\n */\nimport { ChartConfig } from './core/ChartConfig.js';\nimport { SVGManager } from './managers/SVGManager.js';\nimport { ServiceRegistry } from './services/ServiceRegistry.js';\nimport { RendererFactory } from './factories/RendererFactory.js';\n\nexport class NocturnaWheel {\n /**\n * Constructor\n * @param {Object} options - Configuration options\n * @param {string|Element} options.container - Container element or selector\n * @param {Object} options.planets - Primary planet positions data (outer circle)\n * @param {Object} options.secondaryPlanets - Secondary planet positions data (inner circle, optional)\n * @param {Array} options.houses - House cusps data (optional)\n * @param {Object} options.aspectSettings - Aspect calculation settings (optional, legacy)\n * @param {Object} options.primaryAspectSettings - Primary aspect settings (optional)\n * @param {Object} options.secondaryAspectSettings - Secondary aspect settings (optional)\n * @param {Object} options.synastryAspectSettings - Synastry aspect settings (optional)\n * @param {Object} options.config - Additional configuration (optional)\n */\n constructor(options) {\n if (!options || !options.container) {\n throw new Error(\"NocturnaWheel: Container element or selector is required\");\n }\n\n this.options = options;\n this.container = typeof options.container === 'string' \n ? document.querySelector(options.container)\n : options.container;\n \n if (!this.container) {\n throw new Error(`NocturnaWheel: Container not found: ${options.container}`);\n }\n\n // Initialize configuration\n this.config = new ChartConfig(options.config || {});\n \n // Set data - primary planets (outer circle)\n this.planets = options.planets || {};\n \n // Set secondary planets (inner circle) - independent data\n // If not provided, initialize as empty object (user must explicitly set)\n this.secondaryPlanets = options.secondaryPlanets || {};\n \n this.houses = options.houses || [];\n \n // Auto-rotate the wheel if houses are provided\n // This ensures the Ascendant (1st house cusp) is positioned at 9 o'clock\n if (this.houses.length > 0 && this.houses[0] && typeof this.houses[0].lon === 'number') {\n console.log(`NocturnaWheel: Auto-rotating wheel to Ascendant at ${this.houses[0].lon}°`);\n this.config.houseSettings.rotationAngle = this.houses[0].lon;\n }\n \n // Override aspect settings if provided (legacy support)\n if (options.aspectSettings) {\n this.config.updateAspectSettings(options.aspectSettings);\n }\n \n // Override specific aspect settings if provided\n if (options.primaryAspectSettings) {\n this.config.updatePrimaryAspectSettings(options.primaryAspectSettings);\n }\n if (options.secondaryAspectSettings) {\n this.config.updateSecondaryAspectSettings(options.secondaryAspectSettings);\n }\n if (options.synastryAspectSettings) {\n this.config.updateSynastryAspectSettings(options.synastryAspectSettings);\n }\n \n // Initialize services\n ServiceRegistry.initializeServices();\n \n // Initialize SVG manager with shared svgUtils instance\n const svgUtils = ServiceRegistry.getSvgUtils();\n this.svgManager = new SVGManager({ svgUtils });\n \n // Initialize renderers dictionary\n this.renderers = {};\n \n console.log(\"NocturnaWheel: Initialized\");\n }\n\n /**\n * Initializes and sets up the chart\n * @private\n */\n _initialize() {\n const svgOptions = {\n width: this.config.svg.width,\n height: this.config.svg.height,\n viewBox: this.config.svg.viewBox\n };\n \n // Create SVG element\n this.svgManager.initialize(this.container, svgOptions);\n \n // Create standard layer groups\n this.svgManager.createStandardGroups();\n \n // Initialize renderers\n this._initializeRenderers();\n }\n\n /**\n * Initializes all renderers using the factory\n * @private\n */\n _initializeRenderers() {\n // Create renderer factory\n this.rendererFactory = new RendererFactory(\n this.config, \n this.svgManager.svgNS\n );\n \n // Initialize zodiac renderer\n this.renderers.zodiac = this.rendererFactory.createZodiacRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize house renderer with house data\n const houseCusps = this.config.getHouseCusps();\n const houseData = (houseCusps && houseCusps.length > 0) \n ? houseCusps \n : this.houses;\n \n this.renderers.house = this.rendererFactory.createHouseRenderer({\n houseData: houseData\n });\n \n // Initialize planet renderer\n this.renderers.planet = this.rendererFactory.createPlanetRenderer({\n assetBasePath: this.config.assets.basePath\n });\n \n // Initialize aspect renderer\n this.renderers.aspect = this.rendererFactory.createAspectRenderer({\n assetBasePath: this.config.assets.basePath\n });\n }\n\n /**\n * Renders the chart\n */\n render() {\n if (!this.svgManager.getSVG()) {\n this._initialize();\n }\n \n // Clear all groups\n Object.values(this.svgManager.getAllGroups()).forEach(group => {\n group.innerHTML = '';\n });\n \n // Render zodiac if enabled\n if (this.config.zodiacSettings.enabled) {\n this.renderers.zodiac.render(this.svgManager.getGroup('zodiac'));\n }\n \n // Render houses if enabled\n if (this.config.houseSettings.enabled) {\n const houseGroup = this.svgManager.getGroup('houses');\n const houseDivisionsGroup = this.svgManager.getGroup('houseDivisions');\n \n // Get the current house cusps based on selected system\n const houseCusps = this.config.getHouseCusps();\n if (houseCusps && houseCusps.length > 0) {\n // Update house renderer with current house system cusps\n this.renderers.house.houseData = houseCusps;\n }\n \n // Render house divisions and numbers\n this.renderers.house.renderDivisions(houseDivisionsGroup, this.config.houseSettings.rotationAngle);\n this.renderers.house.renderNumbers(houseGroup, this.config.houseSettings.rotationAngle);\n }\n \n // Render planets using the consolidated approach\n let primaryPlanetsWithCoords = [];\n let secondaryPlanetsWithCoords = [];\n if (this.config.planetSettings.enabled) {\n // Get the enabled states for primary and secondary planets\n const primaryEnabled = this.config.planetSettings.primaryEnabled !== false;\n const secondaryEnabled = this.config.planetSettings.secondaryEnabled !== false;\n \n // Render primary planets (outer circle)\n if (primaryEnabled && Object.keys(this.planets).length > 0) {\n const primaryGroup = this.svgManager.getGroup('primaryPlanets');\n const primaryArray = Object.entries(this.planets)\n .filter(([name, data]) => this.config.planetSettings.visible?.[name] !== false)\n .map(([name, data]) => ({\n name: name,\n position: data.lon,\n color: data.color || '#000000',\n retrograde: !!data.retrograde\n }));\n primaryPlanetsWithCoords = this.renderers.planet.primaryRenderer.render(primaryGroup, primaryArray, 0, {\n config: this.config\n });\n }\n \n // Render secondary planets (inner circle) using SEPARATE data\n if (secondaryEnabled && Object.keys(this.secondaryPlanets).length > 0) {\n const secondaryGroup = this.svgManager.getGroup('secondaryPlanets');\n const secondaryArray = Object.entries(this.secondaryPlanets)\n .filter(([name, data]) => this.config.planetSettings.visible?.[name] !== false)\n .map(([name, data]) => ({\n name: name,\n position: data.lon,\n color: data.color || '#000000',\n retrograde: !!data.retrograde\n }));\n secondaryPlanetsWithCoords = this.renderers.planet.secondaryRenderer.render(secondaryGroup, secondaryArray, 0, {\n config: this.config\n });\n }\n \n }\n \n // Render three independent aspect types\n \n // 1. Primary aspects (outer circle to outer circle)\n if (this.config.primaryAspectSettings.enabled && primaryPlanetsWithCoords.length >= 2) {\n const primaryAspectsGroup = this.svgManager.getGroup('primaryAspects');\n this.renderers.aspect.render(primaryAspectsGroup, primaryPlanetsWithCoords, this.config.primaryAspectSettings);\n }\n \n // 2. Secondary aspects (inner circle to inner circle)\n if (this.config.secondaryAspectSettings.enabled && secondaryPlanetsWithCoords.length >= 2) {\n const secondaryAspectsGroup = this.svgManager.getGroup('secondaryAspects');\n this.renderers.aspect.render(secondaryAspectsGroup, secondaryPlanetsWithCoords, this.config.secondaryAspectSettings);\n }\n \n // 3. Synastry aspects (outer circle to inner circle)\n if (this.config.synastryAspectSettings.enabled && \n primaryPlanetsWithCoords.length >= 1 && \n secondaryPlanetsWithCoords.length >= 1) {\n const synastryAspectsGroup = this.svgManager.getGroup('synastryAspects');\n this.renderers.aspect.renderCrossAspects(\n synastryAspectsGroup, \n primaryPlanetsWithCoords, \n secondaryPlanetsWithCoords, \n this.config.synastryAspectSettings\n );\n }\n \n return this;\n }\n\n /**\n * Updates chart configuration\n * @param {Object} config - New configuration\n * @returns {NocturnaWheel} - Instance for chaining\n */\n update(config) {\n if (config.planets) {\n this.planets = config.planets;\n }\n \n if (config.houses) {\n this.houses = config.houses;\n if (this.renderers.house) {\n this.renderers.house.houseData = this.houses;\n }\n }\n \n if (config.config) {\n this.config.mergeConfig(config.config);\n }\n \n // Re-render the chart\n this.render();\n \n return this;\n }\n\n /**\n * Toggles the visibility of a planet\n * @param {string} planetName - Name of the planet to toggle\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n togglePlanet(planetName, visible) {\n this.config.togglePlanetVisibility(planetName, visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of houses\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleHouses(visible) {\n this.config.toggleHousesVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Toggles the visibility of aspects (legacy - toggles all)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n * @deprecated Use togglePrimaryAspects, toggleSecondaryAspects, or toggleSynastryAspects instead\n */\n toggleAspects(visible) {\n this.config.toggleAspectsVisibility(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of primary aspects (outer circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n togglePrimaryAspects(visible) {\n this.config.togglePrimaryAspectsVisibility(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of secondary aspects (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleSecondaryAspects(visible) {\n this.config.toggleSecondaryAspectsVisibility(visible);\n this.render();\n return this;\n }\n \n /**\n * Toggles the visibility of synastry aspects (cross-circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleSynastryAspects(visible) {\n this.config.toggleSynastryAspectsVisibility(visible);\n this.render();\n return this;\n }\n\n /**\n * Sets the house system rotation angle\n * @param {number} angle - Rotation angle in degrees\n * @returns {NocturnaWheel} - Instance for chaining\n */\n setHouseRotation(angle) {\n this.config.houseSettings.rotationAngle = angle;\n this.render();\n return this;\n }\n\n /**\n * Destroys the chart and cleans up resources\n */\n destroy() {\n // Remove the SVG element\n if (this.svgManager.getSVG()) {\n this.svgManager.getSVG().remove();\n }\n \n // Clear references\n this.renderers = {};\n this.planets = {};\n this.houses = [];\n \n console.log(\"NocturnaWheel: Destroyed\");\n }\n\n /**\n * Updates chart data (planets, secondaryPlanets, houses)\n * @param {Object} data - Object containing new data, e.g., { planets: {...}, secondaryPlanets: {...}, houses: [...] }\n * @returns {NocturnaWheel} - Instance for chaining\n */\n updateData(data) {\n if (data.planets) {\n // Update internal planets data\n // Ensure it matches the format expected internally (object)\n if (typeof data.planets === 'object' && !Array.isArray(data.planets)) {\n // Perform a deep merge for each planet\n for (const planetName in data.planets) {\n if (this.planets[planetName]) {\n this.planets[planetName] = { ...this.planets[planetName], ...data.planets[planetName] };\n } else {\n this.planets[planetName] = data.planets[planetName];\n }\n }\n // Log retrograde flags specifically\n Object.keys(this.planets).forEach(key => {\n // console.log(` ${key}: retrograde = ${this.planets[key].retrograde}`);\n });\n } else {\n console.warn(\"NocturnaWheel.updateData: Invalid planets data format. Expected object.\");\n }\n }\n if (data.secondaryPlanets) {\n // Update internal secondary planets data\n if (typeof data.secondaryPlanets === 'object' && !Array.isArray(data.secondaryPlanets)) {\n // Perform a deep merge for each secondary planet\n for (const planetName in data.secondaryPlanets) {\n if (this.secondaryPlanets[planetName]) {\n this.secondaryPlanets[planetName] = { ...this.secondaryPlanets[planetName], ...data.secondaryPlanets[planetName] };\n } else {\n this.secondaryPlanets[planetName] = data.secondaryPlanets[planetName];\n }\n }\n // console.log(\"NocturnaWheel: Updated secondary planets data (deep merged).\");\n } else {\n console.warn(\"NocturnaWheel.updateData: Invalid secondaryPlanets data format. Expected object.\");\n }\n }\n if (data.houses) {\n // Update internal houses data\n if (Array.isArray(data.houses)) {\n this.houses = data.houses;\n // Need to inform HouseRenderer if it holds its own copy\n if (this.renderers.house) {\n this.renderers.house.houseData = this.houses;\n }\n // console.log(\"NocturnaWheel: Updated houses data.\");\n } else {\n console.warn(\"NocturnaWheel.updateData: Invalid houses data format. Expected array.\");\n }\n }\n // Re-render the chart with updated data\n this.render();\n return this;\n }\n\n /**\n * Updates chart configuration (aspects, assets, etc.)\n * @param {Object} configUpdate - Object containing configuration updates\n * @returns {NocturnaWheel} - Instance for chaining\n */\n updateConfig(configUpdate) {\n this.config.mergeConfig(configUpdate); // Use the existing mergeConfig method\n \n // Update aspect settings specifically if provided\n if (configUpdate.aspectSettings) {\n this.config.updateAspectSettings(configUpdate.aspectSettings);\n }\n \n // console.log(\"NocturnaWheel: Updated configuration.\");\n // Re-render the chart with updated configuration\n this.render();\n return this;\n }\n\n /**\n * Sets the house system\n * @param {string} systemName - Name of the house system to use\n * @returns {NocturnaWheel} - Instance for chaining\n */\n setHouseSystem(systemName) {\n this.config.setHouseSystem(systemName);\n this.render();\n return this;\n }\n \n /**\n * Gets the available house systems\n * @returns {Array} - Array of available house system names\n */\n getAvailableHouseSystems() {\n return this.config.getAvailableHouseSystems();\n }\n \n /**\n * Gets the current house system\n * @returns {string} - Current house system name\n */\n getCurrentHouseSystem() {\n return this.config.getHouseSystem();\n }\n\n /**\n * Toggles the visibility of primary planets (inner circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n togglePrimaryPlanets(visible) {\n // Use the config's method to update the settings\n this.config.togglePrimaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM\n const primaryGroup = this.svgManager.getGroup('primaryPlanets');\n if (primaryGroup) {\n primaryGroup.style.display = visible ? 'block' : 'none';\n }\n \n // console.log(`NocturnaWheel: Primary planets ${visible ? 'enabled' : 'disabled'}`);\n return this;\n }\n \n /**\n * Toggles the visibility of secondary planets (innermost circle)\n * @param {boolean} visible - Visibility state\n * @returns {NocturnaWheel} - Instance for chaining\n */\n toggleSecondaryPlanets(visible) {\n // Use the config's method to update the settings\n this.config.toggleSecondaryPlanetsVisibility(visible);\n \n // Update the group visibility in the DOM\n const secondaryGroup = this.svgManager.getGroup('secondaryPlanets');\n if (secondaryGroup) {\n secondaryGroup.style.display = visible ? 'block' : 'none';\n }\n\n // Update the innermost circle visibility\n const innermostCircle = document.querySelector('.chart-innermost-circle');\n if (innermostCircle) {\n innermostCircle.style.display = visible ? 'block' : 'none';\n }\n \n // console.log(`NocturnaWheel: Secondary planets ${visible ? 'enabled' : 'disabled'}`);\n return this;\n }\n}\n\n// Export for module environments or expose globally for browser\n// if (typeof module !== 'undefined' && module.exports) {\n// module.exports = NocturnaWheel;\n// } else {\n// window.NocturnaWheel = NocturnaWheel;\n// } ","/**\r\n * ChartRenderer.js\r\n * Responsible for rendering chart elements\r\n */\r\nimport { SvgUtils } from '../utils/SvgUtils';\r\n\r\nexport class ChartRenderer {\r\n /**\r\n * Constructor\r\n * @param {WheelChart} wheelChart - WheelChart instance\r\n * @param {Object} options - Chart options\r\n */\r\n constructor(wheelChart, options = {}) {\r\n this.wheelChart = wheelChart; // Store reference to WheelChart instance\r\n this.chart = wheelChart.chart; // Store direct reference to underlying NocturnaWheel instance\r\n this.options = options;\r\n this.svgUtils = new SvgUtils();\r\n console.log(\"ChartRenderer: Initialized with chart\", this.chart);\r\n }\r\n \r\n /**\r\n * Renders inner circle and planets\r\n */\r\n renderInnerElements() {\r\n // Make sure we have a valid NocturnaWheel instance with svgManager\r\n if (!this.chart || !this.chart.svgManager) {\r\n console.error(\"ChartRenderer: Invalid chart or missing svgManager\");\r\n return;\r\n }\r\n \r\n const svg = this.chart.svgManager.getSVG();\r\n if (!svg) {\r\n console.error(\"ChartRenderer: SVG not found\");\r\n return;\r\n }\r\n \r\n const zodiacGroup = this.chart.svgManager.getGroup('zodiac');\r\n if (!zodiacGroup) {\r\n console.error(\"ChartRenderer: Zodiac group not found\");\r\n return;\r\n }\r\n \r\n // Remove only the previous innermost circle if it exists\r\n const prevCircle = zodiacGroup.querySelector('.chart-innermost-circle');\r\n if (prevCircle) {\r\n zodiacGroup.removeChild(prevCircle);\r\n }\r\n\r\n const centerX = this.chart.config.svg.center.x;\r\n const centerY = this.chart.config.svg.center.y;\r\n const c3Radius = this.chart.config.radius.innermost; // C3\r\n \r\n // Only draw the innermost circle if secondary planets are enabled\r\n if (this.chart.config.planetSettings.secondaryEnabled !== false) {\r\n this.drawInnermostCircle(zodiacGroup, this.svgUtils, centerX, centerY, c3Radius);\r\n }\r\n \r\n // Note: Planet rendering is now fully handled by NocturnaWheel.js\r\n // using the PlanetRenderer.renderAllPlanetTypes method\r\n console.log('ChartRenderer: Innermost circle rendered (if enabled). Planet rendering is now handled by NocturnaWheel.');\r\n }\r\n \r\n /**\r\n * Draws the innermost circle\r\n * @param {SVGElement} zodiacGroup - SVG group for zodiac elements\r\n * @param {SvgUtils} svgUtils - SVG utilities\r\n * @param {number} centerX - X coordinate of center\r\n * @param {number} centerY - Y coordinate of center\r\n * @param {number} radius - Radius of circle\r\n */\r\n drawInnermostCircle(zodiacGroup, svgUtils, centerX, centerY, radius) {\r\n const innermostCircle = svgUtils.createSVGElement('circle', {\r\n cx: centerX,\r\n cy: centerY,\r\n r: radius,\r\n fill: \"transparent\", // Explicitly set transparent fill to avoid default black\r\n stroke: \"#999\", // Explicitly set stroke to ensure visibility\r\n \"stroke-width\": \"0.5\", // Explicitly set stroke width\r\n class: 'zodiac-element chart-innermost-circle'\r\n });\r\n zodiacGroup.appendChild(innermostCircle);\r\n }\r\n \r\n /**\r\n * @deprecated Planet rendering is now fully handled by NocturnaWheel\r\n */\r\n renderPlanets(centerX, centerY, dotRadius, iconRadius) {\r\n console.warn('ChartRenderer: renderPlanets is deprecated. Planet rendering is now handled by NocturnaWheel.');\r\n return [];\r\n }\r\n \r\n /**\r\n * @deprecated Use renderPlanets instead\r\n */\r\n drawPlanetsAndIcons(svgUtils, centerX, centerY, dotRadius, iconRadius) {\r\n console.warn('ChartRenderer: drawPlanetsAndIcons is deprecated, use renderPlanets instead');\r\n return this.renderPlanets(centerX, centerY, dotRadius, iconRadius);\r\n }\r\n \r\n /**\r\n * @deprecated \r\n */\r\n drawPlanetDot(svgUtils, planetGroup, x, y, name, color) {\r\n console.warn('ChartRenderer: drawPlanetDot is deprecated');\r\n // No implementation - method kept for backward compatibility\r\n }\r\n \r\n /**\r\n * @deprecated \r\n */\r\n drawPlanetIcon(svgUtils, planetGroup, x, y, name) {\r\n console.warn('ChartRenderer: drawPlanetIcon is deprecated');\r\n // No implementation - method kept for backward compatibility\r\n }\r\n \r\n /**\r\n * @deprecated \r\n */\r\n drawConnector(svgUtils, planetGroup, x1, y1, x2, y2, name, color) {\r\n console.warn('ChartRenderer: drawConnector is deprecated');\r\n // No implementation - method kept for backward compatibility\r\n }\r\n} ","/**\r\n * WheelChart.js\r\n * Component class for rendering astrological wheel chart with customizable circles\r\n */\r\nimport { NocturnaWheel } from '../NocturnaWheel';\r\nimport { ChartRenderer } from './ChartRenderer';\r\n\r\nexport class WheelChart {\r\n /**\r\n * Constructor\r\n * @param {Object} options - Configuration options\r\n * @param {string|Element} options.container - Container element or selector\r\n * @param {Object} options.planets - Primary planet positions data (outer circle)\r\n * @param {Object} options.secondaryPlanets - Secondary planet positions data (inner circle, optional)\r\n * @param {Array} options.houses - House cusps data (optional)\r\n * @param {Object} options.aspectSettings - Aspect calculation settings (optional, legacy)\r\n * @param {Object} options.primaryAspectSettings - Primary aspect settings (optional)\r\n * @param {Object} options.secondaryAspectSettings - Secondary aspect settings (optional)\r\n * @param {Object} options.synastryAspectSettings - Synastry aspect settings (optional)\r\n * @param {Object} options.config - Additional configuration (optional)\r\n * @param {Function} [chartFactory=null] - Factory function to create the chart instance\r\n * Function signature: (options) => ChartInstance\r\n */\r\n constructor(options, chartFactory = null) {\r\n if (!options || !options.container) {\r\n throw new Error(\"WheelChart: Container element or selector is required\");\r\n }\r\n\r\n this.options = options;\r\n \r\n // Initialize configuration\r\n const config = options.config || {};\r\n \r\n // Use the factory function if provided\r\n if (typeof chartFactory === 'function') {\r\n console.log(\"WheelChart: Using provided chart factory function\");\r\n this.chart = chartFactory(options);\r\n } else {\r\n // Fallback to the original behavior for backward compatibility\r\n console.log(\"WheelChart: Using default chart creation\");\r\n \r\n // Create a new NocturnaWheel instance directly using the imported class\r\n this.chart = new NocturnaWheel({\r\n ...options,\r\n config: config\r\n });\r\n }\r\n \r\n // Validate the created chart instance has required methods\r\n if (!this.chart || typeof this.chart.render !== 'function') {\r\n throw new Error(\"WheelChart: Invalid chart instance created. Missing required methods.\");\r\n }\r\n \r\n // Create the renderer\r\n this.renderer = new ChartRenderer(this, options);\r\n \r\n console.log(\"WheelChart: Initialized\");\r\n }\r\n \r\n /**\r\n * Renders the chart\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n render() {\r\n // First render the base chart\r\n this.chart.render();\r\n \r\n // Add the innermost circle after rendering the main chart\r\n // Wrap in setTimeout to ensure the chart rendering has completed\r\n setTimeout(() => {\r\n try {\r\n console.log(\"WheelChart: Rendering inner elements\");\r\n this.renderer.renderInnerElements();\r\n } catch (error) {\r\n console.error(\"WheelChart: Error rendering inner elements:\", error);\r\n }\r\n }, 0);\r\n \r\n console.log(\"WheelChart: Chart rendered with inner circle\");\r\n return this;\r\n }\r\n \r\n /**\r\n * Updates chart configuration\r\n * @param {Object} config - New configuration\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n update(config) {\r\n this.chart.update(config);\r\n \r\n // Redraw the innermost circle\r\n this.renderer.renderInnerElements();\r\n \r\n return this;\r\n }\r\n \r\n /**\r\n * Delegates method calls to the NocturnaWheel instance\r\n * @param {string} method - Method name\r\n * @param {Array} args - Method arguments\r\n * @returns {*} - Return value from the method\r\n */\r\n _delegateToChart(method, ...args) {\r\n if (typeof this.chart[method] === 'function') {\r\n return this.chart[method](...args);\r\n }\r\n throw new Error(`WheelChart: Method ${method} not found in NocturnaWheel`);\r\n }\r\n \r\n /**\r\n * Delegates method calls and redraws inner circle\r\n * @param {string} method - Method name\r\n * @param {Array} args - Method arguments\r\n * @returns {*} - Return value from the method\r\n * @private\r\n */\r\n _delegateAndRedraw(method, ...args) {\r\n const result = this._delegateToChart(method, ...args);\r\n this.renderer.renderInnerElements();\r\n return result;\r\n }\r\n \r\n // Delegate common methods to the NocturnaWheel instance\r\n togglePlanet(planetName, visible) {\r\n return this._delegateAndRedraw('togglePlanet', planetName, visible);\r\n }\r\n \r\n toggleHouses(visible) {\r\n return this._delegateAndRedraw('toggleHouses', visible);\r\n }\r\n \r\n toggleAspects(visible) {\r\n return this._delegateAndRedraw('toggleAspects', visible);\r\n }\r\n \r\n togglePrimaryAspects(visible) {\r\n return this._delegateAndRedraw('togglePrimaryAspects', visible);\r\n }\r\n \r\n toggleSecondaryAspects(visible) {\r\n return this._delegateAndRedraw('toggleSecondaryAspects', visible);\r\n }\r\n \r\n toggleSynastryAspects(visible) {\r\n return this._delegateAndRedraw('toggleSynastryAspects', visible);\r\n }\r\n \r\n /**\r\n * Toggles the visibility of primary planets (inner circle)\r\n * @param {boolean} visible - Visibility state\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n togglePrimaryPlanets(visible) {\r\n return this._delegateAndRedraw('togglePrimaryPlanets', visible);\r\n }\r\n \r\n /**\r\n * Toggles the visibility of secondary planets (innermost circle)\r\n * @param {boolean} visible - Visibility state\r\n * @returns {WheelChart} - Instance for chaining\r\n */\r\n toggleSecondaryPlanets(visible) {\r\n // First delegate to NocturnaWheel instance\r\n const result = this._delegateToChart('toggleSecondaryPlanets', visible);\r\n \r\n // Explicitly handle innermost circle visibility\r\n try {\r\n const container = typeof this.options.container === 'string' ?\r\n document.querySelector(this.options.container) :\r\n this.options.container;\r\n \r\n if (container) {\r\n const innermostCircle = container.querySelector('.chart-innermost-circle');\r\n if (innermostCircle) {\r\n console.log(`WheelChart: Setting innermost circle display to ${visible ? 'block' : 'none'}`);\r\n innermostCircle.style.display = visible ? 'block' : 'none';\r\n } else {\r\n console.log('WheelChart: No innermost circle found to toggle visibility');\r\n }\r\n }\r\n } catch (error) {\r\n console.error('WheelChart: Error toggling innermost circle visibility:', error);\r\n }\r\n \r\n // Also redraw inner elements to ensure everything is in sync\r\n this.renderer.renderInnerElements();\r\n \r\n return result;\r\n }\r\n \r\n setHouseRotation(angle) {\r\n return this._delegateAndRedraw('setHouseRotation', angle);\r\n }\r\n \r\n destroy() {\r\n return this._delegateToChart('destroy');\r\n }\r\n \r\n setHouseSystem(systemName) {\r\n return this._delegateAndRedraw('setHouseSystem', systemName);\r\n }\r\n \r\n // Add direct access to the chart's config for convenience\r\n get config() {\r\n return this.chart.config;\r\n }\r\n \r\n // Add direct access to updateData method\r\n updateData(data) {\r\n return this._delegateAndRedraw('updateData', data);\r\n }\r\n \r\n // Add direct access to getCurrentHouseSystem method\r\n getCurrentHouseSystem() {\r\n return this.chart.getCurrentHouseSystem();\r\n }\r\n} ","/**\n * Nocturna Wheel JS - Main Entry Point\n * \n * This file serves as the primary entry point for the Nocturna Wheel library.\n * It provides a clean public API with ES module exports.\n * \n * Factory Injection Pattern:\n * The WheelChart supports Factory Injection for better decoupling:\n * \n * ```javascript\n * // Example usage with factory injection\n * const chartFactory = (opts) => new CustomChart(opts);\n * const chart = new WheelChart(options, chartFactory);\n * ```\n * \n * See examples/factory-injection-example.js for more advanced usage patterns.\n */\n\n// Import core services\nimport { ServiceRegistry } from './services/ServiceRegistry.js';\nimport { IconProvider } from './services/IconProvider.js';\n\n// Import inline icon data (auto-generated during build)\nimport { IconData } from './data/IconData.js';\n\n// CRITICAL: Register IconProvider BEFORE initializing other services\n// This ensures renderers get the inline-capable provider, not a legacy stub\nconst iconProvider = new IconProvider({\n useInline: true,\n basePath: './assets/svg/zodiac/' // Fallback for external mode\n});\n\n// Initialize with inline data if available\nif (IconData && Object.keys(IconData.planets || {}).length > 0) {\n iconProvider.setInlineData(IconData);\n console.log('IconProvider: Initialized with inline icons -', \n 'Planets:', Object.keys(IconData.planets).length,\n 'Signs:', Object.keys(IconData.signs).length,\n 'Aspects:', Object.keys(IconData.aspects).length\n );\n} else {\n console.warn('IconProvider: IconData not loaded, will use external paths');\n}\n\n// Register IconProvider BEFORE initializing services\nServiceRegistry.register('iconProvider', iconProvider);\n\n// Now initialize other core services\nServiceRegistry.initializeServices();\n\n// Import main components for the public API\nimport { ChartManager, WheelChart } from './components/index.js';\nimport { ChartConfig } from './core/ChartConfig';\nimport { SvgUtils } from './utils/SvgUtils.js';\nimport { AstrologyUtils } from './utils/AstrologyUtils.js';\n\n// Library version\nconst VERSION = '0.2.0';\n\n// For backward compatibility (temporary)\nimport { NocturnaWheel } from './NocturnaWheel';\n\n// Clean exports for ES modules\nexport {\n ChartManager,\n NocturnaWheel, // For backward compatibility\n WheelChart,\n ChartConfig,\n VERSION,\n ServiceRegistry,\n SvgUtils,\n AstrologyUtils,\n IconProvider,\n IconData\n};\n\n/**\n * Main entry point for the Nocturna Wheel development environment\n * This file sets up the chart and handles hot module replacement for Vite\n */\n\n// Sample chart data - for development and testing\nconst chartData = {\n planets: {\n sun: { lon: 0, lat: 0, color: '#F9A825' },\n moon: { lon: 45, lat: 0, color: '#CFD8DC' },\n mercury: { lon: 15, lat: 0, color: '#7E57C2' },\n venus: { lon: 30, lat: 0, color: '#26A69A' },\n mars: { lon: 60, lat: 0, color: '#EF5350' },\n jupiter: { lon: 90, lat: 0, color: '#5C6BC0' },\n saturn: { lon: 120, lat: 0, color: '#455A64' },\n uranus: { lon: 150, lat: 0, color: '#42A5F5' },\n neptune: { lon: 180, lat: 0, color: '#29B6F6' },\n pluto: { lon: 210, lat: 0, color: '#8D6E63' }\n },\n houses: [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330],\n config: {\n zodiacSettings: {\n enabled: true\n },\n houseSettings: {\n enabled: true,\n rotationAngle: 0\n },\n planetSettings: {\n enabled: true\n },\n aspectSettings: {\n enabled: true\n }\n }\n};\n\n// Chart instance\nlet chart;\n\n/**\n * Initialize the chart\n */\nfunction initChart() {\n // Get the container element\n const container = document.getElementById('chart-container');\n \n // Configuration for the chart\n const options = {\n container: container,\n planets: chartData.planets,\n houses: chartData.houses,\n config: chartData.config\n };\n \n // Initialize the chart with the new ChartManager\n chart = new ChartManager(options);\n \n // Render the chart\n chart.render();\n \n // Setup event listeners for controls\n setupEventListeners();\n}\n\n/**\n * Setup event listeners for various controls\n */\nfunction setupEventListeners() {\n // Example: House system selector\n const houseSystemSelect = document.getElementById('house-system');\n if (houseSystemSelect) {\n houseSystemSelect.addEventListener('change', (e) => {\n chart.setHouseSystem(e.target.value);\n });\n }\n \n // Initialize secondary planets toggle to match current state (enabled)\n const secondaryPlanetsToggle = document.getElementById('toggle-secondary-planets');\n if (secondaryPlanetsToggle) {\n secondaryPlanetsToggle.checked = true;\n }\n \n // Add more event listeners for other controls as needed\n}\n\n/**\n * Clean up resources when the module is replaced (for Vite HMR)\n */\nfunction cleanup() {\n if (chart) {\n chart.destroy();\n chart = null;\n }\n}\n\n// Auto-initialization is DISABLED in production builds to prevent conflicts.\n// This demo code should only run in development mode with Vite dev server.\n// In production, users explicitly create their own chart instances.\n\n// Handle hot module replacement for Vite (development only)\nif (import.meta.hot) {\n // Initialize the chart when the DOM is ready (ONLY in development)\n document.addEventListener('DOMContentLoaded', () => {\n const container = document.getElementById('chart-container');\n if (container && container.children.length === 0) {\n console.log('DEV MODE: Auto-initializing demo chart');\n initChart();\n }\n });\n\n import.meta.hot.accept((newModule) => {\n console.log('HMR update for main.js');\n cleanup();\n initChart();\n });\n \n // Cleanup when disposing\n import.meta.hot.dispose(() => {\n console.log('HMR dispose for main.js');\n cleanup();\n });\n}\n\n// Default export for easier imports\nexport default {\n ChartManager,\n NocturnaWheel, // For backward compatibility\n WheelChart,\n ChartConfig,\n ServiceRegistry,\n SvgUtils,\n AstrologyUtils,\n IconProvider,\n IconData\n}; "],"names":[],"mappings":"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"}
|