chart2txt 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chart2txt.min.js +1 -1
- package/dist/core/analysis.js +30 -17
- package/dist/core/aspectPatterns.js +1 -1
- package/dist/formatters/text/sections/angles.js +3 -2
- package/dist/formatters/text/sections/aspectPatterns.js +2 -2
- package/dist/formatters/text/sections/houses.js +5 -5
- package/dist/formatters/text/sections/metadata.js +5 -3
- package/dist/formatters/text/sections/planets.js +2 -1
- package/dist/formatters/text/textFormatter.js +2 -3
- package/dist/utils/formatting.d.ts +10 -0
- package/dist/utils/formatting.js +32 -7
- package/package.json +1 -1
package/dist/chart2txt.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.chart2txt=t():e.chart2txt=t()}(this,(()=>(()=>{"use strict";var e={6:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.analyzeCharts=function e(t,n={}){const f=(0,o.validateInputData)(t);if(f)throw new Error(`Invalid chart data: ${f}`);const C=new s.ChartSettings(n),E=(0,a.isMultiChartData)(t)?t:[t],O=function(e,t){if(void 0!==t.houseSystemName)return t.houseSystemName;const n=e.map((e=>e.houseSystemName?.trim())).filter((e=>Boolean(e)));if(0===n.length)return;const a=[...new Set(n)];if(1===a.length)return a[0];return`mixed (${a.join(", ")})`}(E,n);void 0!==O&&(C.houseSystemName=O);if("composite"===C.outputMode){const t=E.filter((e=>"transit"!==e.chartType));if(E.filter((e=>"transit"===e.chartType)).length>0)throw new Error("Composite output mode does not support transit charts");if(2!==t.length)throw new Error(`Composite output mode requires exactly 2 non-transit charts, got ${t.length}`);const a=function(e,t,n){const a=new Map(t.planets.map((e=>[e.name,e]))),s=e.planets.filter((e=>a.has(e.name))).map((e=>{const t=a.get(e.name);return{name:e.name,degree:d([e.degree,t.degree]),speed:g(e.speed,t.speed)}})),o=void 0!==e.ascendant&&void 0!==t.ascendant?d([e.ascendant,t.ascendant]):void 0,r=void 0!==e.midheaven&&void 0!==t.midheaven?d([e.midheaven,t.midheaven]):void 0,i=e.houseCusps&&t.houseCusps?e.houseCusps.map(((e,n)=>d([e,t.houseCusps[n]]))):void 0;return{name:`${e.name}-${t.name}`,planets:s,ascendant:o,midheaven:r,houseCusps:i,houseSystemName:n,chartType:"composite",compositeSource:{chartNames:[e.name,t.name],method:"midpoint"}}}(t[0],t[1],C.houseSystemName);return e(a,{...n,outputMode:"standard"})}const v=E.filter((e=>"transit"!==e.chartType)),b=E.find((e=>"transit"===e.chartType)),M=[...v,...b?[b]:[]],P=[],N=S(M,!0);for(const e of M){const t=S([e]),n=(0,r.calculateAspects)(C.resolvedAspectDefinitions,t,C.skipOutOfSignAspects);P.push(...n)}for(let e=0;e<M.length;e++)for(let t=e+1;t<M.length;t++){const n=M[t],a=[...S([M[e]]),...S([n])],s=(0,r.calculateMultichartAspects)(C.resolvedAspectDefinitions,a,C.skipOutOfSignAspects);P.push(...s)}const _=C.includeAspectPatterns?(0,i.detectAspectPatterns)(N,P):[],D=[],I=[],j=[];let G,R;for(const e of M){const t=P.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===e.name)),n=T(_,1,1).filter((t=>y(t,e.name))),a=C.includeAspectPatterns?(0,c.detectStelliums)(m(e),e.houseCusps):[];D.push({chart:e,placements:{planets:(0,u.getPlanetPositions)(e.planets,e.houseCusps)},aspects:t,patterns:n,stelliums:a,signDistributions:C.includeSignDistributions?(0,l.calculateSignDistributions)(e.planets,e.ascendant):{elements:{},modalities:{},polarities:{}},dispositors:"transit"!==e.chartType?(0,p.calculateDispositors)(e.planets,C.includeDispositors):{}})}if(v.length>=2)for(let e=0;e<v.length;e++)for(let t=e+1;t<v.length;t++){const n=v[e],a=v[t],s=P.filter((e=>e.p1ChartName===n.name&&e.p2ChartName===a.name||e.p1ChartName===a.name&&e.p2ChartName===n.name)),o=T(_,2,2).filter((e=>y(e,n.name)&&y(e,a.name)));I.push({chart1:n,chart2:a,synastryAspects:s,compositePatterns:o,houseOverlays:C.includeHouseOverlays?(0,h.calculateHouseOverlays)(n,a):{chart1InChart2Houses:{},chart2InChart1Houses:{}}})}if(v.length>2){const e=T(_,3).filter((e=>!A(e).has(b?.name||"TRANSIT_PLACEHOLDER")));e.length>0&&(G={charts:v,patterns:e})}if(b){for(const e of v){const t=P.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===b.name||t.p1ChartName===b.name&&t.p2ChartName===e.name)),n=T(_,2,2).filter((t=>y(t,e.name)&&y(t,b.name)));j.push({natalChart:e,transitChart:b,aspects:t,patterns:n})}if(v.length>0){const e=(x=_,L=[b.name],x.filter((e=>L.some((t=>y(e,t)))))).filter((e=>$(e)>=3));e.length>0&&(R={charts:M,patterns:e})}}var x,L;return{settings:C,chartAnalyses:D,pairwiseAnalyses:I,globalAnalysis:G,transitAnalyses:j,globalTransitAnalysis:R}};const a=n(613),s=n(230),o=n(371),r=n(75),i=n(919),c=n(390),u=n(175),l=n(858),p=n(729),h=n(600);function f(e){return(e%360+360)%360}function d(e){if(0===e.length)throw new Error("Cannot compute circular mean of empty degree list");const t=e.map((e=>f(e)*Math.PI/180)),n=t.reduce(((e,t)=>e+Math.cos(t)),0),a=t.reduce(((e,t)=>e+Math.sin(t)),0);return f(180*Math.atan2(a,n)/Math.PI)}function g(e,t){if(void 0!==e&&void 0!==t)return(e+t)/2}function m(e){const t=["Ascendant","Midheaven","North Node","South Node"];return e.planets.filter((e=>!t.includes(e.name)))}function S(e,t=!1){return e.flatMap((e=>(t?m(e):function(e){const t=[...e.planets];return void 0!==e.ascendant&&t.push({name:"Ascendant",degree:e.ascendant}),void 0!==e.midheaven&&t.push({name:"Midheaven",degree:e.midheaven}),t}(e)).map((t=>[t,e.name]))))}function A(e){const t=new Set,n=[],a=e=>{e&&n.push(e)};switch(e.type){case"T-Square":a(e.apex),e.opposition.forEach(a);break;case"Grand Trine":case"Grand Cross":e.planets.forEach(a);break;case"Yod":a(e.apex),e.base.forEach(a);break;case"Mystic Rectangle":e.oppositions.flat().forEach(a);break;case"Kite":e.grandTrine.forEach(a),a(e.opposition)}return n.forEach((e=>{e.chartName&&t.add(e.chartName)})),t}function $(e){return A(e).size}function y(e,t){return A(e).has(t)}function T(e,t,n=1/0){return e.filter((e=>{const a=$(e);return a>=t&&a<=n}))}},75:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateAspects=function(e,t,n=!0){const a=[];if(!t||t.length<2)return a;for(let s=0;s<t.length;s++)for(let o=s+1;o<t.length;o++){const[r,c]=t[s],[u,l]=t[o],p=i(e,r,u,n,c,l);p&&a.push(p)}return a},t.calculateMultichartAspects=function(e,t,n=!0){const a=[];for(let s=0;s<t.length;s++)for(let o=s+1;o<t.length;o++){const[r,c]=t[s],[u,l]=t[o];if(c!==l){const t=i(e,r,u,n,c,l);t&&a.push(t)}}return a};const a=n(904),s=n(318);function o(e){const t=e<=180?e:360-e;switch(t){case 0:return 0;case 30:return 1;case 60:return 2;case 90:return 3;case 120:return 4;case 150:return 5;case 180:return 6;default:return Math.round(t/30)}}function r(e,t,n){if(void 0===e.speed||void 0===t.speed)return"exact";const o=e.speed,r=t.speed,i=(0,a.normalizeDegree)(e.degree),c=(0,a.normalizeDegree)(t.degree);let u=Math.abs(i-c);u>180&&(u=360-u);const l=Math.abs(u-n);if((0,s.isExactAspect)(l))return"exact";if(0===o-r)return"exact";const p=(0,a.normalizeDegree)(i+.1*o),h=(0,a.normalizeDegree)(c+.1*r),f=Math.abs(u-n);let d=Math.abs(p-h);d>180&&(d=360-d);return Math.abs(d-n)<f?"applying":"separating"}function i(e,t,n,i,c,u){const l=(0,s.roundDegrees)((0,a.normalizeDegree)(t.degree)),p=(0,s.roundDegrees)((0,a.normalizeDegree)(n.degree));let h=Math.abs(l-p);h>180&&(h=360-h);let f=null;for(const a of e){const e=(0,s.roundDegrees)(Math.abs(h-a.angle));if(i){const e=Math.floor(l/30),t=Math.floor(p/30),n=o(a.angle);let s=Math.abs(e-t);if(s>6&&(s=12-s),s!==n)continue}if(e<=a.orb&&(!f||e<f.orb)){const s=r(t,n,a.angle);f={planetA:t.name,planetB:n.name,p1ChartName:c,p2ChartName:u,aspectType:a.name,orb:e,application:s}}}return f}},82:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateDispositorsOutput=function(e){if(e.summary)return[`[DISPOSITORS] ${e.summary}`];const t=["[DISPOSITOR TREE]"];if(0===Object.keys(e).length)return t.push("No dispositor data available."),t;for(const n in e)t.push(e[n]);return t}},109:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateElementDistributionOutput=function(e){const t=["[ELEMENT DISTRIBUTION]"];return t.push(...(0,a.formatElementDistribution)(e)),t},t.generateModalityDistributionOutput=function(e){const t=["[MODALITY DISTRIBUTION]"];return t.push(...(0,a.formatModalityDistribution)(e)),t},t.generatePolarityOutput=function(e){const t=["[POLARITY]"];return t.push(...(0,a.formatPolarityDistribution)(e)),t};const a=n(858)},156:function(e,t,n){var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,s)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),s=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=t.ZODIAC_SIGNS=t.DEFAULT_ASPECTS=t.DEFAULT_SETTINGS=t.analyzePartnership=t.buildChart=t.humandesignPartnership2txt=t.humandesign2txt=t.formatReportToText=t.groupAspects=t.analyzeCharts=t.chart2txt=void 0;var o=n(666);Object.defineProperty(t,"chart2txt",{enumerable:!0,get:function(){return o.chart2txt}});var r=n(6);Object.defineProperty(t,"analyzeCharts",{enumerable:!0,get:function(){return r.analyzeCharts}});var i=n(865);Object.defineProperty(t,"groupAspects",{enumerable:!0,get:function(){return i.groupAspects}});var c=n(723);Object.defineProperty(t,"formatReportToText",{enumerable:!0,get:function(){return c.formatReportToText}});var u=n(785);Object.defineProperty(t,"humandesign2txt",{enumerable:!0,get:function(){return u.humandesign2txt}}),Object.defineProperty(t,"humandesignPartnership2txt",{enumerable:!0,get:function(){return u.humandesignPartnership2txt}}),Object.defineProperty(t,"buildChart",{enumerable:!0,get:function(){return u.buildChart}}),Object.defineProperty(t,"analyzePartnership",{enumerable:!0,get:function(){return u.analyzePartnership}}),s(n(613),t);var l=n(921);Object.defineProperty(t,"DEFAULT_SETTINGS",{enumerable:!0,get:function(){return l.DEFAULT_SETTINGS}}),Object.defineProperty(t,"DEFAULT_ASPECTS",{enumerable:!0,get:function(){return l.DEFAULT_ASPECTS}}),Object.defineProperty(t,"ZODIAC_SIGNS",{enumerable:!0,get:function(){return l.ZODIAC_SIGNS}});var p=n(230);Object.defineProperty(t,"ChartSettings",{enumerable:!0,get:function(){return p.ChartSettings}});const h=n(666);t.default=h.chart2txt},172:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateChartHeaderOutput=function(e,t="CHART"){return[`[${t}: ${e||"Unknown"}]`]}},175:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getOrdinal=function(e){const t=["th","st","nd","rd"],n=e%100;return e+(t[(n-20)%10]||t[n]||t[0])},t.getSign=s,t.getHouse=o,t.getPlanetPositions=function(e,t){return e.map((e=>{const n=(e.degree%360+360)%360;const a={name:e.name,degree:n,sign:s(n),speed:e.speed};return t&&(a.house=o(n,t)),a}))};const a=n(921);function s(e){const t=Math.floor(e/30);return a.ZODIAC_SIGNS[t]}function o(e,t){for(let n=0;n<12;n++){const a=t[n],s=t[(n+1)%12];if(a<s){if(e>=a&&e<s)return n+1}else if(e>=a||e<s)return n+1}return-1}},230:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=void 0;const a=n(921);t.ChartSettings=class{constructor(e={}){const t={...a.DEFAULT_SETTINGS,...e};Object.assign(this,t)}get resolvedAspectDefinitions(){if(Array.isArray(this.aspectDefinitions))return this.aspectDefinitions;switch(this.aspectDefinitions){case"traditional":return a.SIMPLE_TRADITIONAL_ORBS;case"modern":return a.SIMPLE_MODERN_ORBS;case"tight":return a.SIMPLE_TIGHT_ORBS;case"wide":return a.SIMPLE_WIDE_ORBS;default:return a.DEFAULT_SETTINGS.aspectDefinitions}}}},234:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePlanetsOutput=function(e){const t=["[PLANETS]"];e.forEach((e=>{const n=(0,s.formatPlanetWithDignities)(e),o=e.speed&&e.speed<0?" Retrograde":"";let r=`${e.name}: ${Math.floor(e.degree%30)}° ${e.sign}${o} ${n}`;e.house&&(r+=`, ${(0,a.getOrdinal)(e.house)} house`),t.push(r.replace(/\s+/g," ").trim())})),0===e.length&&t.push("No planets listed.");return t};const a=n(175),s=n(400)},318:(e,t)=>{function n(e,n,a=t.DEFAULT_EPSILON){return Math.abs(e-n)<a}function a(e,n=t.DEFAULT_EPSILON){return Math.abs(e)<n}function s(e,a,s=t.DEFAULT_EPSILON){return n(e,a,s)}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_EPSILON=void 0,t.floatEquals=n,t.isNearZero=a,t.roundDegrees=function(e){return Math.round(1e4*e)/1e4},t.degreeEquals=s,t.isOnCusp=function(e,t,n=.001){return s(e,t,n)},t.isExactAspect=function(e,t=.1){return a(e,t)},t.DEFAULT_EPSILON=1e-4},371:(e,t)=>{function n(e){return e&&"object"==typeof e?"string"!=typeof e.name||""===e.name.trim()?"Point name must be a non-empty string":"number"==typeof e.degree&&isFinite(e.degree)?void 0===e.speed||"number"==typeof e.speed&&isFinite(e.speed)?null:`Point ${e.name} has invalid speed value: ${e.speed}`:`Point ${e.name} has invalid degree value: ${e.degree}`:"Point must be an object"}function a(e){if(!Array.isArray(e))return"Points must be an array";for(let t=0;t<e.length;t++){const a=n(e[t]);if(a)return`Point at index ${t}: ${a}`}const t=e.map((e=>e.name)),a=t.filter(((e,n)=>t.indexOf(e)!==n));return a.length>0?`Duplicate point names found: ${a.join(", ")}`:null}function s(e){if(void 0===e)return null;if(!Array.isArray(e))return"House cusps must be an array";if(12!==e.length)return`House cusps must contain exactly 12 values, got ${e.length}`;for(let t=0;t<e.length;t++)if("number"!=typeof e[t]||!isFinite(e[t]))return`House cusp ${t+1} has invalid value: ${e[t]}`;return null}function o(e){if(!e||"object"!=typeof e)return"Chart data must be an object";if("string"!=typeof e.name||""===e.name.trim())return"Chart name must be a non-empty string";const t=a(e.planets);if(t)return`Planets validation failed: ${t}`;if(void 0!==e.ascendant&&("number"!=typeof e.ascendant||!isFinite(e.ascendant)))return`Ascendant has invalid value: ${e.ascendant}`;if(void 0!==e.midheaven&&("number"!=typeof e.midheaven||!isFinite(e.midheaven)))return`Midheaven has invalid value: ${e.midheaven}`;const n=s(e.houseCusps);if(n)return`House cusps validation failed: ${n}`;if(void 0!==e.points){const t=a(e.points);if(t)return`Additional points validation failed: ${t}`}if(void 0!==e.timestamp&&(!(e.timestamp instanceof Date)||isNaN(e.timestamp.getTime())))return"Timestamp must be a valid Date object";if(void 0!==e.location&&"string"!=typeof e.location)return"Location must be a string";if(void 0!==e.chartType){const t=["natal","event","transit","composite"];if(!t.includes(e.chartType))return`Chart type must be one of: ${t.join(", ")}`}return null}function r(e){if(!Array.isArray(e))return"Multi-chart data must be an array";if(0===e.length)return"Multi-chart data must contain at least one chart";if(e.length>10)return"Multi-chart data cannot contain more than 10 charts";for(let t=0;t<e.length;t++){const n=o(e[t]);if(n)return`Chart at index ${t} (${e[t]?.name||"unnamed"}): ${n}`}const t=e.map((e=>e.name)),n=t.filter(((e,n)=>t.indexOf(e)!==n));if(n.length>0)return`Duplicate chart names found: ${n.join(", ")}`;return e.filter((e=>"transit"===e.chartType)).length>1?"Cannot have more than one transit chart":null}Object.defineProperty(t,"__esModule",{value:!0}),t.validatePoint=n,t.validatePoints=a,t.validateHouseCusps=s,t.validateChartData=o,t.validateMultiChartData=r,t.validateInputData=function(e){if(!e)return"Data is required";return Array.isArray(e)?r(e):o(e)}},388:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.determineChartType=function(e){if(1===e.length&&"composite"===e[0].chartType)return"composite";let t="natal",n="";const a=e.filter((({chartType:e})=>"transit"!==e&&"event"!==e)),s=e.filter((({chartType:e})=>"event"===e)),o=e.filter((({chartType:e})=>"transit"===e));if(o.length>1)throw new Error("Must provide at most one transit chart");const r=o.length>0;a.length>0?0===s.length?r&&(n="_with_transit"):n=1===s.length?r?"_with_event_and_transit":"_with_event":r?"_with_events_and_transit":"_with_events":r&&(n="_with_transit");if(0===a.length){if(0===s.length)throw new Error("Must provide at least one non-transit chart");t=1===s.length?"event":"multi_event"}else t=1===a.length?"natal":2===a.length?"synastry":"group_synastry";return t+n},t.generateMetadataOutput=function(e,t,n,a){const s=["[METADATA]",`chart_type: ${t}`];n&&s.push(`house_system: ${n}`);a&&(s.push(`composite_method: ${a.method}`),s.push(`source_charts: ${a.chartNames.join(", ")}`));return s.push(`date_format: ${e.dateFormat}`),s}},390:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectStelliums=function(e,t,n=3){const o=[],i=new Map;if(e.forEach((e=>{const t=(0,a.getDegreeSign)(e.degree);i.has(t)||i.set(t,[]),i.get(t).push(e)})),i.forEach(((e,a)=>{if(e.length>=n){const n=e.map((e=>r(e,t))),s=n.map((e=>e.house)).filter((e=>void 0!==e)),i=e.map((e=>e.degree)),c=Math.max(...i)-Math.min(...i);o.push({type:"Stellium",planets:n,sign:a,houses:[...new Set(s)].sort(),span:c})}})),t){const a=new Map;e.forEach((e=>{const n=(0,s.getHouseForPoint)(e.degree,t);n&&(a.has(n)||a.set(n,[]),a.get(n).push(e))})),a.forEach(((e,a)=>{if(e.length>=n){const n=e.map((e=>r(e,t))),s=e.map((e=>e.degree)),i=Math.max(...s)-Math.min(...s);o.find((e=>"Stellium"===e.type&&e.planets.some((e=>n.some((t=>t.name===e.name))))))||o.push({type:"Stellium",planets:n,houses:[a],span:i})}}))}return o},t.formatStellium=function(e){const t=e.planets.map((e=>e.name)).join(", ");let n="";e.sign&&(n=e.sign);if(e.houses&&e.houses.length>0){const t=1===e.houses.length?`${(0,o.getOrdinal)(e.houses[0])} House`:e.houses.map((e=>`${(0,o.getOrdinal)(e)} House`)).join("-");n+=n?` (${t})`:t}const a=n?` in ${n}`:"";return[`Stellium (${e.span.toFixed(1)}°): ${t}${a}`]};const a=n(904),s=n(600),o=n(175);function r(e,t){const n=(0,a.getDegreeSign)(e.degree),o=t&&(0,s.getHouseForPoint)(e.degree,t)||void 0;return{name:e.name,degree:e.degree,sign:n,house:o}}},400:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatPlanetWithDignities=function(e){const t=e.sign,n=s[e.name],o=a.ZODIAC_SIGN_DATA.find((e=>e.name===t))?.ruler,r=[];n&&n[t]&&r.push(...n[t]);let i=r.join(", ");o&&e.name!==o&&(i?i+=` | Ruler: ${o}`:i=`Ruler: ${o}`);if(i)return`[${i}]`;return""};const a=n(921),s={Sun:{Leo:["Domicile"],Aries:["Exaltation"],Aquarius:["Detriment"],Libra:["Fall"]},Moon:{Cancer:["Domicile"],Taurus:["Exaltation"],Capricorn:["Detriment"],Scorpio:["Fall"]},Mercury:{Gemini:["Domicile"],Virgo:["Domicile","Exaltation"],Pisces:["Detriment","Fall"],Sagittarius:["Detriment"]},Venus:{Taurus:["Domicile"],Libra:["Domicile"],Scorpio:["Detriment"],Aries:["Fall"],Virgo:["Fall"]},Mars:{Aries:["Domicile"],Scorpio:["Domicile"],Libra:["Detriment"],Cancer:["Fall"]},Jupiter:{Sagittarius:["Domicile"],Pisces:["Domicile"],Gemini:["Detriment"],Virgo:["Fall"]},Saturn:{Capricorn:["Domicile"],Aquarius:["Domicile"],Cancer:["Detriment"],Leo:["Fall"]}}},600:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateHouseOverlays=function(e,t){const n={};if(t.houseCusps)for(const s of e.planets)n[s.name]=(0,a.getHouse)(s.degree,t.houseCusps);const s={};if(e.houseCusps)for(const n of t.planets)s[n.name]=(0,a.getHouse)(n.degree,e.houseCusps);return{chart1InChart2Houses:n,chart2InChart1Houses:s}},t.getHouseForPoint=function(e,t){return(0,a.getHouse)(e,t)};const a=n(175)},613:(e,t)=>{var n,a;Object.defineProperty(t,"__esModule",{value:!0}),t.PlanetCategory=t.AspectClassification=void 0,t.isMultiChartData=function(e){return Array.isArray(e)},function(e){e.Major="major",e.Minor="minor",e.Esoteric="esoteric"}(n||(t.AspectClassification=n={})),function(e){e.Luminaries="luminaries",e.Personal="personal",e.Social="social",e.Outer="outer",e.Angles="angles"}(a||(t.PlanetCategory=a={}))},666:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.chart2txt=function(e,t={}){const n=(0,a.analyzeCharts)(e,t),r=n.settings;return n.chartAnalyses.forEach((e=>{e.groupedAspects=(0,s.groupAspects)(e.aspects,r)})),n.pairwiseAnalyses.forEach((e=>{e.groupedSynastryAspects=(0,s.groupAspects)(e.synastryAspects,r)})),n.transitAnalyses.forEach((e=>{e.groupedAspects=(0,s.groupAspects)(e.aspects,r)})),(0,o.formatReportToText)(n)};const a=n(6),s=n(865),o=n(723)},668:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHousesOutput=function(e){const t=["[HOUSE CUSPS]"];if(!e||12!==e.length)return t.push("House cusps not available"),t;for(let n=0;n<6;n++){const o=n,r=n+6,i=e[o],c=e[r],u=(0,a.getDegreeSign)(i),l=Math.floor((0,a.getDegreeInSign)(i)),p=(0,s.getOrdinal)(o+1)+" house",h=(0,a.getDegreeSign)(c),f=Math.floor((0,a.getDegreeInSign)(c)),d=(0,s.getOrdinal)(r+1)+" house",g=`${p}: ${l}° ${u}`.padEnd(24),m=`${d}: ${f}° ${h}`;t.push(`${g} ${m}`)}return t};const a=n(904),s=n(175)},723:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatReportToText=function(e){const{chartAnalyses:t,pairwiseAnalyses:n,globalAnalysis:r,transitAnalyses:i,globalTransitAnalysis:u}=e,h=e.settings,f=[],d=t.map((e=>e.chart)),A=(0,a.determineChartType)(d),$=1===d.length&&"composite"===d[0].chartType?d[0].compositeSource:void 0;f.push(...(0,a.generateMetadataOutput)(h,A,h.houseSystemName,$)),f.push("");const y=t.filter((e=>"transit"!==e.chart.chartType));for(const e of y){const t="composite"===e.chart.chartType?"COMPOSITE":void 0;f.push(...g(e,h,t))}for(const e of n)f.push(...m(e,h));r&&f.push(...S(r,!1));if(i.length>0){const e=t.find((e=>"transit"===e.chart.chartType));e&&(f.push(...(0,s.generateChartHeaderOutput)(e.chart.name,"TRANSIT")),f.push(...(0,o.generateBirthdataOutput)(e.chart.location,e.chart.timestamp,h,"[DATETIME]")),f.push(...(0,c.generatePlanetsOutput)(e.placements.planets)),f.push(""));for(const e of i)f.push(...(0,l.generateAspectsOutput)(`[TRANSIT ASPECTS: ${e.natalChart.name}]`,e.groupedAspects,e.natalChart.name,e.transitChart.name,!0)),h.includeAspectPatterns&&f.push(...(0,p.generateAspectPatternsOutput)(e.patterns,`Transit to ${e.natalChart.name}`,!0)),f.push("")}u&&f.push(...S(u,!0));return f.join("\n").trimEnd()};const a=n(388),s=n(172),o=n(888),r=n(945),i=n(668),c=n(234),u=n(82),l=n(784),p=n(762),h=n(756),f=n(109),d=n(390),g=(e,t,n)=>{const a=[],{chart:h,groupedAspects:g,patterns:m,stelliums:S,signDistributions:A,dispositors:$,placements:y}=e;return a.push(...(0,s.generateChartHeaderOutput)(h.name,n)),a.push(...(0,o.generateBirthdataOutput)(h.location,h.timestamp,t)),a.push(...(0,r.generateAnglesOutput)(h.ascendant,h.midheaven)),a.push(...(0,i.generateHousesOutput)(h.houseCusps)),a.push(...(0,c.generatePlanetsOutput)(y.planets)),t.includeDispositors&&a.push(...(0,u.generateDispositorsOutput)($)),t.includeSignDistributions&&(a.push(...(0,f.generateElementDistributionOutput)(A.elements)),a.push(...(0,f.generateModalityDistributionOutput)(A.modalities)),a.push(...(0,f.generatePolarityOutput)(A.polarities))),a.push(...(0,l.generateAspectsOutput)("[ASPECTS]",g)),t.includeAspectPatterns&&(a.push(...(0,p.generateAspectPatternsOutput)(m,void 0,!1)),S.length>0?S.forEach((e=>{a.push(...(0,d.formatStellium)(e))})):a.push("No Stelliums detected.")),a.push(""),a},m=(e,t)=>{const n=[],{chart1:a,chart2:o,groupedSynastryAspects:r,compositePatterns:i,houseOverlays:c}=e,u="event"===a.chartType&&"event"===o.chartType?"EVENT_RELATIONSHIP":"event"===a.chartType||"event"===o.chartType?"NATAL_EVENT":"SYNASTRY";return n.push(...(0,s.generateChartHeaderOutput)(`${a.name}-${o.name}`,u)),n.push(...(0,l.generateAspectsOutput)("[PLANET-PLANET ASPECTS]",r,a.name,o.name)),t.includeAspectPatterns&&i.length>0&&n.push(...(0,p.generateAspectPatternsOutput)(i,`${a.name}-${o.name} Composite`,!0)),n.push(""),t.includeHouseOverlays&&(n.push(...(0,h.generateHouseOverlaysOutput)(c,a.name,o.name)),n.push("")),n},S=(e,t=!1)=>{const n=[],{charts:a,patterns:s}=e;if(s.length>0){const e=a.map((e=>e.name)).join("-");let o=`${e} Global Composite`;t&&(o=`${e} Global Transit Composite`),n.push(...(0,p.generateAspectPatternsOutput)(s,o,!0)),n.push("")}return n}},729:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateDispositors=function(e,t=!0){if(!1===t)return{};const n={};e.forEach((e=>{n[e.name]=function(e){const t=(0,s.getSign)(e.degree),n=a.ZODIAC_SIGN_DATA.find((e=>e.name===t));return n?n.ruler:"Unknown"}(e)}));const o={};if(e.forEach((e=>{o[e.name]||function(e,t,n){if(n[e])return n[e];const a=[e];let s=e;for(;;){const o=t[s];if(!o||!t.hasOwnProperty(o)){const t={path:[...a,o],isCycle:!1,isFinal:!1,isBroken:!0};return n[e]=t}if(o===s){const t={path:a,isCycle:!1,isFinal:!0,isBroken:!1};return n[e]=t}if(a.includes(o)){const e=a.indexOf(o),t=a.slice(e),s={path:[...a,o],isCycle:!0,isFinal:!1,isBroken:!1};return t.forEach((e=>{n[e]=s})),s}if(n[o]){const t=n[o],s=[...a,...t.path],r={...t,path:s};return n[e]=r}a.push(o),s=o}}(e.name,n,o)})),"finals"===t){const t=new Set,a=new Map;e.forEach((e=>{n[e.name]===e.name&&t.add(e.name)}));for(const e in o){const t=o[e];if(t.isCycle){const e=t.path[t.path.length-1],n=t.path.indexOf(e),s=t.path.slice(n,-1),o=[...new Set(s)].sort().join("|");a.has(o)||a.set(o,s)}}const s=[];if(t.size>0&&s.push(`Final dispositors: ${[...t].sort().join(", ")}`),a.size>0){const e=[...a.values()].map((e=>{const t=[...new Set(e)].sort()[0],n=e.indexOf(t);return[...[...e.slice(n),...e.slice(0,n)],t].join(" → ")})).sort();s.push(`Cycles: ${e.join(", ")}`)}return 0===s.length?{summary:"No final dispositors or cycles found"}:{summary:s.join("; ")}}const r={};return e.forEach((e=>{const t=e.name,a=[t];let s=t;for(;;){const e=n[s];if(!e||!n.hasOwnProperty(e)){r[t]=`${a.join(" → ")} → ${e} (not in chart)`;break}if(e===s){r[t]=`${a.join(" → ")} → (final)`;break}if(a.includes(e)){r[t]=`${a.join(" → ")} → ${e} (cycle)`;break}a.push(e),s=e}})),r};const a=n(921),s=n(175)},756:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHouseOverlaysOutput=function(e,t,n){const a=["[HOUSE OVERLAYS]"];a.push(`${t}'s planets in ${n}'s houses:`),Object.keys(e.chart1InChart2Houses).length>0?a.push(s(e.chart1InChart2Houses)):a.push(`(${n} house cusps not available)`);a.push(`${n}'s planets in ${t}'s houses:`),Object.keys(e.chart2InChart1Houses).length>0?a.push(s(e.chart2InChart1Houses)):a.push(`(${t} house cusps not available)`);return a};const a=n(175);function s(e){const t={};for(const n in e){const a=e[n];t[a]||(t[a]=[]),t[a].push(n)}return Object.keys(t).map(Number).sort(((e,t)=>e-t)).map((e=>{const n=t[e].join(", ");return`${(0,a.getOrdinal)(e)}: ${n}`})).join(" | ")}},762:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectPatternsOutput=function(e,t,n=!0){const a=[t?`[ASPECT PATTERNS: ${t}]`:"[ASPECT PATTERNS]"];if(0===e.length)return a.push("No T-Squares detected."),a.push("No Grand Trines detected."),a;const s=e.filter((t=>"Grand Trine"!==t.type||!function(e,t){return"Grand Trine"===e.type&&t.some((t=>{if("Kite"!==t.type)return!1;const n=e=>`${e.chartName||""}-${e.name}-${e.degree}`,a=t.grandTrine.map(n),s=e.planets.map(n);return a.length===s.length&&a.every((e=>s.includes(e)))}))}(t,e))),r=["T-Square","Grand Trine","Grand Cross","Yod","Mystic Rectangle","Kite"];s.sort(((e,t)=>r.indexOf(e.type)-r.indexOf(t.type))).forEach((e=>{switch(e.type){case"T-Square":a.push(...function(e,t=!0){if("T-Square"!==e.type)return[];const n=o(e.apex,!1,t),a=o(e.opposition[0],!1,t),s=o(e.opposition[1],!1,t);return[`T-Square (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n} ← ${a} ↔ ${s}`]}(e,n));break;case"Grand Trine":a.push(...function(e,t=!0){if("Grand Trine"!==e.type)return[];const n=e.planets.map((e=>o(e,!1,t))).join(" △ ");return[`Grand Trine (${e.element}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Grand Cross":a.push(...function(e,t=!0){if("Grand Cross"!==e.type)return[];const n=e.planets.map((e=>o(e,!1,t))).join(" ⨯ ");return[`Grand Cross (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Yod":a.push(...function(e,t=!0){if("Yod"!==e.type)return[];const n=o(e.apex,!1,t),a=o(e.base[0],!1,t),s=o(e.base[1],!1,t);return[`Yod (${e.averageOrb.toFixed(1)}°): ${n} ← ${a} • ${s}`]}(e,n));break;case"Mystic Rectangle":a.push(...function(e,t=!0){if("Mystic Rectangle"!==e.type)return[];const n=o(e.oppositions[0][0],!1,t),a=o(e.oppositions[0][1],!1,t),s=o(e.oppositions[1][0],!1,t),r=o(e.oppositions[1][1],!1,t);return[`Mystic Rectangle (${e.averageOrb.toFixed(1)}°): ${n} ↔ ${a} | ${s} ↔ ${r}`]}(e,n));break;case"Kite":a.push(...function(e,t=!0){if("Kite"!==e.type)return[];const n=e.grandTrine.map((e=>o(e,!1,t))).join(" △ "),a=o(e.opposition,!1,t),s=e.grandTrine[0].sign?function(e){const t=["Taurus","Virgo","Capricorn"],n=["Gemini","Libra","Aquarius"],a=["Cancer","Scorpio","Pisces"];return["Aries","Leo","Sagittarius"].includes(e)?"Fire":t.includes(e)?"Earth":n.includes(e)?"Air":a.includes(e)?"Water":""}(e.grandTrine[0].sign):"";return[`Kite (${s?`${s}, `:""}${e.averageOrb.toFixed(1)}°): [${n}] ← ${a}`]}(e,n))}})),""===a[a.length-1]&&a.pop();return a};const a=n(904),s=n(175);function o(e,t=!1,n=!0){const o=Math.floor((0,a.getDegreeInSign)(e.degree)),r=t&&e.house?` (${(0,s.getOrdinal)(e.house)} house)`:"";return`${n&&e.chartName?`${e.chartName}'s `:""}${e.name} ${o}° ${e.sign}${r}`}},784:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectsOutput=function(e,t,n,a,s=!1){const o=[e];if(!t||0===t.size)return o.push("None"),o;return t.forEach(((e,t)=>{o.push(t),e.forEach((e=>{o.push(function(e,t,n,a=!1){const s=t?`${t}'s ${e.planetA}`:e.planetA;let o=e.planetB;a?o=`transiting ${e.planetB}`:n&&(o=`${n}'s ${e.planetB}`);const r=e.application&&"exact"!==e.application?` (${e.application})`:"";return`${s} ${e.aspectType} ${o}: ${e.orb.toFixed(1)}°${r}`}(e,n,a,s))}))})),o}},785:(e,t)=>{function n(e){const n=(e+58)%360/360,a=Math.floor(64*n),s=384*n%6;return{gate:t.GATES[a],line:Math.floor(s)+1}}function a(e){const n=(t.GATES.indexOf(e)+32)%64;return t.GATES[n]}function s(e){const t=[];for(const s of e){const{gate:e,line:o}=n(s.longitude);if(t.push({planet:s.name,gate:e,line:o}),"Sun"===s.name){const n=a(e),s=o;t.push({planet:"Earth",gate:n,line:s})}else if("North Node"===s.name){const n=a(e),s=o;t.push({planet:"South Node",gate:n,line:s})}}return t}function o(e,n){const a=new Map;for(const n of e){const e=a.get(n.gate);e?e.sources.includes("Personality")||e.sources.push("Personality"):a.set(n.gate,{center:t.GATE_CENTERS[n.gate],sources:["Personality"]})}for(const e of n){const n=a.get(e.gate);n?n.sources.includes("Design")||n.sources.push("Design"):a.set(e.gate,{center:t.GATE_CENTERS[e.gate],sources:["Design"]})}return a}function r(e){const n=[];for(const a of t.CHANNELS){const[t,s]=a.gates;e.has(t)&&e.has(s)&&n.push(a)}return n}function i(e,n){const a=new Set,s=new Set;for(const t of e)a.add(t.centers[0]),a.add(t.centers[1]);for(const[,e]of n)s.add(e.center);const o=[],r=[],i=[];for(const e of t.ALL_CENTERS)a.has(e)?o.push(e):s.has(e)?r.push(e):i.push(e);return{defined:o,undefined:r,open:i}}function c(e,n){const a=e.includes("Sacral"),s=function(e,n){const a=["Sacral","Solar Plexus","Ego","Root"],s=new Map;for(const e of t.ALL_CENTERS)s.set(e,new Set);for(const t of e)s.get(t.centers[0]).add(t.centers[1]),s.get(t.centers[1]).add(t.centers[0]);for(const e of a){if(!n.includes(e))continue;const t=new Set,a=[e];for(;a.length>0;){const e=a.shift();if("Throat"===e)return!0;if(!t.has(e)){t.add(e);for(const n of s.get(e)||[])t.has(n)||a.push(n)}}}return!1}(n,e);return a?s?"Manifesting Generator":"Generator":s?"Manifestor":0===e.length?"Reflector":"Projector"}function u(e,t){if(e.includes("Solar Plexus"))return"Emotional (Solar Plexus)";if(e.includes("Sacral"))return"Sacral";if(e.includes("Spleen"))return"Splenic";if(e.includes("Ego")){const e=t.some((e=>e.centers.includes("Ego")&&e.centers.includes("Throat"))),n=t.some((e=>e.centers.includes("Ego")&&e.centers.includes("G Center")));if(e||n)return"Ego"}if(e.includes("G Center")){if(t.some((e=>e.centers.includes("G Center")&&e.centers.includes("Throat"))))return"Self-Projected"}return e.includes("Ajna")||e.includes("Head")?"Mental (Outer Authority)":"Lunar"}function l(e,t){if(0===t.length)return"None";const n=p(e,t);switch(n.length){case 1:return"Single Definition";case 2:return"Split Definition";case 3:return"Triple Split Definition";case 4:return"Quadruple Split Definition";default:return`${n.length}-Split Definition`}}function p(e,n){if(0===n.length)return[];const a=new Map;for(const e of n)a.set(e,e);function s(e){return a.get(e)!==e&&a.set(e,s(a.get(e))),a.get(e)}function o(e,t){const n=s(e),o=s(t);n!==o&&a.set(n,o)}for(const t of e){const[e,n]=t.centers;a.has(e)&&a.has(n)&&o(e,n)}const r=new Map;for(const e of n){const t=s(e);r.has(t)||r.set(t,[]),r.get(t).push(e)}return Array.from(r.values()).sort(((e,n)=>t.ALL_CENTERS.indexOf(e[0])-t.ALL_CENTERS.indexOf(n[0])))}function h(e,t){const n=new Set;for(const e of t)n.add(e.gates[0]),n.add(e.gates[1]);const a=[];for(const[t,s]of e)n.has(t)||a.push({gate:t,center:s.center});return a.sort(((e,t)=>e.gate-t.gate))}function f(e,t){return`${e}/${t}`}function d(e,n,a,s,o,r){let i;return i=o<4?"Right Angle Cross":o>=5?"Left Angle Cross":r<4?"Juxtaposition Cross":"Left Angle Cross",`${i} of ${t.INCARNATION_CROSSES[e]||"Unknown"} (${e}/${n} | ${a}/${s})`}function g(e,n={}){const{personality:a,design:g}=e,m=s(a.planets),S=s(g.planets),A=o(m,S),$=r(A),{defined:y,undefined:T,open:C}=i($,A),E=c(y,$),O=t.STRATEGY_BY_TYPE[E],v=u(y,$),b=l($,y),M=p($,y),P=h(A,$),N=m.find((e=>"Sun"===e.planet)),_=S.find((e=>"Sun"===e.planet)),D=f(N.line,_.line),I=t.PROFILE_NAMES[D]||"",j=m.find((e=>"Earth"===e.planet)),G=S.find((e=>"Earth"===e.planet)),R=d(N.gate,j.gate,_.gate,G.gate,N.line,_.line);return function(e){const n=[];if(n.push("[METADATA]"),n.push("chart_type: human_design"),n.push(""),n.push(`[CHART: ${e.name}]`),n.push(`[BIRTHDATA] ${e.location} | ${e.date} | ${e.time}`),n.push(""),n.push("[TYPE]"),n.push(`Type: ${e.type}`),n.push(`Strategy: ${e.strategy}`),n.push(`Authority: ${e.authority}`),n.push(`Definition: ${e.definition}`),e.definitionIslands.length>1){const t=e.definitionIslands.map((e=>`[${e.join("+")}]`));n.push(`Definition Islands: ${t.join(" + ")}`)}n.push(`Profile: ${e.profile}${e.profileName?` (${e.profileName})`:""}`),n.push(`Incarnation Cross: ${e.incarnationCross}`),n.push(""),n.push("[CENTERS]"),e.definedCenters.length>0&&n.push(`Defined: ${e.definedCenters.join(", ")}`);e.undefinedCenters.length>0&&n.push(`Undefined: ${e.undefinedCenters.join(", ")}`);e.openCenters.length>0&&n.push(`Open: ${e.openCenters.join(", ")}`);if(n.push(""),n.push("[CHANNELS]"),e.activeChannels.length>0)for(const t of e.activeChannels)n.push(`${t.gates[0]}-${t.gates[1]} (${t.name}): ${t.centers[0]} ↔ ${t.centers[1]}`);else n.push("None");if(n.push(""),n.push("[HANGING GATES]"),n.push("(Gates not part of a complete channel)"),e.hangingGates.length>0)for(const a of e.hangingGates)n.push(`${a.gate}: ${t.GATE_NAMES[a.gate]} | ${a.center}`);else n.push("None");n.push(""),n.push("[GATES]");const a=Array.from(e.allGates.entries()).sort(((e,t)=>e[0]-t[0]));for(const[e,s]of a){const a=2===s.sources.length?"Both":s.sources[0];n.push(`${e}: ${t.GATE_NAMES[e]} | ${s.center} (${a})`)}n.push(""),n.push("[PERSONALITY ACTIVATIONS]");const s=e.personalityActivations.find((e=>"Sun"===e.planet)),o=e.personalityActivations.find((e=>"Earth"===e.planet)),r=e.personalityActivations.find((e=>"Moon"===e.planet)),i=e.personalityActivations.find((e=>"North Node"===e.planet)),c=e.personalityActivations.find((e=>"South Node"===e.planet)),u=e.personalityActivations.find((e=>"Mercury"===e.planet)),l=e.personalityActivations.find((e=>"Venus"===e.planet)),p=e.personalityActivations.find((e=>"Mars"===e.planet)),h=e.personalityActivations.find((e=>"Jupiter"===e.planet)),f=e.personalityActivations.find((e=>"Saturn"===e.planet)),d=e.personalityActivations.find((e=>"Uranus"===e.planet)),g=e.personalityActivations.find((e=>"Neptune"===e.planet)),m=e.personalityActivations.find((e=>"Pluto"===e.planet));n.push(`Sun: ${s.gate}.${s.line} Earth: ${o.gate}.${o.line}`),n.push(`Moon: ${r.gate}.${r.line}`),n.push(`North Node: ${i.gate}.${i.line} South Node: ${c.gate}.${c.line}`),n.push(`Mercury: ${u.gate}.${u.line} Venus: ${l.gate}.${l.line} Mars: ${p.gate}.${p.line}`),n.push(`Jupiter: ${h.gate}.${h.line} Saturn: ${f.gate}.${f.line}`),n.push(`Uranus: ${d.gate}.${d.line} Neptune: ${g.gate}.${g.line} Pluto: ${m.gate}.${m.line}`),n.push(""),n.push("[DESIGN ACTIVATIONS]");const S=e.designActivations.find((e=>"Sun"===e.planet)),A=e.designActivations.find((e=>"Earth"===e.planet)),$=e.designActivations.find((e=>"Moon"===e.planet)),y=e.designActivations.find((e=>"North Node"===e.planet)),T=e.designActivations.find((e=>"South Node"===e.planet)),C=e.designActivations.find((e=>"Mercury"===e.planet)),E=e.designActivations.find((e=>"Venus"===e.planet)),O=e.designActivations.find((e=>"Mars"===e.planet)),v=e.designActivations.find((e=>"Jupiter"===e.planet)),b=e.designActivations.find((e=>"Saturn"===e.planet)),M=e.designActivations.find((e=>"Uranus"===e.planet)),P=e.designActivations.find((e=>"Neptune"===e.planet)),N=e.designActivations.find((e=>"Pluto"===e.planet));return n.push(`Sun: ${S.gate}.${S.line} Earth: ${A.gate}.${A.line}`),n.push(`Moon: ${$.gate}.${$.line}`),n.push(`North Node: ${y.gate}.${y.line} South Node: ${T.gate}.${T.line}`),n.push(`Mercury: ${C.gate}.${C.line} Venus: ${E.gate}.${E.line} Mars: ${O.gate}.${O.line}`),n.push(`Jupiter: ${v.gate}.${v.line} Saturn: ${b.gate}.${b.line}`),n.push(`Uranus: ${M.gate}.${M.line} Neptune: ${P.gate}.${P.line} Pluto: ${N.gate}.${N.line}`),n.join("\n")}({name:n.name||"Chart",location:n.location||`${a.location.latitude}, ${a.location.longitude}`,date:a.date,time:a.time,type:E,strategy:O,authority:v,definition:b,definitionIslands:M,profile:D,profileName:I,incarnationCross:R,definedCenters:y,undefinedCenters:T,openCenters:C,activeChannels:$,hangingGates:P,allGates:A,personalityActivations:m,designActivations:S})}function m(e,n){const a=[],s=[],o=[],u=[],h=new Set(e.allGates.keys()),f=new Set(n.allGates.keys()),d=new Set;for(const t of e.activeChannels)d.add(`${t.gates[0]}-${t.gates[1]}`);const g=new Set;for(const e of n.activeChannels)g.add(`${e.gates[0]}-${e.gates[1]}`);for(const r of t.CHANNELS){const[t,i]=r.gates,c=h.has(t),l=h.has(i),p=f.has(t),d=f.has(i),g=c&&l,m=p&&d;if(g&&m)s.push({channel:r,type:"companionship",person1Gates:[t,i],person2Gates:[t,i],description:`Both ${e.name} and ${n.name} have the complete ${r.name} channel - deep mutual understanding in this area`});else if(g||m){if(g&&!m&&(p||d)){const a=[];p&&a.push(t),d&&a.push(i),o.push({channel:r,type:"dominance",person1Gates:[t,i],person2Gates:a,description:`${e.name} has the complete ${r.name} channel and leads; ${n.name} has gate ${a.join(", ")}`})}else if(m&&!g&&(c||l)){const a=[];c&&a.push(t),l&&a.push(i),o.push({channel:r,type:"dominance",person1Gates:a,person2Gates:[t,i],description:`${n.name} has the complete ${r.name} channel and leads; ${e.name} has gate ${a.join(", ")}`})}}else{if((c||p)&&(l||d)){const s=[],o=[];c&&s.push(t),l&&s.push(i),p&&o.push(t),d&&o.push(i);const h=s.filter((e=>!o.includes(e))),f=o.filter((e=>!s.includes(e)));h.length>0&&f.length>0?a.push({channel:r,type:"electromagnetic",person1Gates:s,person2Gates:o,description:`${e.name} brings gate ${h.join(", ")}, ${n.name} brings gate ${f.join(", ")} - magnetic attraction`}):s.length>0&&o.length>0&&u.push({channel:r,type:"compromise",person1Gates:s,person2Gates:o,description:`Both contribute to the ${r.name} channel but share gate(s) - requires compromise`})}}}const m=new Map;for(const[t,n]of e.allGates)m.set(t,{center:n.center,sources:[e.name]});for(const[e,t]of n.allGates){const a=m.get(e);a?a.sources.push(n.name):m.set(e,{center:t.center,sources:[n.name]})}const S=r(m),A=i(S,m),$=c(A.defined,S),y=t.STRATEGY_BY_TYPE[$],T=l(S,A.defined),C=p(S,A.defined),E=new Set(e.activeChannels.map((e=>`${e.gates[0]}-${e.gates[1]}`))),O=new Set(n.activeChannels.map((e=>`${e.gates[0]}-${e.gates[1]}`))),v=[],b=[],M=[];for(const e of S){const t=`${e.gates[0]}-${e.gates[1]}`,n=E.has(t),a=O.has(t);n&&!a?v.push(e):a&&!n?b.push(e):n||a||M.push(e)}const P=[],N=[],_=[];for(const[n,a]of m){const s={gate:n,gateName:t.GATE_NAMES[n],center:a.center,type:2===a.sources.length?"shared":a.sources[0]===e.name?"unique_person1":"unique_person2"};"shared"===s.type?P.push(s):"unique_person1"===s.type?N.push(s):_.push(s)}return{person1:e,person2:n,electromagneticChannels:a,companionshipChannels:s,dominanceChannels:o,compromiseChannels:u,compositeDefinedCenters:A.defined,compositeUndefinedCenters:A.undefined,compositeOpenCenters:A.open,compositeChannels:S,compositeType:$,compositeStrategy:y,compositeDefinition:T,compositeDefinitionIslands:C,channelsPerson1Only:v,channelsPerson2Only:b,channelsOnlyTogether:M,sharedGates:P,uniqueGatesPerson1:N,uniqueGatesPerson2:_}}function S(e,n={}){const{personality:a,design:g}=e,m=s(a.planets),S=s(g.planets),A=o(m,S),$=r(A),{defined:y,undefined:T,open:C}=i($,A),E=c(y,$),O=t.STRATEGY_BY_TYPE[E],v=u(y,$),b=l($,y),M=p($,y),P=h(A,$),N=m.find((e=>"Sun"===e.planet)),_=S.find((e=>"Sun"===e.planet)),D=f(N.line,_.line),I=t.PROFILE_NAMES[D]||"",j=m.find((e=>"Earth"===e.planet)),G=S.find((e=>"Earth"===e.planet)),R=d(N.gate,j.gate,_.gate,G.gate,N.line,_.line);return{name:n.name||"Chart",location:n.location||`${a.location.latitude}, ${a.location.longitude}`,date:a.date,time:a.time,type:E,strategy:O,authority:v,definition:b,definitionIslands:M,profile:D,profileName:I,incarnationCross:R,definedCenters:y,undefinedCenters:T,openCenters:C,activeChannels:$,hangingGates:P,allGates:A,personalityActivations:m,designActivations:S}}Object.defineProperty(t,"__esModule",{value:!0}),t.ALL_CENTERS=t.STRATEGY_BY_TYPE=t.INCARNATION_CROSSES=t.PROFILE_NAMES=t.CHANNELS=t.GATE_CENTERS=t.GATE_NAMES=t.GATES=void 0,t.longitudeToGateLine=n,t.oppositeGate=a,t.calculateActivations=s,t.getAllGates=o,t.getActiveChannels=r,t.getCenterStatus=i,t.calculateType=c,t.calculateAuthority=u,t.calculateDefinition=l,t.getDefinitionIslands=p,t.getHangingGates=h,t.calculateProfile=f,t.getIncarnationCross=d,t.humandesign2txt=g,t.analyzePartnership=m,t.buildChart=S,t.humandesignPartnership2txt=function(e,t,n={}){const a=S(e,{name:n.person1Name||"Person 1",location:n.person1Location}),s=S(t,{name:n.person2Name||"Person 2",location:n.person2Location});return function(e){const t=[],{person1:n,person2:a}=e;if(t.push("[METADATA]"),t.push("chart_type: human_design_partnership"),t.push(""),t.push(`[CHART: ${n.name}]`),t.push(`[BIRTHDATA] ${n.location} | ${n.date} | ${n.time}`),t.push(`Type: ${n.type} | Strategy: ${n.strategy} | Authority: ${n.authority}`),t.push(`Definition: ${n.definition} | Profile: ${n.profile}${n.profileName?` (${n.profileName})`:""}`),n.definitionIslands.length>1){const e=n.definitionIslands.map((e=>`[${e.join("+")}]`));t.push(`Definition Islands: ${e.join(" + ")}`)}if(t.push(`Defined Centers: ${n.definedCenters.join(", ")||"None"}`),n.hangingGates.length>0){const e=n.hangingGates.map((e=>`${e.gate} (${e.center})`)).join(", ");t.push(`Hanging Gates: ${e}`)}if(t.push(""),t.push(`[CHART: ${a.name}]`),t.push(`[BIRTHDATA] ${a.location} | ${a.date} | ${a.time}`),t.push(`Type: ${a.type} | Strategy: ${a.strategy} | Authority: ${a.authority}`),t.push(`Definition: ${a.definition} | Profile: ${a.profile}${a.profileName?` (${a.profileName})`:""}`),a.definitionIslands.length>1){const e=a.definitionIslands.map((e=>`[${e.join("+")}]`));t.push(`Definition Islands: ${e.join(" + ")}`)}if(t.push(`Defined Centers: ${a.definedCenters.join(", ")||"None"}`),a.hangingGates.length>0){const e=a.hangingGates.map((e=>`${e.gate} (${e.center})`)).join(", ");t.push(`Hanging Gates: ${e}`)}if(t.push(""),t.push(`[PARTNERSHIP: ${n.name} & ${a.name}]`),t.push(""),t.push("[COMPOSITE OVERVIEW]"),t.push(`Composite Type: ${e.compositeType}`),t.push(`Composite Strategy: ${e.compositeStrategy}`),t.push(`Composite Definition: ${e.compositeDefinition}`),e.compositeDefinitionIslands.length>1){const n=e.compositeDefinitionIslands.map((e=>`[${e.join("+")}]`));t.push(`Composite Definition Islands: ${n.join(" + ")}`)}e.compositeDefinedCenters.length>0&&t.push(`Defined Centers Together: ${e.compositeDefinedCenters.join(", ")}`);e.compositeUndefinedCenters.length>0&&t.push(`Undefined Centers Together: ${e.compositeUndefinedCenters.join(", ")}`);e.compositeOpenCenters.length>0&&t.push(`Open Centers Together: ${e.compositeOpenCenters.join(", ")}`);if(t.push(""),t.push("[ELECTROMAGNETIC CONNECTIONS]"),t.push("(Channels completed together - magnetic attraction and chemistry)"),e.electromagneticChannels.length>0)for(const n of e.electromagneticChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[COMPANIONSHIP CONNECTIONS]"),t.push("(Channels both have individually - deep mutual understanding)"),e.companionshipChannels.length>0)for(const n of e.companionshipChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[DOMINANCE CONNECTIONS]"),t.push("(One person has full channel, the other has hanging gate - one naturally leads)"),e.dominanceChannels.length>0)for(const n of e.dominanceChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[COMPROMISE CONNECTIONS]"),t.push("(Both have hanging gates in same channel - requires negotiation)"),e.compromiseChannels.length>0)for(const n of e.compromiseChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[SHARED GATES]"),t.push("(Gates both people have - common ground)"),e.sharedGates.length>0){const n=[...e.sharedGates].sort(((e,t)=>e.gate-t.gate));for(const e of n)t.push(`${e.gate}: ${e.gateName} | ${e.center}`)}else t.push("None");if(t.push(""),t.push(`[UNIQUE GATES: ${n.name}]`),t.push(`(Gates only ${n.name} brings to the relationship)`),e.uniqueGatesPerson1.length>0){const n=[...e.uniqueGatesPerson1].sort(((e,t)=>e.gate-t.gate));for(const e of n)t.push(`${e.gate}: ${e.gateName} | ${e.center}`)}else t.push("None");if(t.push(""),t.push(`[UNIQUE GATES: ${a.name}]`),t.push(`(Gates only ${a.name} brings to the relationship)`),e.uniqueGatesPerson2.length>0){const n=[...e.uniqueGatesPerson2].sort(((e,t)=>e.gate-t.gate));for(const e of n)t.push(`${e.gate}: ${e.gateName} | ${e.center}`)}else t.push("None");if(t.push(""),t.push(`[CHANNELS: ${n.name} Only]`),t.push(`(Channels only ${n.name} has)`),e.channelsPerson1Only.length>0)for(const n of e.channelsPerson1Only)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");if(t.push(""),t.push(`[CHANNELS: ${a.name} Only]`),t.push(`(Channels only ${a.name} has)`),e.channelsPerson2Only.length>0)for(const n of e.channelsPerson2Only)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");if(t.push(""),t.push("[CHANNELS: Only Together]"),t.push("(Channels formed only when both are together - neither has individually)"),e.channelsOnlyTogether.length>0)for(const n of e.channelsOnlyTogether)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");if(t.push(""),t.push("[COMPOSITE CHANNELS]"),t.push("(All channels active when together)"),e.compositeChannels.length>0)for(const n of e.compositeChannels)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");return t.join("\n")}(m(a,s))},t.GATES=[41,19,13,49,30,55,37,63,22,36,25,17,21,51,42,3,27,24,2,23,8,20,16,35,45,12,15,52,39,53,62,56,31,33,7,4,29,59,40,64,47,6,46,18,48,57,32,50,28,44,1,43,14,34,9,5,26,11,10,58,38,54,61,60],t.GATE_NAMES={1:"Self-Expression",2:"Direction of the Self",3:"Ordering",4:"Formulization",5:"Fixed Rhythms",6:"Friction",7:"The Role of the Self",8:"Contribution",9:"Focus",10:"Behavior of the Self",11:"Ideas",12:"Caution",13:"The Listener",14:"Power Skills",15:"Extremes",16:"Skills",17:"Opinions",18:"Correction",19:"Wanting",20:"The Now",21:"The Hunter",22:"Openness",23:"Assimilation",24:"Rationalization",25:"Innocence",26:"The Egoist",27:"Caring",28:"The Game Player",29:"Perseverance",30:"Feelings",31:"Influence",32:"Continuity",33:"Privacy",34:"Power",35:"Change",36:"Crisis",37:"Friendship",38:"The Fighter",39:"Provocation",40:"Aloneness",41:"Contraction",42:"Growth",43:"Insight",44:"Alertness",45:"The Gatherer",46:"Determination",47:"Realization",48:"Depth",49:"Principles",50:"Values",51:"Shock",52:"Stillness",53:"Beginnings",54:"Ambition",55:"Spirit",56:"Stimulation",57:"Intuition",58:"Vitality",59:"Sexuality",60:"Limitation",61:"Mystery",62:"Details",63:"Doubt",64:"Confusion"},t.GATE_CENTERS={64:"Head",61:"Head",63:"Head",47:"Ajna",24:"Ajna",4:"Ajna",17:"Ajna",43:"Ajna",11:"Ajna",62:"Throat",23:"Throat",56:"Throat",35:"Throat",12:"Throat",45:"Throat",33:"Throat",8:"Throat",31:"Throat",20:"Throat",16:"Throat",7:"G Center",1:"G Center",13:"G Center",25:"G Center",46:"G Center",2:"G Center",15:"G Center",10:"G Center",21:"Ego",40:"Ego",26:"Ego",51:"Ego",36:"Solar Plexus",22:"Solar Plexus",37:"Solar Plexus",6:"Solar Plexus",49:"Solar Plexus",55:"Solar Plexus",30:"Solar Plexus",34:"Sacral",5:"Sacral",14:"Sacral",29:"Sacral",59:"Sacral",9:"Sacral",3:"Sacral",42:"Sacral",27:"Sacral",48:"Spleen",57:"Spleen",44:"Spleen",50:"Spleen",32:"Spleen",28:"Spleen",18:"Spleen",58:"Root",38:"Root",54:"Root",53:"Root",60:"Root",52:"Root",19:"Root",39:"Root",41:"Root"},t.CHANNELS=[{gates:[64,47],name:"Abstraction",centers:["Head","Ajna"]},{gates:[61,24],name:"Awareness",centers:["Head","Ajna"]},{gates:[63,4],name:"Logic",centers:["Head","Ajna"]},{gates:[17,62],name:"Acceptance",centers:["Ajna","Throat"]},{gates:[43,23],name:"Structuring",centers:["Ajna","Throat"]},{gates:[11,56],name:"Curiosity",centers:["Ajna","Throat"]},{gates:[7,31],name:"The Alpha",centers:["G Center","Throat"]},{gates:[1,8],name:"Inspiration",centers:["G Center","Throat"]},{gates:[13,33],name:"The Prodigal",centers:["G Center","Throat"]},{gates:[10,20],name:"Awakening",centers:["G Center","Throat"]},{gates:[15,5],name:"Rhythm",centers:["G Center","Sacral"]},{gates:[2,14],name:"The Beat",centers:["G Center","Sacral"]},{gates:[46,29],name:"Discovery",centers:["G Center","Sacral"]},{gates:[10,57],name:"Perfected Form",centers:["G Center","Spleen"]},{gates:[25,51],name:"Initiation",centers:["G Center","Ego"]},{gates:[21,45],name:"Money",centers:["Ego","Throat"]},{gates:[37,40],name:"Community",centers:["Ego","Solar Plexus"]},{gates:[26,44],name:"Surrender",centers:["Ego","Spleen"]},{gates:[34,20],name:"Charisma",centers:["Sacral","Throat"]},{gates:[34,57],name:"Power",centers:["Sacral","Spleen"]},{gates:[27,50],name:"Preservation",centers:["Sacral","Spleen"]},{gates:[59,6],name:"Intimacy",centers:["Sacral","Solar Plexus"]},{gates:[42,53],name:"Maturation",centers:["Sacral","Root"]},{gates:[3,60],name:"Mutation",centers:["Sacral","Root"]},{gates:[9,52],name:"Concentration",centers:["Sacral","Root"]},{gates:[16,48],name:"The Wavelength",centers:["Spleen","Throat"]},{gates:[57,20],name:"The Brainwave",centers:["Spleen","Throat"]},{gates:[18,58],name:"Judgment",centers:["Spleen","Root"]},{gates:[28,38],name:"Struggle",centers:["Spleen","Root"]},{gates:[32,54],name:"Transformation",centers:["Spleen","Root"]},{gates:[12,22],name:"Openness",centers:["Solar Plexus","Throat"]},{gates:[35,36],name:"Transitoriness",centers:["Solar Plexus","Throat"]},{gates:[19,49],name:"Synthesis",centers:["Solar Plexus","Root"]},{gates:[39,55],name:"Emoting",centers:["Solar Plexus","Root"]},{gates:[41,30],name:"Recognition",centers:["Solar Plexus","Root"]},{gates:[34,10],name:"Exploration",centers:["Sacral","G Center"]}],t.PROFILE_NAMES={"1/3":"Investigator/Martyr","1/4":"Investigator/Opportunist","2/4":"Hermit/Opportunist","2/5":"Hermit/Heretic","3/5":"Martyr/Heretic","3/6":"Martyr/Role Model","4/6":"Opportunist/Role Model","4/1":"Opportunist/Investigator","5/1":"Heretic/Investigator","5/2":"Heretic/Hermit","6/2":"Role Model/Hermit","6/3":"Role Model/Martyr"},t.INCARNATION_CROSSES={1:"The Sphinx",2:"The Sphinx",3:"Laws",4:"Explanation",5:"Consciousness",6:"Eden",7:"The Sphinx",8:"Contagion",9:"Planning",10:"Vessel of Love",11:"Eden",12:"Eden",13:"The Sphinx",14:"Contagion",15:"Vessel of Love",16:"Planning",17:"Service",18:"Service",19:"The Four Ways",20:"The Sleeping Phoenix",21:"Tension",22:"Rulership",23:"Explanation",24:"The Four Ways",25:"Vessel of Love",26:"Rulership",27:"The Unexpected",28:"The Unexpected",29:"Contagion",30:"Contagion",31:"The Unexpected",32:"Maya",33:"The Four Ways",34:"The Sleeping Phoenix",35:"Consciousness",36:"Eden",37:"Planning",38:"Tension",39:"Tension",40:"Planning",41:"The Unexpected",42:"Maya",43:"Explanation",44:"The Four Ways",45:"Rulership",46:"Vessel of Love",47:"Rulership",48:"Tension",49:"Explanation",50:"Laws",51:"Penetration",52:"Service",53:"Penetration",54:"Penetration",55:"The Sleeping Phoenix",56:"Laws",57:"Penetration",58:"Service",59:"The Sleeping Phoenix",60:"Laws",61:"Maya",62:"Maya",63:"Consciousness",64:"Consciousness"},t.STRATEGY_BY_TYPE={Generator:"Wait to Respond","Manifesting Generator":"Wait to Respond",Manifestor:"Inform Before Acting",Projector:"Wait for the Invitation",Reflector:"Wait a Lunar Cycle"},t.ALL_CENTERS=["Head","Ajna","Throat","G Center","Ego","Solar Plexus","Sacral","Spleen","Root"],t.default=g},858:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSignDistributions=function(e,t){const n=[...e];void 0!==t&&n.push({name:"Ascendant",degree:t});const o={Fire:[],Earth:[],Air:[],Water:[]},r={Cardinal:0,Fixed:0,Mutable:0},i={Masculine:0,Feminine:0};for(const e of n){const t=(0,a.getSign)(e.degree),n=s.ZODIAC_SIGN_DATA.find((e=>e.name===t));n&&(o[n.element].push(e.name),r[n.modality]++,i[n.polarity]++)}return{elements:o,modalities:r,polarities:i}},t.formatElementDistribution=function(e){return[Object.entries(e).map((([e,t])=>0===t.length?`${e}: 0`:`${e}: ${t.length} (${t.join(", ")})`)).join(" | ")]},t.formatModalityDistribution=function(e){return[Object.entries(e).map((([e,t])=>`${e}: ${t}`)).join(" | ")]},t.formatPolarityDistribution=function(e){return[Object.entries(e).map((([e,t])=>`${e}: ${t}`)).join(" | ")]};const a=n(175),s=n(921)},865:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.groupAspects=function(e,t){const n=new Map,a=t.aspectStrengthThresholds,s=[],o=[],r=[];if(e.forEach((e=>{e.orb<=a.tight?s.push(e):e.orb<=a.moderate?o.push(e):r.push(e)})),s.sort(((e,t)=>e.orb-t.orb)),o.sort(((e,t)=>e.orb-t.orb)),r.sort(((e,t)=>e.orb-t.orb)),s.length>0){const e=`[TIGHT ASPECTS: orb under ${a.tight.toFixed(1)}°]`;n.set(e,s)}if(o.length>0){const e=`[MODERATE ASPECTS: orb ${a.tight.toFixed(1)}-${a.moderate.toFixed(1)}°]`;n.set(e,o)}if(r.length>0){const e=`[WIDE ASPECTS: orb over ${a.moderate.toFixed(1)}°]`;n.set(e,r)}return n}},888:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateBirthdataOutput=function(e,t,n,s="[BIRTHDATA]"){if(!t)return[`${s} Not available`];const o=(0,a.formatDateCustom)(t,n.dateFormat),r=(0,a.formatTime)(t);return[`${s} ${e||"Unknown Location"} | ${o} | ${r}`]};const a=n(889)},889:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatDateCustom=function(e,t){const n=e.getMonth()+1,a=e.getDate(),s=e.getFullYear();switch(t.toUpperCase()){case"MM/DD/YYYY":return`${n.toString().padStart(2,"0")}/${a.toString().padStart(2,"0")}/${s}`;case"DD/MM/YYYY":return`${a.toString().padStart(2,"0")}/${n.toString().padStart(2,"0")}/${s}`;case"YYYY-MM-DD":return`${s}-${n.toString().padStart(2,"0")}-${a.toString().padStart(2,"0")}`;default:return console.warn(`Unrecognized date format: ${t}. Falling back to toLocaleDateString().`),e.toLocaleDateString()}},t.formatTime=function(e){return e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0})}},904:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeDegree=s,t.getDegreeSign=function(e){const t=s(e),n=Math.floor(t/30);if(n<0||n>=a.ZODIAC_SIGNS.length)return console.error(`Invalid sign index computed: ${n} for normalized degree ${t}`),"Unknown Sign";return a.ZODIAC_SIGNS[n]},t.getDegreeInSign=function(e){return s(e)%30};const a=n(921);function s(e){if(!isFinite(e))throw new Error(`Invalid degree value: ${e}`);let t=e%360;return t<0&&(t+=360),t}},919:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectAspectPatterns=function(e,t,n){const a=[],l=function(e){const t=new Map;return e.forEach((e=>{const n=s(e.planetA,e.p1ChartName),a=s(e.planetB,e.p2ChartName);t.has(n)||t.set(n,new Map),t.has(a)||t.set(a,new Map),t.get(n).set(a,e),t.get(a).set(n,e)})),t}(t);return a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let u=s+1;u<e.length;u++)if(i(e[s],e[u],"opposition",t))for(let l=0;l<e.length;l++)if(l!==s&&l!==u&&i(e[s],e[l],"square",t)&&i(e[u],e[l],"square",t)){const[i,p]=e[l],[h,f]=e[s],[d,g]=e[u],m=o(i,n,p),S=o(h,n,f),A=o(d,n,g),$=c(e[s],e[u],t),y=c(e[s],e[l],t),T=c(e[u],e[l],t),C=($.orb+y.orb+T.orb)/3,E=r(m.sign);a.push({type:"T-Square",apex:m,opposition:[S,A],mode:E,averageOrb:C})}return a}(e,l,n)),a.push(...u(e,l,n)),a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let u=s+1;u<e.length;u++)for(let l=u+1;l<e.length;l++)for(let p=l+1;p<e.length;p++){const h=[e[s],e[u],e[l],e[p]],f=[[0,2],[1,3],[0,3],[1,2]];let d=0,g=0;const m=[];if([[0,1],[2,3]].forEach((([e,n])=>{i(h[e],h[n],"opposition",t)&&(d++,m.push(c(h[e],h[n],t)))})),f.forEach((([e,n])=>{i(h[e],h[n],"square",t)&&(g++,m.push(c(h[e],h[n],t)))})),2===d&&4===g){const[e,t]=h[0],[s,i]=h[1],[c,u]=h[2],[l,p]=h[3],f=o(e,n,t),d=o(s,n,i),g=o(c,n,u),S=o(l,n,p),A=m.reduce(((e,t)=>e+t.orb),0)/m.length,$=r(f.sign);a.push({type:"Grand Cross",planets:[f,d,g,S],mode:$,averageOrb:A})}}return a}(e,l,n)),a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let r=s+1;r<e.length;r++)if(i(e[s],e[r],"sextile",t))for(let u=0;u<e.length;u++)if(u!==s&&u!==r&&i(e[s],e[u],"quincunx",t)&&i(e[r],e[u],"quincunx",t)){const[i,l]=e[u],[p,h]=e[s],[f,d]=e[r],g=o(i,n,l),m=o(p,n,h),S=o(f,n,d),A=c(e[s],e[r],t),$=c(e[s],e[u],t),y=c(e[r],e[u],t),T=(A.orb+$.orb+y.orb)/3;a.push({type:"Yod",apex:g,base:[m,S],averageOrb:T})}return a}(e,l,n)),a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let r=s+1;r<e.length;r++)for(let u=r+1;u<e.length;u++)for(let l=u+1;l<e.length;l++){const p=[e[s],e[r],e[u],e[l]],h=[{oppositions:[[0,1],[2,3]],sextiles:[[0,2],[0,3],[1,2],[1,3]]},{oppositions:[[0,2],[1,3]],sextiles:[[0,1],[0,3],[2,1],[2,3]]},{oppositions:[[0,3],[1,2]],sextiles:[[0,1],[0,2],[3,1],[3,2]]}];for(const e of h){let s=0,r=0;const u=[];if(e.oppositions.forEach((([e,n])=>{i(p[e],p[n],"opposition",t)&&(s++,u.push(c(p[e],p[n],t)))})),e.sextiles.forEach((([e,n])=>{const a=c(p[e],p[n],t);!a||"sextile"!==a.aspectType&&"trine"!==a.aspectType||(r++,u.push(a))})),2===s&&4===r){const[t,s]=p[e.oppositions[0][0]],[r,i]=p[e.oppositions[0][1]],[c,l]=p[e.oppositions[1][0]],[h,f]=p[e.oppositions[1][1]],d=o(t,n,s),g=o(r,n,i),m=o(c,n,l),S=o(h,n,f),A=u.reduce(((e,t)=>e+t.orb),0)/u.length;a.push({type:"Mystic Rectangle",oppositions:[[d,g],[m,S]],averageOrb:A})}}}return a}(e,l,n)),a.push(...function(e,t,n){const a=[];return u(e,t,n).forEach((s=>{s.planets.forEach((r=>{e.forEach((u=>{const[l,p]=u;if(!s.planets.some((e=>e.name===l.name&&e.chartName===p))){const h=e.find((([e,t])=>e.name===r.name&&t===r.chartName));if(h&&i(h,u,"opposition",t)){const e=o(l,n,p),r=c(h,u,t),i=(s.averageOrb+r.orb)/2;a.push({type:"Kite",grandTrine:s.planets,opposition:e,averageOrb:i})}}}))}))})),a}(e,l,n)),a};const a=n(904);function s(e,t){return t?`${e}-${t}`:e}function o(e,t,n){const s=(0,a.getDegreeSign)(e.degree),o=t&&12===t.length?(()=>{const n=e.degree%360;for(let e=0;e<12;e++){const a=t[e],s=t[(e+1)%12];if(s>a){if(n>=a&&n<s)return e+1}else if(n>=a||n<s)return e+1}})():void 0;return{name:e.name,degree:e.degree,sign:s,house:o,chartName:n}}function r(e){return["Aries","Cancer","Libra","Capricorn"].includes(e)?"Cardinal":["Taurus","Leo","Scorpio","Aquarius"].includes(e)?"Fixed":"Mutable"}function i(e,t,n,a){const o=s(e[0].name,e[1]),r=s(t[0].name,t[1]),i=a.get(o);if(!i)return!1;const c=i.get(r);return void 0!==c&&c.aspectType===n}function c(e,t,n){const a=s(e[0].name,e[1]),o=s(t[0].name,t[1]),r=n.get(a);if(r)return r.get(o)}function u(e,t,n){const a=[];for(let r=0;r<e.length;r++)for(let u=r+1;u<e.length;u++)for(let l=u+1;l<e.length;l++)if(i(e[r],e[u],"trine",t)&&i(e[u],e[l],"trine",t)&&i(e[l],e[r],"trine",t)){const[i,p]=e[r],[h,f]=e[u],[d,g]=e[l],m=o(i,n,p),S=o(h,n,f),A=o(d,n,g),$=c(e[r],e[u],t),y=c(e[u],e[l],t),T=c(e[l],e[r],t),C=($.orb+y.orb+T.orb)/3,E=(s=m.sign,["Aries","Leo","Sagittarius"].includes(s)?"Fire":["Taurus","Virgo","Capricorn"].includes(s)?"Earth":["Gemini","Libra","Aquarius"].includes(s)?"Air":"Water");a.push({type:"Grand Trine",planets:[m,S,A],element:E,averageOrb:C})}var s;return a}},921:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_SETTINGS=t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS=t.WIDE_ASPECTS=t.TIGHT_ASPECTS=t.MODERN_ASPECTS=t.TRADITIONAL_ASPECTS=t.SIMPLE_WIDE_ORBS=t.SIMPLE_TIGHT_ORBS=t.SIMPLE_MODERN_ORBS=t.SIMPLE_TRADITIONAL_ORBS=t.DEFAULT_ASPECTS=t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA=void 0;const a=n(613);t.ZODIAC_SIGN_DATA=[{name:"Aries",element:"Fire",modality:"Cardinal",polarity:"Masculine",ruler:"Mars"},{name:"Taurus",element:"Earth",modality:"Fixed",polarity:"Feminine",ruler:"Venus"},{name:"Gemini",element:"Air",modality:"Mutable",polarity:"Masculine",ruler:"Mercury"},{name:"Cancer",element:"Water",modality:"Cardinal",polarity:"Feminine",ruler:"Moon"},{name:"Leo",element:"Fire",modality:"Fixed",polarity:"Masculine",ruler:"Sun"},{name:"Virgo",element:"Earth",modality:"Mutable",polarity:"Feminine",ruler:"Mercury"},{name:"Libra",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Venus"},{name:"Scorpio",element:"Water",modality:"Fixed",polarity:"Feminine",ruler:"Mars"},{name:"Sagittarius",element:"Fire",modality:"Mutable",polarity:"Masculine",ruler:"Jupiter"},{name:"Capricorn",element:"Earth",modality:"Cardinal",polarity:"Feminine",ruler:"Saturn"},{name:"Aquarius",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Saturn"},{name:"Pisces",element:"Water",modality:"Mutable",polarity:"Feminine",ruler:"Jupiter"}],t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA.map((e=>e.name)),t.DEFAULT_ASPECTS=[{name:"conjunction",angle:0,orb:5,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:5,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:5,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:5,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:3,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:2,classification:a.AspectClassification.Minor}],t.SIMPLE_TRADITIONAL_ORBS=[{name:"conjunction",angle:0,orb:10,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:10,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:8,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:8,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:6,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:4,classification:a.AspectClassification.Minor}],t.SIMPLE_MODERN_ORBS=[{name:"conjunction",angle:0,orb:8,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:8,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:6,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:6,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:4,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:3,classification:a.AspectClassification.Minor}],t.SIMPLE_TIGHT_ORBS=[{name:"conjunction",angle:0,orb:4,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:4,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:3,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:3,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:2,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:1,classification:a.AspectClassification.Minor}],t.SIMPLE_WIDE_ORBS=[{name:"conjunction",angle:0,orb:12,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:12,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:10,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:10,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:8,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:6,classification:a.AspectClassification.Minor},{name:"semi-sextile",angle:30,orb:4,classification:a.AspectClassification.Minor}],t.TRADITIONAL_ASPECTS=t.SIMPLE_TRADITIONAL_ORBS,t.MODERN_ASPECTS=t.SIMPLE_MODERN_ORBS,t.TIGHT_ASPECTS=t.SIMPLE_TIGHT_ORBS,t.WIDE_ASPECTS=t.SIMPLE_WIDE_ORBS,t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS={tight:2,moderate:4},t.DEFAULT_SETTINGS={aspectDefinitions:t.DEFAULT_ASPECTS,skipOutOfSignAspects:!0,includeAspectPatterns:!1,includeSignDistributions:!0,includeDispositors:!0,includeHouseOverlays:!0,aspectStrengthThresholds:t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS,houseSystemName:"whole_sign",dateFormat:"MM/DD/YYYY",outputMode:"standard"}},945:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAnglesOutput=function(e,t){const n=["[ANGLES]"];void 0!==e?n.push(`Ascendant: ${Math.floor((0,a.getDegreeInSign)(e))}° ${(0,a.getDegreeSign)(e)}`):n.push("Ascendant: Not available");void 0!==t?n.push(`Midheaven: ${Math.floor((0,a.getDegreeInSign)(t))}° ${(0,a.getDegreeSign)(t)}`):n.push("Midheaven: Not available");return n};const a=n(904)}},t={};var n=function n(a){var s=t[a];if(void 0!==s)return s.exports;var o=t[a]={exports:{}};return e[a].call(o.exports,o,o.exports,n),o.exports}(156);return n})()));
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.chart2txt=t():e.chart2txt=t()}(this,(()=>(()=>{"use strict";var e={6:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.analyzeCharts=function e(t,n={}){const E=(0,o.validateInputData)(t);if(E)throw new Error(`Invalid chart data: ${E}`);const O=new s.ChartSettings(n),v=(0,a.isMultiChartData)(t)?t:[t];if("composite"===O.outputMode){const t=v.filter((e=>"transit"!==e.chartType)),a=v.filter((e=>"transit"===e.chartType));if(2!==t.length)throw new Error(`Composite output mode requires exactly 2 non-transit charts, got ${t.length}`);const s=C(t,n),o=function(e,t,n){const a=new Map(t.planets.map((e=>[e.name,e]))),s=e.planets.filter((e=>a.has(e.name))).map((e=>{const t=a.get(e.name);return{name:e.name,degree:g([e.degree,t.degree]),speed:d(e.speed,t.speed)}})),o=void 0!==e.ascendant&&void 0!==t.ascendant?g([e.ascendant,t.ascendant]):void 0,r=void 0!==e.midheaven&&void 0!==t.midheaven?g([e.midheaven,t.midheaven]):void 0;let i;void 0===o||"W"!==n&&"Whole Sign"!==n?void 0===o||"E"!==n&&"Equal"!==n?e.houseCusps&&t.houseCusps&&(i=e.houseCusps.map(((e,n)=>g([e,t.houseCusps[n]])))):i=Array.from({length:12},((e,t)=>(0,l.normalizeDegree)(o+30*t))):i=Array.from({length:12},((e,t)=>(0,l.normalizeDegree)(30*Math.floor(o/30)+30*t)));return{name:`${e.name}-${t.name}`,planets:s,ascendant:o,midheaven:r,houseCusps:i,houseSystemName:n,chartType:"composite",compositeSource:{chartNames:[e.name,t.name],method:"midpoint"}}}(t[0],t[1],s),r=a.length>0?[o,...a]:[o];return e(r,{...n,outputMode:"standard",houseSystemName:s})}const M=C(v,n);void 0!==M&&(O.houseSystemName=M);const b=v.filter((e=>"transit"!==e.chartType)),P=v.find((e=>"transit"===e.chartType)),D=[...b,...P?[P]:[]],N=[],_=S(D,!0);for(const e of D){const t=S([e]),n=(0,r.calculateAspects)(O.resolvedAspectDefinitions,t,O.skipOutOfSignAspects);N.push(...n)}for(let e=0;e<D.length;e++)for(let t=e+1;t<D.length;t++){const n=D[t],a=[...S([D[e]]),...S([n])],s=(0,r.calculateMultichartAspects)(O.resolvedAspectDefinitions,a,O.skipOutOfSignAspects);N.push(...s)}const I=O.includeAspectPatterns?(0,i.detectAspectPatterns)(_,N):[],j=[],G=[],R=[];let x,L;for(const e of D){const t=N.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===e.name)),n=T(I,1,1).filter((t=>y(t,e.name))),a=O.includeAspectPatterns?(0,c.detectStelliums)(m(e),e.houseCusps):[];j.push({chart:e,placements:{planets:(0,u.getPlanetPositions)(e.planets,e.houseCusps)},aspects:t,patterns:n,stelliums:a,signDistributions:O.includeSignDistributions?(0,p.calculateSignDistributions)(e.planets,e.ascendant):{elements:{},modalities:{},polarities:{}},dispositors:"transit"!==e.chartType?(0,h.calculateDispositors)(e.planets,O.includeDispositors):{}})}if(b.length>=2)for(let e=0;e<b.length;e++)for(let t=e+1;t<b.length;t++){const n=b[e],a=b[t],s=N.filter((e=>e.p1ChartName===n.name&&e.p2ChartName===a.name||e.p1ChartName===a.name&&e.p2ChartName===n.name)),o=T(I,2,2).filter((e=>y(e,n.name)&&y(e,a.name)));G.push({chart1:n,chart2:a,synastryAspects:s,compositePatterns:o,houseOverlays:O.includeHouseOverlays?(0,f.calculateHouseOverlays)(n,a):{chart1InChart2Houses:{},chart2InChart1Houses:{}}})}if(b.length>2){const e=T(I,3).filter((e=>!A(e).has(P?.name||"TRANSIT_PLACEHOLDER")));e.length>0&&(x={charts:b,patterns:e})}if(P){for(const e of b){const t=N.filter((t=>t.p1ChartName===e.name&&t.p2ChartName===P.name||t.p1ChartName===P.name&&t.p2ChartName===e.name)),n=T(I,2,2).filter((t=>y(t,e.name)&&y(t,P.name)));R.push({natalChart:e,transitChart:P,aspects:t,patterns:n})}if(b.length>0){const e=(H=I,F=[P.name],H.filter((e=>F.some((t=>y(e,t)))))).filter((e=>$(e)>=3));e.length>0&&(L={charts:D,patterns:e})}}var H,F;return{settings:O,chartAnalyses:j,pairwiseAnalyses:G,globalAnalysis:x,transitAnalyses:R,globalTransitAnalysis:L}};const a=n(613),s=n(230),o=n(371),r=n(75),i=n(919),c=n(390),u=n(175),l=n(904),p=n(858),h=n(729),f=n(600);function g(e){if(0===e.length)throw new Error("Cannot compute circular mean of empty degree list");const t=e.map((e=>(0,l.normalizeDegree)(e)*Math.PI/180)),n=t.reduce(((e,t)=>e+Math.cos(t)),0),a=t.reduce(((e,t)=>e+Math.sin(t)),0),s=180*Math.atan2(a,n)/Math.PI;return(0,l.normalizeDegree)(s)}function d(e,t){if(void 0!==e&&void 0!==t)return(e+t)/2}function m(e){const t=["Ascendant","Midheaven","North Node","South Node"];return e.planets.filter((e=>!t.includes(e.name)))}function S(e,t=!1){return e.flatMap((e=>(t?m(e):function(e){const t=[...e.planets];return void 0!==e.ascendant&&t.push({name:"Ascendant",degree:e.ascendant}),void 0!==e.midheaven&&t.push({name:"Midheaven",degree:e.midheaven}),t}(e)).map((t=>[t,e.name]))))}function A(e){const t=new Set,n=[],a=e=>{e&&n.push(e)};switch(e.type){case"T-Square":a(e.apex),e.opposition.forEach(a);break;case"Grand Trine":case"Grand Cross":e.planets.forEach(a);break;case"Yod":a(e.apex),e.base.forEach(a);break;case"Mystic Rectangle":e.oppositions.flat().forEach(a);break;case"Kite":e.grandTrine.forEach(a),a(e.opposition)}return n.forEach((e=>{e.chartName&&t.add(e.chartName)})),t}function $(e){return A(e).size}function y(e,t){return A(e).has(t)}function T(e,t,n=1/0){return e.filter((e=>{const a=$(e);return a>=t&&a<=n}))}function C(e,t){if(void 0!==t.houseSystemName)return t.houseSystemName;const n=e.map((e=>e.houseSystemName?.trim())).filter((e=>Boolean(e)));if(0===n.length)return;const a=[...new Set(n)];return 1===a.length?a[0]:`mixed (${a.join(", ")})`}},75:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateAspects=function(e,t,n=!0){const a=[];if(!t||t.length<2)return a;for(let s=0;s<t.length;s++)for(let o=s+1;o<t.length;o++){const[r,c]=t[s],[u,l]=t[o],p=i(e,r,u,n,c,l);p&&a.push(p)}return a},t.calculateMultichartAspects=function(e,t,n=!0){const a=[];for(let s=0;s<t.length;s++)for(let o=s+1;o<t.length;o++){const[r,c]=t[s],[u,l]=t[o];if(c!==l){const t=i(e,r,u,n,c,l);t&&a.push(t)}}return a};const a=n(904),s=n(318);function o(e){const t=e<=180?e:360-e;switch(t){case 0:return 0;case 30:return 1;case 60:return 2;case 90:return 3;case 120:return 4;case 150:return 5;case 180:return 6;default:return Math.round(t/30)}}function r(e,t,n){if(void 0===e.speed||void 0===t.speed)return"exact";const o=e.speed,r=t.speed,i=(0,a.normalizeDegree)(e.degree),c=(0,a.normalizeDegree)(t.degree);let u=Math.abs(i-c);u>180&&(u=360-u);const l=Math.abs(u-n);if((0,s.isExactAspect)(l))return"exact";if(0===o-r)return"exact";const p=(0,a.normalizeDegree)(i+.1*o),h=(0,a.normalizeDegree)(c+.1*r),f=Math.abs(u-n);let g=Math.abs(p-h);g>180&&(g=360-g);return Math.abs(g-n)<f?"applying":"separating"}function i(e,t,n,i,c,u){const l=(0,s.roundDegrees)((0,a.normalizeDegree)(t.degree)),p=(0,s.roundDegrees)((0,a.normalizeDegree)(n.degree));let h=Math.abs(l-p);h>180&&(h=360-h);let f=null;for(const a of e){const e=(0,s.roundDegrees)(Math.abs(h-a.angle));if(i){const e=Math.floor(l/30),t=Math.floor(p/30),n=o(a.angle);let s=Math.abs(e-t);if(s>6&&(s=12-s),s!==n)continue}if(e<=a.orb&&(!f||e<f.orb)){const s=r(t,n,a.angle);f={planetA:t.name,planetB:n.name,p1ChartName:c,p2ChartName:u,aspectType:a.name,orb:e,application:s}}}return f}},82:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateDispositorsOutput=function(e){if(e.summary)return[`[DISPOSITORS] ${e.summary}`];const t=["[DISPOSITOR TREE]"];if(0===Object.keys(e).length)return t.push("No dispositor data available."),t;for(const n in e)t.push(e[n]);return t}},109:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateElementDistributionOutput=function(e){const t=["[ELEMENT DISTRIBUTION]"];return t.push(...(0,a.formatElementDistribution)(e)),t},t.generateModalityDistributionOutput=function(e){const t=["[MODALITY DISTRIBUTION]"];return t.push(...(0,a.formatModalityDistribution)(e)),t},t.generatePolarityOutput=function(e){const t=["[POLARITY]"];return t.push(...(0,a.formatPolarityDistribution)(e)),t};const a=n(858)},156:function(e,t,n){var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,s)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),s=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=t.ZODIAC_SIGNS=t.DEFAULT_ASPECTS=t.DEFAULT_SETTINGS=t.analyzePartnership=t.buildChart=t.humandesignPartnership2txt=t.humandesign2txt=t.formatReportToText=t.groupAspects=t.analyzeCharts=t.chart2txt=void 0;var o=n(666);Object.defineProperty(t,"chart2txt",{enumerable:!0,get:function(){return o.chart2txt}});var r=n(6);Object.defineProperty(t,"analyzeCharts",{enumerable:!0,get:function(){return r.analyzeCharts}});var i=n(865);Object.defineProperty(t,"groupAspects",{enumerable:!0,get:function(){return i.groupAspects}});var c=n(723);Object.defineProperty(t,"formatReportToText",{enumerable:!0,get:function(){return c.formatReportToText}});var u=n(785);Object.defineProperty(t,"humandesign2txt",{enumerable:!0,get:function(){return u.humandesign2txt}}),Object.defineProperty(t,"humandesignPartnership2txt",{enumerable:!0,get:function(){return u.humandesignPartnership2txt}}),Object.defineProperty(t,"buildChart",{enumerable:!0,get:function(){return u.buildChart}}),Object.defineProperty(t,"analyzePartnership",{enumerable:!0,get:function(){return u.analyzePartnership}}),s(n(613),t);var l=n(921);Object.defineProperty(t,"DEFAULT_SETTINGS",{enumerable:!0,get:function(){return l.DEFAULT_SETTINGS}}),Object.defineProperty(t,"DEFAULT_ASPECTS",{enumerable:!0,get:function(){return l.DEFAULT_ASPECTS}}),Object.defineProperty(t,"ZODIAC_SIGNS",{enumerable:!0,get:function(){return l.ZODIAC_SIGNS}});var p=n(230);Object.defineProperty(t,"ChartSettings",{enumerable:!0,get:function(){return p.ChartSettings}});const h=n(666);t.default=h.chart2txt},172:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateChartHeaderOutput=function(e,t="CHART"){return[`[${t}: ${e||"Unknown"}]`]}},175:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getOrdinal=function(e){const t=["th","st","nd","rd"],n=e%100;return e+(t[(n-20)%10]||t[n]||t[0])},t.formatDegMin=function(e){if(!isFinite(e))throw new Error(`Invalid degree-in-sign value: ${e}`);let t=e%30;t<0&&(t+=30);const n=Math.min(Math.floor(t*s+r),o-1),a=Math.floor(n/s);return`${a}°${(n%s).toString().padStart(2,"0")}'`},t.getSign=i,t.getHouse=c,t.getPlanetPositions=function(e,t){return e.map((e=>{const n=(0,a.normalizeDegree)(e.degree),s={name:e.name,degree:n,sign:i(n),speed:e.speed};return t&&(s.house=c(n,t)),s}))};const a=n(904),s=60,o=30*s,r=1e-9;function i(e){return(0,a.getDegreeSign)(e)}function c(e,t){for(let n=0;n<12;n++){const a=t[n],s=t[(n+1)%12];if(a<s){if(e>=a&&e<s)return n+1}else if(e>=a||e<s)return n+1}return-1}},230:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ChartSettings=void 0;const a=n(921);t.ChartSettings=class{constructor(e={}){const t={...a.DEFAULT_SETTINGS,...e};Object.assign(this,t)}get resolvedAspectDefinitions(){if(Array.isArray(this.aspectDefinitions))return this.aspectDefinitions;switch(this.aspectDefinitions){case"traditional":return a.SIMPLE_TRADITIONAL_ORBS;case"modern":return a.SIMPLE_MODERN_ORBS;case"tight":return a.SIMPLE_TIGHT_ORBS;case"wide":return a.SIMPLE_WIDE_ORBS;default:return a.DEFAULT_SETTINGS.aspectDefinitions}}}},234:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generatePlanetsOutput=function(e){const t=["[PLANETS]"];e.forEach((e=>{const n=(0,s.formatPlanetWithDignities)(e),r=e.speed&&e.speed<0?" Retrograde":"";let i=`${e.name}: ${(0,a.formatDegMin)((0,o.getDegreeInSign)(e.degree))} ${e.sign}${r} ${n}`;e.house&&(i+=`, ${(0,a.getOrdinal)(e.house)} house`),t.push(i.replace(/\s+/g," ").trim())})),0===e.length&&t.push("No planets listed.");return t};const a=n(175),s=n(400),o=n(904)},318:(e,t)=>{function n(e,n,a=t.DEFAULT_EPSILON){return Math.abs(e-n)<a}function a(e,n=t.DEFAULT_EPSILON){return Math.abs(e)<n}function s(e,a,s=t.DEFAULT_EPSILON){return n(e,a,s)}Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_EPSILON=void 0,t.floatEquals=n,t.isNearZero=a,t.roundDegrees=function(e){return Math.round(1e4*e)/1e4},t.degreeEquals=s,t.isOnCusp=function(e,t,n=.001){return s(e,t,n)},t.isExactAspect=function(e,t=.1){return a(e,t)},t.DEFAULT_EPSILON=1e-4},371:(e,t)=>{function n(e){return e&&"object"==typeof e?"string"!=typeof e.name||""===e.name.trim()?"Point name must be a non-empty string":"number"==typeof e.degree&&isFinite(e.degree)?void 0===e.speed||"number"==typeof e.speed&&isFinite(e.speed)?null:`Point ${e.name} has invalid speed value: ${e.speed}`:`Point ${e.name} has invalid degree value: ${e.degree}`:"Point must be an object"}function a(e){if(!Array.isArray(e))return"Points must be an array";for(let t=0;t<e.length;t++){const a=n(e[t]);if(a)return`Point at index ${t}: ${a}`}const t=e.map((e=>e.name)),a=t.filter(((e,n)=>t.indexOf(e)!==n));return a.length>0?`Duplicate point names found: ${a.join(", ")}`:null}function s(e){if(void 0===e)return null;if(!Array.isArray(e))return"House cusps must be an array";if(12!==e.length)return`House cusps must contain exactly 12 values, got ${e.length}`;for(let t=0;t<e.length;t++)if("number"!=typeof e[t]||!isFinite(e[t]))return`House cusp ${t+1} has invalid value: ${e[t]}`;return null}function o(e){if(!e||"object"!=typeof e)return"Chart data must be an object";if("string"!=typeof e.name||""===e.name.trim())return"Chart name must be a non-empty string";const t=a(e.planets);if(t)return`Planets validation failed: ${t}`;if(void 0!==e.ascendant&&("number"!=typeof e.ascendant||!isFinite(e.ascendant)))return`Ascendant has invalid value: ${e.ascendant}`;if(void 0!==e.midheaven&&("number"!=typeof e.midheaven||!isFinite(e.midheaven)))return`Midheaven has invalid value: ${e.midheaven}`;const n=s(e.houseCusps);if(n)return`House cusps validation failed: ${n}`;if(void 0!==e.points){const t=a(e.points);if(t)return`Additional points validation failed: ${t}`}if(void 0!==e.timestamp&&(!(e.timestamp instanceof Date)||isNaN(e.timestamp.getTime())))return"Timestamp must be a valid Date object";if(void 0!==e.location&&"string"!=typeof e.location)return"Location must be a string";if(void 0!==e.chartType){const t=["natal","event","transit","composite"];if(!t.includes(e.chartType))return`Chart type must be one of: ${t.join(", ")}`}return null}function r(e){if(!Array.isArray(e))return"Multi-chart data must be an array";if(0===e.length)return"Multi-chart data must contain at least one chart";if(e.length>10)return"Multi-chart data cannot contain more than 10 charts";for(let t=0;t<e.length;t++){const n=o(e[t]);if(n)return`Chart at index ${t} (${e[t]?.name||"unnamed"}): ${n}`}const t=e.map((e=>e.name)),n=t.filter(((e,n)=>t.indexOf(e)!==n));if(n.length>0)return`Duplicate chart names found: ${n.join(", ")}`;return e.filter((e=>"transit"===e.chartType)).length>1?"Cannot have more than one transit chart":null}Object.defineProperty(t,"__esModule",{value:!0}),t.validatePoint=n,t.validatePoints=a,t.validateHouseCusps=s,t.validateChartData=o,t.validateMultiChartData=r,t.validateInputData=function(e){if(!e)return"Data is required";return Array.isArray(e)?r(e):o(e)}},388:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.determineChartType=function(e){const t=e.some((e=>"composite"===e.chartType));if(1===e.length&&t)return"composite";let n=t?"composite":"natal",a="";const s=e.filter((({chartType:e})=>"transit"!==e&&"event"!==e)),o=e.filter((({chartType:e})=>"event"===e)),r=e.filter((({chartType:e})=>"transit"===e));if(r.length>1)throw new Error("Must provide at most one transit chart");const i=r.length>0;s.length>0?0===o.length?i&&(a="_with_transit"):a=1===o.length?i?"_with_event_and_transit":"_with_event":i?"_with_events_and_transit":"_with_events":i&&(a="_with_transit");if(0===s.length){if(0===o.length)throw new Error("Must provide at least one non-transit chart");n=1===o.length?"event":"multi_event"}else 1===s.length?t||(n="natal"):n=2===s.length?"synastry":"group_synastry";return n+a},t.generateMetadataOutput=function(e,t,n,a){const s=["[METADATA]",`chart_type: ${t}`];n&&s.push(`house_system: ${n}`);a&&(s.push(`composite_method: ${a.method}`),s.push(`source_charts: ${a.chartNames.join(", ")}`));return s.push(`date_format: ${e.dateFormat}`),s}},390:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectStelliums=function(e,t,n=3){const o=[],i=new Map;if(e.forEach((e=>{const t=(0,a.getDegreeSign)(e.degree);i.has(t)||i.set(t,[]),i.get(t).push(e)})),i.forEach(((e,a)=>{if(e.length>=n){const n=e.map((e=>r(e,t))),s=n.map((e=>e.house)).filter((e=>void 0!==e)),i=e.map((e=>e.degree)),c=Math.max(...i)-Math.min(...i);o.push({type:"Stellium",planets:n,sign:a,houses:[...new Set(s)].sort(),span:c})}})),t){const a=new Map;e.forEach((e=>{const n=(0,s.getHouseForPoint)(e.degree,t);n&&(a.has(n)||a.set(n,[]),a.get(n).push(e))})),a.forEach(((e,a)=>{if(e.length>=n){const n=e.map((e=>r(e,t))),s=e.map((e=>e.degree)),i=Math.max(...s)-Math.min(...s);o.find((e=>"Stellium"===e.type&&e.planets.some((e=>n.some((t=>t.name===e.name))))))||o.push({type:"Stellium",planets:n,houses:[a],span:i})}}))}return o},t.formatStellium=function(e){const t=e.planets.map((e=>e.name)).join(", ");let n="";e.sign&&(n=e.sign);if(e.houses&&e.houses.length>0){const t=1===e.houses.length?`${(0,o.getOrdinal)(e.houses[0])} House`:e.houses.map((e=>`${(0,o.getOrdinal)(e)} House`)).join("-");n+=n?` (${t})`:t}const a=n?` in ${n}`:"";return[`Stellium (${e.span.toFixed(1)}°): ${t}${a}`]};const a=n(904),s=n(600),o=n(175);function r(e,t){const n=(0,a.getDegreeSign)(e.degree),o=t&&(0,s.getHouseForPoint)(e.degree,t)||void 0;return{name:e.name,degree:e.degree,sign:n,house:o}}},400:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatPlanetWithDignities=function(e){const t=e.sign,n=s[e.name],o=a.ZODIAC_SIGN_DATA.find((e=>e.name===t))?.ruler,r=[];n&&n[t]&&r.push(...n[t]);let i=r.join(", ");o&&e.name!==o&&(i?i+=` | Ruler: ${o}`:i=`Ruler: ${o}`);if(i)return`[${i}]`;return""};const a=n(921),s={Sun:{Leo:["Domicile"],Aries:["Exaltation"],Aquarius:["Detriment"],Libra:["Fall"]},Moon:{Cancer:["Domicile"],Taurus:["Exaltation"],Capricorn:["Detriment"],Scorpio:["Fall"]},Mercury:{Gemini:["Domicile"],Virgo:["Domicile","Exaltation"],Pisces:["Detriment","Fall"],Sagittarius:["Detriment"]},Venus:{Taurus:["Domicile"],Libra:["Domicile"],Scorpio:["Detriment"],Aries:["Fall"],Virgo:["Fall"]},Mars:{Aries:["Domicile"],Scorpio:["Domicile"],Libra:["Detriment"],Cancer:["Fall"]},Jupiter:{Sagittarius:["Domicile"],Pisces:["Domicile"],Gemini:["Detriment"],Virgo:["Fall"]},Saturn:{Capricorn:["Domicile"],Aquarius:["Domicile"],Cancer:["Detriment"],Leo:["Fall"]}}},600:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateHouseOverlays=function(e,t){const n={};if(t.houseCusps)for(const s of e.planets)n[s.name]=(0,a.getHouse)(s.degree,t.houseCusps);const s={};if(e.houseCusps)for(const n of t.planets)s[n.name]=(0,a.getHouse)(n.degree,e.houseCusps);return{chart1InChart2Houses:n,chart2InChart1Houses:s}},t.getHouseForPoint=function(e,t){return(0,a.getHouse)(e,t)};const a=n(175)},613:(e,t)=>{var n,a;Object.defineProperty(t,"__esModule",{value:!0}),t.PlanetCategory=t.AspectClassification=void 0,t.isMultiChartData=function(e){return Array.isArray(e)},function(e){e.Major="major",e.Minor="minor",e.Esoteric="esoteric"}(n||(t.AspectClassification=n={})),function(e){e.Luminaries="luminaries",e.Personal="personal",e.Social="social",e.Outer="outer",e.Angles="angles"}(a||(t.PlanetCategory=a={}))},666:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.chart2txt=function(e,t={}){const n=(0,a.analyzeCharts)(e,t),r=n.settings;return n.chartAnalyses.forEach((e=>{e.groupedAspects=(0,s.groupAspects)(e.aspects,r)})),n.pairwiseAnalyses.forEach((e=>{e.groupedSynastryAspects=(0,s.groupAspects)(e.synastryAspects,r)})),n.transitAnalyses.forEach((e=>{e.groupedAspects=(0,s.groupAspects)(e.aspects,r)})),(0,o.formatReportToText)(n)};const a=n(6),s=n(865),o=n(723)},668:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHousesOutput=function(e){const t=["[HOUSE CUSPS]"];if(!e||12!==e.length)return t.push("House cusps not available"),t;for(let n=0;n<6;n++){const o=n,r=n+6,i=e[o],c=e[r],u=(0,a.getDegreeSign)(i),l=(0,s.formatDegMin)((0,a.getDegreeInSign)(i)),p=(0,s.getOrdinal)(o+1)+" house",h=(0,a.getDegreeSign)(c),f=(0,s.formatDegMin)((0,a.getDegreeInSign)(c)),g=(0,s.getOrdinal)(r+1)+" house",d=`${p}: ${l} ${u}`.padEnd(28),m=`${g}: ${f} ${h}`;t.push(`${d} ${m}`)}return t};const a=n(904),s=n(175)},723:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatReportToText=function(e){const{chartAnalyses:t,pairwiseAnalyses:n,globalAnalysis:r,transitAnalyses:i,globalTransitAnalysis:u}=e,h=e.settings,f=[],g=t.map((e=>e.chart)),A=(0,a.determineChartType)(g),$=g.find((e=>"composite"===e.chartType)),y=$?.compositeSource;f.push(...(0,a.generateMetadataOutput)(h,A,h.houseSystemName,y)),f.push("");const T=t.filter((e=>"transit"!==e.chart.chartType));for(const e of T){const t="composite"===e.chart.chartType?"COMPOSITE":void 0;f.push(...d(e,h,t))}for(const e of n)f.push(...m(e,h));r&&f.push(...S(r,!1));if(i.length>0){const e=t.find((e=>"transit"===e.chart.chartType));e&&(f.push(...(0,s.generateChartHeaderOutput)(e.chart.name,"TRANSIT")),f.push(...(0,o.generateBirthdataOutput)(e.chart.location,e.chart.timestamp,h,"[DATETIME]")),f.push(...(0,c.generatePlanetsOutput)(e.placements.planets)),f.push(""));for(const e of i)f.push(...(0,l.generateAspectsOutput)(`[TRANSIT ASPECTS: ${e.natalChart.name}]`,e.groupedAspects,e.natalChart.name,e.transitChart.name,!0)),h.includeAspectPatterns&&f.push(...(0,p.generateAspectPatternsOutput)(e.patterns,`Transit to ${e.natalChart.name}`,!0)),f.push("")}u&&f.push(...S(u,!0));return f.join("\n").trimEnd()};const a=n(388),s=n(172),o=n(888),r=n(945),i=n(668),c=n(234),u=n(82),l=n(784),p=n(762),h=n(756),f=n(109),g=n(390),d=(e,t,n)=>{const a=[],{chart:h,groupedAspects:d,patterns:m,stelliums:S,signDistributions:A,dispositors:$,placements:y}=e;return a.push(...(0,s.generateChartHeaderOutput)(h.name,n)),a.push(...(0,o.generateBirthdataOutput)(h.location,h.timestamp,t)),a.push(...(0,r.generateAnglesOutput)(h.ascendant,h.midheaven)),a.push(...(0,i.generateHousesOutput)(h.houseCusps)),a.push(...(0,c.generatePlanetsOutput)(y.planets)),t.includeDispositors&&a.push(...(0,u.generateDispositorsOutput)($)),t.includeSignDistributions&&(a.push(...(0,f.generateElementDistributionOutput)(A.elements)),a.push(...(0,f.generateModalityDistributionOutput)(A.modalities)),a.push(...(0,f.generatePolarityOutput)(A.polarities))),a.push(...(0,l.generateAspectsOutput)("[ASPECTS]",d)),t.includeAspectPatterns&&(a.push(...(0,p.generateAspectPatternsOutput)(m,void 0,!1)),S.length>0?S.forEach((e=>{a.push(...(0,g.formatStellium)(e))})):a.push("No Stelliums detected.")),a.push(""),a},m=(e,t)=>{const n=[],{chart1:a,chart2:o,groupedSynastryAspects:r,compositePatterns:i,houseOverlays:c}=e,u="event"===a.chartType&&"event"===o.chartType?"EVENT_RELATIONSHIP":"event"===a.chartType||"event"===o.chartType?"NATAL_EVENT":"SYNASTRY";return n.push(...(0,s.generateChartHeaderOutput)(`${a.name}-${o.name}`,u)),n.push(...(0,l.generateAspectsOutput)("[PLANET-PLANET ASPECTS]",r,a.name,o.name)),t.includeAspectPatterns&&i.length>0&&n.push(...(0,p.generateAspectPatternsOutput)(i,`${a.name}-${o.name} Composite`,!0)),n.push(""),t.includeHouseOverlays&&(n.push(...(0,h.generateHouseOverlaysOutput)(c,a.name,o.name)),n.push("")),n},S=(e,t=!1)=>{const n=[],{charts:a,patterns:s}=e;if(s.length>0){const e=a.map((e=>e.name)).join("-");let o=`${e} Global Composite`;t&&(o=`${e} Global Transit Composite`),n.push(...(0,p.generateAspectPatternsOutput)(s,o,!0)),n.push("")}return n}},729:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateDispositors=function(e,t=!0){if(!1===t)return{};const n={};e.forEach((e=>{n[e.name]=function(e){const t=(0,s.getSign)(e.degree),n=a.ZODIAC_SIGN_DATA.find((e=>e.name===t));return n?n.ruler:"Unknown"}(e)}));const o={};if(e.forEach((e=>{o[e.name]||function(e,t,n){if(n[e])return n[e];const a=[e];let s=e;for(;;){const o=t[s];if(!o||!t.hasOwnProperty(o)){const t={path:[...a,o],isCycle:!1,isFinal:!1,isBroken:!0};return n[e]=t}if(o===s){const t={path:a,isCycle:!1,isFinal:!0,isBroken:!1};return n[e]=t}if(a.includes(o)){const e=a.indexOf(o),t=a.slice(e),s={path:[...a,o],isCycle:!0,isFinal:!1,isBroken:!1};return t.forEach((e=>{n[e]=s})),s}if(n[o]){const t=n[o],s=[...a,...t.path],r={...t,path:s};return n[e]=r}a.push(o),s=o}}(e.name,n,o)})),"finals"===t){const t=new Set,a=new Map;e.forEach((e=>{n[e.name]===e.name&&t.add(e.name)}));for(const e in o){const t=o[e];if(t.isCycle){const e=t.path[t.path.length-1],n=t.path.indexOf(e),s=t.path.slice(n,-1),o=[...new Set(s)].sort().join("|");a.has(o)||a.set(o,s)}}const s=[];if(t.size>0&&s.push(`Final dispositors: ${[...t].sort().join(", ")}`),a.size>0){const e=[...a.values()].map((e=>{const t=[...new Set(e)].sort()[0],n=e.indexOf(t);return[...[...e.slice(n),...e.slice(0,n)],t].join(" → ")})).sort();s.push(`Cycles: ${e.join(", ")}`)}return 0===s.length?{summary:"No final dispositors or cycles found"}:{summary:s.join("; ")}}const r={};return e.forEach((e=>{const t=e.name,a=[t];let s=t;for(;;){const e=n[s];if(!e||!n.hasOwnProperty(e)){r[t]=`${a.join(" → ")} → ${e} (not in chart)`;break}if(e===s){r[t]=`${a.join(" → ")} → (final)`;break}if(a.includes(e)){r[t]=`${a.join(" → ")} → ${e} (cycle)`;break}a.push(e),s=e}})),r};const a=n(921),s=n(175)},756:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateHouseOverlaysOutput=function(e,t,n){const a=["[HOUSE OVERLAYS]"];a.push(`${t}'s planets in ${n}'s houses:`),Object.keys(e.chart1InChart2Houses).length>0?a.push(s(e.chart1InChart2Houses)):a.push(`(${n} house cusps not available)`);a.push(`${n}'s planets in ${t}'s houses:`),Object.keys(e.chart2InChart1Houses).length>0?a.push(s(e.chart2InChart1Houses)):a.push(`(${t} house cusps not available)`);return a};const a=n(175);function s(e){const t={};for(const n in e){const a=e[n];t[a]||(t[a]=[]),t[a].push(n)}return Object.keys(t).map(Number).sort(((e,t)=>e-t)).map((e=>{const n=t[e].join(", ");return`${(0,a.getOrdinal)(e)}: ${n}`})).join(" | ")}},762:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectPatternsOutput=function(e,t,n=!0){const a=[t?`[ASPECT PATTERNS: ${t}]`:"[ASPECT PATTERNS]"];if(0===e.length)return a.push("No T-Squares detected."),a.push("No Grand Trines detected."),a;const s=e.filter((t=>"Grand Trine"!==t.type||!function(e,t){return"Grand Trine"===e.type&&t.some((t=>{if("Kite"!==t.type)return!1;const n=e=>`${e.chartName||""}-${e.name}-${e.degree}`,a=t.grandTrine.map(n),s=e.planets.map(n);return a.length===s.length&&a.every((e=>s.includes(e)))}))}(t,e))),r=["T-Square","Grand Trine","Grand Cross","Yod","Mystic Rectangle","Kite"];s.sort(((e,t)=>r.indexOf(e.type)-r.indexOf(t.type))).forEach((e=>{switch(e.type){case"T-Square":a.push(...function(e,t=!0){if("T-Square"!==e.type)return[];const n=o(e.apex,!1,t),a=o(e.opposition[0],!1,t),s=o(e.opposition[1],!1,t);return[`T-Square (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n} ← ${a} ↔ ${s}`]}(e,n));break;case"Grand Trine":a.push(...function(e,t=!0){if("Grand Trine"!==e.type)return[];const n=e.planets.map((e=>o(e,!1,t))).join(" △ ");return[`Grand Trine (${e.element}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Grand Cross":a.push(...function(e,t=!0){if("Grand Cross"!==e.type)return[];const n=e.planets.map((e=>o(e,!1,t))).join(" ⨯ ");return[`Grand Cross (${e.mode}, ${e.averageOrb.toFixed(1)}°): ${n}`]}(e,n));break;case"Yod":a.push(...function(e,t=!0){if("Yod"!==e.type)return[];const n=o(e.apex,!1,t),a=o(e.base[0],!1,t),s=o(e.base[1],!1,t);return[`Yod (${e.averageOrb.toFixed(1)}°): ${n} ← ${a} • ${s}`]}(e,n));break;case"Mystic Rectangle":a.push(...function(e,t=!0){if("Mystic Rectangle"!==e.type)return[];const n=o(e.oppositions[0][0],!1,t),a=o(e.oppositions[0][1],!1,t),s=o(e.oppositions[1][0],!1,t),r=o(e.oppositions[1][1],!1,t);return[`Mystic Rectangle (${e.averageOrb.toFixed(1)}°): ${n} ↔ ${a} | ${s} ↔ ${r}`]}(e,n));break;case"Kite":a.push(...function(e,t=!0){if("Kite"!==e.type)return[];const n=e.grandTrine.map((e=>o(e,!1,t))).join(" △ "),a=o(e.opposition,!1,t),s=e.grandTrine[0].sign?function(e){const t=["Taurus","Virgo","Capricorn"],n=["Gemini","Libra","Aquarius"],a=["Cancer","Scorpio","Pisces"];return["Aries","Leo","Sagittarius"].includes(e)?"Fire":t.includes(e)?"Earth":n.includes(e)?"Air":a.includes(e)?"Water":""}(e.grandTrine[0].sign):"";return[`Kite (${s?`${s}, `:""}${e.averageOrb.toFixed(1)}°): [${n}] ← ${a}`]}(e,n))}})),""===a[a.length-1]&&a.pop();return a};const a=n(904),s=n(175);function o(e,t=!1,n=!0){const o=(0,s.formatDegMin)((0,a.getDegreeInSign)(e.degree)),r=t&&e.house?` (${(0,s.getOrdinal)(e.house)} house)`:"";return`${n&&e.chartName?`${e.chartName}'s `:""}${e.name} ${o} ${e.sign}${r}`}},784:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAspectsOutput=function(e,t,n,a,s=!1){const o=[e];if(!t||0===t.size)return o.push("None"),o;return t.forEach(((e,t)=>{o.push(t),e.forEach((e=>{o.push(function(e,t,n,a=!1){const s=t?`${t}'s ${e.planetA}`:e.planetA;let o=e.planetB;a?o=`transiting ${e.planetB}`:n&&(o=`${n}'s ${e.planetB}`);const r=e.application&&"exact"!==e.application?` (${e.application})`:"";return`${s} ${e.aspectType} ${o}: ${e.orb.toFixed(1)}°${r}`}(e,n,a,s))}))})),o}},785:(e,t)=>{function n(e){const n=(e+58)%360/360,a=Math.floor(64*n),s=384*n%6;return{gate:t.GATES[a],line:Math.floor(s)+1}}function a(e){const n=(t.GATES.indexOf(e)+32)%64;return t.GATES[n]}function s(e){const t=[];for(const s of e){const{gate:e,line:o}=n(s.longitude);if(t.push({planet:s.name,gate:e,line:o}),"Sun"===s.name){const n=a(e),s=o;t.push({planet:"Earth",gate:n,line:s})}else if("North Node"===s.name){const n=a(e),s=o;t.push({planet:"South Node",gate:n,line:s})}}return t}function o(e,n){const a=new Map;for(const n of e){const e=a.get(n.gate);e?e.sources.includes("Personality")||e.sources.push("Personality"):a.set(n.gate,{center:t.GATE_CENTERS[n.gate],sources:["Personality"]})}for(const e of n){const n=a.get(e.gate);n?n.sources.includes("Design")||n.sources.push("Design"):a.set(e.gate,{center:t.GATE_CENTERS[e.gate],sources:["Design"]})}return a}function r(e){const n=[];for(const a of t.CHANNELS){const[t,s]=a.gates;e.has(t)&&e.has(s)&&n.push(a)}return n}function i(e,n){const a=new Set,s=new Set;for(const t of e)a.add(t.centers[0]),a.add(t.centers[1]);for(const[,e]of n)s.add(e.center);const o=[],r=[],i=[];for(const e of t.ALL_CENTERS)a.has(e)?o.push(e):s.has(e)?r.push(e):i.push(e);return{defined:o,undefined:r,open:i}}function c(e,n){const a=e.includes("Sacral"),s=function(e,n){const a=["Sacral","Solar Plexus","Ego","Root"],s=new Map;for(const e of t.ALL_CENTERS)s.set(e,new Set);for(const t of e)s.get(t.centers[0]).add(t.centers[1]),s.get(t.centers[1]).add(t.centers[0]);for(const e of a){if(!n.includes(e))continue;const t=new Set,a=[e];for(;a.length>0;){const e=a.shift();if("Throat"===e)return!0;if(!t.has(e)){t.add(e);for(const n of s.get(e)||[])t.has(n)||a.push(n)}}}return!1}(n,e);return a?s?"Manifesting Generator":"Generator":s?"Manifestor":0===e.length?"Reflector":"Projector"}function u(e,t){if(e.includes("Solar Plexus"))return"Emotional (Solar Plexus)";if(e.includes("Sacral"))return"Sacral";if(e.includes("Spleen"))return"Splenic";if(e.includes("Ego")){const e=t.some((e=>e.centers.includes("Ego")&&e.centers.includes("Throat"))),n=t.some((e=>e.centers.includes("Ego")&&e.centers.includes("G Center")));if(e||n)return"Ego"}if(e.includes("G Center")){if(t.some((e=>e.centers.includes("G Center")&&e.centers.includes("Throat"))))return"Self-Projected"}return e.includes("Ajna")||e.includes("Head")?"Mental (Outer Authority)":"Lunar"}function l(e,t){if(0===t.length)return"None";const n=p(e,t);switch(n.length){case 1:return"Single Definition";case 2:return"Split Definition";case 3:return"Triple Split Definition";case 4:return"Quadruple Split Definition";default:return`${n.length}-Split Definition`}}function p(e,n){if(0===n.length)return[];const a=new Map;for(const e of n)a.set(e,e);function s(e){return a.get(e)!==e&&a.set(e,s(a.get(e))),a.get(e)}function o(e,t){const n=s(e),o=s(t);n!==o&&a.set(n,o)}for(const t of e){const[e,n]=t.centers;a.has(e)&&a.has(n)&&o(e,n)}const r=new Map;for(const e of n){const t=s(e);r.has(t)||r.set(t,[]),r.get(t).push(e)}return Array.from(r.values()).sort(((e,n)=>t.ALL_CENTERS.indexOf(e[0])-t.ALL_CENTERS.indexOf(n[0])))}function h(e,t){const n=new Set;for(const e of t)n.add(e.gates[0]),n.add(e.gates[1]);const a=[];for(const[t,s]of e)n.has(t)||a.push({gate:t,center:s.center});return a.sort(((e,t)=>e.gate-t.gate))}function f(e,t){return`${e}/${t}`}function g(e,n,a,s,o,r){let i;return i=o<4?"Right Angle Cross":o>=5?"Left Angle Cross":r<4?"Juxtaposition Cross":"Left Angle Cross",`${i} of ${t.INCARNATION_CROSSES[e]||"Unknown"} (${e}/${n} | ${a}/${s})`}function d(e,n={}){const{personality:a,design:d}=e,m=s(a.planets),S=s(d.planets),A=o(m,S),$=r(A),{defined:y,undefined:T,open:C}=i($,A),E=c(y,$),O=t.STRATEGY_BY_TYPE[E],v=u(y,$),M=l($,y),b=p($,y),P=h(A,$),D=m.find((e=>"Sun"===e.planet)),N=S.find((e=>"Sun"===e.planet)),_=f(D.line,N.line),I=t.PROFILE_NAMES[_]||"",j=m.find((e=>"Earth"===e.planet)),G=S.find((e=>"Earth"===e.planet)),R=g(D.gate,j.gate,N.gate,G.gate,D.line,N.line);return function(e){const n=[];if(n.push("[METADATA]"),n.push("chart_type: human_design"),n.push(""),n.push(`[CHART: ${e.name}]`),n.push(`[BIRTHDATA] ${e.location} | ${e.date} | ${e.time}`),n.push(""),n.push("[TYPE]"),n.push(`Type: ${e.type}`),n.push(`Strategy: ${e.strategy}`),n.push(`Authority: ${e.authority}`),n.push(`Definition: ${e.definition}`),e.definitionIslands.length>1){const t=e.definitionIslands.map((e=>`[${e.join("+")}]`));n.push(`Definition Islands: ${t.join(" + ")}`)}n.push(`Profile: ${e.profile}${e.profileName?` (${e.profileName})`:""}`),n.push(`Incarnation Cross: ${e.incarnationCross}`),n.push(""),n.push("[CENTERS]"),e.definedCenters.length>0&&n.push(`Defined: ${e.definedCenters.join(", ")}`);e.undefinedCenters.length>0&&n.push(`Undefined: ${e.undefinedCenters.join(", ")}`);e.openCenters.length>0&&n.push(`Open: ${e.openCenters.join(", ")}`);if(n.push(""),n.push("[CHANNELS]"),e.activeChannels.length>0)for(const t of e.activeChannels)n.push(`${t.gates[0]}-${t.gates[1]} (${t.name}): ${t.centers[0]} ↔ ${t.centers[1]}`);else n.push("None");if(n.push(""),n.push("[HANGING GATES]"),n.push("(Gates not part of a complete channel)"),e.hangingGates.length>0)for(const a of e.hangingGates)n.push(`${a.gate}: ${t.GATE_NAMES[a.gate]} | ${a.center}`);else n.push("None");n.push(""),n.push("[GATES]");const a=Array.from(e.allGates.entries()).sort(((e,t)=>e[0]-t[0]));for(const[e,s]of a){const a=2===s.sources.length?"Both":s.sources[0];n.push(`${e}: ${t.GATE_NAMES[e]} | ${s.center} (${a})`)}n.push(""),n.push("[PERSONALITY ACTIVATIONS]");const s=e.personalityActivations.find((e=>"Sun"===e.planet)),o=e.personalityActivations.find((e=>"Earth"===e.planet)),r=e.personalityActivations.find((e=>"Moon"===e.planet)),i=e.personalityActivations.find((e=>"North Node"===e.planet)),c=e.personalityActivations.find((e=>"South Node"===e.planet)),u=e.personalityActivations.find((e=>"Mercury"===e.planet)),l=e.personalityActivations.find((e=>"Venus"===e.planet)),p=e.personalityActivations.find((e=>"Mars"===e.planet)),h=e.personalityActivations.find((e=>"Jupiter"===e.planet)),f=e.personalityActivations.find((e=>"Saturn"===e.planet)),g=e.personalityActivations.find((e=>"Uranus"===e.planet)),d=e.personalityActivations.find((e=>"Neptune"===e.planet)),m=e.personalityActivations.find((e=>"Pluto"===e.planet));n.push(`Sun: ${s.gate}.${s.line} Earth: ${o.gate}.${o.line}`),n.push(`Moon: ${r.gate}.${r.line}`),n.push(`North Node: ${i.gate}.${i.line} South Node: ${c.gate}.${c.line}`),n.push(`Mercury: ${u.gate}.${u.line} Venus: ${l.gate}.${l.line} Mars: ${p.gate}.${p.line}`),n.push(`Jupiter: ${h.gate}.${h.line} Saturn: ${f.gate}.${f.line}`),n.push(`Uranus: ${g.gate}.${g.line} Neptune: ${d.gate}.${d.line} Pluto: ${m.gate}.${m.line}`),n.push(""),n.push("[DESIGN ACTIVATIONS]");const S=e.designActivations.find((e=>"Sun"===e.planet)),A=e.designActivations.find((e=>"Earth"===e.planet)),$=e.designActivations.find((e=>"Moon"===e.planet)),y=e.designActivations.find((e=>"North Node"===e.planet)),T=e.designActivations.find((e=>"South Node"===e.planet)),C=e.designActivations.find((e=>"Mercury"===e.planet)),E=e.designActivations.find((e=>"Venus"===e.planet)),O=e.designActivations.find((e=>"Mars"===e.planet)),v=e.designActivations.find((e=>"Jupiter"===e.planet)),M=e.designActivations.find((e=>"Saturn"===e.planet)),b=e.designActivations.find((e=>"Uranus"===e.planet)),P=e.designActivations.find((e=>"Neptune"===e.planet)),D=e.designActivations.find((e=>"Pluto"===e.planet));return n.push(`Sun: ${S.gate}.${S.line} Earth: ${A.gate}.${A.line}`),n.push(`Moon: ${$.gate}.${$.line}`),n.push(`North Node: ${y.gate}.${y.line} South Node: ${T.gate}.${T.line}`),n.push(`Mercury: ${C.gate}.${C.line} Venus: ${E.gate}.${E.line} Mars: ${O.gate}.${O.line}`),n.push(`Jupiter: ${v.gate}.${v.line} Saturn: ${M.gate}.${M.line}`),n.push(`Uranus: ${b.gate}.${b.line} Neptune: ${P.gate}.${P.line} Pluto: ${D.gate}.${D.line}`),n.join("\n")}({name:n.name||"Chart",location:n.location||`${a.location.latitude}, ${a.location.longitude}`,date:a.date,time:a.time,type:E,strategy:O,authority:v,definition:M,definitionIslands:b,profile:_,profileName:I,incarnationCross:R,definedCenters:y,undefinedCenters:T,openCenters:C,activeChannels:$,hangingGates:P,allGates:A,personalityActivations:m,designActivations:S})}function m(e,n){const a=[],s=[],o=[],u=[],h=new Set(e.allGates.keys()),f=new Set(n.allGates.keys()),g=new Set;for(const t of e.activeChannels)g.add(`${t.gates[0]}-${t.gates[1]}`);const d=new Set;for(const e of n.activeChannels)d.add(`${e.gates[0]}-${e.gates[1]}`);for(const r of t.CHANNELS){const[t,i]=r.gates,c=h.has(t),l=h.has(i),p=f.has(t),g=f.has(i),d=c&&l,m=p&&g;if(d&&m)s.push({channel:r,type:"companionship",person1Gates:[t,i],person2Gates:[t,i],description:`Both ${e.name} and ${n.name} have the complete ${r.name} channel - deep mutual understanding in this area`});else if(d||m){if(d&&!m&&(p||g)){const a=[];p&&a.push(t),g&&a.push(i),o.push({channel:r,type:"dominance",person1Gates:[t,i],person2Gates:a,description:`${e.name} has the complete ${r.name} channel and leads; ${n.name} has gate ${a.join(", ")}`})}else if(m&&!d&&(c||l)){const a=[];c&&a.push(t),l&&a.push(i),o.push({channel:r,type:"dominance",person1Gates:a,person2Gates:[t,i],description:`${n.name} has the complete ${r.name} channel and leads; ${e.name} has gate ${a.join(", ")}`})}}else{if((c||p)&&(l||g)){const s=[],o=[];c&&s.push(t),l&&s.push(i),p&&o.push(t),g&&o.push(i);const h=s.filter((e=>!o.includes(e))),f=o.filter((e=>!s.includes(e)));h.length>0&&f.length>0?a.push({channel:r,type:"electromagnetic",person1Gates:s,person2Gates:o,description:`${e.name} brings gate ${h.join(", ")}, ${n.name} brings gate ${f.join(", ")} - magnetic attraction`}):s.length>0&&o.length>0&&u.push({channel:r,type:"compromise",person1Gates:s,person2Gates:o,description:`Both contribute to the ${r.name} channel but share gate(s) - requires compromise`})}}}const m=new Map;for(const[t,n]of e.allGates)m.set(t,{center:n.center,sources:[e.name]});for(const[e,t]of n.allGates){const a=m.get(e);a?a.sources.push(n.name):m.set(e,{center:t.center,sources:[n.name]})}const S=r(m),A=i(S,m),$=c(A.defined,S),y=t.STRATEGY_BY_TYPE[$],T=l(S,A.defined),C=p(S,A.defined),E=new Set(e.activeChannels.map((e=>`${e.gates[0]}-${e.gates[1]}`))),O=new Set(n.activeChannels.map((e=>`${e.gates[0]}-${e.gates[1]}`))),v=[],M=[],b=[];for(const e of S){const t=`${e.gates[0]}-${e.gates[1]}`,n=E.has(t),a=O.has(t);n&&!a?v.push(e):a&&!n?M.push(e):n||a||b.push(e)}const P=[],D=[],N=[];for(const[n,a]of m){const s={gate:n,gateName:t.GATE_NAMES[n],center:a.center,type:2===a.sources.length?"shared":a.sources[0]===e.name?"unique_person1":"unique_person2"};"shared"===s.type?P.push(s):"unique_person1"===s.type?D.push(s):N.push(s)}return{person1:e,person2:n,electromagneticChannels:a,companionshipChannels:s,dominanceChannels:o,compromiseChannels:u,compositeDefinedCenters:A.defined,compositeUndefinedCenters:A.undefined,compositeOpenCenters:A.open,compositeChannels:S,compositeType:$,compositeStrategy:y,compositeDefinition:T,compositeDefinitionIslands:C,channelsPerson1Only:v,channelsPerson2Only:M,channelsOnlyTogether:b,sharedGates:P,uniqueGatesPerson1:D,uniqueGatesPerson2:N}}function S(e,n={}){const{personality:a,design:d}=e,m=s(a.planets),S=s(d.planets),A=o(m,S),$=r(A),{defined:y,undefined:T,open:C}=i($,A),E=c(y,$),O=t.STRATEGY_BY_TYPE[E],v=u(y,$),M=l($,y),b=p($,y),P=h(A,$),D=m.find((e=>"Sun"===e.planet)),N=S.find((e=>"Sun"===e.planet)),_=f(D.line,N.line),I=t.PROFILE_NAMES[_]||"",j=m.find((e=>"Earth"===e.planet)),G=S.find((e=>"Earth"===e.planet)),R=g(D.gate,j.gate,N.gate,G.gate,D.line,N.line);return{name:n.name||"Chart",location:n.location||`${a.location.latitude}, ${a.location.longitude}`,date:a.date,time:a.time,type:E,strategy:O,authority:v,definition:M,definitionIslands:b,profile:_,profileName:I,incarnationCross:R,definedCenters:y,undefinedCenters:T,openCenters:C,activeChannels:$,hangingGates:P,allGates:A,personalityActivations:m,designActivations:S}}Object.defineProperty(t,"__esModule",{value:!0}),t.ALL_CENTERS=t.STRATEGY_BY_TYPE=t.INCARNATION_CROSSES=t.PROFILE_NAMES=t.CHANNELS=t.GATE_CENTERS=t.GATE_NAMES=t.GATES=void 0,t.longitudeToGateLine=n,t.oppositeGate=a,t.calculateActivations=s,t.getAllGates=o,t.getActiveChannels=r,t.getCenterStatus=i,t.calculateType=c,t.calculateAuthority=u,t.calculateDefinition=l,t.getDefinitionIslands=p,t.getHangingGates=h,t.calculateProfile=f,t.getIncarnationCross=g,t.humandesign2txt=d,t.analyzePartnership=m,t.buildChart=S,t.humandesignPartnership2txt=function(e,t,n={}){const a=S(e,{name:n.person1Name||"Person 1",location:n.person1Location}),s=S(t,{name:n.person2Name||"Person 2",location:n.person2Location});return function(e){const t=[],{person1:n,person2:a}=e;if(t.push("[METADATA]"),t.push("chart_type: human_design_partnership"),t.push(""),t.push(`[CHART: ${n.name}]`),t.push(`[BIRTHDATA] ${n.location} | ${n.date} | ${n.time}`),t.push(`Type: ${n.type} | Strategy: ${n.strategy} | Authority: ${n.authority}`),t.push(`Definition: ${n.definition} | Profile: ${n.profile}${n.profileName?` (${n.profileName})`:""}`),n.definitionIslands.length>1){const e=n.definitionIslands.map((e=>`[${e.join("+")}]`));t.push(`Definition Islands: ${e.join(" + ")}`)}if(t.push(`Defined Centers: ${n.definedCenters.join(", ")||"None"}`),n.hangingGates.length>0){const e=n.hangingGates.map((e=>`${e.gate} (${e.center})`)).join(", ");t.push(`Hanging Gates: ${e}`)}if(t.push(""),t.push(`[CHART: ${a.name}]`),t.push(`[BIRTHDATA] ${a.location} | ${a.date} | ${a.time}`),t.push(`Type: ${a.type} | Strategy: ${a.strategy} | Authority: ${a.authority}`),t.push(`Definition: ${a.definition} | Profile: ${a.profile}${a.profileName?` (${a.profileName})`:""}`),a.definitionIslands.length>1){const e=a.definitionIslands.map((e=>`[${e.join("+")}]`));t.push(`Definition Islands: ${e.join(" + ")}`)}if(t.push(`Defined Centers: ${a.definedCenters.join(", ")||"None"}`),a.hangingGates.length>0){const e=a.hangingGates.map((e=>`${e.gate} (${e.center})`)).join(", ");t.push(`Hanging Gates: ${e}`)}if(t.push(""),t.push(`[PARTNERSHIP: ${n.name} & ${a.name}]`),t.push(""),t.push("[COMPOSITE OVERVIEW]"),t.push(`Composite Type: ${e.compositeType}`),t.push(`Composite Strategy: ${e.compositeStrategy}`),t.push(`Composite Definition: ${e.compositeDefinition}`),e.compositeDefinitionIslands.length>1){const n=e.compositeDefinitionIslands.map((e=>`[${e.join("+")}]`));t.push(`Composite Definition Islands: ${n.join(" + ")}`)}e.compositeDefinedCenters.length>0&&t.push(`Defined Centers Together: ${e.compositeDefinedCenters.join(", ")}`);e.compositeUndefinedCenters.length>0&&t.push(`Undefined Centers Together: ${e.compositeUndefinedCenters.join(", ")}`);e.compositeOpenCenters.length>0&&t.push(`Open Centers Together: ${e.compositeOpenCenters.join(", ")}`);if(t.push(""),t.push("[ELECTROMAGNETIC CONNECTIONS]"),t.push("(Channels completed together - magnetic attraction and chemistry)"),e.electromagneticChannels.length>0)for(const n of e.electromagneticChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[COMPANIONSHIP CONNECTIONS]"),t.push("(Channels both have individually - deep mutual understanding)"),e.companionshipChannels.length>0)for(const n of e.companionshipChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[DOMINANCE CONNECTIONS]"),t.push("(One person has full channel, the other has hanging gate - one naturally leads)"),e.dominanceChannels.length>0)for(const n of e.dominanceChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[COMPROMISE CONNECTIONS]"),t.push("(Both have hanging gates in same channel - requires negotiation)"),e.compromiseChannels.length>0)for(const n of e.compromiseChannels)t.push(`${n.channel.gates[0]}-${n.channel.gates[1]} (${n.channel.name}): ${n.channel.centers[0]} ↔ ${n.channel.centers[1]}`),t.push(` ${n.description}`);else t.push("None");if(t.push(""),t.push("[SHARED GATES]"),t.push("(Gates both people have - common ground)"),e.sharedGates.length>0){const n=[...e.sharedGates].sort(((e,t)=>e.gate-t.gate));for(const e of n)t.push(`${e.gate}: ${e.gateName} | ${e.center}`)}else t.push("None");if(t.push(""),t.push(`[UNIQUE GATES: ${n.name}]`),t.push(`(Gates only ${n.name} brings to the relationship)`),e.uniqueGatesPerson1.length>0){const n=[...e.uniqueGatesPerson1].sort(((e,t)=>e.gate-t.gate));for(const e of n)t.push(`${e.gate}: ${e.gateName} | ${e.center}`)}else t.push("None");if(t.push(""),t.push(`[UNIQUE GATES: ${a.name}]`),t.push(`(Gates only ${a.name} brings to the relationship)`),e.uniqueGatesPerson2.length>0){const n=[...e.uniqueGatesPerson2].sort(((e,t)=>e.gate-t.gate));for(const e of n)t.push(`${e.gate}: ${e.gateName} | ${e.center}`)}else t.push("None");if(t.push(""),t.push(`[CHANNELS: ${n.name} Only]`),t.push(`(Channels only ${n.name} has)`),e.channelsPerson1Only.length>0)for(const n of e.channelsPerson1Only)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");if(t.push(""),t.push(`[CHANNELS: ${a.name} Only]`),t.push(`(Channels only ${a.name} has)`),e.channelsPerson2Only.length>0)for(const n of e.channelsPerson2Only)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");if(t.push(""),t.push("[CHANNELS: Only Together]"),t.push("(Channels formed only when both are together - neither has individually)"),e.channelsOnlyTogether.length>0)for(const n of e.channelsOnlyTogether)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");if(t.push(""),t.push("[COMPOSITE CHANNELS]"),t.push("(All channels active when together)"),e.compositeChannels.length>0)for(const n of e.compositeChannels)t.push(`${n.gates[0]}-${n.gates[1]} (${n.name}): ${n.centers[0]} ↔ ${n.centers[1]}`);else t.push("None");return t.join("\n")}(m(a,s))},t.GATES=[41,19,13,49,30,55,37,63,22,36,25,17,21,51,42,3,27,24,2,23,8,20,16,35,45,12,15,52,39,53,62,56,31,33,7,4,29,59,40,64,47,6,46,18,48,57,32,50,28,44,1,43,14,34,9,5,26,11,10,58,38,54,61,60],t.GATE_NAMES={1:"Self-Expression",2:"Direction of the Self",3:"Ordering",4:"Formulization",5:"Fixed Rhythms",6:"Friction",7:"The Role of the Self",8:"Contribution",9:"Focus",10:"Behavior of the Self",11:"Ideas",12:"Caution",13:"The Listener",14:"Power Skills",15:"Extremes",16:"Skills",17:"Opinions",18:"Correction",19:"Wanting",20:"The Now",21:"The Hunter",22:"Openness",23:"Assimilation",24:"Rationalization",25:"Innocence",26:"The Egoist",27:"Caring",28:"The Game Player",29:"Perseverance",30:"Feelings",31:"Influence",32:"Continuity",33:"Privacy",34:"Power",35:"Change",36:"Crisis",37:"Friendship",38:"The Fighter",39:"Provocation",40:"Aloneness",41:"Contraction",42:"Growth",43:"Insight",44:"Alertness",45:"The Gatherer",46:"Determination",47:"Realization",48:"Depth",49:"Principles",50:"Values",51:"Shock",52:"Stillness",53:"Beginnings",54:"Ambition",55:"Spirit",56:"Stimulation",57:"Intuition",58:"Vitality",59:"Sexuality",60:"Limitation",61:"Mystery",62:"Details",63:"Doubt",64:"Confusion"},t.GATE_CENTERS={64:"Head",61:"Head",63:"Head",47:"Ajna",24:"Ajna",4:"Ajna",17:"Ajna",43:"Ajna",11:"Ajna",62:"Throat",23:"Throat",56:"Throat",35:"Throat",12:"Throat",45:"Throat",33:"Throat",8:"Throat",31:"Throat",20:"Throat",16:"Throat",7:"G Center",1:"G Center",13:"G Center",25:"G Center",46:"G Center",2:"G Center",15:"G Center",10:"G Center",21:"Ego",40:"Ego",26:"Ego",51:"Ego",36:"Solar Plexus",22:"Solar Plexus",37:"Solar Plexus",6:"Solar Plexus",49:"Solar Plexus",55:"Solar Plexus",30:"Solar Plexus",34:"Sacral",5:"Sacral",14:"Sacral",29:"Sacral",59:"Sacral",9:"Sacral",3:"Sacral",42:"Sacral",27:"Sacral",48:"Spleen",57:"Spleen",44:"Spleen",50:"Spleen",32:"Spleen",28:"Spleen",18:"Spleen",58:"Root",38:"Root",54:"Root",53:"Root",60:"Root",52:"Root",19:"Root",39:"Root",41:"Root"},t.CHANNELS=[{gates:[64,47],name:"Abstraction",centers:["Head","Ajna"]},{gates:[61,24],name:"Awareness",centers:["Head","Ajna"]},{gates:[63,4],name:"Logic",centers:["Head","Ajna"]},{gates:[17,62],name:"Acceptance",centers:["Ajna","Throat"]},{gates:[43,23],name:"Structuring",centers:["Ajna","Throat"]},{gates:[11,56],name:"Curiosity",centers:["Ajna","Throat"]},{gates:[7,31],name:"The Alpha",centers:["G Center","Throat"]},{gates:[1,8],name:"Inspiration",centers:["G Center","Throat"]},{gates:[13,33],name:"The Prodigal",centers:["G Center","Throat"]},{gates:[10,20],name:"Awakening",centers:["G Center","Throat"]},{gates:[15,5],name:"Rhythm",centers:["G Center","Sacral"]},{gates:[2,14],name:"The Beat",centers:["G Center","Sacral"]},{gates:[46,29],name:"Discovery",centers:["G Center","Sacral"]},{gates:[10,57],name:"Perfected Form",centers:["G Center","Spleen"]},{gates:[25,51],name:"Initiation",centers:["G Center","Ego"]},{gates:[21,45],name:"Money",centers:["Ego","Throat"]},{gates:[37,40],name:"Community",centers:["Ego","Solar Plexus"]},{gates:[26,44],name:"Surrender",centers:["Ego","Spleen"]},{gates:[34,20],name:"Charisma",centers:["Sacral","Throat"]},{gates:[34,57],name:"Power",centers:["Sacral","Spleen"]},{gates:[27,50],name:"Preservation",centers:["Sacral","Spleen"]},{gates:[59,6],name:"Intimacy",centers:["Sacral","Solar Plexus"]},{gates:[42,53],name:"Maturation",centers:["Sacral","Root"]},{gates:[3,60],name:"Mutation",centers:["Sacral","Root"]},{gates:[9,52],name:"Concentration",centers:["Sacral","Root"]},{gates:[16,48],name:"The Wavelength",centers:["Spleen","Throat"]},{gates:[57,20],name:"The Brainwave",centers:["Spleen","Throat"]},{gates:[18,58],name:"Judgment",centers:["Spleen","Root"]},{gates:[28,38],name:"Struggle",centers:["Spleen","Root"]},{gates:[32,54],name:"Transformation",centers:["Spleen","Root"]},{gates:[12,22],name:"Openness",centers:["Solar Plexus","Throat"]},{gates:[35,36],name:"Transitoriness",centers:["Solar Plexus","Throat"]},{gates:[19,49],name:"Synthesis",centers:["Solar Plexus","Root"]},{gates:[39,55],name:"Emoting",centers:["Solar Plexus","Root"]},{gates:[41,30],name:"Recognition",centers:["Solar Plexus","Root"]},{gates:[34,10],name:"Exploration",centers:["Sacral","G Center"]}],t.PROFILE_NAMES={"1/3":"Investigator/Martyr","1/4":"Investigator/Opportunist","2/4":"Hermit/Opportunist","2/5":"Hermit/Heretic","3/5":"Martyr/Heretic","3/6":"Martyr/Role Model","4/6":"Opportunist/Role Model","4/1":"Opportunist/Investigator","5/1":"Heretic/Investigator","5/2":"Heretic/Hermit","6/2":"Role Model/Hermit","6/3":"Role Model/Martyr"},t.INCARNATION_CROSSES={1:"The Sphinx",2:"The Sphinx",3:"Laws",4:"Explanation",5:"Consciousness",6:"Eden",7:"The Sphinx",8:"Contagion",9:"Planning",10:"Vessel of Love",11:"Eden",12:"Eden",13:"The Sphinx",14:"Contagion",15:"Vessel of Love",16:"Planning",17:"Service",18:"Service",19:"The Four Ways",20:"The Sleeping Phoenix",21:"Tension",22:"Rulership",23:"Explanation",24:"The Four Ways",25:"Vessel of Love",26:"Rulership",27:"The Unexpected",28:"The Unexpected",29:"Contagion",30:"Contagion",31:"The Unexpected",32:"Maya",33:"The Four Ways",34:"The Sleeping Phoenix",35:"Consciousness",36:"Eden",37:"Planning",38:"Tension",39:"Tension",40:"Planning",41:"The Unexpected",42:"Maya",43:"Explanation",44:"The Four Ways",45:"Rulership",46:"Vessel of Love",47:"Rulership",48:"Tension",49:"Explanation",50:"Laws",51:"Penetration",52:"Service",53:"Penetration",54:"Penetration",55:"The Sleeping Phoenix",56:"Laws",57:"Penetration",58:"Service",59:"The Sleeping Phoenix",60:"Laws",61:"Maya",62:"Maya",63:"Consciousness",64:"Consciousness"},t.STRATEGY_BY_TYPE={Generator:"Wait to Respond","Manifesting Generator":"Wait to Respond",Manifestor:"Inform Before Acting",Projector:"Wait for the Invitation",Reflector:"Wait a Lunar Cycle"},t.ALL_CENTERS=["Head","Ajna","Throat","G Center","Ego","Solar Plexus","Sacral","Spleen","Root"],t.default=d},858:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSignDistributions=function(e,t){const n=[...e];void 0!==t&&n.push({name:"Ascendant",degree:t});const o={Fire:[],Earth:[],Air:[],Water:[]},r={Cardinal:0,Fixed:0,Mutable:0},i={Masculine:0,Feminine:0};for(const e of n){const t=(0,a.getSign)(e.degree),n=s.ZODIAC_SIGN_DATA.find((e=>e.name===t));n&&(o[n.element].push(e.name),r[n.modality]++,i[n.polarity]++)}return{elements:o,modalities:r,polarities:i}},t.formatElementDistribution=function(e){return[Object.entries(e).map((([e,t])=>0===t.length?`${e}: 0`:`${e}: ${t.length} (${t.join(", ")})`)).join(" | ")]},t.formatModalityDistribution=function(e){return[Object.entries(e).map((([e,t])=>`${e}: ${t}`)).join(" | ")]},t.formatPolarityDistribution=function(e){return[Object.entries(e).map((([e,t])=>`${e}: ${t}`)).join(" | ")]};const a=n(175),s=n(921)},865:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.groupAspects=function(e,t){const n=new Map,a=t.aspectStrengthThresholds,s=[],o=[],r=[];if(e.forEach((e=>{e.orb<=a.tight?s.push(e):e.orb<=a.moderate?o.push(e):r.push(e)})),s.sort(((e,t)=>e.orb-t.orb)),o.sort(((e,t)=>e.orb-t.orb)),r.sort(((e,t)=>e.orb-t.orb)),s.length>0){const e=`[TIGHT ASPECTS: orb under ${a.tight.toFixed(1)}°]`;n.set(e,s)}if(o.length>0){const e=`[MODERATE ASPECTS: orb ${a.tight.toFixed(1)}-${a.moderate.toFixed(1)}°]`;n.set(e,o)}if(r.length>0){const e=`[WIDE ASPECTS: orb over ${a.moderate.toFixed(1)}°]`;n.set(e,r)}return n}},888:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateBirthdataOutput=function(e,t,n,s="[BIRTHDATA]"){if(!t)return[`${s} Not available`];const o=(0,a.formatDateCustom)(t,n.dateFormat),r=(0,a.formatTime)(t);return[`${s} ${e||"Unknown Location"} | ${o} | ${r}`]};const a=n(889)},889:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.formatDateCustom=function(e,t){const n=e.getMonth()+1,a=e.getDate(),s=e.getFullYear();switch(t.toUpperCase()){case"MM/DD/YYYY":return`${n.toString().padStart(2,"0")}/${a.toString().padStart(2,"0")}/${s}`;case"DD/MM/YYYY":return`${a.toString().padStart(2,"0")}/${n.toString().padStart(2,"0")}/${s}`;case"YYYY-MM-DD":return`${s}-${n.toString().padStart(2,"0")}-${a.toString().padStart(2,"0")}`;default:return console.warn(`Unrecognized date format: ${t}. Falling back to toLocaleDateString().`),e.toLocaleDateString()}},t.formatTime=function(e){return e.toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0})}},904:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.normalizeDegree=s,t.getDegreeSign=function(e){const t=s(e),n=Math.floor(t/30);if(n<0||n>=a.ZODIAC_SIGNS.length)return console.error(`Invalid sign index computed: ${n} for normalized degree ${t}`),"Unknown Sign";return a.ZODIAC_SIGNS[n]},t.getDegreeInSign=function(e){return s(e)%30};const a=n(921);function s(e){if(!isFinite(e))throw new Error(`Invalid degree value: ${e}`);let t=e%360;return t<0&&(t+=360),t}},919:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.detectAspectPatterns=function(e,t,n){const a=[],l=function(e){const t=new Map;return e.forEach((e=>{const n=s(e.planetA,e.p1ChartName),a=s(e.planetB,e.p2ChartName);t.has(n)||t.set(n,new Map),t.has(a)||t.set(a,new Map),t.get(n).set(a,e),t.get(a).set(n,e)})),t}(t);return a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let u=s+1;u<e.length;u++)if(i(e[s],e[u],"opposition",t))for(let l=0;l<e.length;l++)if(l!==s&&l!==u&&i(e[s],e[l],"square",t)&&i(e[u],e[l],"square",t)){const[i,p]=e[l],[h,f]=e[s],[g,d]=e[u],m=o(i,n,p),S=o(h,n,f),A=o(g,n,d),$=c(e[s],e[u],t),y=c(e[s],e[l],t),T=c(e[u],e[l],t),C=($.orb+y.orb+T.orb)/3,E=r(m.sign);a.push({type:"T-Square",apex:m,opposition:[S,A],mode:E,averageOrb:C})}return a}(e,l,n)),a.push(...u(e,l,n)),a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let u=s+1;u<e.length;u++)for(let l=u+1;l<e.length;l++)for(let p=l+1;p<e.length;p++){const h=[e[s],e[u],e[l],e[p]],f=[[0,2],[1,3],[0,3],[1,2]];let g=0,d=0;const m=[];if([[0,1],[2,3]].forEach((([e,n])=>{i(h[e],h[n],"opposition",t)&&(g++,m.push(c(h[e],h[n],t)))})),f.forEach((([e,n])=>{i(h[e],h[n],"square",t)&&(d++,m.push(c(h[e],h[n],t)))})),2===g&&4===d){const[e,t]=h[0],[s,i]=h[1],[c,u]=h[2],[l,p]=h[3],f=o(e,n,t),g=o(s,n,i),d=o(c,n,u),S=o(l,n,p),A=m.reduce(((e,t)=>e+t.orb),0)/m.length,$=r(f.sign);a.push({type:"Grand Cross",planets:[f,g,d,S],mode:$,averageOrb:A})}}return a}(e,l,n)),a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let r=s+1;r<e.length;r++)if(i(e[s],e[r],"sextile",t))for(let u=0;u<e.length;u++)if(u!==s&&u!==r&&i(e[s],e[u],"quincunx",t)&&i(e[r],e[u],"quincunx",t)){const[i,l]=e[u],[p,h]=e[s],[f,g]=e[r],d=o(i,n,l),m=o(p,n,h),S=o(f,n,g),A=c(e[s],e[r],t),$=c(e[s],e[u],t),y=c(e[r],e[u],t),T=(A.orb+$.orb+y.orb)/3;a.push({type:"Yod",apex:d,base:[m,S],averageOrb:T})}return a}(e,l,n)),a.push(...function(e,t,n){const a=[];for(let s=0;s<e.length;s++)for(let r=s+1;r<e.length;r++)for(let u=r+1;u<e.length;u++)for(let l=u+1;l<e.length;l++){const p=[e[s],e[r],e[u],e[l]],h=[{oppositions:[[0,1],[2,3]],sextiles:[[0,2],[0,3],[1,2],[1,3]]},{oppositions:[[0,2],[1,3]],sextiles:[[0,1],[0,3],[2,1],[2,3]]},{oppositions:[[0,3],[1,2]],sextiles:[[0,1],[0,2],[3,1],[3,2]]}];for(const e of h){let s=0,r=0;const u=[];if(e.oppositions.forEach((([e,n])=>{i(p[e],p[n],"opposition",t)&&(s++,u.push(c(p[e],p[n],t)))})),e.sextiles.forEach((([e,n])=>{const a=c(p[e],p[n],t);!a||"sextile"!==a.aspectType&&"trine"!==a.aspectType||(r++,u.push(a))})),2===s&&4===r){const[t,s]=p[e.oppositions[0][0]],[r,i]=p[e.oppositions[0][1]],[c,l]=p[e.oppositions[1][0]],[h,f]=p[e.oppositions[1][1]],g=o(t,n,s),d=o(r,n,i),m=o(c,n,l),S=o(h,n,f),A=u.reduce(((e,t)=>e+t.orb),0)/u.length;a.push({type:"Mystic Rectangle",oppositions:[[g,d],[m,S]],averageOrb:A})}}}return a}(e,l,n)),a.push(...function(e,t,n){const a=[];return u(e,t,n).forEach((s=>{s.planets.forEach((r=>{e.forEach((u=>{const[l,p]=u;if(!s.planets.some((e=>e.name===l.name&&e.chartName===p))){const h=e.find((([e,t])=>e.name===r.name&&t===r.chartName));if(h&&i(h,u,"opposition",t)){const e=o(l,n,p),r=c(h,u,t),i=(s.averageOrb+r.orb)/2;a.push({type:"Kite",grandTrine:s.planets,opposition:e,averageOrb:i})}}}))}))})),a}(e,l,n)),a};const a=n(904);function s(e,t){return t?`${e}-${t}`:e}function o(e,t,n){const s=(0,a.getDegreeSign)(e.degree),o=t&&12===t.length?(()=>{const n=(0,a.normalizeDegree)(e.degree);for(let e=0;e<12;e++){const a=t[e],s=t[(e+1)%12];if(s>a){if(n>=a&&n<s)return e+1}else if(n>=a||n<s)return e+1}})():void 0;return{name:e.name,degree:e.degree,sign:s,house:o,chartName:n}}function r(e){return["Aries","Cancer","Libra","Capricorn"].includes(e)?"Cardinal":["Taurus","Leo","Scorpio","Aquarius"].includes(e)?"Fixed":"Mutable"}function i(e,t,n,a){const o=s(e[0].name,e[1]),r=s(t[0].name,t[1]),i=a.get(o);if(!i)return!1;const c=i.get(r);return void 0!==c&&c.aspectType===n}function c(e,t,n){const a=s(e[0].name,e[1]),o=s(t[0].name,t[1]),r=n.get(a);if(r)return r.get(o)}function u(e,t,n){const a=[];for(let r=0;r<e.length;r++)for(let u=r+1;u<e.length;u++)for(let l=u+1;l<e.length;l++)if(i(e[r],e[u],"trine",t)&&i(e[u],e[l],"trine",t)&&i(e[l],e[r],"trine",t)){const[i,p]=e[r],[h,f]=e[u],[g,d]=e[l],m=o(i,n,p),S=o(h,n,f),A=o(g,n,d),$=c(e[r],e[u],t),y=c(e[u],e[l],t),T=c(e[l],e[r],t),C=($.orb+y.orb+T.orb)/3,E=(s=m.sign,["Aries","Leo","Sagittarius"].includes(s)?"Fire":["Taurus","Virgo","Capricorn"].includes(s)?"Earth":["Gemini","Libra","Aquarius"].includes(s)?"Air":"Water");a.push({type:"Grand Trine",planets:[m,S,A],element:E,averageOrb:C})}var s;return a}},921:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_SETTINGS=t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS=t.WIDE_ASPECTS=t.TIGHT_ASPECTS=t.MODERN_ASPECTS=t.TRADITIONAL_ASPECTS=t.SIMPLE_WIDE_ORBS=t.SIMPLE_TIGHT_ORBS=t.SIMPLE_MODERN_ORBS=t.SIMPLE_TRADITIONAL_ORBS=t.DEFAULT_ASPECTS=t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA=void 0;const a=n(613);t.ZODIAC_SIGN_DATA=[{name:"Aries",element:"Fire",modality:"Cardinal",polarity:"Masculine",ruler:"Mars"},{name:"Taurus",element:"Earth",modality:"Fixed",polarity:"Feminine",ruler:"Venus"},{name:"Gemini",element:"Air",modality:"Mutable",polarity:"Masculine",ruler:"Mercury"},{name:"Cancer",element:"Water",modality:"Cardinal",polarity:"Feminine",ruler:"Moon"},{name:"Leo",element:"Fire",modality:"Fixed",polarity:"Masculine",ruler:"Sun"},{name:"Virgo",element:"Earth",modality:"Mutable",polarity:"Feminine",ruler:"Mercury"},{name:"Libra",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Venus"},{name:"Scorpio",element:"Water",modality:"Fixed",polarity:"Feminine",ruler:"Mars"},{name:"Sagittarius",element:"Fire",modality:"Mutable",polarity:"Masculine",ruler:"Jupiter"},{name:"Capricorn",element:"Earth",modality:"Cardinal",polarity:"Feminine",ruler:"Saturn"},{name:"Aquarius",element:"Air",modality:"Fixed",polarity:"Masculine",ruler:"Saturn"},{name:"Pisces",element:"Water",modality:"Mutable",polarity:"Feminine",ruler:"Jupiter"}],t.ZODIAC_SIGNS=t.ZODIAC_SIGN_DATA.map((e=>e.name)),t.DEFAULT_ASPECTS=[{name:"conjunction",angle:0,orb:5,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:5,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:5,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:5,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:3,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:2,classification:a.AspectClassification.Minor}],t.SIMPLE_TRADITIONAL_ORBS=[{name:"conjunction",angle:0,orb:10,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:10,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:8,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:8,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:6,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:4,classification:a.AspectClassification.Minor}],t.SIMPLE_MODERN_ORBS=[{name:"conjunction",angle:0,orb:8,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:8,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:6,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:6,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:4,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:3,classification:a.AspectClassification.Minor}],t.SIMPLE_TIGHT_ORBS=[{name:"conjunction",angle:0,orb:4,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:4,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:3,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:3,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:2,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:1,classification:a.AspectClassification.Minor}],t.SIMPLE_WIDE_ORBS=[{name:"conjunction",angle:0,orb:12,classification:a.AspectClassification.Major},{name:"opposition",angle:180,orb:12,classification:a.AspectClassification.Major},{name:"trine",angle:120,orb:10,classification:a.AspectClassification.Major},{name:"square",angle:90,orb:10,classification:a.AspectClassification.Major},{name:"sextile",angle:60,orb:8,classification:a.AspectClassification.Minor},{name:"quincunx",angle:150,orb:6,classification:a.AspectClassification.Minor},{name:"semi-sextile",angle:30,orb:4,classification:a.AspectClassification.Minor}],t.TRADITIONAL_ASPECTS=t.SIMPLE_TRADITIONAL_ORBS,t.MODERN_ASPECTS=t.SIMPLE_MODERN_ORBS,t.TIGHT_ASPECTS=t.SIMPLE_TIGHT_ORBS,t.WIDE_ASPECTS=t.SIMPLE_WIDE_ORBS,t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS={tight:2,moderate:4},t.DEFAULT_SETTINGS={aspectDefinitions:t.DEFAULT_ASPECTS,skipOutOfSignAspects:!0,includeAspectPatterns:!1,includeSignDistributions:!0,includeDispositors:!0,includeHouseOverlays:!0,aspectStrengthThresholds:t.DEFAULT_ASPECT_STRENGTH_THRESHOLDS,houseSystemName:"whole_sign",dateFormat:"MM/DD/YYYY",outputMode:"standard"}},945:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.generateAnglesOutput=function(e,t){const n=["[ANGLES]"];void 0!==e?n.push(`Ascendant: ${(0,s.formatDegMin)((0,a.getDegreeInSign)(e))} ${(0,a.getDegreeSign)(e)}`):n.push("Ascendant: Not available");void 0!==t?n.push(`Midheaven: ${(0,s.formatDegMin)((0,a.getDegreeInSign)(t))} ${(0,a.getDegreeSign)(t)}`):n.push("Midheaven: Not available");return n};const a=n(904),s=n(175)}},t={};var n=function n(a){var s=t[a];if(void 0!==s)return s.exports;var o=t[a]={exports:{}};return e[a].call(o.exports,o,o.exports,n),o.exports}(156);return n})()));
|
package/dist/core/analysis.js
CHANGED
|
@@ -8,22 +8,20 @@ const aspects_1 = require("./aspects");
|
|
|
8
8
|
const aspectPatterns_1 = require("./aspectPatterns");
|
|
9
9
|
const stelliums_1 = require("./stelliums");
|
|
10
10
|
const formatting_1 = require("../utils/formatting");
|
|
11
|
+
const astrology_1 = require("./astrology");
|
|
11
12
|
const signDistributions_1 = require("./signDistributions");
|
|
12
13
|
const dispositors_1 = require("./dispositors");
|
|
13
14
|
const houseCalculations_1 = require("../utils/houseCalculations");
|
|
14
15
|
// Helper functions
|
|
15
|
-
function normalizeDegree(degree) {
|
|
16
|
-
return ((degree % 360) + 360) % 360;
|
|
17
|
-
}
|
|
18
16
|
function circularMeanDegrees(degrees) {
|
|
19
17
|
if (degrees.length === 0) {
|
|
20
18
|
throw new Error('Cannot compute circular mean of empty degree list');
|
|
21
19
|
}
|
|
22
|
-
const radians = degrees.map((degree) => (normalizeDegree(degree) * Math.PI) / 180);
|
|
20
|
+
const radians = degrees.map((degree) => ((0, astrology_1.normalizeDegree)(degree) * Math.PI) / 180);
|
|
23
21
|
const x = radians.reduce((sum, rad) => sum + Math.cos(rad), 0);
|
|
24
22
|
const y = radians.reduce((sum, rad) => sum + Math.sin(rad), 0);
|
|
25
23
|
const angle = (Math.atan2(y, x) * 180) / Math.PI;
|
|
26
|
-
return normalizeDegree(angle);
|
|
24
|
+
return (0, astrology_1.normalizeDegree)(angle);
|
|
27
25
|
}
|
|
28
26
|
function midpointSpeed(speedA, speedB) {
|
|
29
27
|
if (speedA === undefined || speedB === undefined) {
|
|
@@ -49,9 +47,19 @@ function createMidpointCompositeChart(chart1, chart2, houseSystemName) {
|
|
|
49
47
|
const midheaven = chart1.midheaven !== undefined && chart2.midheaven !== undefined
|
|
50
48
|
? circularMeanDegrees([chart1.midheaven, chart2.midheaven])
|
|
51
49
|
: undefined;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
// For Whole Sign and Equal, derive cusps from composite ascendant.
|
|
51
|
+
// For other systems (Placidus, Porphyry), midpoint the natal cusps
|
|
52
|
+
// to match astro.com composite behavior.
|
|
53
|
+
let houseCusps;
|
|
54
|
+
if (ascendant !== undefined && (houseSystemName === 'W' || houseSystemName === 'Whole Sign')) {
|
|
55
|
+
houseCusps = Array.from({ length: 12 }, (_, i) => (0, astrology_1.normalizeDegree)(Math.floor(ascendant / 30) * 30 + i * 30));
|
|
56
|
+
}
|
|
57
|
+
else if (ascendant !== undefined && (houseSystemName === 'E' || houseSystemName === 'Equal')) {
|
|
58
|
+
houseCusps = Array.from({ length: 12 }, (_, i) => (0, astrology_1.normalizeDegree)(ascendant + i * 30));
|
|
59
|
+
}
|
|
60
|
+
else if (chart1.houseCusps && chart2.houseCusps) {
|
|
61
|
+
houseCusps = chart1.houseCusps.map((cusp, index) => circularMeanDegrees([cusp, chart2.houseCusps[index]]));
|
|
62
|
+
}
|
|
55
63
|
return {
|
|
56
64
|
name: `${chart1.name}-${chart2.name}`,
|
|
57
65
|
planets: compositePlanets,
|
|
@@ -170,25 +178,30 @@ function analyzeCharts(data, partialSettings = {}) {
|
|
|
170
178
|
}
|
|
171
179
|
const settings = new ChartSettings_1.ChartSettings(partialSettings);
|
|
172
180
|
const rawCharts = (0, types_1.isMultiChartData)(data) ? data : [data];
|
|
173
|
-
const resolvedHouseSystemName = resolveHouseSystemName(rawCharts, partialSettings);
|
|
174
|
-
if (resolvedHouseSystemName !== undefined) {
|
|
175
|
-
settings.houseSystemName = resolvedHouseSystemName;
|
|
176
|
-
}
|
|
177
181
|
if (settings.outputMode === 'composite') {
|
|
178
182
|
const nonTransitCharts = rawCharts.filter((c) => c.chartType !== 'transit');
|
|
179
183
|
const transitCharts = rawCharts.filter((c) => c.chartType === 'transit');
|
|
180
|
-
if (transitCharts.length > 0) {
|
|
181
|
-
throw new Error('Composite output mode does not support transit charts');
|
|
182
|
-
}
|
|
183
184
|
if (nonTransitCharts.length !== 2) {
|
|
184
185
|
throw new Error(`Composite output mode requires exactly 2 non-transit charts, got ${nonTransitCharts.length}`);
|
|
185
186
|
}
|
|
186
|
-
|
|
187
|
-
|
|
187
|
+
// Resolve house system from source charts only, excluding transit metadata.
|
|
188
|
+
const compositeHouseSystem = resolveHouseSystemName(nonTransitCharts, partialSettings);
|
|
189
|
+
const compositeChart = createMidpointCompositeChart(nonTransitCharts[0], nonTransitCharts[1], compositeHouseSystem);
|
|
190
|
+
// If transit charts present, feed composite + transit into standard pipeline.
|
|
191
|
+
// Otherwise just analyze the composite alone.
|
|
192
|
+
const chartsToAnalyze = transitCharts.length > 0
|
|
193
|
+
? [compositeChart, ...transitCharts]
|
|
194
|
+
: [compositeChart];
|
|
195
|
+
return analyzeCharts(chartsToAnalyze, {
|
|
188
196
|
...partialSettings,
|
|
189
197
|
outputMode: 'standard',
|
|
198
|
+
houseSystemName: compositeHouseSystem,
|
|
190
199
|
});
|
|
191
200
|
}
|
|
201
|
+
const resolvedHouseSystemName = resolveHouseSystemName(rawCharts, partialSettings);
|
|
202
|
+
if (resolvedHouseSystemName !== undefined) {
|
|
203
|
+
settings.houseSystemName = resolvedHouseSystemName;
|
|
204
|
+
}
|
|
192
205
|
const nonTransitCharts = rawCharts.filter((c) => c.chartType !== 'transit');
|
|
193
206
|
const transitChart = rawCharts.find((c) => c.chartType === 'transit');
|
|
194
207
|
const allCharts = [
|
|
@@ -38,7 +38,7 @@ function pointToPlanetPosition(point, houseCusps, chartName) {
|
|
|
38
38
|
const house = houseCusps && houseCusps.length === 12
|
|
39
39
|
? (() => {
|
|
40
40
|
// Simple house calculation without importing the utility
|
|
41
|
-
const normalizedDegree = point.degree
|
|
41
|
+
const normalizedDegree = (0, astrology_1.normalizeDegree)(point.degree);
|
|
42
42
|
for (let i = 0; i < 12; i++) {
|
|
43
43
|
const currentCusp = houseCusps[i];
|
|
44
44
|
const nextCusp = houseCusps[(i + 1) % 12];
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateAnglesOutput = generateAnglesOutput;
|
|
4
4
|
const astrology_1 = require("../../../core/astrology");
|
|
5
|
+
const formatting_1 = require("../../../utils/formatting");
|
|
5
6
|
/**
|
|
6
7
|
* Generates the [ANGLES] section of the chart output.
|
|
7
8
|
* @param ascDegree The degree of the Ascendant.
|
|
@@ -11,13 +12,13 @@ const astrology_1 = require("../../../core/astrology");
|
|
|
11
12
|
function generateAnglesOutput(ascDegree, mcDegree) {
|
|
12
13
|
const output = ['[ANGLES]'];
|
|
13
14
|
if (ascDegree !== undefined) {
|
|
14
|
-
output.push(`Ascendant: ${
|
|
15
|
+
output.push(`Ascendant: ${(0, formatting_1.formatDegMin)((0, astrology_1.getDegreeInSign)(ascDegree))} ${(0, astrology_1.getDegreeSign)(ascDegree)}`);
|
|
15
16
|
}
|
|
16
17
|
else {
|
|
17
18
|
output.push('Ascendant: Not available');
|
|
18
19
|
}
|
|
19
20
|
if (mcDegree !== undefined) {
|
|
20
|
-
output.push(`Midheaven: ${
|
|
21
|
+
output.push(`Midheaven: ${(0, formatting_1.formatDegMin)((0, astrology_1.getDegreeInSign)(mcDegree))} ${(0, astrology_1.getDegreeSign)(mcDegree)}`);
|
|
21
22
|
}
|
|
22
23
|
else {
|
|
23
24
|
output.push('Midheaven: Not available');
|
|
@@ -7,10 +7,10 @@ const formatting_1 = require("../../../utils/formatting");
|
|
|
7
7
|
* Format a planet position for display
|
|
8
8
|
*/
|
|
9
9
|
function formatPlanetPosition(planet, includeHouse = false, showChartNames = true) {
|
|
10
|
-
const degInSign =
|
|
10
|
+
const degInSign = (0, formatting_1.formatDegMin)((0, astrology_1.getDegreeInSign)(planet.degree));
|
|
11
11
|
const houseStr = includeHouse && planet.house ? ` (${(0, formatting_1.getOrdinal)(planet.house)} house)` : '';
|
|
12
12
|
const chartPrefix = showChartNames && planet.chartName ? `${planet.chartName}'s ` : '';
|
|
13
|
-
return `${chartPrefix}${planet.name} ${degInSign}
|
|
13
|
+
return `${chartPrefix}${planet.name} ${degInSign} ${planet.sign}${houseStr}`;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
16
|
* Format a T-Square pattern in compact format
|
|
@@ -21,15 +21,15 @@ function generateHousesOutput(houseCusps) {
|
|
|
21
21
|
const leftCusp = houseCusps[leftHouseIndex];
|
|
22
22
|
const rightCusp = houseCusps[rightHouseIndex];
|
|
23
23
|
const leftSign = (0, astrology_1.getDegreeSign)(leftCusp);
|
|
24
|
-
const leftDegInSign =
|
|
24
|
+
const leftDegInSign = (0, formatting_1.formatDegMin)((0, astrology_1.getDegreeInSign)(leftCusp));
|
|
25
25
|
const leftHouseLabel = (0, formatting_1.getOrdinal)(leftHouseIndex + 1) + ' house';
|
|
26
26
|
const rightSign = (0, astrology_1.getDegreeSign)(rightCusp);
|
|
27
|
-
const rightDegInSign =
|
|
27
|
+
const rightDegInSign = (0, formatting_1.formatDegMin)((0, astrology_1.getDegreeInSign)(rightCusp));
|
|
28
28
|
const rightHouseLabel = (0, formatting_1.getOrdinal)(rightHouseIndex + 1) + ' house';
|
|
29
29
|
// Pad the left side to align columns
|
|
30
|
-
const leftPart = `${leftHouseLabel}: ${leftDegInSign}
|
|
31
|
-
const paddedLeftPart = leftPart.padEnd(
|
|
32
|
-
const rightPart = `${rightHouseLabel}: ${rightDegInSign}
|
|
30
|
+
const leftPart = `${leftHouseLabel}: ${leftDegInSign} ${leftSign}`;
|
|
31
|
+
const paddedLeftPart = leftPart.padEnd(28); // Adjust padding as needed
|
|
32
|
+
const rightPart = `${rightHouseLabel}: ${rightDegInSign} ${rightSign}`;
|
|
33
33
|
output.push(`${paddedLeftPart} ${rightPart}`);
|
|
34
34
|
}
|
|
35
35
|
return output;
|
|
@@ -3,10 +3,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.determineChartType = determineChartType;
|
|
4
4
|
exports.generateMetadataOutput = generateMetadataOutput;
|
|
5
5
|
function determineChartType(data) {
|
|
6
|
-
|
|
6
|
+
const hasComposite = data.some((d) => d.chartType === 'composite');
|
|
7
|
+
if (data.length === 1 && hasComposite) {
|
|
7
8
|
return 'composite';
|
|
8
9
|
}
|
|
9
|
-
let baseChartString = 'natal';
|
|
10
|
+
let baseChartString = hasComposite ? 'composite' : 'natal';
|
|
10
11
|
let suffixString = '';
|
|
11
12
|
const natalCharts = data.filter(({ chartType }) => chartType !== 'transit' && chartType !== 'event');
|
|
12
13
|
const eventCharts = data.filter(({ chartType }) => chartType === 'event');
|
|
@@ -48,7 +49,8 @@ function determineChartType(data) {
|
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
else if (natalCharts.length === 1) {
|
|
51
|
-
|
|
52
|
+
if (!hasComposite)
|
|
53
|
+
baseChartString = 'natal';
|
|
52
54
|
}
|
|
53
55
|
else if (natalCharts.length === 2) {
|
|
54
56
|
baseChartString = 'synastry';
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.generatePlanetsOutput = generatePlanetsOutput;
|
|
4
4
|
const formatting_1 = require("../../../utils/formatting");
|
|
5
5
|
const dignities_1 = require("../../../core/dignities");
|
|
6
|
+
const astrology_1 = require("../../../core/astrology");
|
|
6
7
|
/**
|
|
7
8
|
* Generates the [PLANETS] section of the chart output.
|
|
8
9
|
* @param placements Array of planet positions.
|
|
@@ -14,7 +15,7 @@ function generatePlanetsOutput(placements) {
|
|
|
14
15
|
placements.forEach((planet) => {
|
|
15
16
|
const dignities = (0, dignities_1.formatPlanetWithDignities)(planet);
|
|
16
17
|
const retrograde = planet.speed && planet.speed < 0 ? ' Retrograde' : '';
|
|
17
|
-
let line = `${planet.name}: ${
|
|
18
|
+
let line = `${planet.name}: ${(0, formatting_1.formatDegMin)((0, astrology_1.getDegreeInSign)(planet.degree))} ${planet.sign}${retrograde} ${dignities}`;
|
|
18
19
|
if (planet.house) {
|
|
19
20
|
line += `, ${(0, formatting_1.getOrdinal)(planet.house)} house`;
|
|
20
21
|
}
|
|
@@ -89,9 +89,8 @@ function formatReportToText(report) {
|
|
|
89
89
|
const outputLines = [];
|
|
90
90
|
const originalCharts = chartAnalyses.map((ca) => ca.chart);
|
|
91
91
|
const chartType = (0, metadata_1.determineChartType)(originalCharts);
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
: undefined;
|
|
92
|
+
const compositeChart = originalCharts.find((c) => c.chartType === 'composite');
|
|
93
|
+
const compositeSource = compositeChart?.compositeSource;
|
|
95
94
|
outputLines.push(...(0, metadata_1.generateMetadataOutput)(settings, chartType, settings.houseSystemName, compositeSource));
|
|
96
95
|
outputLines.push('');
|
|
97
96
|
// 1. Process individual non-transit charts
|
|
@@ -5,6 +5,16 @@ import { Point, PlanetPosition } from '../types';
|
|
|
5
5
|
* @returns The ordinal string
|
|
6
6
|
*/
|
|
7
7
|
export declare function getOrdinal(num: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* Formats a degree-in-sign value as "DD°MM'" with truncated arcminutes.
|
|
10
|
+
* E.g. 15.3833 -> "15°22'", 0.5 -> "0°30'".
|
|
11
|
+
* Minutes are zero-padded for stable column widths.
|
|
12
|
+
* A tiny epsilon prevents exact minute boundaries from underflowing due to
|
|
13
|
+
* floating-point representation after modulo arithmetic.
|
|
14
|
+
* @param degreeInSign Position within the sign (0-30).
|
|
15
|
+
* @returns Formatted "DD°MM'" string.
|
|
16
|
+
*/
|
|
17
|
+
export declare function formatDegMin(degreeInSign: number): string;
|
|
8
18
|
export declare function getSign(degree: number): string;
|
|
9
19
|
export declare function getHouse(degree: number, houseCusps: number[]): number;
|
|
10
20
|
export declare function getPlanetPositions(planets: Point[], houseCusps?: number[]): PlanetPosition[];
|
package/dist/utils/formatting.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getOrdinal = getOrdinal;
|
|
4
|
+
exports.formatDegMin = formatDegMin;
|
|
4
5
|
exports.getSign = getSign;
|
|
5
6
|
exports.getHouse = getHouse;
|
|
6
7
|
exports.getPlanetPositions = getPlanetPositions;
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
const astrology_1 = require("../core/astrology");
|
|
9
|
+
const MINUTES_PER_DEGREE = 60;
|
|
10
|
+
const MINUTES_PER_SIGN = 30 * MINUTES_PER_DEGREE;
|
|
11
|
+
// 1e-9 degree-minutes ≈ 3.6 microarcseconds — far below the resolution of any
|
|
12
|
+
// astronomical ephemeris, but large enough to absorb double-precision % 30
|
|
13
|
+
// rounding error at exact minute boundaries (e.g. 200 + 1/60).
|
|
14
|
+
const MINUTE_FLOOR_EPSILON = 1e-9;
|
|
11
15
|
/**
|
|
12
16
|
* Converts a number to its ordinal form (1st, 2nd, 3rd, etc.)
|
|
13
17
|
* @param num The number to convert
|
|
@@ -18,9 +22,30 @@ function getOrdinal(num) {
|
|
|
18
22
|
const v = num % 100;
|
|
19
23
|
return num + (suffix[(v - 20) % 10] || suffix[v] || suffix[0]);
|
|
20
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Formats a degree-in-sign value as "DD°MM'" with truncated arcminutes.
|
|
27
|
+
* E.g. 15.3833 -> "15°22'", 0.5 -> "0°30'".
|
|
28
|
+
* Minutes are zero-padded for stable column widths.
|
|
29
|
+
* A tiny epsilon prevents exact minute boundaries from underflowing due to
|
|
30
|
+
* floating-point representation after modulo arithmetic.
|
|
31
|
+
* @param degreeInSign Position within the sign (0-30).
|
|
32
|
+
* @returns Formatted "DD°MM'" string.
|
|
33
|
+
*/
|
|
34
|
+
function formatDegMin(degreeInSign) {
|
|
35
|
+
if (!isFinite(degreeInSign)) {
|
|
36
|
+
throw new Error(`Invalid degree-in-sign value: ${degreeInSign}`);
|
|
37
|
+
}
|
|
38
|
+
let normalizedDegreeInSign = degreeInSign % 30;
|
|
39
|
+
if (normalizedDegreeInSign < 0) {
|
|
40
|
+
normalizedDegreeInSign += 30;
|
|
41
|
+
}
|
|
42
|
+
const totalMinutes = Math.min(Math.floor(normalizedDegreeInSign * MINUTES_PER_DEGREE + MINUTE_FLOOR_EPSILON), MINUTES_PER_SIGN - 1);
|
|
43
|
+
const deg = Math.floor(totalMinutes / MINUTES_PER_DEGREE);
|
|
44
|
+
const min = totalMinutes % MINUTES_PER_DEGREE;
|
|
45
|
+
return `${deg}°${min.toString().padStart(2, '0')}'`;
|
|
46
|
+
}
|
|
21
47
|
function getSign(degree) {
|
|
22
|
-
|
|
23
|
-
return constants_1.ZODIAC_SIGNS[signIndex];
|
|
48
|
+
return (0, astrology_1.getDegreeSign)(degree);
|
|
24
49
|
}
|
|
25
50
|
function getHouse(degree, houseCusps) {
|
|
26
51
|
for (let i = 0; i < 12; i++) {
|
|
@@ -41,7 +66,7 @@ function getHouse(degree, houseCusps) {
|
|
|
41
66
|
}
|
|
42
67
|
function getPlanetPositions(planets, houseCusps) {
|
|
43
68
|
return planets.map((planet) => {
|
|
44
|
-
const normalizedDegree = normalizeDegree(planet.degree);
|
|
69
|
+
const normalizedDegree = (0, astrology_1.normalizeDegree)(planet.degree);
|
|
45
70
|
const position = {
|
|
46
71
|
name: planet.name,
|
|
47
72
|
degree: normalizedDegree,
|