@roxyapi/ui 0.3.1 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +34 -7
- package/README.md +145 -26
- package/dist/cdn/components/ashtakavarga-grid.js +74 -19
- package/dist/cdn/components/ashtakavarga-grid.js.map +2 -2
- package/dist/cdn/components/biorhythm-chart.js +18 -4
- package/dist/cdn/components/biorhythm-chart.js.map +2 -2
- package/dist/cdn/components/choghadiya-grid.js +47 -12
- package/dist/cdn/components/choghadiya-grid.js.map +3 -3
- package/dist/cdn/components/compatibility-card.js +21 -7
- package/dist/cdn/components/compatibility-card.js.map +2 -2
- package/dist/cdn/components/dasha-timeline.js +113 -28
- package/dist/cdn/components/dasha-timeline.js.map +3 -3
- package/dist/cdn/components/data.js +27 -13
- package/dist/cdn/components/data.js.map +2 -2
- package/dist/cdn/components/divisional-chart.js +225 -118
- package/dist/cdn/components/divisional-chart.js.map +4 -4
- package/dist/cdn/components/dosha-card.js +18 -4
- package/dist/cdn/components/dosha-card.js.map +2 -2
- package/dist/cdn/components/endpoint-form.js +25 -11
- package/dist/cdn/components/endpoint-form.js.map +2 -2
- package/dist/cdn/components/guna-milan.js +20 -6
- package/dist/cdn/components/guna-milan.js.map +2 -2
- package/dist/cdn/components/hexagram.js +22 -8
- package/dist/cdn/components/hexagram.js.map +2 -2
- package/dist/cdn/components/horoscope-card.js +20 -6
- package/dist/cdn/components/horoscope-card.js.map +2 -2
- package/dist/cdn/components/kp-chart.js +19 -5
- package/dist/cdn/components/kp-chart.js.map +2 -2
- package/dist/cdn/components/kp-planets-table.js +17 -3
- package/dist/cdn/components/kp-planets-table.js.map +2 -2
- package/dist/cdn/components/kp-ruling-planets.js +17 -3
- package/dist/cdn/components/kp-ruling-planets.js.map +2 -2
- package/dist/cdn/components/location-search.js +18 -4
- package/dist/cdn/components/location-search.js.map +2 -2
- package/dist/cdn/components/moon-phase.js +27 -13
- package/dist/cdn/components/moon-phase.js.map +2 -2
- package/dist/cdn/components/nakshatra-card.js +16 -2
- package/dist/cdn/components/nakshatra-card.js.map +2 -2
- package/dist/cdn/components/natal-chart.js +79 -40
- package/dist/cdn/components/natal-chart.js.map +3 -3
- package/dist/cdn/components/numerology-card.js +18 -4
- package/dist/cdn/components/numerology-card.js.map +2 -2
- package/dist/cdn/components/panchang-table.js +53 -25
- package/dist/cdn/components/panchang-table.js.map +3 -3
- package/dist/cdn/components/shadbala-table.js +24 -10
- package/dist/cdn/components/shadbala-table.js.map +2 -2
- package/dist/cdn/components/synastry-chart.js +96 -48
- package/dist/cdn/components/synastry-chart.js.map +3 -3
- package/dist/cdn/components/tarot-card.js +17 -3
- package/dist/cdn/components/tarot-card.js.map +2 -2
- package/dist/cdn/components/tarot-spread.js +39 -25
- package/dist/cdn/components/tarot-spread.js.map +2 -2
- package/dist/cdn/components/transits-table.js +18 -4
- package/dist/cdn/components/transits-table.js.map +2 -2
- package/dist/cdn/components/vedic-kundli.js +215 -105
- package/dist/cdn/components/vedic-kundli.js.map +4 -4
- package/dist/cdn/components/vedic-planets-table.js +22 -8
- package/dist/cdn/components/vedic-planets-table.js.map +2 -2
- package/dist/cdn/components/western-planets-table.js +18 -4
- package/dist/cdn/components/western-planets-table.js.map +2 -2
- package/dist/cdn/components/yoga-list.js +17 -3
- package/dist/cdn/components/yoga-list.js.map +2 -2
- package/dist/cdn/roxy-ui.js +1082 -816
- package/dist/cdn/roxy-ui.js.map +4 -4
- package/dist/components/ashtakavarga-grid.d.ts +13 -1
- package/dist/components/ashtakavarga-grid.d.ts.map +1 -1
- package/dist/components/ashtakavarga-grid.js +86 -11
- package/dist/components/ashtakavarga-grid.js.map +2 -2
- package/dist/components/biorhythm-chart.js +14 -0
- package/dist/components/biorhythm-chart.js.map +2 -2
- package/dist/components/choghadiya-grid.d.ts +6 -0
- package/dist/components/choghadiya-grid.d.ts.map +1 -1
- package/dist/components/choghadiya-grid.js +50 -2
- package/dist/components/choghadiya-grid.js.map +2 -2
- package/dist/components/compatibility-card.js +14 -0
- package/dist/components/compatibility-card.js.map +2 -2
- package/dist/components/dasha-timeline.d.ts +10 -0
- package/dist/components/dasha-timeline.d.ts.map +1 -1
- package/dist/components/dasha-timeline.js +135 -4
- package/dist/components/dasha-timeline.js.map +2 -2
- package/dist/components/data.js +14 -0
- package/dist/components/data.js.map +2 -2
- package/dist/components/divisional-chart.d.ts +9 -6
- package/dist/components/divisional-chart.d.ts.map +1 -1
- package/dist/components/divisional-chart.js +546 -251
- package/dist/components/divisional-chart.js.map +4 -4
- package/dist/components/dosha-card.js +14 -0
- package/dist/components/dosha-card.js.map +2 -2
- package/dist/components/endpoint-form.js +14 -0
- package/dist/components/endpoint-form.js.map +2 -2
- package/dist/components/guna-milan.js +14 -0
- package/dist/components/guna-milan.js.map +2 -2
- package/dist/components/hexagram.js +14 -0
- package/dist/components/hexagram.js.map +2 -2
- package/dist/components/horoscope-card.js +14 -0
- package/dist/components/horoscope-card.js.map +2 -2
- package/dist/components/kp-chart.js +14 -0
- package/dist/components/kp-chart.js.map +2 -2
- package/dist/components/kp-planets-table.js +14 -0
- package/dist/components/kp-planets-table.js.map +2 -2
- package/dist/components/kp-ruling-planets.js +14 -0
- package/dist/components/kp-ruling-planets.js.map +2 -2
- package/dist/components/location-search.js +14 -0
- package/dist/components/location-search.js.map +2 -2
- package/dist/components/moon-phase.js +14 -0
- package/dist/components/moon-phase.js.map +2 -2
- package/dist/components/nakshatra-card.js +14 -0
- package/dist/components/nakshatra-card.js.map +2 -2
- package/dist/components/natal-chart.d.ts.map +1 -1
- package/dist/components/natal-chart.js +76 -6
- package/dist/components/natal-chart.js.map +2 -2
- package/dist/components/numerology-card.js +14 -0
- package/dist/components/numerology-card.js.map +2 -2
- package/dist/components/panchang-table.d.ts +1 -0
- package/dist/components/panchang-table.d.ts.map +1 -1
- package/dist/components/panchang-table.js +37 -1
- package/dist/components/panchang-table.js.map +2 -2
- package/dist/components/shadbala-table.js +14 -0
- package/dist/components/shadbala-table.js.map +2 -2
- package/dist/components/synastry-chart.d.ts +6 -0
- package/dist/components/synastry-chart.d.ts.map +1 -1
- package/dist/components/synastry-chart.js +106 -7
- package/dist/components/synastry-chart.js.map +2 -2
- package/dist/components/tarot-card.js +14 -0
- package/dist/components/tarot-card.js.map +2 -2
- package/dist/components/tarot-spread.js +14 -0
- package/dist/components/tarot-spread.js.map +2 -2
- package/dist/components/transits-table.js +14 -0
- package/dist/components/transits-table.js.map +2 -2
- package/dist/components/vedic-kundli.d.ts +14 -9
- package/dist/components/vedic-kundli.d.ts.map +1 -1
- package/dist/components/vedic-kundli.js +537 -245
- package/dist/components/vedic-kundli.js.map +4 -4
- package/dist/components/vedic-planets-table.js +14 -0
- package/dist/components/vedic-planets-table.js.map +2 -2
- package/dist/components/western-planets-table.js +14 -0
- package/dist/components/western-planets-table.js.map +2 -2
- package/dist/components/yoga-list.js +14 -0
- package/dist/components/yoga-list.js.map +2 -2
- package/dist/index.cjs +1397 -797
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +1278 -678
- package/dist/index.js.map +4 -4
- package/dist/manifest.json +23 -23
- package/dist/styles/tokens.css +8 -23
- package/dist/utils/base-styles.d.ts.map +1 -1
- package/dist/utils/kundli-render.d.ts +43 -104
- package/dist/utils/kundli-render.d.ts.map +1 -1
- package/dist/utils/kundli-styles.d.ts +13 -0
- package/dist/utils/kundli-styles.d.ts.map +1 -0
- package/dist/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/ashtakavarga-grid.ts +73 -11
- package/src/components/choghadiya-grid.ts +37 -2
- package/src/components/dasha-timeline.ts +135 -4
- package/src/components/divisional-chart.ts +40 -97
- package/src/components/natal-chart.ts +89 -6
- package/src/components/panchang-table.ts +34 -1
- package/src/components/synastry-chart.ts +84 -8
- package/src/components/vedic-kundli.ts +35 -95
- package/src/styles/tokens.css +8 -23
- package/src/utils/base-styles.ts +14 -0
- package/src/utils/kundli-render.ts +609 -270
- package/src/utils/kundli-styles.ts +124 -0
- package/src/version.ts +1 -1
package/dist/cdn/roxy-ui.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";var RoxyUI=(()=>{var
|
|
2
|
-
\f\r]`,
|
|
3
|
-
\f\r"'\`<>=]|("|')|))|$)`,"g"),
|
|
1
|
+
"use strict";var RoxyUI=(()=>{var We=Object.defineProperty;var _t=Object.getOwnPropertyDescriptor;var pr=Object.getOwnPropertyNames;var mr=Object.prototype.hasOwnProperty;var hr=(n,a)=>{for(var e in a)We(n,e,{get:a[e],enumerable:!0})},gr=(n,a,e,t)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of pr(a))!mr.call(n,r)&&r!==e&&We(n,r,{get:()=>a[r],enumerable:!(t=_t(a,r))||t.enumerable});return n};var yr=n=>gr(We({},"__esModule",{value:!0}),n),p=(n,a,e,t)=>{for(var r=t>1?void 0:t?_t(a,e):a,o=n.length-1,i;o>=0;o--)(i=n[o])&&(r=(t?i(a,e,r):i(r))||r);return t&&r&&We(a,e,r),r};var ga={};hr(ga,{ROXY_COMPONENTS:()=>dt,ROXY_UI_COMPONENTS:()=>ha,ROXY_UI_VERSION:()=>cr,RoxyAshtakavargaGrid:()=>V,RoxyBiorhythmChart:()=>Y,RoxyChoghadiyaGrid:()=>pe,RoxyCompatibilityCard:()=>U,RoxyDashaTimeline:()=>F,RoxyData:()=>W,RoxyDivisionalChart:()=>X,RoxyDoshaCard:()=>Z,RoxyEndpointForm:()=>O,RoxyGunaMilan:()=>me,RoxyHexagram:()=>Q,RoxyHoroscopeCard:()=>ee,RoxyKpChart:()=>te,RoxyKpPlanetsTable:()=>he,RoxyKpRulingPlanets:()=>ge,RoxyLocationSearch:()=>_,RoxyMoonPhase:()=>re,RoxyNakshatraCard:()=>ye,RoxyNatalChart:()=>K,RoxyNumerologyCard:()=>ae,RoxyPanchangTable:()=>se,RoxyShadbalaTable:()=>ue,RoxySynastryChart:()=>xe,RoxyTarotCard:()=>oe,RoxyTarotSpread:()=>ne,RoxyTransitsTable:()=>fe,RoxyVedicKundli:()=>ie,RoxyVedicPlanetsTable:()=>be,RoxyWesternPlanetsTable:()=>ve,RoxyYogaList:()=>le});var Je=globalThis,Xe=Je.ShadowRoot&&(Je.ShadyCSS===void 0||Je.ShadyCSS.nativeShadow)&&"adoptedStyleSheets"in Document.prototype&&"replace"in CSSStyleSheet.prototype,ct=Symbol(),Dt=new WeakMap,De=class{constructor(a,e,t){if(this._$cssResult$=!0,t!==ct)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=a,this.t=e}get styleSheet(){let a=this.o,e=this.t;if(Xe&&a===void 0){let t=e!==void 0&&e.length===1;t&&(a=Dt.get(e)),a===void 0&&((this.o=a=new CSSStyleSheet).replaceSync(this.cssText),t&&Dt.set(e,a))}return a}toString(){return this.cssText}},Ot=n=>new De(typeof n=="string"?n:n+"",void 0,ct),f=(n,...a)=>{let e=n.length===1?n[0]:a.reduce((t,r,o)=>t+(i=>{if(i._$cssResult$===!0)return i.cssText;if(typeof i=="number")return i;throw Error("Value passed to 'css' function must be a 'css' function result: "+i+". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.")})(r)+n[o+1],n[0]);return new De(e,n,ct)},Gt=(n,a)=>{if(Xe)n.adoptedStyleSheets=a.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let e of a){let t=document.createElement("style"),r=Je.litNonce;r!==void 0&&t.setAttribute("nonce",r),t.textContent=e.cssText,n.appendChild(t)}},pt=Xe?n=>n:n=>n instanceof CSSStyleSheet?(a=>{let e="";for(let t of a.cssRules)e+=t.cssText;return Ot(e)})(n):n;var{is:ur,defineProperty:xr,getOwnPropertyDescriptor:fr,getOwnPropertyNames:br,getOwnPropertySymbols:vr,getPrototypeOf:$r}=Object,Ze=globalThis,Ht=Ze.trustedTypes,wr=Ht?Ht.emptyScript:"",kr=Ze.reactiveElementPolyfillSupport,Oe=(n,a)=>n,Ge={toAttribute(n,a){switch(a){case Boolean:n=n?wr:null;break;case Object:case Array:n=n==null?n:JSON.stringify(n)}return n},fromAttribute(n,a){let e=n;switch(a){case Boolean:e=n!==null;break;case Number:e=n===null?null:Number(n);break;case Object:case Array:try{e=JSON.parse(n)}catch{e=null}}return e}},Qe=(n,a)=>!ur(n,a),jt={attribute:!0,type:String,converter:Ge,reflect:!1,useDefault:!1,hasChanged:Qe};Symbol.metadata??=Symbol("metadata"),Ze.litPropertyMetadata??=new WeakMap;var q=class extends HTMLElement{static addInitializer(a){this._$Ei(),(this.l??=[]).push(a)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(a,e=jt){if(e.state&&(e.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(a)&&((e=Object.create(e)).wrapped=!0),this.elementProperties.set(a,e),!e.noAccessor){let t=Symbol(),r=this.getPropertyDescriptor(a,t,e);r!==void 0&&xr(this.prototype,a,r)}}static getPropertyDescriptor(a,e,t){let{get:r,set:o}=fr(this.prototype,a)??{get(){return this[e]},set(i){this[e]=i}};return{get:r,set(i){let d=r?.call(this);o?.call(this,i),this.requestUpdate(a,d,t)},configurable:!0,enumerable:!0}}static getPropertyOptions(a){return this.elementProperties.get(a)??jt}static _$Ei(){if(this.hasOwnProperty(Oe("elementProperties")))return;let a=$r(this);a.finalize(),a.l!==void 0&&(this.l=[...a.l]),this.elementProperties=new Map(a.elementProperties)}static finalize(){if(this.hasOwnProperty(Oe("finalized")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(Oe("properties"))){let e=this.properties,t=[...br(e),...vr(e)];for(let r of t)this.createProperty(r,e[r])}let a=this[Symbol.metadata];if(a!==null){let e=litPropertyMetadata.get(a);if(e!==void 0)for(let[t,r]of e)this.elementProperties.set(t,r)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let r=this._$Eu(e,t);r!==void 0&&this._$Eh.set(r,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(a){let e=[];if(Array.isArray(a)){let t=new Set(a.flat(1/0).reverse());for(let r of t)e.unshift(pt(r))}else a!==void 0&&e.push(pt(a));return e}static _$Eu(a,e){let t=e.attribute;return t===!1?void 0:typeof t=="string"?t:typeof a=="string"?a.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(a=>this.enableUpdating=a),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(a=>a(this))}addController(a){(this._$EO??=new Set).add(a),this.renderRoot!==void 0&&this.isConnected&&a.hostConnected?.()}removeController(a){this._$EO?.delete(a)}_$E_(){let a=new Map,e=this.constructor.elementProperties;for(let t of e.keys())this.hasOwnProperty(t)&&(a.set(t,this[t]),delete this[t]);a.size>0&&(this._$Ep=a)}createRenderRoot(){let a=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return Gt(a,this.constructor.elementStyles),a}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(a=>a.hostConnected?.())}enableUpdating(a){}disconnectedCallback(){this._$EO?.forEach(a=>a.hostDisconnected?.())}attributeChangedCallback(a,e,t){this._$AK(a,t)}_$ET(a,e){let t=this.constructor.elementProperties.get(a),r=this.constructor._$Eu(a,t);if(r!==void 0&&t.reflect===!0){let o=(t.converter?.toAttribute!==void 0?t.converter:Ge).toAttribute(e,t.type);this._$Em=a,o==null?this.removeAttribute(r):this.setAttribute(r,o),this._$Em=null}}_$AK(a,e){let t=this.constructor,r=t._$Eh.get(a);if(r!==void 0&&this._$Em!==r){let o=t.getPropertyOptions(r),i=typeof o.converter=="function"?{fromAttribute:o.converter}:o.converter?.fromAttribute!==void 0?o.converter:Ge;this._$Em=r;let d=i.fromAttribute(e,o.type);this[r]=d??this._$Ej?.get(r)??d,this._$Em=null}}requestUpdate(a,e,t,r=!1,o){if(a!==void 0){let i=this.constructor;if(r===!1&&(o=this[a]),t??=i.getPropertyOptions(a),!((t.hasChanged??Qe)(o,e)||t.useDefault&&t.reflect&&o===this._$Ej?.get(a)&&!this.hasAttribute(i._$Eu(a,t))))return;this.C(a,e,t)}this.isUpdatePending===!1&&(this._$ES=this._$EP())}C(a,e,{useDefault:t,reflect:r,wrapped:o},i){t&&!(this._$Ej??=new Map).has(a)&&(this._$Ej.set(a,i??e??this[a]),o!==!0||i!==void 0)||(this._$AL.has(a)||(this.hasUpdated||t||(e=void 0),this._$AL.set(a,e)),r===!0&&this._$Em!==a&&(this._$Eq??=new Set).add(a))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let a=this.scheduleUpdate();return a!=null&&await a,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[r,o]of this._$Ep)this[r]=o;this._$Ep=void 0}let t=this.constructor.elementProperties;if(t.size>0)for(let[r,o]of t){let{wrapped:i}=o,d=this[r];i!==!0||this._$AL.has(r)||d===void 0||this.C(r,void 0,o,d)}}let a=!1,e=this._$AL;try{a=this.shouldUpdate(e),a?(this.willUpdate(e),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(e)):this._$EM()}catch(t){throw a=!1,this._$EM(),t}a&&this._$AE(e)}willUpdate(a){}_$AE(a){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(a)),this.updated(a)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(a){return!0}update(a){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(a){}firstUpdated(a){}};q.elementStyles=[],q.shadowRootOptions={mode:"open"},q[Oe("elementProperties")]=new Map,q[Oe("finalized")]=new Map,kr?.({ReactiveElement:q}),(Ze.reactiveElementVersions??=[]).push("2.1.2");var ft=globalThis,It=n=>n,et=ft.trustedTypes,Bt=et?et.createPolicy("lit-html",{createHTML:n=>n}):void 0,Ft="$lit$",de=`lit$${Math.random().toFixed(9).slice(2)}$`,Wt="?"+de,Sr=`<${Wt}>`,Se=document,je=()=>Se.createComment(""),Ie=n=>n===null||typeof n!="object"&&typeof n!="function",bt=Array.isArray,Ar=n=>bt(n)||typeof n?.[Symbol.iterator]=="function",mt=`[
|
|
2
|
+
\f\r]`,He=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Kt=/-->/g,qt=/>/g,we=RegExp(`>|${mt}(?:([^\\s"'>=/]+)(${mt}*=${mt}*(?:[^
|
|
3
|
+
\f\r"'\`<>=]|("|')|))|$)`,"g"),Vt=/'/g,Yt=/"/g,Jt=/^(?:script|style|textarea|title)$/i,vt=n=>(a,...e)=>({_$litType$:n,strings:a,values:e}),s=vt(1),w=vt(2),va=vt(3),Ae=Symbol.for("lit-noChange"),l=Symbol.for("lit-nothing"),Ut=new WeakMap,ke=Se.createTreeWalker(Se,129);function Xt(n,a){if(!bt(n)||!n.hasOwnProperty("raw"))throw Error("invalid template strings array");return Bt!==void 0?Bt.createHTML(a):a}var Er=(n,a)=>{let e=n.length-1,t=[],r,o=a===2?"<svg>":a===3?"<math>":"",i=He;for(let d=0;d<e;d++){let c=n[d],m,g,h=-1,u=0;for(;u<c.length&&(i.lastIndex=u,g=i.exec(c),g!==null);)u=i.lastIndex,i===He?g[1]==="!--"?i=Kt:g[1]!==void 0?i=qt:g[2]!==void 0?(Jt.test(g[2])&&(r=RegExp("</"+g[2],"g")),i=we):g[3]!==void 0&&(i=we):i===we?g[0]===">"?(i=r??He,h=-1):g[1]===void 0?h=-2:(h=i.lastIndex-g[2].length,m=g[1],i=g[3]===void 0?we:g[3]==='"'?Yt:Vt):i===Yt||i===Vt?i=we:i===Kt||i===qt?i=He:(i=we,r=void 0);let k=i===we&&n[d+1].startsWith("/>")?" ":"";o+=i===He?c+Sr:h>=0?(t.push(m),c.slice(0,h)+Ft+c.slice(h)+de+k):c+de+(h===-2?d:k)}return[Xt(n,o+(n[e]||"<?>")+(a===2?"</svg>":a===3?"</math>":"")),t]},Be=class n{constructor({strings:a,_$litType$:e},t){let r;this.parts=[];let o=0,i=0,d=a.length-1,c=this.parts,[m,g]=Er(a,e);if(this.el=n.createElement(m,t),ke.currentNode=this.el.content,e===2||e===3){let h=this.el.content.firstChild;h.replaceWith(...h.childNodes)}for(;(r=ke.nextNode())!==null&&c.length<d;){if(r.nodeType===1){if(r.hasAttributes())for(let h of r.getAttributeNames())if(h.endsWith(Ft)){let u=g[i++],k=r.getAttribute(h).split(de),$=/([.?@])?(.*)/.exec(u);c.push({type:1,index:o,name:$[2],strings:k,ctor:$[1]==="."?gt:$[1]==="?"?yt:$[1]==="@"?ut:Te}),r.removeAttribute(h)}else h.startsWith(de)&&(c.push({type:6,index:o}),r.removeAttribute(h));if(Jt.test(r.tagName)){let h=r.textContent.split(de),u=h.length-1;if(u>0){r.textContent=et?et.emptyScript:"";for(let k=0;k<u;k++)r.append(h[k],je()),ke.nextNode(),c.push({type:2,index:++o});r.append(h[u],je())}}}else if(r.nodeType===8)if(r.data===Wt)c.push({type:2,index:o});else{let h=-1;for(;(h=r.data.indexOf(de,h+1))!==-1;)c.push({type:7,index:o}),h+=de.length-1}o++}}static createElement(a,e){let t=Se.createElement("template");return t.innerHTML=a,t}};function Pe(n,a,e=n,t){if(a===Ae)return a;let r=t!==void 0?e._$Co?.[t]:e._$Cl,o=Ie(a)?void 0:a._$litDirective$;return r?.constructor!==o&&(r?._$AO?.(!1),o===void 0?r=void 0:(r=new o(n),r._$AT(n,e,t)),t!==void 0?(e._$Co??=[])[t]=r:e._$Cl=r),r!==void 0&&(a=Pe(n,r._$AS(n,a.values),r,t)),a}var ht=class{constructor(a,e){this._$AV=[],this._$AN=void 0,this._$AD=a,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(a){let{el:{content:e},parts:t}=this._$AD,r=(a?.creationScope??Se).importNode(e,!0);ke.currentNode=r;let o=ke.nextNode(),i=0,d=0,c=t[0];for(;c!==void 0;){if(i===c.index){let m;c.type===2?m=new Ke(o,o.nextSibling,this,a):c.type===1?m=new c.ctor(o,c.name,c.strings,this,a):c.type===6&&(m=new xt(o,this,a)),this._$AV.push(m),c=t[++d]}i!==c?.index&&(o=ke.nextNode(),i++)}return ke.currentNode=Se,r}p(a){let e=0;for(let t of this._$AV)t!==void 0&&(t.strings!==void 0?(t._$AI(a,t,e),e+=t.strings.length-2):t._$AI(a[e])),e++}},Ke=class n{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(a,e,t,r){this.type=2,this._$AH=l,this._$AN=void 0,this._$AA=a,this._$AB=e,this._$AM=t,this.options=r,this._$Cv=r?.isConnected??!0}get parentNode(){let a=this._$AA.parentNode,e=this._$AM;return e!==void 0&&a?.nodeType===11&&(a=e.parentNode),a}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(a,e=this){a=Pe(this,a,e),Ie(a)?a===l||a==null||a===""?(this._$AH!==l&&this._$AR(),this._$AH=l):a!==this._$AH&&a!==Ae&&this._(a):a._$litType$!==void 0?this.$(a):a.nodeType!==void 0?this.T(a):Ar(a)?this.k(a):this._(a)}O(a){return this._$AA.parentNode.insertBefore(a,this._$AB)}T(a){this._$AH!==a&&(this._$AR(),this._$AH=this.O(a))}_(a){this._$AH!==l&&Ie(this._$AH)?this._$AA.nextSibling.data=a:this.T(Se.createTextNode(a)),this._$AH=a}$(a){let{values:e,_$litType$:t}=a,r=typeof t=="number"?this._$AC(a):(t.el===void 0&&(t.el=Be.createElement(Xt(t.h,t.h[0]),this.options)),t);if(this._$AH?._$AD===r)this._$AH.p(e);else{let o=new ht(r,this),i=o.u(this.options);o.p(e),this.T(i),this._$AH=o}}_$AC(a){let e=Ut.get(a.strings);return e===void 0&&Ut.set(a.strings,e=new Be(a)),e}k(a){bt(this._$AH)||(this._$AH=[],this._$AR());let e=this._$AH,t,r=0;for(let o of a)r===e.length?e.push(t=new n(this.O(je()),this.O(je()),this,this.options)):t=e[r],t._$AI(o),r++;r<e.length&&(this._$AR(t&&t._$AB.nextSibling,r),e.length=r)}_$AR(a=this._$AA.nextSibling,e){for(this._$AP?.(!1,!0,e);a!==this._$AB;){let t=It(a).nextSibling;It(a).remove(),a=t}}setConnected(a){this._$AM===void 0&&(this._$Cv=a,this._$AP?.(a))}},Te=class{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(a,e,t,r,o){this.type=1,this._$AH=l,this._$AN=void 0,this.element=a,this.name=e,this._$AM=r,this.options=o,t.length>2||t[0]!==""||t[1]!==""?(this._$AH=Array(t.length-1).fill(new String),this.strings=t):this._$AH=l}_$AI(a,e=this,t,r){let o=this.strings,i=!1;if(o===void 0)a=Pe(this,a,e,0),i=!Ie(a)||a!==this._$AH&&a!==Ae,i&&(this._$AH=a);else{let d=a,c,m;for(a=o[0],c=0;c<o.length-1;c++)m=Pe(this,d[t+c],e,c),m===Ae&&(m=this._$AH[c]),i||=!Ie(m)||m!==this._$AH[c],m===l?a=l:a!==l&&(a+=(m??"")+o[c+1]),this._$AH[c]=m}i&&!r&&this.j(a)}j(a){a===l?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,a??"")}},gt=class extends Te{constructor(){super(...arguments),this.type=3}j(a){this.element[this.name]=a===l?void 0:a}},yt=class extends Te{constructor(){super(...arguments),this.type=4}j(a){this.element.toggleAttribute(this.name,!!a&&a!==l)}},ut=class extends Te{constructor(a,e,t,r,o){super(a,e,t,r,o),this.type=5}_$AI(a,e=this){if((a=Pe(this,a,e,0)??l)===Ae)return;let t=this._$AH,r=a===l&&t!==l||a.capture!==t.capture||a.once!==t.once||a.passive!==t.passive,o=a!==l&&(t===l||r);r&&this.element.removeEventListener(this.name,this,t),o&&this.element.addEventListener(this.name,this,a),this._$AH=a}handleEvent(a){typeof this._$AH=="function"?this._$AH.call(this.options?.host??this.element,a):this._$AH.handleEvent(a)}},xt=class{constructor(a,e,t){this.element=a,this.type=6,this._$AN=void 0,this._$AM=e,this.options=t}get _$AU(){return this._$AM._$AU}_$AI(a){Pe(this,a)}};var Cr=ft.litHtmlPolyfillSupport;Cr?.(Be,Ke),(ft.litHtmlVersions??=[]).push("3.3.2");var Zt=(n,a,e)=>{let t=e?.renderBefore??a,r=t._$litPart$;if(r===void 0){let o=e?.renderBefore??null;t._$litPart$=r=new Ke(a.insertBefore(je(),o),o,void 0,e??{})}return r._$AI(n),r};var $t=globalThis,x=class extends q{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let a=super.createRenderRoot();return this.renderOptions.renderBefore??=a.firstChild,a}update(a){let e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(a),this._$Do=Zt(e,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Ae}};x._$litElement$=!0,x.finalized=!0,$t.litElementHydrateSupport?.({LitElement:x});var Lr=$t.litElementPolyfillSupport;Lr?.({LitElement:x});($t.litElementVersions??=[]).push("4.2.2");var b=n=>(a,e)=>{e!==void 0?e.addInitializer(()=>{customElements.define(n,a)}):customElements.define(n,a)};var Pr={attribute:!0,type:String,converter:Ge,reflect:!1,hasChanged:Qe},Tr=(n=Pr,a,e)=>{let{kind:t,metadata:r}=e,o=globalThis.litPropertyMetadata.get(r);if(o===void 0&&globalThis.litPropertyMetadata.set(r,o=new Map),t==="setter"&&((n=Object.create(n)).wrapped=!0),o.set(e.name,n),t==="accessor"){let{name:i}=e;return{set(d){let c=a.get.call(this);a.set.call(this,d),this.requestUpdate(i,c,n,!0,d)},init(d){return d!==void 0&&this.C(i,void 0,n,d),d}}}if(t==="setter"){let{name:i}=e;return function(d){let c=this[i];a.call(this,d),this.requestUpdate(i,c,n,!0,d)}}throw Error("Unsupported decorator location: "+t)};function y(n){return(a,e)=>typeof e=="object"?Tr(n,a,e):((t,r,o)=>{let i=r.hasOwnProperty(o);return r.constructor.createProperty(o,t),i?Object.getOwnPropertyDescriptor(r,o):void 0})(n,a,e)}function z(n){return y({...n,state:!0,attribute:!1})}var R={Sun:"\u2609",Moon:"\u263D",Mercury:"\u263F",Venus:"\u2640",Earth:"\u2641",Mars:"\u2642",Jupiter:"\u2643",Saturn:"\u2644",Uranus:"\u2645",Neptune:"\u2646",Pluto:"\u2647",Rahu:"\u260A",Ketu:"\u260B",Ascendant:"Asc",Lagna:"La",NorthNode:"\u260A",SouthNode:"\u260B","North node":"\u260A","South node":"\u260B",Chiron:"\u26B7",Lilith:"\u26B8","Black moon lilith":"\u26B8"},Qt={Sun:"Su",Moon:"Mo",Mercury:"Me",Venus:"Ve",Mars:"Ma",Jupiter:"Ju",Saturn:"Sa",Uranus:"Ur",Neptune:"Ne",Pluto:"Pl",Rahu:"Ra",Ketu:"Ke",Ascendant:"Asc",Lagna:"La"},G={Aries:"\u2648",Taurus:"\u2649",Gemini:"\u264A",Cancer:"\u264B",Leo:"\u264C",Virgo:"\u264D",Libra:"\u264E",Scorpio:"\u264F",Sagittarius:"\u2650",Capricorn:"\u2651",Aquarius:"\u2652",Pisces:"\u2653"},wt={Aries:"Ar",Taurus:"Ta",Gemini:"Ge",Cancer:"Cn",Leo:"Le",Virgo:"Vi",Libra:"Li",Scorpio:"Sc",Sagittarius:"Sg",Capricorn:"Cp",Aquarius:"Aq",Pisces:"Pi"},M=["Aries","Taurus","Gemini","Cancer","Leo","Virgo","Libra","Scorpio","Sagittarius","Capricorn","Aquarius","Pisces"],ns=M.map(n=>n.toLowerCase()),kt={conjunction:"\u260C",opposition:"\u260D",trine:"\u25B3",square:"\u25A1",sextile:"\u2731",quincunx:"\u22BB",semisextile:"\u22BC"},St={heaven:"\u2630",lake:"\u2631",fire:"\u2632",thunder:"\u2633",wind:"\u2634",water:"\u2635",mountain:"\u2636",earth:"\u2637",Heaven:"\u2630",Lake:"\u2631",Fire:"\u2632",Thunder:"\u2633",Wind:"\u2634",Water:"\u2635",Mountain:"\u2636",Earth:"\u2637"},er={"new moon":"\u{1F311}","waxing crescent":"\u{1F312}","first quarter":"\u{1F313}","waxing gibbous":"\u{1F314}","full moon":"\u{1F315}","waning gibbous":"\u{1F316}","last quarter":"\u{1F317}","waning crescent":"\u{1F318}"};var v=f`
|
|
4
4
|
:host {
|
|
5
5
|
display: block;
|
|
6
6
|
container-type: inline-size;
|
|
@@ -82,10 +82,24 @@
|
|
|
82
82
|
outline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));
|
|
83
83
|
outline-offset: 2px;
|
|
84
84
|
}
|
|
85
|
-
|
|
85
|
+
|
|
86
|
+
/* Force the text-style variant on every Unicode glyph in the component.
|
|
87
|
+
* macOS and iOS substitute coloured emoji glyphs for the planetary and
|
|
88
|
+
* gender Unicode code points (Mars, Venus, Mercury, etc.) when the
|
|
89
|
+
* system colour-emoji font wins font selection. The text-style variant
|
|
90
|
+
* keeps glyphs monochrome so they inherit the surrounding fill colour
|
|
91
|
+
* and match the brand palette consistently across platforms.
|
|
92
|
+
*
|
|
93
|
+
* font-variant-emoji is part of CSS Fonts 4 (Safari 17+, Chrome 134+,
|
|
94
|
+
* Firefox 139+). On older browsers the rule is silently ignored.
|
|
95
|
+
*/
|
|
96
|
+
:host {
|
|
97
|
+
font-variant-emoji: text;
|
|
98
|
+
}
|
|
99
|
+
`;var Rr={sarva:"Sarvashtakavarga",bhinna:"Bhinnashtakavarga",pinda:"Shodhya Pinda"},Ee=["sarva","bhinna","pinda"],V=class extends x{constructor(){super(...arguments);this.data=null;this.activeTab="sarva"}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No ashtakavarga data</div>`;let e=this.data.signs??[];return s`<div class="wrap" aria-label="Ashtakavarga grid">
|
|
86
100
|
<div class="head">
|
|
87
101
|
<h2 class="title">Ashtakavarga</h2>
|
|
88
|
-
${e.length?
|
|
102
|
+
${e.length?s`<p class="subtitle">${e.length} signs</p>`:l}
|
|
89
103
|
</div>
|
|
90
104
|
|
|
91
105
|
<div
|
|
@@ -94,16 +108,16 @@
|
|
|
94
108
|
aria-label="Ashtakavarga views"
|
|
95
109
|
@keydown=${this.onTabKeyDown}
|
|
96
110
|
>
|
|
97
|
-
${
|
|
111
|
+
${Ee.map(t=>s`<button
|
|
98
112
|
class="tab"
|
|
99
113
|
role="tab"
|
|
100
|
-
id="tab-${
|
|
101
|
-
aria-selected=${this.activeTab===
|
|
102
|
-
aria-controls="panel-${
|
|
103
|
-
tabindex=${this.activeTab===
|
|
104
|
-
@click=${()=>{this.activeTab=
|
|
114
|
+
id="tab-${t}"
|
|
115
|
+
aria-selected=${this.activeTab===t?"true":"false"}
|
|
116
|
+
aria-controls="panel-${t}"
|
|
117
|
+
tabindex=${this.activeTab===t?"0":"-1"}
|
|
118
|
+
@click=${()=>{this.activeTab=t}}
|
|
105
119
|
>
|
|
106
|
-
${
|
|
120
|
+
${Rr[t]}
|
|
107
121
|
</button>`)}
|
|
108
122
|
</div>
|
|
109
123
|
|
|
@@ -114,7 +128,7 @@
|
|
|
114
128
|
>
|
|
115
129
|
${this.activeTab==="sarva"?this.renderSarva(e):this.activeTab==="bhinna"?this.renderBhinna(e):this.renderPinda()}
|
|
116
130
|
</div>
|
|
117
|
-
</div>`}onTabKeyDown(e){let
|
|
131
|
+
</div>`}onTabKeyDown(e){let t=Ee.indexOf(this.activeTab);e.key==="ArrowRight"?(e.preventDefault(),this.activeTab=Ee[(t+1)%Ee.length],this.focusActiveTab()):e.key==="ArrowLeft"&&(e.preventDefault(),this.activeTab=Ee[(t-1+Ee.length)%Ee.length],this.focusActiveTab())}focusActiveTab(){requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${this.activeTab}`)?.focus()})}bhinnaHeat(e){return e<=1?"heat-1":e<=2?"heat-2":e<=3?"heat-3":e<=4?"heat-4":e<=5?"heat-5":e<=6?"heat-6":"heat-7"}sarvaHeat(e){return e<=18?"heat-1":e<=23?"heat-2":e<=28?"heat-3":e<=32?"heat-4":e<=37?"heat-5":e<=42?"heat-6":"heat-7"}renderSarva(e){let t=this.data.sarvashtakavarga;return t?s`<div class="overflow-scroll">
|
|
118
132
|
<table aria-label="Sarvashtakavarga bindu counts per sign">
|
|
119
133
|
<thead>
|
|
120
134
|
<tr>
|
|
@@ -123,41 +137,41 @@
|
|
|
123
137
|
</tr>
|
|
124
138
|
</thead>
|
|
125
139
|
<tbody>
|
|
126
|
-
${e.map((
|
|
140
|
+
${e.map((r,o)=>{let i=t.bindus[o]??0,d=this.sarvaHeat(i);return s`<tr>
|
|
127
141
|
<td>
|
|
128
142
|
<div class="planet-cell">
|
|
129
|
-
<span class="glyph" aria-hidden="true">${
|
|
130
|
-
${
|
|
143
|
+
<span class="glyph" aria-hidden="true">${G[r]??""}</span>
|
|
144
|
+
${r}
|
|
131
145
|
</div>
|
|
132
146
|
</td>
|
|
133
|
-
<td class="${`heat-cell ${d}`}">${
|
|
147
|
+
<td class="${`heat-cell ${d}`}">${i}</td>
|
|
134
148
|
</tr>`})}
|
|
135
149
|
</tbody>
|
|
136
150
|
<tfoot>
|
|
137
151
|
<tr class="total-row">
|
|
138
152
|
<td>Total</td>
|
|
139
|
-
<td>${
|
|
153
|
+
<td>${t.total}</td>
|
|
140
154
|
</tr>
|
|
141
155
|
</tfoot>
|
|
142
156
|
</table>
|
|
143
|
-
</div>`:
|
|
157
|
+
</div>`:s`<p class="roxy-empty">No sarvashtakavarga data</p>`}renderBhinna(e){let t=this.data.bhinnashtakavarga;return t?.length?s`<div class="overflow-scroll">
|
|
144
158
|
<table class="bhinna-table" aria-label="Bhinnashtakavarga planet-by-sign grid">
|
|
145
159
|
<thead>
|
|
146
160
|
<tr>
|
|
147
161
|
<th scope="col">Planet</th>
|
|
148
|
-
${e.map(
|
|
162
|
+
${e.map(r=>s`<th scope="col" title=${r}>${G[r]??r.slice(0,2)}</th>`)}
|
|
149
163
|
<th scope="col">Total</th>
|
|
150
164
|
</tr>
|
|
151
165
|
</thead>
|
|
152
166
|
<tbody>
|
|
153
|
-
${
|
|
154
|
-
<td>${
|
|
155
|
-
${
|
|
156
|
-
<td>${
|
|
167
|
+
${t.map(r=>s`<tr>
|
|
168
|
+
<td>${r.planet}</td>
|
|
169
|
+
${r.bindus.map(o=>{let i=this.bhinnaHeat(o);return s`<td class="${`heat-cell ${i}`}">${o}</td>`})}
|
|
170
|
+
<td>${r.total}</td>
|
|
157
171
|
</tr>`)}
|
|
158
172
|
</tbody>
|
|
159
173
|
</table>
|
|
160
|
-
</div>`:
|
|
174
|
+
</div>`:s`<p class="roxy-empty">No bhinnashtakavarga data</p>`}renderPinda(){let e=this.data.shodhyaPinda;return e?.length?s`<div class="overflow-scroll">
|
|
161
175
|
<table aria-label="Shodhya Pinda planet strength scores">
|
|
162
176
|
<thead>
|
|
163
177
|
<tr>
|
|
@@ -168,15 +182,15 @@
|
|
|
168
182
|
</tr>
|
|
169
183
|
</thead>
|
|
170
184
|
<tbody>
|
|
171
|
-
${e.map(
|
|
172
|
-
<td>${
|
|
173
|
-
<td>${
|
|
174
|
-
<td>${
|
|
175
|
-
<td>${
|
|
185
|
+
${e.map(t=>s`<tr>
|
|
186
|
+
<td>${t.planet}</td>
|
|
187
|
+
<td>${t.rashiPinda}</td>
|
|
188
|
+
<td>${t.grahaPinda}</td>
|
|
189
|
+
<td>${t.shodhyaPinda}</td>
|
|
176
190
|
</tr>`)}
|
|
177
191
|
</tbody>
|
|
178
192
|
</table>
|
|
179
|
-
</div>`:
|
|
193
|
+
</div>`:s`<p class="roxy-empty">No shodhya pinda data</p>`}};V.styles=[v,f`
|
|
180
194
|
.wrap {
|
|
181
195
|
display: grid;
|
|
182
196
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -283,34 +297,75 @@
|
|
|
283
297
|
border-bottom: none;
|
|
284
298
|
}
|
|
285
299
|
|
|
286
|
-
/* Heat cells
|
|
300
|
+
/* Heat cells. Single base hue (var --roxy-heat) mixed with
|
|
301
|
+
* transparent at increasing percentages produces seven readable
|
|
302
|
+
* tiers in both light and dark themes. Text colour stays
|
|
303
|
+
* var(--roxy-fg) so it inverts with the host theme without
|
|
304
|
+
* per-tier overrides. */
|
|
287
305
|
.heat-cell {
|
|
288
306
|
border-radius: var(--roxy-radius-sm, 4px);
|
|
289
307
|
font-weight: var(--roxy-weight-bold, 600);
|
|
290
308
|
min-width: 2rem;
|
|
291
309
|
font-variant-numeric: tabular-nums;
|
|
310
|
+
color: var(--roxy-fg, currentColor);
|
|
292
311
|
}
|
|
293
312
|
|
|
294
|
-
.heat-1 { background: var(--roxy-heat
|
|
295
|
-
.heat-2 { background: var(--roxy-heat
|
|
296
|
-
.heat-3 { background: var(--roxy-heat
|
|
297
|
-
.heat-4 { background: var(--roxy-heat
|
|
298
|
-
.heat-5 { background: var(--roxy-heat
|
|
299
|
-
.heat-6 { background: var(--roxy-heat
|
|
300
|
-
.heat-7 { background: var(--roxy-heat
|
|
313
|
+
.heat-1 { background: color-mix(in srgb, var(--roxy-heat, #ef4444) 6%, transparent); }
|
|
314
|
+
.heat-2 { background: color-mix(in srgb, var(--roxy-heat, #ef4444) 14%, transparent); }
|
|
315
|
+
.heat-3 { background: color-mix(in srgb, var(--roxy-heat, #ef4444) 26%, transparent); }
|
|
316
|
+
.heat-4 { background: color-mix(in srgb, var(--roxy-heat, #ef4444) 40%, transparent); }
|
|
317
|
+
.heat-5 { background: color-mix(in srgb, var(--roxy-heat, #ef4444) 55%, transparent); }
|
|
318
|
+
.heat-6 { background: color-mix(in srgb, var(--roxy-heat, #ef4444) 72%, transparent); }
|
|
319
|
+
.heat-7 { background: color-mix(in srgb, var(--roxy-heat, #ef4444) 90%, transparent); }
|
|
301
320
|
|
|
302
321
|
/* Bhinna grid: planet header column narrower */
|
|
303
322
|
.bhinna-table th:first-child,
|
|
304
323
|
.bhinna-table td:first-child {
|
|
305
324
|
min-width: 5rem;
|
|
306
325
|
}
|
|
307
|
-
|
|
326
|
+
|
|
327
|
+
/* Tight cells below 480px so the 14-column bhinna grid stops
|
|
328
|
+
* overflowing the viewport. The wrapper keeps overflow-x:auto as
|
|
329
|
+
* a fallback for very long content. */
|
|
330
|
+
@container (max-width: 480px) {
|
|
331
|
+
.bhinna-table th,
|
|
332
|
+
.bhinna-table td {
|
|
333
|
+
padding: 0.3rem 0.35rem;
|
|
334
|
+
font-size: var(--roxy-text-xs, 0.75rem);
|
|
335
|
+
}
|
|
336
|
+
.bhinna-table th:first-child,
|
|
337
|
+
.bhinna-table td:first-child {
|
|
338
|
+
min-width: 3.5rem;
|
|
339
|
+
}
|
|
340
|
+
.heat-cell {
|
|
341
|
+
min-width: 1.5rem;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/* Visual cue that the bhinna table is scrollable below the breakpoint:
|
|
345
|
+
* a soft gradient at the right edge so users see there is more to scroll. */
|
|
346
|
+
.overflow-scroll {
|
|
347
|
+
mask-image: linear-gradient(
|
|
348
|
+
to right,
|
|
349
|
+
transparent 0,
|
|
350
|
+
black 0.5rem,
|
|
351
|
+
black calc(100% - 1rem),
|
|
352
|
+
transparent 100%
|
|
353
|
+
);
|
|
354
|
+
-webkit-mask-image: linear-gradient(
|
|
355
|
+
to right,
|
|
356
|
+
transparent 0,
|
|
357
|
+
black 0.5rem,
|
|
358
|
+
black calc(100% - 1rem),
|
|
359
|
+
transparent 100%
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
`],p([y({attribute:!1})],V.prototype,"data",2),p([z()],V.prototype,"activeTab",2),V=p([b("roxy-ashtakavarga-grid")],V);var tr={physical:"#dc2626",emotional:"#0284c7",intellectual:"#16a34a",intuitive:"#a855f7",aesthetic:"#f59e0b",awareness:"#ec4899",spiritual:"#14b8a6",passion:"#ef4444",mastery:"#6366f1",wisdom:"#475569"},Y=class extends x{constructor(){super(...arguments);this.data=null;this.mode="daily"}render(){let e=this.data;return e?this.mode==="critical-days"&&"criticalDays"in e?this.renderCritical(e):this.mode==="forecast"&&"days"in e?this.renderForecast(e):this.renderDaily(e):s`<div class="roxy-empty" role="status">No biorhythm data</div>`}renderDaily(e){let t=e.quickRead??{},r=Object.entries(t).map(([o,i])=>{let d=typeof i=="number"?i:0,c=Math.abs(d)>1?d/100:d;return[o,c]});return s`<section class="wrap" aria-label="Daily biorhythm">
|
|
308
363
|
<header class="head">
|
|
309
364
|
<h2 class="title">Biorhythm</h2>
|
|
310
|
-
${typeof e.energyRating=="number"?
|
|
365
|
+
${typeof e.energyRating=="number"?s`<span class="energy">Energy ${e.energyRating}/10</span>`:l}
|
|
311
366
|
</header>
|
|
312
367
|
<div class="bars" role="list">
|
|
313
|
-
${
|
|
368
|
+
${r.map(([o,i])=>{let d=(i+1)/2*100,c=tr[o]??"var(--roxy-accent, #f59e0b)";return s`<div class="bar" role="listitem">
|
|
314
369
|
<span style="text-transform: capitalize">${o}</span>
|
|
315
370
|
<span class="track">
|
|
316
371
|
<span
|
|
@@ -318,18 +373,18 @@
|
|
|
318
373
|
style="width: ${d}%; background: ${c}"
|
|
319
374
|
></span>
|
|
320
375
|
</span>
|
|
321
|
-
<span class="value">${Math.round(
|
|
376
|
+
<span class="value">${Math.round(i*100)}%</span>
|
|
322
377
|
</div>`})}
|
|
323
378
|
</div>
|
|
324
|
-
${e.dailyMessage?
|
|
325
|
-
${e.advice?
|
|
326
|
-
</section>`}renderForecast(e){let
|
|
379
|
+
${e.dailyMessage?s`<p class="advice">${e.dailyMessage}</p>`:l}
|
|
380
|
+
${e.advice?s`<p class="advice">${e.advice}</p>`:l}
|
|
381
|
+
</section>`}renderForecast(e){let t=e.days??[];if(t.length===0)return s`<div class="roxy-empty" role="status">No forecast</div>`;let r=600,o=160,i=r/Math.max(t.length-1,1),d=["physical","emotional","intellectual","intuitive"];return s`<section class="wrap" aria-label="Biorhythm forecast">
|
|
327
382
|
<header class="head">
|
|
328
383
|
<h2 class="title">Forecast</h2>
|
|
329
384
|
<span class="energy">${e.startDate} - ${e.endDate}</span>
|
|
330
385
|
</header>
|
|
331
386
|
<svg
|
|
332
|
-
viewBox="0 0 ${
|
|
387
|
+
viewBox="0 0 ${r} ${o}"
|
|
333
388
|
role="img"
|
|
334
389
|
aria-label="Biorhythm cycle lines across the forecast window"
|
|
335
390
|
>
|
|
@@ -337,25 +392,25 @@
|
|
|
337
392
|
<line
|
|
338
393
|
x1="0"
|
|
339
394
|
y1=${o/2}
|
|
340
|
-
x2=${
|
|
395
|
+
x2=${r}
|
|
341
396
|
y2=${o/2}
|
|
342
397
|
stroke="var(--roxy-border, #e4e4e7)"
|
|
343
398
|
stroke-width="1"
|
|
344
399
|
/>
|
|
345
|
-
${d.map(c=>{let m=
|
|
400
|
+
${d.map(c=>{let m=t.map((h,u)=>{let k=h[c]??0,$=u*i,$e=o/2-k/100*(o/2-8);return`${$.toFixed(2)},${$e.toFixed(2)}`}).join(" "),g=tr[c]??"#475569";return w`<polyline points=${m} fill="none" stroke=${g} stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />`})}
|
|
346
401
|
</svg>
|
|
347
|
-
${e.summary?.periodAdvice?
|
|
348
|
-
</section>`}renderCritical(e){return
|
|
402
|
+
${e.summary?.periodAdvice?s`<p class="advice">${e.summary.periodAdvice}</p>`:l}
|
|
403
|
+
</section>`}renderCritical(e){return s`<section class="wrap" aria-label="Critical days">
|
|
349
404
|
<header class="head">
|
|
350
405
|
<h2 class="title">Critical days</h2>
|
|
351
406
|
<span class="energy">${e.totalCriticalDays} total</span>
|
|
352
407
|
</header>
|
|
353
408
|
<div>
|
|
354
|
-
${e.criticalDays.map(
|
|
355
|
-
>${
|
|
409
|
+
${e.criticalDays.map(t=>s`<span class="crit"
|
|
410
|
+
>${t.date} · ${t.cycle} ${t.severity}</span
|
|
356
411
|
>`)}
|
|
357
412
|
</div>
|
|
358
|
-
</section>`}};
|
|
413
|
+
</section>`}};Y.styles=[v,f`
|
|
359
414
|
.wrap {
|
|
360
415
|
display: grid;
|
|
361
416
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -431,35 +486,41 @@
|
|
|
431
486
|
display: inline-block;
|
|
432
487
|
margin: 2px;
|
|
433
488
|
}
|
|
434
|
-
`],p([
|
|
435
|
-
|
|
436
|
-
|
|
489
|
+
`],p([y({attribute:!1})],Y.prototype,"data",2),p([y({type:String,reflect:!0})],Y.prototype,"mode",2),Y=p([b("roxy-biorhythm-chart")],Y);function E(n){return n?n.charAt(0).toUpperCase()+n.slice(1).toLowerCase():""}function ce(n){return n.replace(/[_-]+/g," ").replace(/([a-z])([A-Z])/g,"$1 $2").replace(/^\w/,a=>a.toUpperCase())}function rr(n){try{let a=new Date(n);return Number.isNaN(a.getTime())?n:a.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}catch{return n}}var pe=class extends x{constructor(){super(...arguments);this.data=null}isCurrent(e){let t=Date.now(),r=Date.parse(e.start),o=Date.parse(e.end);return Number.isNaN(r)||Number.isNaN(o)?!1:t>=r&&t<o}renderTile(e){let t=e.effect==="Good"?"good":e.effect==="Bad"?"bad":"neutral",r=this.isCurrent(e),o=R[E(e.lord)]??"",i=`${rr(e.start)} - ${rr(e.end)}`;return s`<div
|
|
490
|
+
class="cho-tile ${t}${r?" now":""}"
|
|
491
|
+
role="listitem"
|
|
492
|
+
aria-current=${r?"time":"false"}
|
|
493
|
+
>
|
|
494
|
+
<span class="tile-name">
|
|
495
|
+
${e.name}${r?s`<span class="now-badge">Now</span>`:l}
|
|
496
|
+
</span>
|
|
497
|
+
<span class="tile-time" aria-label="Time range">${i}</span>
|
|
437
498
|
<span class="tile-lord">
|
|
438
|
-
${
|
|
499
|
+
${o?s`<span aria-hidden="true">${o}</span>`:l}
|
|
439
500
|
${e.lord}
|
|
440
501
|
</span>
|
|
441
|
-
</div>`}render(){if(!this.data)return
|
|
502
|
+
</div>`}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No choghadiya data</div>`;let{date:e,dayChoghadiya:t,nightChoghadiya:r}=this.data;return s`<div class="wrap">
|
|
442
503
|
<div class="header">
|
|
443
504
|
<h2 class="title">Choghadiya</h2>
|
|
444
|
-
${e?
|
|
505
|
+
${e?s`<p class="subtitle">${e}</p>`:l}
|
|
445
506
|
</div>
|
|
446
507
|
|
|
447
508
|
<div class="cho-grid">
|
|
448
509
|
<section class="period-col" aria-label="Day muhurta periods">
|
|
449
510
|
<h3 class="period-heading">Day</h3>
|
|
450
511
|
<div role="list" aria-label="Daytime choghadiya">
|
|
451
|
-
${
|
|
512
|
+
${t&&t.length>0?t.map(o=>this.renderTile(o)):s`<p class="roxy-empty" role="status">No daytime periods</p>`}
|
|
452
513
|
</div>
|
|
453
514
|
</section>
|
|
454
515
|
|
|
455
516
|
<section class="period-col" aria-label="Night muhurta periods">
|
|
456
517
|
<h3 class="period-heading">Night</h3>
|
|
457
518
|
<div role="list" aria-label="Nighttime choghadiya">
|
|
458
|
-
${
|
|
519
|
+
${r&&r.length>0?r.map(o=>this.renderTile(o)):s`<p class="roxy-empty" role="status">No nighttime periods</p>`}
|
|
459
520
|
</div>
|
|
460
521
|
</section>
|
|
461
522
|
</div>
|
|
462
|
-
</div>`}};
|
|
523
|
+
</div>`}};pe.styles=[v,f`
|
|
463
524
|
.wrap {
|
|
464
525
|
display: grid;
|
|
465
526
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -521,6 +582,21 @@
|
|
|
521
582
|
background: transparent;
|
|
522
583
|
color: var(--roxy-fg, #0a0a0a);
|
|
523
584
|
}
|
|
585
|
+
.cho-tile.now {
|
|
586
|
+
outline: 2px solid var(--roxy-accent, #f59e0b);
|
|
587
|
+
outline-offset: 1px;
|
|
588
|
+
box-shadow: 0 0 0 4px
|
|
589
|
+
color-mix(in srgb, var(--roxy-accent, #f59e0b) 18%, transparent);
|
|
590
|
+
}
|
|
591
|
+
.now-badge {
|
|
592
|
+
display: inline-block;
|
|
593
|
+
margin-left: 0.4em;
|
|
594
|
+
font-size: var(--roxy-text-xs, 0.75rem);
|
|
595
|
+
font-weight: var(--roxy-weight-bold, 600);
|
|
596
|
+
color: var(--roxy-accent-fg, #b45309);
|
|
597
|
+
text-transform: uppercase;
|
|
598
|
+
letter-spacing: 0.06em;
|
|
599
|
+
}
|
|
524
600
|
.tile-name {
|
|
525
601
|
font-size: var(--roxy-text-base, 1rem);
|
|
526
602
|
font-weight: var(--roxy-weight-bold, 600);
|
|
@@ -543,55 +619,55 @@
|
|
|
543
619
|
align-items: center;
|
|
544
620
|
gap: 0.25em;
|
|
545
621
|
}
|
|
546
|
-
`],p([
|
|
622
|
+
`],p([y({attribute:!1})],pe.prototype,"data",2),pe=p([b("roxy-choghadiya-grid")],pe);function j(n){if(typeof n!="string"||n.length===0||/^\d{4}-\d{2}-\d{2}$/.test(n))return"";let e=/^\d{2}:\d{2}(:\d{2})?$/.test(n)?`1970-01-01T${n}`:n,t=new Date(e);return Number.isNaN(t.getTime())?n:t.toLocaleTimeString(void 0,{hour:"numeric",minute:"2-digit",hour12:!0})}function rt(n){if(typeof n!="string"||n.length===0)return"";let a=new Date(/^\d{4}-\d{2}-\d{2}$/.test(n)?`${n}T00:00:00`:n);return Number.isNaN(a.getTime())?n:a.toLocaleDateString(void 0,{month:"short",day:"numeric",year:"numeric"})}function At(n){if(!n)return"";let a=j(n.start),e=j(n.end);return a&&e?`${a} - ${e}`:a||e||""}function A(n,a=1){return typeof n!="number"||!Number.isFinite(n)?"":n.toFixed(a).replace(/\.?0+$/,"")}function ar(n,a=1){let e=A(n,a);return e?`${e}%`:""}var qe={conjunction:"aspect-conjunction",sextile:"aspect-sextile",square:"aspect-square",trine:"aspect-trine",opposition:"aspect-opposition"};function Re(n){return(n.type??"").toLowerCase().replace(/_/g,"-")}var U=class extends x{constructor(){super(...arguments);this.data=null;this.mode="astrology"}getBreakdown(){let e=this.data;if(!e)return{};if("categories"in e&&e.categories){let t={};for(let[r,o]of Object.entries(e.categories))typeof o=="number"&&Number.isFinite(o)&&(t[r]=o);return t}return{}}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No compatibility data</div>`;let t=e.overallScore,r=this.getBreakdown(),o="rating"in e?e.rating:void 0,i="archetype"in e?e.archetype:void 0,d="advice"in e?e.advice:void 0,c="summary"in e?e.summary:void 0,m="interpretation"in e?e.interpretation:void 0,g="strengths"in e?e.strengths:void 0,h="challenges"in e?e.challenges:void 0,u="keyAspects"in e?e.keyAspects:void 0;return s`<article
|
|
547
623
|
class="card"
|
|
548
624
|
aria-label=${`Compatibility (${this.mode})`}
|
|
549
625
|
>
|
|
550
626
|
<div class="head">
|
|
551
627
|
<h2>${this.mode} compatibility</h2>
|
|
552
628
|
<div>
|
|
553
|
-
${typeof
|
|
554
|
-
${o?
|
|
629
|
+
${typeof t=="number"?s`<div class="score">${A(t,0)}</div>`:l}
|
|
630
|
+
${o?s`<div class="rating">${o}</div>`:l}
|
|
555
631
|
</div>
|
|
556
632
|
</div>
|
|
557
633
|
|
|
558
|
-
${Object.keys(
|
|
559
|
-
${Object.entries(
|
|
560
|
-
<span style="text-transform: capitalize">${
|
|
634
|
+
${Object.keys(r).length>0?s`<div role="list">
|
|
635
|
+
${Object.entries(r).map(([k,$])=>s`<div class="bar-row" role="listitem">
|
|
636
|
+
<span style="text-transform: capitalize">${k}</span>
|
|
561
637
|
<span class="bar"
|
|
562
638
|
><span style="width: ${Math.max(0,Math.min(100,$))}%"></span
|
|
563
639
|
></span>
|
|
564
|
-
<span>${
|
|
640
|
+
<span>${A($,0)}</span>
|
|
565
641
|
</div>`)}
|
|
566
|
-
</div>`:
|
|
567
|
-
${
|
|
568
|
-
<span class="archetype">${
|
|
569
|
-
${
|
|
570
|
-
</p>`:
|
|
571
|
-
${c?
|
|
572
|
-
${m&&!c?
|
|
573
|
-
${d?
|
|
574
|
-
${(
|
|
575
|
-
${
|
|
642
|
+
</div>`:l}
|
|
643
|
+
${i?s`<p>
|
|
644
|
+
<span class="archetype">${i.label}</span>
|
|
645
|
+
${i.description?s` · ${i.description}`:l}
|
|
646
|
+
</p>`:l}
|
|
647
|
+
${c?s`<p>${c}</p>`:l}
|
|
648
|
+
${m&&!c?s`<p>${m}</p>`:l}
|
|
649
|
+
${d?s`<p>${d}</p>`:l}
|
|
650
|
+
${(g?.length??0)>0||(h?.length??0)>0?s`<div class="lists">
|
|
651
|
+
${g?.length?s`<div>
|
|
576
652
|
<h3>Strengths</h3>
|
|
577
653
|
<ul>
|
|
578
|
-
${
|
|
654
|
+
${g.map(k=>s`<li>${k}</li>`)}
|
|
579
655
|
</ul>
|
|
580
|
-
</div>`:
|
|
581
|
-
${h?.length?
|
|
656
|
+
</div>`:l}
|
|
657
|
+
${h?.length?s`<div>
|
|
582
658
|
<h3>Challenges</h3>
|
|
583
659
|
<ul>
|
|
584
|
-
${h.map(
|
|
660
|
+
${h.map(k=>s`<li>${k}</li>`)}
|
|
585
661
|
</ul>
|
|
586
|
-
</div>`:
|
|
587
|
-
</div>`:
|
|
588
|
-
${
|
|
662
|
+
</div>`:l}
|
|
663
|
+
</div>`:l}
|
|
664
|
+
${u?.length?s`<div>
|
|
589
665
|
<h3 style="margin: 0 0 0.25rem; font-size: var(--roxy-text-xs); color: var(--roxy-muted); text-transform: uppercase; letter-spacing: 0.06em;">Key aspects</h3>
|
|
590
666
|
<ul style="margin: 0; padding-left: 1rem; font-size: var(--roxy-text-sm);">
|
|
591
|
-
${
|
|
667
|
+
${u.slice(0,6).map(k=>s`<li>${Nr(k)}</li>`)}
|
|
592
668
|
</ul>
|
|
593
|
-
</div>`:
|
|
594
|
-
</article>`}};
|
|
669
|
+
</div>`:l}
|
|
670
|
+
</article>`}};U.styles=[v,f`
|
|
595
671
|
.card {
|
|
596
672
|
background: var(--roxy-bg, #fff);
|
|
597
673
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -675,45 +751,66 @@
|
|
|
675
751
|
margin: 0;
|
|
676
752
|
padding-left: var(--roxy-space-md, 1rem);
|
|
677
753
|
}
|
|
678
|
-
`],p([
|
|
754
|
+
`],p([y({attribute:!1})],U.prototype,"data",2),p([y({type:String,reflect:!0})],U.prototype,"mode",2),U=p([b("roxy-compatibility-card")],U);function Nr(n){let a=n.type.toLowerCase().replace(/_/g,"-"),e=typeof n.orb=="number"?` (orb ${A(n.orb,1)}\xB0)`:"",t=[n.planet1,a,n.planet2].filter(Boolean).join(" ");return n.description?`${t}${e} \xB7 ${n.description}`:`${t}${e}`}var F=class extends x{constructor(){super(...arguments);this.data=null;this.period="current"}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No dasha data</div>`;let t=this.collectPeriods(e),r=t.length?Math.max(...t.map(o=>o.durationYears)):0;return s`<div class="wrap" aria-label="Dasha timeline">
|
|
679
755
|
<header class="head">
|
|
680
756
|
<h2 class="title">
|
|
681
757
|
${this.period==="major"?"Vimshottari Mahadasha":this.period==="sub"?"Antardasha":"Active dashas"}
|
|
682
758
|
</h2>
|
|
683
|
-
${"nakshatraName"in e&&e.nakshatraName?
|
|
759
|
+
${"nakshatraName"in e&&e.nakshatraName?s`<div class="nakshatra">
|
|
684
760
|
Moon nakshatra: ${e.nakshatraName}
|
|
685
|
-
${"nakshatraLord"in e&&e.nakshatraLord?
|
|
686
|
-
</div>`:
|
|
761
|
+
${"nakshatraLord"in e&&e.nakshatraLord?s`(lord ${e.nakshatraLord})`:l}
|
|
762
|
+
</div>`:l}
|
|
687
763
|
</header>
|
|
688
764
|
|
|
689
|
-
${this.
|
|
690
|
-
${
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
${
|
|
765
|
+
${this.renderBirthBalance(e)}
|
|
766
|
+
${this.period==="current"?this.renderCurrent(e):l}
|
|
767
|
+
${t.length>0?s`<div class="timeline" role="list">
|
|
768
|
+
${t.map(o=>this.renderBar(o,r))}
|
|
769
|
+
</div>`:l}
|
|
770
|
+
${this.renderActiveInterpretation(t)}
|
|
771
|
+
</div>`}renderBirthBalance(e){if(!("birthDashaBalance"in e)||!e.birthDashaBalance)return l;let t=e.birthDashaBalance,r="nakshatraLord"in e&&e.nakshatraLord?e.nakshatraLord:"",o=t.years??0,i=t.months??0,d=t.days??0,c=[];o&&c.push(`${o}y`),i&&c.push(`${i}m`),d&&c.push(`${d}d`);let m=c.length?c.join(" "):"0d";return s`<p class="balance">
|
|
772
|
+
Birth dasha balance: ${m} of
|
|
773
|
+
${r?s`<strong>${r}</strong>`:"the opening mahadasha"} remained at birth.
|
|
774
|
+
</p>`}renderActiveInterpretation(e){let t=e.find(r=>this.isCurrent(r));return t?.interpretation?s`<details class="interp">
|
|
775
|
+
<summary>${t.planet} mahadasha interpretation</summary>
|
|
776
|
+
<p>${t.interpretation}</p>
|
|
777
|
+
</details>`:l}renderCurrent(e){return"mahadasha"in e?s`<div class="current">
|
|
778
|
+
${"mahadasha"in e&&e.mahadasha?s`<div>
|
|
695
779
|
<span>Mahadasha</span>
|
|
696
780
|
<strong>${e.mahadasha.planet}</strong>
|
|
697
|
-
${"remainingInMahadasha"in e&&e.remainingInMahadasha?
|
|
698
|
-
</div>`:
|
|
699
|
-
${"antardasha"in e&&e.antardasha?
|
|
781
|
+
${"remainingInMahadasha"in e&&e.remainingInMahadasha?s`<small>${A(e.remainingInMahadasha.years+e.remainingInMahadasha.months/12,1)} years left</small>`:l}
|
|
782
|
+
</div>`:l}
|
|
783
|
+
${"antardasha"in e&&e.antardasha?s`<div>
|
|
700
784
|
<span>Antardasha</span>
|
|
701
785
|
<strong>${e.antardasha.planet}</strong>
|
|
702
|
-
${"remainingInAntardasha"in e&&e.remainingInAntardasha?
|
|
703
|
-
</div>`:
|
|
704
|
-
${"pratyantardasha"in e&&e.pratyantardasha?
|
|
786
|
+
${"remainingInAntardasha"in e&&e.remainingInAntardasha?s`<small>${A(e.remainingInAntardasha.years+e.remainingInAntardasha.months/12,1)} years left</small>`:l}
|
|
787
|
+
</div>`:l}
|
|
788
|
+
${"pratyantardasha"in e&&e.pratyantardasha?s`<div>
|
|
705
789
|
<span>Pratyantardasha</span>
|
|
706
790
|
<strong>${e.pratyantardasha.planet}</strong>
|
|
707
|
-
${"remainingInPratyantardasha"in e&&e.remainingInPratyantardasha?
|
|
708
|
-
</div>`:
|
|
709
|
-
</div>`:
|
|
710
|
-
|
|
711
|
-
|
|
791
|
+
${"remainingInPratyantardasha"in e&&e.remainingInPratyantardasha?s`<small>${A(e.remainingInPratyantardasha.years+e.remainingInPratyantardasha.months/12,1)} years left</small>`:l}
|
|
792
|
+
</div>`:l}
|
|
793
|
+
</div>`:l}collectPeriods(e){return"mahadashas"in e&&e.mahadashas?.length?e.mahadashas:"antardashas"in e&&e.antardashas?.length?e.antardashas:[]}isCurrent(e){if(!e.startDate||!e.endDate)return!1;let t=Date.now(),r=Date.parse(e.startDate),o=Date.parse(e.endDate);return Number.isNaN(r)||Number.isNaN(o)?!1:t>=r&&t<o}progressIn(e){if(!e.startDate||!e.endDate)return-1;let t=Date.parse(e.startDate),r=Date.parse(e.endDate),o=Date.now();return Number.isNaN(t)||Number.isNaN(r)||o<t||o>=r||r<=t?-1:(o-t)/(r-t)}renderBar(e,t){let r=e.durationYears,o=t>0?r/t*100:0,i=this.isCurrent(e),d=i?this.progressIn(e):-1,c=i?"bar-track bar-now":"bar-track";return s`<div
|
|
794
|
+
class=${i?"bar now":"bar"}
|
|
795
|
+
role="listitem"
|
|
796
|
+
aria-current=${i?"time":"false"}
|
|
797
|
+
>
|
|
798
|
+
<span>
|
|
799
|
+
<strong>${e.planet}</strong>${i?s`<span class="now-badge">Now</span>`:l}
|
|
800
|
+
</span>
|
|
801
|
+
<span class=${c}>
|
|
802
|
+
<span class="bar-fill" style="width: ${o}%"></span>
|
|
803
|
+
${d>=0?s`<span
|
|
804
|
+
class="bar-progress"
|
|
805
|
+
style="left: ${d*o}%"
|
|
806
|
+
aria-hidden="true"
|
|
807
|
+
></span>`:l}
|
|
808
|
+
</span>
|
|
712
809
|
<span class="dates">
|
|
713
|
-
${e.startDate?
|
|
714
|
-
${e.endDate?
|
|
810
|
+
${e.startDate?sr(e.startDate):""}
|
|
811
|
+
${e.endDate?s`- ${sr(e.endDate)}`:""}
|
|
715
812
|
</span>
|
|
716
|
-
</div>`}};
|
|
813
|
+
</div>`}};F.styles=[v,f`
|
|
717
814
|
.wrap {
|
|
718
815
|
display: grid;
|
|
719
816
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -757,6 +854,13 @@
|
|
|
757
854
|
color: var(--roxy-fg, #0a0a0a);
|
|
758
855
|
}
|
|
759
856
|
|
|
857
|
+
.balance {
|
|
858
|
+
font-size: var(--roxy-text-sm, 0.875rem);
|
|
859
|
+
color: var(--roxy-muted, #71717a);
|
|
860
|
+
border-left: 2px solid var(--roxy-border, #e4e4e7);
|
|
861
|
+
padding-left: var(--roxy-space-sm, 0.5rem);
|
|
862
|
+
margin: 0;
|
|
863
|
+
}
|
|
760
864
|
.timeline {
|
|
761
865
|
display: grid;
|
|
762
866
|
gap: var(--roxy-space-xs, 0.25rem);
|
|
@@ -768,64 +872,107 @@
|
|
|
768
872
|
align-items: center;
|
|
769
873
|
font-size: var(--roxy-text-sm, 0.875rem);
|
|
770
874
|
}
|
|
875
|
+
.bar.now strong {
|
|
876
|
+
color: var(--roxy-accent-fg, #b45309);
|
|
877
|
+
}
|
|
878
|
+
.now-badge {
|
|
879
|
+
display: inline-block;
|
|
880
|
+
margin-left: 0.4em;
|
|
881
|
+
font-size: var(--roxy-text-xs, 0.75rem);
|
|
882
|
+
font-weight: var(--roxy-weight-bold, 600);
|
|
883
|
+
color: var(--roxy-accent-fg, #b45309);
|
|
884
|
+
text-transform: uppercase;
|
|
885
|
+
letter-spacing: 0.06em;
|
|
886
|
+
}
|
|
771
887
|
.bar-track {
|
|
888
|
+
position: relative;
|
|
772
889
|
height: 14px;
|
|
773
890
|
background: var(--roxy-border, #e4e4e7);
|
|
774
891
|
border-radius: var(--roxy-radius-full, 9999px);
|
|
775
892
|
overflow: hidden;
|
|
776
893
|
}
|
|
777
|
-
.bar-
|
|
894
|
+
.bar-fill {
|
|
778
895
|
display: block;
|
|
779
896
|
height: 100%;
|
|
780
897
|
background: var(--roxy-accent, #f59e0b);
|
|
898
|
+
opacity: 0.45;
|
|
781
899
|
transition:
|
|
782
900
|
width var(--roxy-motion-duration, 200ms)
|
|
783
901
|
var(--roxy-motion-easing, cubic-bezier(0.4, 0, 0.2, 1));
|
|
784
902
|
}
|
|
903
|
+
.bar-now .bar-fill {
|
|
904
|
+
opacity: 1;
|
|
905
|
+
}
|
|
906
|
+
.bar-progress {
|
|
907
|
+
position: absolute;
|
|
908
|
+
top: -2px;
|
|
909
|
+
bottom: -2px;
|
|
910
|
+
width: 2px;
|
|
911
|
+
background: var(--roxy-accent-fg, #b45309);
|
|
912
|
+
border-radius: 2px;
|
|
913
|
+
box-shadow: 0 0 0 2px
|
|
914
|
+
color-mix(in srgb, var(--roxy-accent, #f59e0b) 35%, transparent);
|
|
915
|
+
}
|
|
785
916
|
.dates {
|
|
786
917
|
color: var(--roxy-muted, #71717a);
|
|
787
918
|
font-size: var(--roxy-text-xs, 0.75rem);
|
|
788
919
|
font-variant-numeric: tabular-nums;
|
|
789
920
|
text-align: right;
|
|
790
921
|
}
|
|
791
|
-
|
|
922
|
+
details.interp {
|
|
923
|
+
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
924
|
+
border-radius: var(--roxy-radius-md, 8px);
|
|
925
|
+
padding: var(--roxy-space-sm, 0.5rem) var(--roxy-space-md, 1rem);
|
|
926
|
+
background: var(--roxy-bg, #fff);
|
|
927
|
+
}
|
|
928
|
+
details.interp summary {
|
|
929
|
+
cursor: pointer;
|
|
930
|
+
font-size: var(--roxy-text-sm, 0.875rem);
|
|
931
|
+
font-weight: var(--roxy-weight-bold, 600);
|
|
932
|
+
}
|
|
933
|
+
details.interp p {
|
|
934
|
+
margin: var(--roxy-space-sm, 0.5rem) 0 0;
|
|
935
|
+
font-size: var(--roxy-text-sm, 0.875rem);
|
|
936
|
+
color: var(--roxy-muted, #71717a);
|
|
937
|
+
}
|
|
938
|
+
`],p([y({attribute:!1})],F.prototype,"data",2),p([y({type:String,reflect:!0})],F.prototype,"period",2),F=p([b("roxy-dasha-timeline")],F);function sr(n){let a=n.match(/^(\d{4})/);return a?a[1]:n}var zr=["title","name","label","heading","overview","summary"],Mr=["imageUrl","image","icon","symbol"],_r=["imageUrl","image"],Dr=6,W=class extends x{constructor(){super(...arguments);this.data=null;this.depth=0}render(){return this.data==null?s`<div class="roxy-empty" role="status">No data</div>`:this.depth>=Dr?s`<div class="roxy-empty" role="status">…</div>`:s`<div
|
|
792
939
|
class="roxy-card"
|
|
793
940
|
aria-label="Generic data display"
|
|
794
941
|
>
|
|
795
942
|
${this.renderValue(this.data)}
|
|
796
|
-
</div>`}renderValue(e){return e==null?
|
|
797
|
-
${e.map(o=>
|
|
798
|
-
</ul>`:e.every(o=>o!==null&&typeof o=="object"&&!Array.isArray(o))?this.renderTable(e):
|
|
799
|
-
${e.map(o=>
|
|
800
|
-
</ol>`}renderTable(e){let
|
|
943
|
+
</div>`}renderValue(e){return e==null?l:typeof e=="string"?s`<p>${e}</p>`:typeof e=="number"||typeof e=="boolean"?s`<p>${String(e)}</p>`:Array.isArray(e)?this.renderArray(e):this.renderObject(e)}renderArray(e){return e.length===0?s`<div class="roxy-empty" role="status">Empty list</div>`:e.every(o=>o===null||["string","number","boolean"].includes(typeof o))?s`<ul class="roxy-chips">
|
|
944
|
+
${e.map(o=>s`<li>${String(o)}</li>`)}
|
|
945
|
+
</ul>`:e.every(o=>o!==null&&typeof o=="object"&&!Array.isArray(o))?this.renderTable(e):s`<ol>
|
|
946
|
+
${e.map(o=>s`<li>${this.renderValue(o)}</li>`)}
|
|
947
|
+
</ol>`}renderTable(e){let t=this.collectKeys(e);return s`<table class="roxy-table" role="table">
|
|
801
948
|
<thead>
|
|
802
949
|
<tr>
|
|
803
|
-
${
|
|
950
|
+
${t.map(r=>s`<th>${ce(r)}</th>`)}
|
|
804
951
|
</tr>
|
|
805
952
|
</thead>
|
|
806
953
|
<tbody>
|
|
807
|
-
${e.map(
|
|
808
|
-
${
|
|
954
|
+
${e.map(r=>s`<tr>
|
|
955
|
+
${t.map(o=>s`<td>${this.formatPrimitive(r[o])}</td>`)}
|
|
809
956
|
</tr>`)}
|
|
810
957
|
</tbody>
|
|
811
|
-
</table>`}renderObject(e){let
|
|
812
|
-
${
|
|
958
|
+
</table>`}renderObject(e){let t=zr.find(d=>typeof e[d]=="string"),r=Mr.find(d=>typeof e[d]=="string"&&e[d].startsWith("http")),o=t!=="summary"&&typeof e.summary=="string"?"summary":null,i=Object.entries(e).filter(([d,c])=>d!==t&&d!==o&&!_r.includes(d)&&c!==null&&c!==void 0);return s`
|
|
959
|
+
${r?s`<img
|
|
813
960
|
class="roxy-image"
|
|
814
|
-
src=${String(e[
|
|
815
|
-
alt=${
|
|
961
|
+
src=${String(e[r])}
|
|
962
|
+
alt=${t?String(e[t]):"illustration"}
|
|
816
963
|
loading="lazy"
|
|
817
|
-
/>`:
|
|
818
|
-
${
|
|
819
|
-
${o?
|
|
820
|
-
${
|
|
821
|
-
${
|
|
822
|
-
<dt>${
|
|
964
|
+
/>`:l}
|
|
965
|
+
${t?s`<h3 class="roxy-title">${e[t]}</h3>`:l}
|
|
966
|
+
${o?s`<p class="roxy-summary">${e[o]}</p>`:l}
|
|
967
|
+
${i.length>0?s`<dl class="roxy-rows">
|
|
968
|
+
${i.map(([d,c])=>s`
|
|
969
|
+
<dt>${ce(d)}</dt>
|
|
823
970
|
<dd>${this.renderField(c)}</dd>
|
|
824
971
|
`)}
|
|
825
|
-
</dl>`:
|
|
826
|
-
`}renderField(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)&&e.every(
|
|
827
|
-
${e.map(
|
|
828
|
-
</ul>`:
|
|
972
|
+
</dl>`:l}
|
|
973
|
+
`}renderField(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)&&e.every(r=>["string","number","boolean"].includes(typeof r))?s`<ul class="roxy-chips">
|
|
974
|
+
${e.map(r=>s`<li>${String(r)}</li>`)}
|
|
975
|
+
</ul>`:s`<roxy-data .data=${e} .depth=${this.depth+1}></roxy-data>`}formatPrimitive(e){return e==null?"":typeof e=="string"?e:typeof e=="number"||typeof e=="boolean"?String(e):Array.isArray(e)?e.map(String).join(", "):JSON.stringify(e)}collectKeys(e){let t=new Set;for(let r of e)for(let o of Object.keys(r))t.add(o);return Array.from(t)}};W.styles=[v,f`
|
|
829
976
|
.roxy-card {
|
|
830
977
|
background: var(--roxy-bg, #fff);
|
|
831
978
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -919,94 +1066,227 @@
|
|
|
919
1066
|
margin: 0 0 var(--roxy-space-xs, 0.25rem) 0;
|
|
920
1067
|
text-transform: capitalize;
|
|
921
1068
|
}
|
|
922
|
-
`],p([
|
|
923
|
-
<
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
1069
|
+
`],p([y({attribute:!1})],W.prototype,"data",2),p([y({attribute:!1})],W.prototype,"depth",2),W=p([b("roxy-data")],W);function I(n){let a=n%360;return a<0?a+360:a}function B(n){let a=I(n),e=Math.floor(a/30)%12,t=a%30,r=Math.floor(t),o=(t-r)*60,i=Math.floor(o),d=Math.round((o-i)*60);return{sign:M[e]??"Aries",signIndex:e,degree:r,minute:i,second:d}}function at(n){let{sign:a,degree:e,minute:t}=B(n);return`${e}\xB0 ${a} ${String(t).padStart(2,"0")}'`}function Et(n){return I(n+180)}function or(n,a){let e=I(n),t=I(a)-e;return t<0&&(t+=360),I(e+t/2)}function L(n,a,e,t){let r=t*Math.PI/180;return{x:n+e*Math.cos(r),y:a+e*Math.sin(r)}}var H=400,P=20,D=H-2*P,N=H/2,Or=Object.fromEntries(M.map(n=>[n.toLowerCase(),n])),Ce=[{id:"north",label:"North"},{id:"south",label:"South"},{id:"east",label:"East"}],Gr="\u02B3";function nr(n,a){return typeof n.longitude!="number"||!Number.isFinite(n.longitude)?!1:B(n.longitude).sign.toLowerCase()!==a.toLowerCase()}function Hr(n,a){let e=Qt[E(n.graha)]??n.graha.slice(0,2),t=n.isRetrograde?Gr:"";if(typeof n.longitude!="number"||!Number.isFinite(n.longitude)||nr(n,a))return`${e}${t}`;let{degree:r}=B(n.longitude);return`${e} ${r}\xB0${t}`}function jr(n,a){let e=[E(n.graha)],t=nr(n,a);if(t&&e.push(`in ${a}`),typeof n.longitude=="number"&&Number.isFinite(n.longitude)){let r=B(n.longitude),o=String(r.minute).padStart(2,"0");e.push(t?`D1: ${r.degree}\xB0${o}' ${r.sign}`:`${r.degree}\xB0${o}' ${r.sign}`)}if(n.nakshatra?.name){let r=n.nakshatra.pada?` pada ${n.nakshatra.pada}`:"";e.push(`${n.nakshatra.name}${r}`)}return n.awastha&&e.push(n.awastha),n.isRetrograde&&e.push("retrograde"),e.join(" \xB7 ")}function Ct(n,a,e,t,r){let o=t-(n.length-1)*r/2;return n.map((i,d)=>{let c=o+d*r;return w`<text class="planet-text" x=${e} y=${c} text-anchor="middle" dominant-baseline="central">${Hr(i,a)}<title>${jr(i,a)}</title></text>`})}function ot(n,a){let e={};for(let r of M)e[r.toLowerCase()]=[];let t="";for(let[r,o]of Object.entries(n??{})){let i=(o?.rashi??"").toLowerCase();if(r==="Lagna"||o?.graha==="Lagna"){t=Or[i]??"";continue}!i||!(i in e)||e[i]?.push({graha:o.graha??r,longitude:o.longitude,nakshatra:o.nakshatra,isRetrograde:o.isRetrograde,awastha:o.awastha})}return{lagnaSign:t,placements:e,divisionLabel:a}}var Le=D/4,Ir={Pisces:{col:0,row:0},Aries:{col:1,row:0},Taurus:{col:2,row:0},Gemini:{col:3,row:0},Cancer:{col:3,row:1},Leo:{col:3,row:2},Virgo:{col:3,row:3},Libra:{col:2,row:3},Scorpio:{col:1,row:3},Sagittarius:{col:0,row:3},Capricorn:{col:0,row:2},Aquarius:{col:0,row:1}};function Br(n){let a=Ir[n]??{col:0,row:0};return{x:P+a.col*Le,y:P+a.row*Le,w:Le,h:Le}}function Kr(n){let a=P,e=P+Le,t=P+2*Le,r=P+3*Le,o=H-P;return w`
|
|
1070
|
+
<rect class="line" x=${a} y=${a} width=${D} height=${D} stroke-width="1.5" fill="none" />
|
|
1071
|
+
<line class="line" x1=${a} y1=${e} x2=${o} y2=${e} stroke-width="1" />
|
|
1072
|
+
<line class="line" x1=${a} y1=${r} x2=${o} y2=${r} stroke-width="1" />
|
|
1073
|
+
<line class="line" x1=${e} y1=${a} x2=${e} y2=${o} stroke-width="1" />
|
|
1074
|
+
<line class="line" x1=${r} y1=${a} x2=${r} y2=${o} stroke-width="1" />
|
|
1075
|
+
<line class="line" x1=${a} y1=${t} x2=${e} y2=${t} stroke-width="1" />
|
|
1076
|
+
<line class="line" x1=${r} y1=${t} x2=${o} y2=${t} stroke-width="1" />
|
|
1077
|
+
<line class="line" x1=${t} y1=${a} x2=${t} y2=${e} stroke-width="1" />
|
|
1078
|
+
<line class="line" x1=${t} y1=${r} x2=${t} y2=${o} stroke-width="1" />
|
|
1079
|
+
${n?w`<text class="centre-label" x=${N} y=${N} text-anchor="middle" dominant-baseline="central">${n}</text>`:l}
|
|
1080
|
+
`}function ir(n,a){let e=M.findIndex(r=>r===a),t=M.findIndex(r=>r===n);return e===-1||t===-1?0:(t-e+12)%12+1}function qr(n,a,e,t){let r=Br(n),o=r.x+r.w/2,i=r.y+r.h/2,d=wt[n]??n.slice(0,2),c=14;return w`
|
|
1081
|
+
<g class=${e?"cell lagna":"cell"}>
|
|
1082
|
+
${e?w`
|
|
1083
|
+
<rect class="lagna-bg" x=${r.x} y=${r.y} width=${r.w} height=${r.h} />
|
|
1084
|
+
<line class="lagna-slash" x1=${r.x+r.w-c} y1=${r.y+c} x2=${r.x+c} y2=${r.y+r.h-c} stroke-width="1.2" />
|
|
1085
|
+
`:l}
|
|
1086
|
+
<text class="sign-text" x=${r.x+6} y=${r.y+12} text-anchor="start" dominant-baseline="central">${d}</text>
|
|
1087
|
+
${t>0?w`<text class="house-num" x=${r.x+r.w-6} y=${r.y+12} text-anchor="end" dominant-baseline="central">${t}</text>`:l}
|
|
1088
|
+
${a.length?Ct(a,n,o,i+4,14):l}
|
|
932
1089
|
</g>
|
|
933
|
-
`}function
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
<
|
|
938
|
-
<
|
|
939
|
-
<line class="line" x1
|
|
940
|
-
<line class="line" x1
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
${
|
|
1090
|
+
`}function Vr(n){let a=n.lagnaSign.toLowerCase();return w`
|
|
1091
|
+
${Kr(n.divisionLabel)}
|
|
1092
|
+
${M.map(e=>qr(e,n.placements[e.toLowerCase()]??[],e.toLowerCase()===a,ir(e,n.lagnaSign)))}
|
|
1093
|
+
`}var C={tl:{x:P,y:P},tr:{x:H-P,y:P},br:{x:H-P,y:H-P},bl:{x:P,y:H-P},top:{x:N,y:P},right:{x:H-P,y:N},bottom:{x:N,y:H-P},left:{x:P,y:N},tlMid:{x:N-D/4,y:N-D/4},trMid:{x:N+D/4,y:N-D/4},brMid:{x:N+D/4,y:N+D/4},blMid:{x:N-D/4,y:N+D/4}};function J(n){let a=n.reduce((t,r)=>t+r.x,0)/n.length,e=n.reduce((t,r)=>t+r.y,0)/n.length;return{x:a,y:e}}var Yr={1:{x:N,y:C.tlMid.y},2:J([C.tl,C.top,C.tlMid]),3:J([C.tl,C.left,C.tlMid]),4:{x:C.tlMid.x,y:N},5:J([C.bl,C.left,C.blMid]),6:J([C.bl,C.bottom,C.blMid]),7:{x:N,y:C.blMid.y},8:J([C.br,C.bottom,C.brMid]),9:J([C.br,C.right,C.brMid]),10:{x:C.brMid.x,y:N},11:J([C.tr,C.right,C.trMid]),12:J([C.tr,C.top,C.trMid])};function Ur(n,a){let e=M.findIndex(t=>t===a);return e===-1?n:(e+n-1)%12+1}function Fr(n){let{tl:a,tr:e,br:t,bl:r,top:o,right:i,bottom:d,left:c}=C;return w`
|
|
1094
|
+
<rect class="line" x=${a.x} y=${a.y} width=${D} height=${D} stroke-width="1.5" fill="none" />
|
|
1095
|
+
<polygon class="line" points="${o.x},${o.y} ${i.x},${i.y} ${d.x},${d.y} ${c.x},${c.y}" stroke-width="1" fill="none" />
|
|
1096
|
+
<line class="line" x1=${a.x} y1=${a.y} x2=${t.x} y2=${t.y} stroke-width="1" />
|
|
1097
|
+
<line class="line" x1=${e.x} y1=${e.y} x2=${r.x} y2=${r.y} stroke-width="1" />
|
|
1098
|
+
${n?w`<text class="centre-label" x=${N} y=${N} text-anchor="middle" dominant-baseline="central">${n}</text>`:l}
|
|
1099
|
+
`}function Wr(n,a,e,t,r){let o=Yr[n];if(!o)return w``;let i=Math.min(14,Math.abs(o.y-N)*.45+6),d=i+12;return w`
|
|
1100
|
+
<g class=${r?"cell lagna":"cell"}>
|
|
1101
|
+
<text class="rashi-num" x=${o.x} y=${o.y-i} text-anchor="middle" dominant-baseline="central">${a}</text>
|
|
1102
|
+
${r?w`<text class="lagna-marker" x=${o.x} y=${o.y-d} text-anchor="middle" dominant-baseline="central">Asc</text>`:l}
|
|
1103
|
+
${t.length?Ct(t,e,o.x,o.y+8,12):l}
|
|
947
1104
|
</g>
|
|
948
|
-
`}function
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
<
|
|
953
|
-
<line class="line" x1
|
|
954
|
-
<line class="line" x1
|
|
955
|
-
<line class="line" x1
|
|
956
|
-
<line class="line" x1
|
|
957
|
-
<line class="line" x1
|
|
958
|
-
<line class="line" x1
|
|
959
|
-
|
|
960
|
-
<
|
|
961
|
-
<line class="line" x1
|
|
962
|
-
<line class="line" x1
|
|
963
|
-
<
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
${
|
|
969
|
-
|
|
1105
|
+
`}function Jr(n){let a=n.lagnaSign||"Aries";return w`
|
|
1106
|
+
${Fr(n.divisionLabel)}
|
|
1107
|
+
${Array.from({length:12},(e,t)=>{let r=t+1,o=Ur(r,a),i=M[o-1]??"Aries";return Wr(r,o,i,n.placements[i.toLowerCase()]??[],r===1)})}
|
|
1108
|
+
`}var st=D/3;function Xr(){let n=P,a=P+st,e=P+2*st,t=H-P,Ye={Aries:[{x:a,y:n},{x:e,y:n},{x:e,y:a},{x:a,y:a}],Taurus:[{x:n,y:n},{x:a,y:n},{x:a,y:a}],Gemini:[{x:n,y:n},{x:a,y:a},{x:n,y:a}],Cancer:[{x:n,y:a},{x:a,y:a},{x:a,y:e},{x:n,y:e}],Leo:[{x:n,y:e},{x:a,y:e},{x:n,y:t}],Virgo:[{x:a,y:e},{x:a,y:t},{x:n,y:t}],Libra:[{x:a,y:e},{x:e,y:e},{x:e,y:t},{x:a,y:t}],Scorpio:[{x:e,y:e},{x:e,y:t},{x:t,y:t}],Sagittarius:[{x:e,y:e},{x:t,y:t},{x:t,y:e}],Capricorn:[{x:e,y:a},{x:t,y:a},{x:t,y:e},{x:e,y:e}],Aquarius:[{x:t,y:n},{x:t,y:a},{x:e,y:a}],Pisces:[{x:e,y:n},{x:t,y:n},{x:e,y:a}]},_e={};for(let[Ue,Fe]of Object.entries(Ye))_e[Ue]={points:[...Fe],centroid:J(Fe)};return _e}var Zr=Xr();function Qr(n){let a=P,e=P+st,t=P+2*st,r=H-P;return w`
|
|
1109
|
+
<rect class="line" x=${a} y=${a} width=${D} height=${D} stroke-width="1.5" fill="none" />
|
|
1110
|
+
<line class="line" x1=${a} y1=${e} x2=${e} y2=${e} stroke-width="1" />
|
|
1111
|
+
<line class="line" x1=${t} y1=${e} x2=${r} y2=${e} stroke-width="1" />
|
|
1112
|
+
<line class="line" x1=${a} y1=${t} x2=${e} y2=${t} stroke-width="1" />
|
|
1113
|
+
<line class="line" x1=${t} y1=${t} x2=${r} y2=${t} stroke-width="1" />
|
|
1114
|
+
<line class="line" x1=${e} y1=${a} x2=${e} y2=${e} stroke-width="1" />
|
|
1115
|
+
<line class="line" x1=${e} y1=${t} x2=${e} y2=${r} stroke-width="1" />
|
|
1116
|
+
<line class="line" x1=${t} y1=${a} x2=${t} y2=${e} stroke-width="1" />
|
|
1117
|
+
<line class="line" x1=${t} y1=${t} x2=${t} y2=${r} stroke-width="1" />
|
|
1118
|
+
<line class="line" x1=${a} y1=${a} x2=${e} y2=${e} stroke-width="1" />
|
|
1119
|
+
<line class="line" x1=${r} y1=${a} x2=${t} y2=${e} stroke-width="1" />
|
|
1120
|
+
<line class="line" x1=${r} y1=${r} x2=${t} y2=${t} stroke-width="1" />
|
|
1121
|
+
<line class="line" x1=${a} y1=${r} x2=${e} y2=${t} stroke-width="1" />
|
|
1122
|
+
${n?w`<text class="centre-label" x=${N} y=${N} text-anchor="middle" dominant-baseline="central">${n}</text>`:l}
|
|
1123
|
+
`}function ea(n,a,e,t){let r=Zr[n];if(!r)return w``;let{centroid:o,points:i}=r,d=wt[n]??n.slice(0,2),c=i.map(m=>`${m.x},${m.y}`).join(" ");return w`
|
|
1124
|
+
<g class=${e?"cell lagna":"cell"}>
|
|
1125
|
+
${e?w`<polygon class="lagna-bg" points=${c} />`:l}
|
|
1126
|
+
<text class="sign-text" x=${o.x} y=${o.y-16} text-anchor="middle" dominant-baseline="central">${d}</text>
|
|
1127
|
+
${t>0?w`<text class="house-num" x=${o.x+18} y=${o.y-16} text-anchor="start" dominant-baseline="central">${t}</text>`:l}
|
|
1128
|
+
${e?w`<text class="lagna-marker" x=${o.x} y=${o.y-30} text-anchor="middle" dominant-baseline="central">Asc</text>`:l}
|
|
1129
|
+
${a.length?Ct(a,n,o.x,o.y+4,12):l}
|
|
970
1130
|
</g>
|
|
971
|
-
`}function
|
|
1131
|
+
`}function ta(n){let a=n.lagnaSign.toLowerCase();return w`
|
|
1132
|
+
${Qr(n.divisionLabel)}
|
|
1133
|
+
${M.map(e=>ea(e,n.placements[e.toLowerCase()]??[],e.toLowerCase()===a,ir(e,n.lagnaSign)))}
|
|
1134
|
+
`}function nt(n,a){switch(a){case"north":return Jr(n);case"east":return ta(n);default:return Vr(n)}}function it(n,a){return s`<div
|
|
1135
|
+
class="kundli-tablist"
|
|
1136
|
+
role="tablist"
|
|
1137
|
+
aria-label="Kundli style"
|
|
1138
|
+
@keydown=${t=>{let r=Ce.findIndex(o=>o.id===n);if(t.key==="ArrowRight"){t.preventDefault();let o=Ce[(r+1)%Ce.length];o&&a(o.id)}else if(t.key==="ArrowLeft"){t.preventDefault();let o=Ce[(r-1+Ce.length)%Ce.length];o&&a(o.id)}}}
|
|
1139
|
+
>
|
|
1140
|
+
${Ce.map(t=>s`<button
|
|
1141
|
+
type="button"
|
|
1142
|
+
class="kundli-tab"
|
|
1143
|
+
role="tab"
|
|
1144
|
+
id="kundli-tab-${t.id}"
|
|
1145
|
+
aria-selected=${n===t.id?"true":"false"}
|
|
1146
|
+
tabindex=${n===t.id?"0":"-1"}
|
|
1147
|
+
@click=${()=>a(t.id)}
|
|
1148
|
+
>
|
|
1149
|
+
${t.label}
|
|
1150
|
+
</button>`)}
|
|
1151
|
+
</div>`}var lt=f`
|
|
1152
|
+
.wrap {
|
|
1153
|
+
display: grid;
|
|
1154
|
+
gap: var(--roxy-space-md, 1rem);
|
|
1155
|
+
}
|
|
1156
|
+
.header {
|
|
1157
|
+
display: flex;
|
|
1158
|
+
flex-wrap: wrap;
|
|
1159
|
+
align-items: center;
|
|
1160
|
+
justify-content: space-between;
|
|
1161
|
+
gap: var(--roxy-space-sm, 0.5rem);
|
|
1162
|
+
}
|
|
1163
|
+
.title {
|
|
1164
|
+
font-size: var(--roxy-text-lg, 1.125rem);
|
|
1165
|
+
font-weight: var(--roxy-weight-bold, 600);
|
|
1166
|
+
margin: 0;
|
|
1167
|
+
}
|
|
1168
|
+
.kundli-tablist {
|
|
1169
|
+
display: inline-flex;
|
|
1170
|
+
gap: 2px;
|
|
1171
|
+
border-bottom: 2px solid var(--roxy-border, #e4e4e7);
|
|
1172
|
+
}
|
|
1173
|
+
.kundli-tab {
|
|
1174
|
+
padding: var(--roxy-space-xs, 0.25rem) var(--roxy-space-md, 1rem);
|
|
1175
|
+
font-size: var(--roxy-text-sm, 0.875rem);
|
|
1176
|
+
background: none;
|
|
1177
|
+
border: none;
|
|
1178
|
+
border-bottom: 2px solid transparent;
|
|
1179
|
+
margin-bottom: -2px;
|
|
1180
|
+
cursor: pointer;
|
|
1181
|
+
color: var(--roxy-muted, #71717a);
|
|
1182
|
+
font-family: inherit;
|
|
1183
|
+
transition: color var(--roxy-motion-duration, 200ms)
|
|
1184
|
+
var(--roxy-motion-easing, ease);
|
|
1185
|
+
}
|
|
1186
|
+
.kundli-tab[aria-selected='true'] {
|
|
1187
|
+
color: var(--roxy-accent-fg, #b45309);
|
|
1188
|
+
border-bottom-color: var(--roxy-accent, #f59e0b);
|
|
1189
|
+
font-weight: var(--roxy-weight-bold, 600);
|
|
1190
|
+
}
|
|
1191
|
+
.kundli-tab:hover:not([aria-selected='true']) {
|
|
1192
|
+
color: var(--roxy-fg, #0a0a0a);
|
|
1193
|
+
}
|
|
1194
|
+
.kundli-tab:focus-visible {
|
|
1195
|
+
outline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));
|
|
1196
|
+
outline-offset: 2px;
|
|
1197
|
+
border-radius: 4px;
|
|
1198
|
+
}
|
|
1199
|
+
svg {
|
|
1200
|
+
display: block;
|
|
1201
|
+
width: 100%;
|
|
1202
|
+
max-width: 560px;
|
|
1203
|
+
aspect-ratio: 1 / 1;
|
|
1204
|
+
height: auto;
|
|
1205
|
+
margin: 0 auto;
|
|
1206
|
+
}
|
|
1207
|
+
.line {
|
|
1208
|
+
fill: transparent;
|
|
1209
|
+
stroke: var(--roxy-border, #d4d4d8);
|
|
1210
|
+
}
|
|
1211
|
+
.sign-text {
|
|
1212
|
+
fill: var(--roxy-muted, #71717a);
|
|
1213
|
+
font-size: 11px;
|
|
1214
|
+
font-weight: 500;
|
|
1215
|
+
font-family: var(--roxy-font-sans);
|
|
1216
|
+
text-transform: uppercase;
|
|
1217
|
+
letter-spacing: 0.04em;
|
|
1218
|
+
}
|
|
1219
|
+
.rashi-num {
|
|
1220
|
+
fill: var(--roxy-muted, #71717a);
|
|
1221
|
+
font-size: 12px;
|
|
1222
|
+
font-weight: 500;
|
|
1223
|
+
font-family: var(--roxy-font-sans);
|
|
1224
|
+
}
|
|
1225
|
+
.house-num {
|
|
1226
|
+
fill: var(--roxy-accent-fg, #b45309);
|
|
1227
|
+
font-size: 11px;
|
|
1228
|
+
font-weight: 600;
|
|
1229
|
+
font-family: var(--roxy-font-sans);
|
|
1230
|
+
opacity: 0.85;
|
|
1231
|
+
}
|
|
1232
|
+
.planet-text {
|
|
1233
|
+
fill: var(--roxy-fg, #0a0a0a);
|
|
1234
|
+
font-size: 13px;
|
|
1235
|
+
font-weight: 600;
|
|
1236
|
+
font-family: var(--roxy-font-sans);
|
|
1237
|
+
}
|
|
1238
|
+
.centre-label {
|
|
1239
|
+
fill: var(--roxy-muted, #71717a);
|
|
1240
|
+
font-size: 14px;
|
|
1241
|
+
font-weight: 600;
|
|
1242
|
+
font-family: var(--roxy-font-sans);
|
|
1243
|
+
letter-spacing: 0.02em;
|
|
1244
|
+
}
|
|
1245
|
+
.lagna-marker {
|
|
1246
|
+
fill: var(--roxy-accent-fg, #b45309);
|
|
1247
|
+
font-size: 10px;
|
|
1248
|
+
font-weight: 700;
|
|
1249
|
+
font-family: var(--roxy-font-sans);
|
|
1250
|
+
letter-spacing: 0.08em;
|
|
1251
|
+
text-transform: uppercase;
|
|
1252
|
+
}
|
|
1253
|
+
.lagna-bg {
|
|
1254
|
+
fill: color-mix(in srgb, var(--roxy-accent, #f59e0b) 14%, transparent);
|
|
1255
|
+
}
|
|
1256
|
+
.lagna-slash {
|
|
1257
|
+
stroke: var(--roxy-accent, #f59e0b);
|
|
1258
|
+
stroke-linecap: round;
|
|
1259
|
+
opacity: 0.7;
|
|
1260
|
+
}
|
|
1261
|
+
`;var X=class extends x{constructor(){super(...arguments);this.data=null;this.chartStyle="north";this.setStyle=e=>{this.chartStyle=e}}viewModel(){if(!this.data?.chart?.meta)return null;let{division:e}=this.data,t=`D${e.number} ${e.name}`;return ot(this.data.chart.meta,t)}render(){let e=this.viewModel();if(!this.data||!e)return s`<div class="roxy-empty" role="status">No divisional chart data</div>`;let{division:t,vargottama:r}=this.data;return s`<div class="wrap">
|
|
972
1262
|
<div class="header">
|
|
973
|
-
<
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
1263
|
+
<div>
|
|
1264
|
+
<h2 class="title">
|
|
1265
|
+
D${t.number} ${t.name}
|
|
1266
|
+
${t.sanskritName&&t.sanskritName!==t.name?s`<span class="division-meta"> · ${t.sanskritName}</span>`:l}
|
|
1267
|
+
</h2>
|
|
1268
|
+
${t.significance?s`<p class="significance">${t.significance}</p>`:l}
|
|
1269
|
+
</div>
|
|
1270
|
+
${it(this.chartStyle,this.setStyle)}
|
|
978
1271
|
</div>
|
|
979
1272
|
|
|
980
1273
|
<svg
|
|
981
|
-
viewBox="0 0
|
|
1274
|
+
viewBox="0 0 400 400"
|
|
1275
|
+
preserveAspectRatio="xMidYMid meet"
|
|
982
1276
|
role="img"
|
|
983
|
-
aria-label="D${
|
|
1277
|
+
aria-label="D${t.number} ${t.name} divisional chart with twelve sign houses"
|
|
984
1278
|
>
|
|
985
|
-
<title>D${
|
|
986
|
-
${
|
|
987
|
-
${a.map(c=>d(c))}
|
|
1279
|
+
<title>D${t.number} ${t.name}</title>
|
|
1280
|
+
${nt(e,this.chartStyle)}
|
|
988
1281
|
</svg>
|
|
989
1282
|
|
|
990
|
-
${r&&r.length>0?
|
|
1283
|
+
${r&&r.length>0?s`<div class="vargottama-row" role="list" aria-label="Vargottama planets">
|
|
991
1284
|
<span class="vargottama-label">Vargottama:</span>
|
|
992
|
-
${r.map(
|
|
993
|
-
${
|
|
1285
|
+
${r.map(o=>s`<span class="vargottama-pill" role="listitem">
|
|
1286
|
+
${R[o]??""} ${o}
|
|
994
1287
|
</span>`)}
|
|
995
|
-
</div>`:
|
|
996
|
-
</div>`}};
|
|
997
|
-
.wrap {
|
|
998
|
-
display: grid;
|
|
999
|
-
gap: var(--roxy-space-md, 1rem);
|
|
1000
|
-
}
|
|
1001
|
-
.header {
|
|
1002
|
-
display: grid;
|
|
1003
|
-
gap: var(--roxy-space-xs, 0.25rem);
|
|
1004
|
-
}
|
|
1005
|
-
.title {
|
|
1006
|
-
font-size: var(--roxy-text-lg, 1.125rem);
|
|
1007
|
-
font-weight: var(--roxy-weight-bold, 600);
|
|
1008
|
-
margin: 0;
|
|
1009
|
-
}
|
|
1288
|
+
</div>`:l}
|
|
1289
|
+
</div>`}};X.styles=[v,lt,f`
|
|
1010
1290
|
.division-meta {
|
|
1011
1291
|
font-size: var(--roxy-text-sm, 0.875rem);
|
|
1012
1292
|
color: var(--roxy-muted, #71717a);
|
|
@@ -1019,46 +1299,6 @@
|
|
|
1019
1299
|
padding-left: var(--roxy-space-sm, 0.5rem);
|
|
1020
1300
|
margin: 0;
|
|
1021
1301
|
}
|
|
1022
|
-
svg {
|
|
1023
|
-
display: block;
|
|
1024
|
-
width: 100%;
|
|
1025
|
-
max-width: 360px;
|
|
1026
|
-
margin: 0 auto;
|
|
1027
|
-
}
|
|
1028
|
-
.line {
|
|
1029
|
-
fill: transparent;
|
|
1030
|
-
stroke: var(--roxy-border, #e4e4e7);
|
|
1031
|
-
}
|
|
1032
|
-
.sign-text {
|
|
1033
|
-
fill: var(--roxy-muted, #71717a);
|
|
1034
|
-
font-size: 9px;
|
|
1035
|
-
font-weight: 500;
|
|
1036
|
-
font-family: var(--roxy-font-sans);
|
|
1037
|
-
}
|
|
1038
|
-
.planet-text {
|
|
1039
|
-
fill: var(--roxy-fg, #0a0a0a);
|
|
1040
|
-
font-size: 11px;
|
|
1041
|
-
font-weight: 600;
|
|
1042
|
-
font-family: var(--roxy-font-sans);
|
|
1043
|
-
}
|
|
1044
|
-
.house-num {
|
|
1045
|
-
fill: var(--roxy-muted, #71717a);
|
|
1046
|
-
font-size: 9px;
|
|
1047
|
-
font-weight: 400;
|
|
1048
|
-
font-family: var(--roxy-font-sans);
|
|
1049
|
-
}
|
|
1050
|
-
.lagna-marker {
|
|
1051
|
-
fill: var(--roxy-accent-fg, #b45309);
|
|
1052
|
-
font-size: 8px;
|
|
1053
|
-
font-weight: 700;
|
|
1054
|
-
font-family: var(--roxy-font-sans);
|
|
1055
|
-
letter-spacing: 0.05em;
|
|
1056
|
-
}
|
|
1057
|
-
.lagna-bg {
|
|
1058
|
-
fill: color-mix(in srgb, var(--roxy-accent, #f59e0b) 12%, transparent);
|
|
1059
|
-
stroke: color-mix(in srgb, var(--roxy-accent, #f59e0b) 45%, transparent);
|
|
1060
|
-
stroke-width: 0.8;
|
|
1061
|
-
}
|
|
1062
1302
|
.vargottama-row {
|
|
1063
1303
|
display: flex;
|
|
1064
1304
|
flex-wrap: wrap;
|
|
@@ -1083,46 +1323,46 @@
|
|
|
1083
1323
|
color: var(--roxy-fg, #0a0a0a);
|
|
1084
1324
|
border: 1px solid color-mix(in srgb, var(--roxy-accent, #f59e0b) 45%, transparent);
|
|
1085
1325
|
}
|
|
1086
|
-
`],p([
|
|
1326
|
+
`],p([y({attribute:!1})],X.prototype,"data",2),p([y({type:String,reflect:!0,attribute:"chart-style"})],X.prototype,"chartStyle",2),X=p([b("roxy-divisional-chart")],X);var ra={manglik:"Mangal Dosha",kalsarpa:"Kaal Sarp Dosha",sadhesati:"Sade Sati"},Z=class extends x{constructor(){super(...arguments);this.data=null;this.type="manglik"}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No dosha data</div>`;let t=!!e.present,r=ra[this.type]??this.type,o=(e.severity??"").toLowerCase(),i=o==="severe"?3:o==="moderate"?2:o==="mild"?1:0,d=i*33,c=i===3?"var(--roxy-danger)":i===2?"var(--roxy-warning)":i===1?"var(--roxy-success)":"transparent";return s`<article
|
|
1087
1327
|
class="card"
|
|
1088
|
-
aria-label=${
|
|
1328
|
+
aria-label=${r}
|
|
1089
1329
|
>
|
|
1090
1330
|
<header class="head">
|
|
1091
|
-
<h2 class="title">${
|
|
1092
|
-
<span class=${`badge ${
|
|
1093
|
-
${
|
|
1331
|
+
<h2 class="title">${r}</h2>
|
|
1332
|
+
<span class=${`badge ${t?"present":"absent"}`}>
|
|
1333
|
+
${t?"Present":"Absent"}
|
|
1094
1334
|
</span>
|
|
1095
1335
|
</header>
|
|
1096
|
-
${e.severity?
|
|
1336
|
+
${e.severity?s`<div
|
|
1097
1337
|
class="severity-bar"
|
|
1098
1338
|
role="meter"
|
|
1099
1339
|
aria-valuemin="0"
|
|
1100
1340
|
aria-valuemax="3"
|
|
1101
|
-
aria-valuenow="${
|
|
1341
|
+
aria-valuenow="${i}"
|
|
1102
1342
|
aria-label="Severity ${e.severity}"
|
|
1103
1343
|
>
|
|
1104
1344
|
<span class="severity-fill" style="width: ${d}%; background: ${c};"></span>
|
|
1105
|
-
</div>`:
|
|
1106
|
-
${e.description?
|
|
1345
|
+
</div>`:l}
|
|
1346
|
+
${e.description?s`<p class="description">${e.description}</p>`:l}
|
|
1107
1347
|
${this.renderEffects(e)}
|
|
1108
|
-
${e.remedies&&e.remedies.length>0?
|
|
1348
|
+
${e.remedies&&e.remedies.length>0?s`<div>
|
|
1109
1349
|
<h3>Remedies</h3>
|
|
1110
1350
|
<ul>
|
|
1111
|
-
${e.remedies.map(m=>
|
|
1351
|
+
${e.remedies.map(m=>s`<li>${m}</li>`)}
|
|
1112
1352
|
</ul>
|
|
1113
|
-
</div>`:
|
|
1114
|
-
${"exceptions"in e&&e.exceptions&&e.exceptions.length>0?
|
|
1353
|
+
</div>`:l}
|
|
1354
|
+
${"exceptions"in e&&e.exceptions&&e.exceptions.length>0?s`<div>
|
|
1115
1355
|
<h3>Exceptions</h3>
|
|
1116
1356
|
<ul>
|
|
1117
|
-
${e.exceptions.map(m=>
|
|
1357
|
+
${e.exceptions.map(m=>s`<li>${m}</li>`)}
|
|
1118
1358
|
</ul>
|
|
1119
|
-
</div>`:
|
|
1120
|
-
</article>`}renderEffects(e){if(!e.effects)return
|
|
1121
|
-
${
|
|
1122
|
-
<h3>${
|
|
1359
|
+
</div>`:l}
|
|
1360
|
+
</article>`}renderEffects(e){if(!e.effects)return l;let t=Object.entries(e.effects).filter(([,r])=>typeof r=="string"&&r.length>0);return t.length===0?l:s`<div class="effects">
|
|
1361
|
+
${t.map(([r,o])=>s`<div>
|
|
1362
|
+
<h3>${r}</h3>
|
|
1123
1363
|
<p>${o}</p>
|
|
1124
1364
|
</div>`)}
|
|
1125
|
-
</div>`}};
|
|
1365
|
+
</div>`}};Z.styles=[v,f`
|
|
1126
1366
|
.card {
|
|
1127
1367
|
background: var(--roxy-bg, #fff);
|
|
1128
1368
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -1210,36 +1450,36 @@
|
|
|
1210
1450
|
margin: 0;
|
|
1211
1451
|
font-size: var(--roxy-text-sm, 0.875rem);
|
|
1212
1452
|
}
|
|
1213
|
-
`],p([
|
|
1453
|
+
`],p([y({attribute:!1})],Z.prototype,"data",2),p([y({type:String,reflect:!0})],Z.prototype,"type",2),Z=p([b("roxy-dosha-card")],Z);var Lt=new Map;async function aa(n){let a=Lt.get(n);return a||(a=fetch(n).then(async e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return await e.json()}).catch(e=>{throw Lt.delete(n),e}),Lt.set(n,a)),a}var O=class extends x{constructor(){super(...arguments);this.endpoint="vedic-astrology/birth-chart";this.method="POST";this.specUrl="https://roxyapi.com/api/v2/openapi.json";this.submitLabel="Submit";this.fields=[];this.values={};this.hasLocation=!1;this.loaded=!1;this.specError=null;this.retryLoadSchema=()=>{this.loaded=!1,this.specError=null,this.loadSchema()};this.onLocation=e=>{let t=e.detail;t&&(this.values={...this.values,latitude:t.latitude,longitude:t.longitude,timezone:t.timezone??t.utcOffset})};this.onSubmit=e=>{e.preventDefault();let t=this.fields.filter(r=>r.required).filter(r=>this.values[r.name]===void 0||this.values[r.name]==="");if(t.length>0){this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{missing:t.map(r=>r.name)},bubbles:!0,composed:!0}));return}this.dispatchEvent(new CustomEvent("roxy-submit",{detail:{endpoint:this.endpoint,values:this.values},bubbles:!0,composed:!0}))}}connectedCallback(){super.connectedCallback(),this.loadSchema()}async loadSchema(){this.specError=null;try{let e=await aa(this.specUrl),t=`/${this.endpoint.replace(/^\//,"")}`,r=e.paths?.[t]?.[this.method.toLowerCase()];if(!r)throw new Error(`Endpoint ${this.method} ${t} not found in OpenAPI spec`);let o=e.components?.schemas??{},i=[],d;if(r.requestBody){let m=r.requestBody.content?.["application/json"]?.schema;d=this.resolve(m,o)}if(d?.properties){let m=new Set(d.required??[]);for(let[g,h]of Object.entries(d.properties)){let u=this.resolve(h,o)??{};i.push({name:g,type:this.fieldType(u),required:m.has(g),description:u.description,enum:u.enum,min:u.minimum,max:u.maximum,default:u.default})}}for(let m of r.parameters??[])if(m.in==="path"||m.in==="query"){let g=this.resolve(m.schema,o)??{};i.push({name:m.name,type:this.fieldType(g),required:!!m.required,description:g.description,enum:g.enum,default:g.default})}this.fields=i,this.hasLocation=i.some(m=>m.name==="latitude")&&i.some(m=>m.name==="longitude")&&i.some(m=>m.name==="timezone");let c={};for(let m of i)m.default!==void 0&&(c[m.name]=m.default);this.values=c,this.loaded=!0}catch(e){let t=e instanceof Error?e.message:String(e);this.specError=t,this.loaded=!0,this.dispatchEvent(new CustomEvent("roxy-spec-error",{detail:{url:this.specUrl,message:t},bubbles:!0,composed:!0}))}}resolve(e,t){if(e){if("$ref"in e&&e.$ref){let r=e.$ref.split("/").pop();return r?t[r]:void 0}return e}}fieldType(e){return e.enum?"enum":e.format==="date"?"date":e.format==="time"?"time":e.format==="date-time"?"datetime":e.type==="integer"||e.type==="number"?"number":"text"}setValue(e,t){this.values={...this.values,[e]:t}}render(){if(!this.loaded)return s`<form><div class="roxy-skeleton" style="height: 8rem"></div></form>`;if(this.specError)return s`<div class="spec-error" role="alert">
|
|
1214
1454
|
Schema load failed: ${this.specError}
|
|
1215
1455
|
<button type="button" class="submit" @click=${this.retryLoadSchema}>Retry</button>
|
|
1216
|
-
</div>`;let e=
|
|
1217
|
-
<label for=${
|
|
1218
|
-
${
|
|
1456
|
+
</div>`;let e=t=>{if(this.hasLocation&&(t.name==="latitude"||t.name==="longitude"||t.name==="timezone"))return l;let r=`roxy-form-${t.name}`;return s`<div class="field">
|
|
1457
|
+
<label for=${r}>
|
|
1458
|
+
${ce(t.name)}${t.required?s`<span class="req" aria-hidden="true">*</span>`:l}
|
|
1219
1459
|
</label>
|
|
1220
|
-
${
|
|
1221
|
-
id=${
|
|
1222
|
-
?required=${
|
|
1223
|
-
@change=${o=>this.setValue(
|
|
1460
|
+
${t.enum?s`<select
|
|
1461
|
+
id=${r}
|
|
1462
|
+
?required=${t.required}
|
|
1463
|
+
@change=${o=>this.setValue(t.name,o.target.value)}
|
|
1224
1464
|
>
|
|
1225
1465
|
<option value="">Choose</option>
|
|
1226
|
-
${
|
|
1466
|
+
${t.enum.map(o=>s`<option value=${o} ?selected=${this.values[t.name]===o}>
|
|
1227
1467
|
${o}
|
|
1228
1468
|
</option>`)}
|
|
1229
|
-
</select>`:
|
|
1230
|
-
id=${
|
|
1231
|
-
type=${this.htmlType(
|
|
1232
|
-
?required=${
|
|
1233
|
-
min=${
|
|
1234
|
-
max=${
|
|
1235
|
-
step=${
|
|
1236
|
-
.value=${this.values[
|
|
1237
|
-
@input=${o=>this.setValue(
|
|
1469
|
+
</select>`:s`<input
|
|
1470
|
+
id=${r}
|
|
1471
|
+
type=${this.htmlType(t.type)}
|
|
1472
|
+
?required=${t.required}
|
|
1473
|
+
min=${t.min??""}
|
|
1474
|
+
max=${t.max??""}
|
|
1475
|
+
step=${t.type==="number"?"any":""}
|
|
1476
|
+
.value=${this.values[t.name]??""}
|
|
1477
|
+
@input=${o=>this.setValue(t.name,this.coerce(t.type,o.target.value))}
|
|
1238
1478
|
/>`}
|
|
1239
|
-
${
|
|
1240
|
-
</div>`};return
|
|
1241
|
-
<h2 class="title">${
|
|
1242
|
-
${this.hasLocation?
|
|
1479
|
+
${t.description?s`<small class="help">${t.description}</small>`:l}
|
|
1480
|
+
</div>`};return s`<form @submit=${this.onSubmit}>
|
|
1481
|
+
<h2 class="title">${ce(this.endpoint.split("/").pop()??"")}</h2>
|
|
1482
|
+
${this.hasLocation?s`<div class="location-block">
|
|
1243
1483
|
<label>Birth location</label>
|
|
1244
1484
|
<roxy-location-search
|
|
1245
1485
|
@roxy-location-select=${this.onLocation}
|
|
@@ -1248,12 +1488,12 @@
|
|
|
1248
1488
|
<small class="help">
|
|
1249
1489
|
Required: latitude, longitude, timezone. Pick a city to autofill.
|
|
1250
1490
|
</small>
|
|
1251
|
-
</div>`:
|
|
1491
|
+
</div>`:l}
|
|
1252
1492
|
<div class="fields">
|
|
1253
|
-
${this.fields.map(
|
|
1493
|
+
${this.fields.map(t=>e(t))}
|
|
1254
1494
|
</div>
|
|
1255
1495
|
<button class="submit" type="submit">${this.submitLabel}</button>
|
|
1256
|
-
</form>`}htmlType(e){switch(e){case"date":return"date";case"time":return"time";case"datetime":return"datetime-local";case"number":return"number";default:return"text"}}coerce(e,
|
|
1496
|
+
</form>`}htmlType(e){switch(e){case"date":return"date";case"time":return"time";case"datetime":return"datetime-local";case"number":return"number";default:return"text"}}coerce(e,t){if(t!==""){if(e==="number"){let r=Number(t);return Number.isFinite(r)?r:void 0}return t}}};O.styles=[v,f`
|
|
1257
1497
|
form {
|
|
1258
1498
|
display: grid;
|
|
1259
1499
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -1355,33 +1595,33 @@
|
|
|
1355
1595
|
color: var(--roxy-danger-fg, #991b1b);
|
|
1356
1596
|
font-size: var(--roxy-text-sm, 0.875rem);
|
|
1357
1597
|
}
|
|
1358
|
-
`],p([
|
|
1598
|
+
`],p([y({type:String,attribute:"data-endpoint"})],O.prototype,"endpoint",2),p([y({type:String})],O.prototype,"method",2),p([y({type:String,attribute:"spec-url"})],O.prototype,"specUrl",2),p([y({type:String,attribute:"submit-label"})],O.prototype,"submitLabel",2),p([z()],O.prototype,"fields",2),p([z()],O.prototype,"values",2),p([z()],O.prototype,"hasLocation",2),p([z()],O.prototype,"loaded",2),p([z()],O.prototype,"specError",2),O=p([b("roxy-endpoint-form")],O);var me=class extends x{constructor(){super(...arguments);this.data=null}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No Guna Milan data</div>`;let t=(e.breakdown??[]).filter(h=>h?.category!==void 0),r=e.total??0,o=e.maxScore??36,i=r/o*100,d="color-mix(in srgb, var(--roxy-border) 50%, transparent)",c=i>=70?"var(--roxy-success)":i>=50?"var(--roxy-warning)":"var(--roxy-danger)",m=i*2.827,g=(100-i)*2.827;return s`<article class="card" aria-label="Guna Milan score">
|
|
1359
1599
|
<div class="score-header">
|
|
1360
1600
|
<div class="score-info">
|
|
1361
1601
|
<div class="score-bar">
|
|
1362
1602
|
<div>
|
|
1363
|
-
<span class="total">${
|
|
1603
|
+
<span class="total">${A(e.total,1)}</span>
|
|
1364
1604
|
<span class="over"> / ${e.maxScore}</span>
|
|
1365
|
-
${typeof e.percentage=="number"?
|
|
1366
|
-
${
|
|
1367
|
-
</small>`:
|
|
1605
|
+
${typeof e.percentage=="number"?s`<small style="margin-left: 0.5rem; color: var(--roxy-muted)">
|
|
1606
|
+
${ar(e.percentage,1)}
|
|
1607
|
+
</small>`:l}
|
|
1368
1608
|
</div>
|
|
1369
|
-
${e.recommendation?
|
|
1609
|
+
${e.recommendation?s`<span class="recommendation">${e.recommendation}</span>`:l}
|
|
1370
1610
|
</div>
|
|
1371
1611
|
</div>
|
|
1372
|
-
<div class="score-ring" role="meter" aria-label="Guna milan score" aria-valuemin="0" aria-valuemax="36" aria-valuenow="${
|
|
1612
|
+
<div class="score-ring" role="meter" aria-label="Guna milan score" aria-valuemin="0" aria-valuemax="36" aria-valuenow="${r}">
|
|
1373
1613
|
<svg viewBox="0 0 100 100" aria-hidden="true">
|
|
1374
1614
|
<circle class="ring-track" cx="50" cy="50" r="45" fill="none" stroke="${d}" stroke-width="8"/>
|
|
1375
1615
|
<circle class="ring-fill" cx="50" cy="50" r="45" fill="none" stroke="${c}" stroke-width="8"
|
|
1376
|
-
stroke-dasharray="${m},${
|
|
1616
|
+
stroke-dasharray="${m},${g}" stroke-linecap="round"
|
|
1377
1617
|
transform="rotate(-90 50 50)"/>
|
|
1378
|
-
<text x="50" y="50" text-anchor="middle" dominant-baseline="central" class="ring-text">${
|
|
1618
|
+
<text x="50" y="50" text-anchor="middle" dominant-baseline="central" class="ring-text">${r}</text>
|
|
1379
1619
|
<text x="50" y="64" text-anchor="middle" dominant-baseline="central" class="ring-max">/${o}</text>
|
|
1380
1620
|
</svg>
|
|
1381
1621
|
</div>
|
|
1382
1622
|
</div>
|
|
1383
1623
|
|
|
1384
|
-
${
|
|
1624
|
+
${t.length>0?s`<table>
|
|
1385
1625
|
<thead>
|
|
1386
1626
|
<tr>
|
|
1387
1627
|
<th>Category</th>
|
|
@@ -1390,22 +1630,22 @@
|
|
|
1390
1630
|
</tr>
|
|
1391
1631
|
</thead>
|
|
1392
1632
|
<tbody>
|
|
1393
|
-
${
|
|
1633
|
+
${t.map(h=>{let u=h.score??0,k=h.maxScore??sa(h.category),$=k?u/k*100:0;return s`<tr>
|
|
1394
1634
|
<td>${h.category}</td>
|
|
1395
1635
|
<td class="bar-cell">
|
|
1396
1636
|
<div class="mini-bar">
|
|
1397
1637
|
<span style="width: ${$}%"></span>
|
|
1398
1638
|
</div>
|
|
1399
1639
|
</td>
|
|
1400
|
-
<td class="score">${
|
|
1640
|
+
<td class="score">${A(u,1)} / ${k}</td>
|
|
1401
1641
|
</tr>`})}
|
|
1402
1642
|
</tbody>
|
|
1403
|
-
</table>`:
|
|
1404
|
-
${(e.doshas?.length??0)>0||(e.doshaCancellations?.length??0)>0?
|
|
1405
|
-
${e.doshas?.map(h=>
|
|
1406
|
-
${e.doshaCancellations?.map(h=>
|
|
1407
|
-
</div>`:
|
|
1408
|
-
</article>`}};
|
|
1643
|
+
</table>`:l}
|
|
1644
|
+
${(e.doshas?.length??0)>0||(e.doshaCancellations?.length??0)>0?s`<div class="tags">
|
|
1645
|
+
${e.doshas?.map(h=>s`<span class="dosha">${h}</span>`)}
|
|
1646
|
+
${e.doshaCancellations?.map(h=>s`<span class="cancel" title=${h.reason}>${h.dosha} cancelled</span>`)}
|
|
1647
|
+
</div>`:l}
|
|
1648
|
+
</article>`}};me.styles=[v,f`
|
|
1409
1649
|
.card {
|
|
1410
1650
|
background: var(--roxy-bg, #fff);
|
|
1411
1651
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -1526,48 +1766,48 @@
|
|
|
1526
1766
|
background: color-mix(in srgb, var(--roxy-success, #16a34a) 18%, transparent);
|
|
1527
1767
|
color: var(--roxy-success-fg, #166534);
|
|
1528
1768
|
}
|
|
1529
|
-
`],p([
|
|
1769
|
+
`],p([y({attribute:!1})],me.prototype,"data",2),me=p([b("roxy-guna-milan")],me);function sa(n){if(!n)return 1;switch(n.toLowerCase()){case"varna":return 1;case"vasya":return 2;case"tara":return 3;case"yoni":return 4;case"maitri":return 5;case"gana":return 6;case"bhakoot":return 7;case"nadi":return 8;default:return 1}}var Q=class extends x{constructor(){super(...arguments);this.data=null;this.mode="lookup"}resolveHexagram(){let e=this.data;if(!e)return null;if("hexagram"in e&&e.hexagram){if("lines"in e){let r=e;return{hex:r.hexagram,lines:r.lines,changingLinePositions:r.changingLinePositions,resultingHexagram:r.resultingHexagram}}let t=e;return{hex:t.hexagram,dailyMessage:t.dailyMessage}}return{hex:e}}render(){let e=this.resolveHexagram();if(!e)return s`<div class="roxy-empty" role="status">No hexagram data</div>`;let{hex:t,lines:r,changingLinePositions:o,dailyMessage:i,resultingHexagram:d}=e,c=r??this.derivedLines(t),m=new Set(o??[]);return s`<article class="card" aria-label="I Ching hexagram">
|
|
1530
1770
|
<div class="glyphs">
|
|
1531
|
-
${
|
|
1771
|
+
${t.symbol?s`<div class="symbol">${t.symbol}</div>`:l}
|
|
1532
1772
|
<div class="lines" aria-hidden="true">
|
|
1533
|
-
${c.slice().reverse().map((
|
|
1534
|
-
${$?
|
|
1773
|
+
${c.slice().reverse().map((g,h)=>{let u=c.length-1-h+1,k=m.has(u),$=g===6||g===8;return s`<div class="line ${`${$?"broken":"solid"}${k?" changing":""}`}">
|
|
1774
|
+
${$?w`<span class="seg"></span><span class="seg"></span>`:w`<span class="seg"></span>`}
|
|
1535
1775
|
</div>`})}
|
|
1536
1776
|
</div>
|
|
1537
1777
|
</div>
|
|
1538
1778
|
<div>
|
|
1539
1779
|
<h2 class="title">
|
|
1540
|
-
${
|
|
1780
|
+
${t.number?s`${t.number}. `:l}${t.english??t.chinese??"Hexagram"}
|
|
1541
1781
|
</h2>
|
|
1542
1782
|
<p class="subtitle">
|
|
1543
|
-
${
|
|
1544
|
-
${
|
|
1783
|
+
${t.chinese?s`${t.chinese}`:l}
|
|
1784
|
+
${t.pinyin?s` · ${t.pinyin}`:l}
|
|
1545
1785
|
</p>
|
|
1546
1786
|
<div class="trigrams">
|
|
1547
|
-
${
|
|
1787
|
+
${t.upperTrigram?s`<div>
|
|
1548
1788
|
Upper
|
|
1549
1789
|
<span class="tri-glyph"
|
|
1550
|
-
>${
|
|
1551
|
-
>${
|
|
1552
|
-
</div>`:
|
|
1553
|
-
${
|
|
1790
|
+
>${St[t.upperTrigram]??""}</span
|
|
1791
|
+
>${t.upperTrigram}
|
|
1792
|
+
</div>`:l}
|
|
1793
|
+
${t.lowerTrigram?s`<div>
|
|
1554
1794
|
Lower
|
|
1555
1795
|
<span class="tri-glyph"
|
|
1556
|
-
>${
|
|
1557
|
-
>${
|
|
1558
|
-
</div>`:
|
|
1796
|
+
>${St[t.lowerTrigram]??""}</span
|
|
1797
|
+
>${t.lowerTrigram}
|
|
1798
|
+
</div>`:l}
|
|
1559
1799
|
</div>
|
|
1560
|
-
${
|
|
1561
|
-
${
|
|
1562
|
-
${
|
|
1563
|
-
${
|
|
1564
|
-
${m.size>0?
|
|
1565
|
-
Changing lines: ${Array.from(m).sort((
|
|
1566
|
-
${d?.english?
|
|
1567
|
-
${d.english}.`:
|
|
1568
|
-
</div>`:
|
|
1800
|
+
${t.judgment?s`<p class="judgment">${t.judgment}</p>`:l}
|
|
1801
|
+
${t.image?s`<p class="image">${t.image}</p>`:l}
|
|
1802
|
+
${i?s`<p class="message">${i}</p>`:l}
|
|
1803
|
+
${t.interpretation?.general?s`<p>${t.interpretation.general}</p>`:l}
|
|
1804
|
+
${m.size>0?s`<div class="changing">
|
|
1805
|
+
Changing lines: ${Array.from(m).sort((g,h)=>g-h).join(", ")}.
|
|
1806
|
+
${d?.english?s` Becomes hexagram ${d.number}
|
|
1807
|
+
${d.english}.`:l}
|
|
1808
|
+
</div>`:l}
|
|
1569
1809
|
</div>
|
|
1570
|
-
</article>`}derivedLines(e){let
|
|
1810
|
+
</article>`}derivedLines(e){let t=e.symbol.codePointAt(0)??0;if(t>=19904&&t<=19967){let r=t-19904,o=[];for(let i=0;i<6;i++){let d=r>>i&1;o.push(d?8:7)}return o}return Array.from({length:6},()=>7)}};Q.styles=[v,f`
|
|
1571
1811
|
.card {
|
|
1572
1812
|
background: var(--roxy-bg, #fff);
|
|
1573
1813
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -1674,67 +1914,67 @@
|
|
|
1674
1914
|
color: var(--roxy-accent-fg, #b45309);
|
|
1675
1915
|
font-size: var(--roxy-text-sm, 0.875rem);
|
|
1676
1916
|
}
|
|
1677
|
-
`],p([
|
|
1917
|
+
`],p([y({attribute:!1})],Q.prototype,"data",2),p([y({type:String,reflect:!0})],Q.prototype,"mode",2),Q=p([b("roxy-hexagram")],Q);var ee=class extends x{constructor(){super(...arguments);this.data=null;this.period="daily"}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No horoscope data</div>`;let t=e.sign??"",r=t?G[E(t)]??"":"",o="energyRating"in e&&typeof e.energyRating=="number"?e.energyRating:null,i="date"in e&&e.date||"week"in e&&e.week||"month"in e&&e.month||"";return s`<article
|
|
1678
1918
|
class="card"
|
|
1679
|
-
aria-label=${`${this.period} horoscope for ${
|
|
1919
|
+
aria-label=${`${this.period} horoscope for ${t}`}
|
|
1680
1920
|
>
|
|
1681
1921
|
<header class="head">
|
|
1682
|
-
<span class="glyph" aria-hidden="true">${
|
|
1922
|
+
<span class="glyph" aria-hidden="true">${r}</span>
|
|
1683
1923
|
<div>
|
|
1684
|
-
<h2 class="title">${
|
|
1685
|
-
${
|
|
1924
|
+
<h2 class="title">${t} ${this.period}</h2>
|
|
1925
|
+
${i?s`<div class="date">${i}</div>`:l}
|
|
1686
1926
|
</div>
|
|
1687
|
-
${o!==null?
|
|
1927
|
+
${o!==null?s`<span class="energy" aria-label=${`Energy ${o} of 10`}>
|
|
1688
1928
|
Energy ${o}/10
|
|
1689
1929
|
<span class="energy-bar"
|
|
1690
1930
|
><span style="width: ${o/10*100}%"></span
|
|
1691
1931
|
></span>
|
|
1692
|
-
</span>`:
|
|
1932
|
+
</span>`:l}
|
|
1693
1933
|
</header>
|
|
1694
1934
|
|
|
1695
|
-
${e.overview?
|
|
1935
|
+
${e.overview?s`<p class="overview">${e.overview}</p>`:l}
|
|
1696
1936
|
|
|
1697
1937
|
<div class="sections">
|
|
1698
|
-
${e.love?
|
|
1938
|
+
${e.love?s`<div class="section">
|
|
1699
1939
|
<h3>Love</h3>
|
|
1700
1940
|
<p>${e.love}</p>
|
|
1701
|
-
</div>`:
|
|
1702
|
-
${e.career?
|
|
1941
|
+
</div>`:l}
|
|
1942
|
+
${e.career?s`<div class="section">
|
|
1703
1943
|
<h3>Career</h3>
|
|
1704
1944
|
<p>${e.career}</p>
|
|
1705
|
-
</div>`:
|
|
1706
|
-
${e.health?
|
|
1945
|
+
</div>`:l}
|
|
1946
|
+
${e.health?s`<div class="section">
|
|
1707
1947
|
<h3>Health</h3>
|
|
1708
1948
|
<p>${e.health}</p>
|
|
1709
|
-
</div>`:
|
|
1710
|
-
${e.finance?
|
|
1949
|
+
</div>`:l}
|
|
1950
|
+
${e.finance?s`<div class="section">
|
|
1711
1951
|
<h3>Finance</h3>
|
|
1712
1952
|
<p>${e.finance}</p>
|
|
1713
|
-
</div>`:
|
|
1714
|
-
${"advice"in e&&e.advice?
|
|
1953
|
+
</div>`:l}
|
|
1954
|
+
${"advice"in e&&e.advice?s`<div class="section">
|
|
1715
1955
|
<h3>Advice</h3>
|
|
1716
1956
|
<p>${e.advice}</p>
|
|
1717
|
-
</div>`:
|
|
1957
|
+
</div>`:l}
|
|
1718
1958
|
</div>
|
|
1719
1959
|
|
|
1720
|
-
${(()=>{let d="luckyNumber"in e&&e.luckyNumber!==void 0?e.luckyNumber:void 0,c="luckyColor"in e&&e.luckyColor?e.luckyColor:"",m="luckyNumbers"in e&&e.luckyNumbers?e.luckyNumbers:[],
|
|
1721
|
-
${d!==void 0?
|
|
1722
|
-
${c?
|
|
1723
|
-
${m.length?
|
|
1960
|
+
${(()=>{let d="luckyNumber"in e&&e.luckyNumber!==void 0?e.luckyNumber:void 0,c="luckyColor"in e&&e.luckyColor?e.luckyColor:"",m="luckyNumbers"in e&&e.luckyNumbers?e.luckyNumbers:[],g="luckyDays"in e&&e.luckyDays?e.luckyDays:[],h=e.compatibleSigns??[];return d===void 0&&!c&&m.length===0&&g.length===0&&h.length===0?l:s`<div class="lucky">
|
|
1961
|
+
${d!==void 0?s`<span>Lucky number <strong>${d}</strong></span>`:l}
|
|
1962
|
+
${c?s`<span>Lucky color <strong>${c}</strong></span>`:l}
|
|
1963
|
+
${m.length?s`<span
|
|
1724
1964
|
>Lucky numbers
|
|
1725
1965
|
<strong>${m.join(", ")}</strong></span
|
|
1726
|
-
>`:
|
|
1727
|
-
${
|
|
1728
|
-
>Lucky days <strong>${
|
|
1729
|
-
>`:
|
|
1730
|
-
${h.length?
|
|
1966
|
+
>`:l}
|
|
1967
|
+
${g.length?s`<span
|
|
1968
|
+
>Lucky days <strong>${g.join(", ")}</strong></span
|
|
1969
|
+
>`:l}
|
|
1970
|
+
${h.length?s`<span class="compat-wrap">
|
|
1731
1971
|
Best with
|
|
1732
1972
|
<span class="compat"
|
|
1733
|
-
>${h.map(
|
|
1973
|
+
>${h.map(u=>s`<span>${u}</span>`)}</span
|
|
1734
1974
|
>
|
|
1735
|
-
</span>`:
|
|
1975
|
+
</span>`:l}
|
|
1736
1976
|
</div>`})()}
|
|
1737
|
-
</article>`}};
|
|
1977
|
+
</article>`}};ee.styles=[v,f`
|
|
1738
1978
|
.card {
|
|
1739
1979
|
background: var(--roxy-bg, #fff);
|
|
1740
1980
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -1856,19 +2096,19 @@
|
|
|
1856
2096
|
font-size: var(--roxy-text-xs, 0.75rem);
|
|
1857
2097
|
text-transform: capitalize;
|
|
1858
2098
|
}
|
|
1859
|
-
`],p([
|
|
2099
|
+
`],p([y({attribute:!1})],ee.prototype,"data",2),p([y({type:String,reflect:!0})],ee.prototype,"period",2),ee=p([b("roxy-horoscope-card")],ee);var te=class extends x{constructor(){super(...arguments);this.data=null;this.activeTab="planets"}bodies(){let e=this.data;if(!e)return[];let t=(e.planets??[]).map(o=>({name:o.planet,sign:o.sign,house:o.house,nakshatra:o.nakshatra,starLord:o.starLord,subLord:o.subLord,subSubLord:o.subSubLord,kpNumber:o.kpNumber,retrograde:o.retrograde})),r=e.nodes;for(let[o,i]of[["Rahu",r?.rahu],["Ketu",r?.ketu]])i&&t.push({name:o,sign:i.sign,house:i.house,nakshatra:i.nakshatra,starLord:i.starLord,subLord:i.subLord,subSubLord:i.subSubLord,retrograde:!0});return t}onTabKeyDown(e){if(e.key!=="ArrowRight"&&e.key!=="ArrowLeft")return;e.preventDefault(),this.activeTab=this.activeTab==="planets"?"cusps":"planets";let t=this.activeTab;requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${t}`)?.focus()})}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No KP chart data</div>`;let e=this.data,t=e.ascendant;return s`<div class="wrap" aria-label="KP chart" tabindex="0">
|
|
1860
2100
|
<header class="head">
|
|
1861
2101
|
<h2 class="title">KP chart</h2>
|
|
1862
|
-
${
|
|
1863
|
-
Ascendant: <strong>${
|
|
1864
|
-
${
|
|
1865
|
-
${
|
|
1866
|
-
${typeof
|
|
1867
|
-
</div>`:
|
|
1868
|
-
${typeof e.meta?.ayanamsa=="number"?
|
|
1869
|
-
${e.meta.ayanamsaType??"Ayanamsa"}: ${
|
|
1870
|
-
${e.meta.houseSystem?
|
|
1871
|
-
</div>`:
|
|
2102
|
+
${t?s`<div class="asc">
|
|
2103
|
+
Ascendant: <strong>${t.sign??""}</strong>
|
|
2104
|
+
${t.nakshatra?s`· ${t.nakshatra}`:l}
|
|
2105
|
+
${t.subLord?s`· sub lord ${t.subLord}`:l}
|
|
2106
|
+
${typeof t.kpNumber=="number"?s`· KP ${t.kpNumber}`:l}
|
|
2107
|
+
</div>`:l}
|
|
2108
|
+
${typeof e.meta?.ayanamsa=="number"?s`<div class="ayan">
|
|
2109
|
+
${e.meta.ayanamsaType??"Ayanamsa"}: ${A(e.meta.ayanamsa,4)}°
|
|
2110
|
+
${e.meta.houseSystem?s`· ${e.meta.houseSystem} houses`:l}
|
|
2111
|
+
</div>`:l}
|
|
1872
2112
|
</header>
|
|
1873
2113
|
|
|
1874
2114
|
<div
|
|
@@ -1877,23 +2117,23 @@
|
|
|
1877
2117
|
aria-label="KP chart views"
|
|
1878
2118
|
@keydown=${this.onTabKeyDown}
|
|
1879
2119
|
>
|
|
1880
|
-
${["planets","cusps"].map(
|
|
2120
|
+
${["planets","cusps"].map(r=>s`<button
|
|
1881
2121
|
class="tab"
|
|
1882
2122
|
role="tab"
|
|
1883
|
-
id="tab-${
|
|
1884
|
-
aria-selected=${this.activeTab===
|
|
1885
|
-
aria-controls="panel-${
|
|
1886
|
-
tabindex=${this.activeTab===
|
|
1887
|
-
@click=${()=>{this.activeTab=
|
|
2123
|
+
id="tab-${r}"
|
|
2124
|
+
aria-selected=${this.activeTab===r?"true":"false"}
|
|
2125
|
+
aria-controls="panel-${r}"
|
|
2126
|
+
tabindex=${this.activeTab===r?"0":"-1"}
|
|
2127
|
+
@click=${()=>{this.activeTab=r}}
|
|
1888
2128
|
>
|
|
1889
|
-
${
|
|
2129
|
+
${r==="planets"?"Planets":"Cusps"}
|
|
1890
2130
|
</button>`)}
|
|
1891
2131
|
</div>
|
|
1892
2132
|
|
|
1893
2133
|
<div id="panel-${this.activeTab}" role="tabpanel" aria-labelledby="tab-${this.activeTab}">
|
|
1894
2134
|
${this.activeTab==="planets"?this.renderPlanets():this.renderCusps()}
|
|
1895
2135
|
</div>
|
|
1896
|
-
</div>`}renderPlanets(){let e=this.bodies();return e.length?
|
|
2136
|
+
</div>`}renderPlanets(){let e=this.bodies();return e.length?s`<table role="table" aria-label="KP planets and nodes">
|
|
1897
2137
|
<thead>
|
|
1898
2138
|
<tr>
|
|
1899
2139
|
<th scope="col">Body</th>
|
|
@@ -1907,20 +2147,20 @@
|
|
|
1907
2147
|
</tr>
|
|
1908
2148
|
</thead>
|
|
1909
2149
|
<tbody>
|
|
1910
|
-
${e.map(
|
|
2150
|
+
${e.map(t=>s`<tr>
|
|
1911
2151
|
<td class="body">
|
|
1912
|
-
${
|
|
2152
|
+
${t.name}${t.retrograde?s`<span class="retro">R</span>`:l}
|
|
1913
2153
|
</td>
|
|
1914
|
-
<td>${
|
|
1915
|
-
<td class="num">${typeof
|
|
1916
|
-
<td>${
|
|
1917
|
-
<td>${
|
|
1918
|
-
<td>${
|
|
1919
|
-
<td>${
|
|
1920
|
-
<td class="num">${typeof
|
|
2154
|
+
<td>${t.sign??""}</td>
|
|
2155
|
+
<td class="num">${typeof t.house=="number"?t.house:""}</td>
|
|
2156
|
+
<td>${t.nakshatra??""}</td>
|
|
2157
|
+
<td>${t.starLord??""}</td>
|
|
2158
|
+
<td>${t.subLord??""}</td>
|
|
2159
|
+
<td>${t.subSubLord??""}</td>
|
|
2160
|
+
<td class="num">${typeof t.kpNumber=="number"?t.kpNumber:""}</td>
|
|
1921
2161
|
</tr>`)}
|
|
1922
2162
|
</tbody>
|
|
1923
|
-
</table>`:
|
|
2163
|
+
</table>`:s`<p class="roxy-empty" role="status">No planets</p>`}renderCusps(){let e=this.data?.cusps??[];return e.length?s`<table role="table" aria-label="KP Placidus cusps">
|
|
1924
2164
|
<thead>
|
|
1925
2165
|
<tr>
|
|
1926
2166
|
<th scope="col">House</th>
|
|
@@ -1934,18 +2174,18 @@
|
|
|
1934
2174
|
</tr>
|
|
1935
2175
|
</thead>
|
|
1936
2176
|
<tbody>
|
|
1937
|
-
${e.map(
|
|
1938
|
-
<td class="body num">${
|
|
1939
|
-
<td>${
|
|
1940
|
-
<td>${
|
|
1941
|
-
<td>${
|
|
1942
|
-
<td>${
|
|
1943
|
-
<td>${
|
|
1944
|
-
<td>${
|
|
1945
|
-
<td class="num">${typeof
|
|
2177
|
+
${e.map(t=>s`<tr>
|
|
2178
|
+
<td class="body num">${t.house}</td>
|
|
2179
|
+
<td>${t.sign??""}</td>
|
|
2180
|
+
<td>${t.signLord??""}</td>
|
|
2181
|
+
<td>${t.nakshatra??""}</td>
|
|
2182
|
+
<td>${t.starLord??""}</td>
|
|
2183
|
+
<td>${t.subLord??""}</td>
|
|
2184
|
+
<td>${t.subSubLord??""}</td>
|
|
2185
|
+
<td class="num">${typeof t.kpNumber=="number"?t.kpNumber:""}</td>
|
|
1946
2186
|
</tr>`)}
|
|
1947
2187
|
</tbody>
|
|
1948
|
-
</table>`:
|
|
2188
|
+
</table>`:s`<p class="roxy-empty" role="status">No cusps</p>`}};te.styles=[v,f`
|
|
1949
2189
|
.wrap {
|
|
1950
2190
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
1951
2191
|
border-radius: var(--roxy-radius-md, 8px);
|
|
@@ -2035,14 +2275,14 @@
|
|
|
2035
2275
|
.num {
|
|
2036
2276
|
font-variant-numeric: tabular-nums;
|
|
2037
2277
|
}
|
|
2038
|
-
`],p([
|
|
2278
|
+
`],p([y({attribute:!1})],te.prototype,"data",2),p([z()],te.prototype,"activeTab",2),te=p([b("roxy-kp-chart")],te);var he=class extends x{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No KP data</div>`;let e=this.data.planets??[];return s`<div
|
|
2039
2279
|
class="wrap"
|
|
2040
2280
|
aria-label="KP planets table"
|
|
2041
2281
|
tabindex="0"
|
|
2042
2282
|
>
|
|
2043
2283
|
<header class="head">
|
|
2044
2284
|
<h2 class="title">KP planets</h2>
|
|
2045
|
-
${typeof this.data.ayanamsa=="number"?
|
|
2285
|
+
${typeof this.data.ayanamsa=="number"?s`<span class="ayanamsa">Ayanamsa: ${A(this.data.ayanamsa,2)}°</span>`:l}
|
|
2046
2286
|
</header>
|
|
2047
2287
|
<table role="table">
|
|
2048
2288
|
<thead>
|
|
@@ -2058,22 +2298,22 @@
|
|
|
2058
2298
|
</tr>
|
|
2059
2299
|
</thead>
|
|
2060
2300
|
<tbody>
|
|
2061
|
-
${e.map(
|
|
2301
|
+
${e.map(t=>s`<tr>
|
|
2062
2302
|
<td class="planet">
|
|
2063
|
-
${
|
|
2064
|
-
${
|
|
2303
|
+
${t.planet}
|
|
2304
|
+
${t.retrograde?s`<span class="retro">R</span>`:l}
|
|
2065
2305
|
</td>
|
|
2066
|
-
<td>${
|
|
2067
|
-
<td>${
|
|
2068
|
-
<td>${
|
|
2069
|
-
<td>${
|
|
2070
|
-
<td>${
|
|
2071
|
-
<td>${
|
|
2072
|
-
<td>${
|
|
2306
|
+
<td>${t.sign??""}</td>
|
|
2307
|
+
<td>${t.signLord??""}</td>
|
|
2308
|
+
<td>${t.nakshatra??""}</td>
|
|
2309
|
+
<td>${t.nakshatraLord??""}</td>
|
|
2310
|
+
<td>${t.subLord??""}</td>
|
|
2311
|
+
<td>${t.subSubLord??""}</td>
|
|
2312
|
+
<td>${t.kpNumber??""}</td>
|
|
2073
2313
|
</tr>`)}
|
|
2074
2314
|
</tbody>
|
|
2075
2315
|
</table>
|
|
2076
|
-
</div>`}};
|
|
2316
|
+
</div>`}};he.styles=[v,f`
|
|
2077
2317
|
.wrap {
|
|
2078
2318
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
2079
2319
|
border-radius: var(--roxy-radius-md, 8px);
|
|
@@ -2132,10 +2372,10 @@
|
|
|
2132
2372
|
font-size: var(--roxy-text-xs, 0.75rem);
|
|
2133
2373
|
margin-left: 4px;
|
|
2134
2374
|
}
|
|
2135
|
-
`],p([
|
|
2375
|
+
`],p([y({attribute:!1})],he.prototype,"data",2),he=p([b("roxy-kp-planets-table")],he);var ge=class extends x{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No ruling planets data</div>`;let e=this.data,t=e.significators??[];return s`<div class="wrap" aria-label="KP ruling planets">
|
|
2136
2376
|
<header>
|
|
2137
2377
|
<h2 class="title">KP ruling planets</h2>
|
|
2138
|
-
${e.dayLord?
|
|
2378
|
+
${e.dayLord?s`<div class="day-lord">Day lord: <strong>${e.dayLord}</strong></div>`:l}
|
|
2139
2379
|
</header>
|
|
2140
2380
|
|
|
2141
2381
|
<div class="groups">
|
|
@@ -2159,12 +2399,12 @@
|
|
|
2159
2399
|
</div>
|
|
2160
2400
|
</div>
|
|
2161
2401
|
|
|
2162
|
-
${e.rulingPlanets?.length?
|
|
2402
|
+
${e.rulingPlanets?.length?s`<div class="rp-list" role="list" aria-label="Ruling planets by strength">
|
|
2163
2403
|
<span class="rp-label">Ruling planets</span>
|
|
2164
|
-
${e.rulingPlanets.map((
|
|
2165
|
-
</div>`:
|
|
2404
|
+
${e.rulingPlanets.map((r,o)=>s`<span class="rp" role="listitem"><span class="rank">${o+1}</span> ${r}</span>`)}
|
|
2405
|
+
</div>`:l}
|
|
2166
2406
|
|
|
2167
|
-
${
|
|
2407
|
+
${t.length?s`<table aria-label="House significators">
|
|
2168
2408
|
<thead>
|
|
2169
2409
|
<tr>
|
|
2170
2410
|
<th scope="col">Planet</th>
|
|
@@ -2172,13 +2412,13 @@
|
|
|
2172
2412
|
</tr>
|
|
2173
2413
|
</thead>
|
|
2174
2414
|
<tbody>
|
|
2175
|
-
${
|
|
2176
|
-
<td>${
|
|
2177
|
-
<td>${(
|
|
2415
|
+
${t.map(r=>s`<tr>
|
|
2416
|
+
<td>${r.planet}</td>
|
|
2417
|
+
<td>${(r.signifies??[]).join(", ")}</td>
|
|
2178
2418
|
</tr>`)}
|
|
2179
2419
|
</tbody>
|
|
2180
|
-
</table>`:
|
|
2181
|
-
</div>`}};
|
|
2420
|
+
</table>`:l}
|
|
2421
|
+
</div>`}};ge.styles=[v,f`
|
|
2182
2422
|
.wrap {
|
|
2183
2423
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
2184
2424
|
border-radius: var(--roxy-radius-md, 8px);
|
|
@@ -2274,7 +2514,7 @@
|
|
|
2274
2514
|
font-size: var(--roxy-text-xs, 0.75rem);
|
|
2275
2515
|
letter-spacing: 0.04em;
|
|
2276
2516
|
}
|
|
2277
|
-
`],p([
|
|
2517
|
+
`],p([y({attribute:!1})],ge.prototype,"data",2),ge=p([b("roxy-kp-ruling-planets")],ge);function lr(n,a){let e,t=((...r)=>{e&&clearTimeout(e),e=setTimeout(()=>{e=void 0,n(...r)},a)});return t.cancel=()=>{e&&(clearTimeout(e),e=void 0)},t}var _=class extends x{constructor(){super(...arguments);this.endpoint="https://roxyapi.com/api/v2/location/search";this.placeholder="Search city";this.defaultValue="";this.query="";this.results=[];this.isOpen=!1;this.isLoading=!1;this.highlight=-1;this.secretKeyWarned=!1;this.debouncedFetch=lr(e=>{this.fetchResults(e)},300);this.onInput=e=>{let t=e.target.value;if(this.query=t,t.length<2){this.results=[],this.isOpen=!1,this.highlight=-1;return}this.debouncedFetch(t)};this.onKeyDown=e=>{if(!this.isOpen||this.results.length===0){e.key==="ArrowDown"&&this.query.length>=2&&(this.fetchResults(this.query),e.preventDefault());return}if(e.key==="ArrowDown")e.preventDefault(),this.highlight=(this.highlight+1)%this.results.length;else if(e.key==="ArrowUp")e.preventDefault(),this.highlight=(this.highlight-1+this.results.length)%this.results.length;else if(e.key==="Enter"){e.preventDefault();let t=this.results[this.highlight]??this.results[0];t&&this.select(t)}else e.key==="Escape"&&(this.isOpen=!1)}}connectedCallback(){super.connectedCallback(),this.query=this.defaultValue,this.clickOutsideHandler=e=>{e.composedPath().includes(this)||(this.isOpen=!1)},document.addEventListener("mousedown",this.clickOutsideHandler)}disconnectedCallback(){super.disconnectedCallback(),this.clickOutsideHandler&&document.removeEventListener("mousedown",this.clickOutsideHandler),this.debouncedFetch.cancel(),this.abortController&&(this.abortController.abort(),this.abortController=void 0)}warnIfSecretKey(){if(this.secretKeyWarned||!this.apiKey||this.apiKey.startsWith("pk_"))return;this.secretKeyWarned=!0;let e="Possible secret key in client-side <roxy-location-search>; use a `pk_` publishable key with origin allowlist instead.";console.warn(e),this.dispatchEvent(new CustomEvent("roxy-validation-error",{detail:{reason:"possible-secret-key",message:e},bubbles:!0,composed:!0}))}async fetchResults(e){this.warnIfSecretKey(),this.abortController&&this.abortController.abort();let t=new AbortController;this.abortController=t,this.isLoading=!0;try{let r=new URL(this.endpoint);r.searchParams.set("q",e),r.searchParams.set("limit","8");let o={Accept:"application/json"};this.apiKey&&this.publishableKey&&console.warn("[roxy-location-search] both api-key and publishable-key set; using publishable-key. Remove api-key from your widget markup.");let i=this.publishableKey??this.apiKey;i&&(o["X-API-Key"]=i);let d=await fetch(r,{headers:o,signal:t.signal});if(!d.ok)throw new Error(`HTTP ${d.status}`);let c=await d.json();if(t.signal.aborted)return;this.results=c.cities??[],this.isOpen=this.results.length>0,this.highlight=this.results.length>0?0:-1}catch(r){if(r?.name==="AbortError")return;this.results=[],this.isOpen=!1}finally{this.abortController===t&&(this.abortController=void 0),t.signal.aborted||(this.isLoading=!1)}}select(e){this.query=`${e.city}${e.province?`, ${e.province}`:""}, ${e.country}`,this.isOpen=!1,this.results=[],this.dispatchEvent(new CustomEvent("roxy-location-select",{detail:e,bubbles:!0,composed:!0}))}render(){return s`<div class="field">
|
|
2278
2518
|
<input
|
|
2279
2519
|
type="text"
|
|
2280
2520
|
role="combobox"
|
|
@@ -2289,33 +2529,33 @@
|
|
|
2289
2529
|
@keydown=${this.onKeyDown}
|
|
2290
2530
|
@focus=${()=>{this.results.length>0&&(this.isOpen=!0)}}
|
|
2291
2531
|
/>
|
|
2292
|
-
${this.isLoading?
|
|
2293
|
-
${this.isOpen?
|
|
2532
|
+
${this.isLoading?s`<span class="spinner" role="status" aria-label="Loading"></span>`:l}
|
|
2533
|
+
${this.isOpen?s`<ul
|
|
2294
2534
|
id="roxy-location-listbox"
|
|
2295
2535
|
class="results"
|
|
2296
2536
|
role="listbox"
|
|
2297
2537
|
>
|
|
2298
|
-
${this.results.length===0?
|
|
2538
|
+
${this.results.length===0?s`<li class="empty" role="status">No cities found</li>`:this.results.map((e,t)=>s`<li role="presentation">
|
|
2299
2539
|
<button
|
|
2300
2540
|
type="button"
|
|
2301
2541
|
class="option"
|
|
2302
2542
|
role="option"
|
|
2303
|
-
id=${`roxy-location-option-${
|
|
2304
|
-
aria-selected=${this.highlight===
|
|
2543
|
+
id=${`roxy-location-option-${t}`}
|
|
2544
|
+
aria-selected=${this.highlight===t?"true":"false"}
|
|
2305
2545
|
@click=${()=>this.select(e)}
|
|
2306
|
-
@mouseenter=${()=>{this.highlight=
|
|
2546
|
+
@mouseenter=${()=>{this.highlight=t}}
|
|
2307
2547
|
>
|
|
2308
2548
|
<span class="city">${e.city}</span>
|
|
2309
2549
|
<span class="where"
|
|
2310
|
-
>${e.province?
|
|
2550
|
+
>${e.province?s`${e.province}, `:""}${e.country}</span
|
|
2311
2551
|
>
|
|
2312
2552
|
<span class="tz"
|
|
2313
2553
|
>UTC${e.utcOffset>=0?"+":""}${e.utcOffset}</span
|
|
2314
2554
|
>
|
|
2315
2555
|
</button>
|
|
2316
2556
|
</li>`)}
|
|
2317
|
-
</ul>`:
|
|
2318
|
-
</div>`}};
|
|
2557
|
+
</ul>`:l}
|
|
2558
|
+
</div>`}};_.styles=[v,f`
|
|
2319
2559
|
:host {
|
|
2320
2560
|
display: block;
|
|
2321
2561
|
position: relative;
|
|
@@ -2416,49 +2656,49 @@
|
|
|
2416
2656
|
color: var(--roxy-muted, #71717a);
|
|
2417
2657
|
font-size: var(--roxy-text-sm, 0.875rem);
|
|
2418
2658
|
}
|
|
2419
|
-
`],p([
|
|
2659
|
+
`],p([y({type:String,attribute:"api-key"})],_.prototype,"apiKey",2),p([y({type:String,attribute:"publishable-key"})],_.prototype,"publishableKey",2),p([y({type:String})],_.prototype,"endpoint",2),p([y({type:String})],_.prototype,"placeholder",2),p([y({type:String,attribute:"default-value"})],_.prototype,"defaultValue",2),p([z()],_.prototype,"query",2),p([z()],_.prototype,"results",2),p([z()],_.prototype,"isOpen",2),p([z()],_.prototype,"isLoading",2),p([z()],_.prototype,"highlight",2),_=p([b("roxy-location-search")],_);var re=class extends x{constructor(){super(...arguments);this.data=null;this.mode="current"}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No moon phase data</div>`;let t="phases"in e?e.phases:"calendar"in e?e.calendar:[];if(this.mode!=="current"&&t.length>0){let r="month"in e?e.month:void 0,o="year"in e?e.year:void 0;return s`<article
|
|
2420
2660
|
class="card"
|
|
2421
2661
|
aria-label="Moon phase calendar"
|
|
2422
2662
|
>
|
|
2423
|
-
<h2 class="label">${
|
|
2663
|
+
<h2 class="label">${r??"Moon phases"} ${o??""}</h2>
|
|
2424
2664
|
<div class="list" role="list">
|
|
2425
|
-
${
|
|
2665
|
+
${t.map(i=>this.renderListItem(i))}
|
|
2426
2666
|
</div>
|
|
2427
|
-
</article>`}return"phase"in e?this.renderSingle(e):
|
|
2667
|
+
</article>`}return"phase"in e?this.renderSingle(e):l}renderSingle(e){let t=dr(e.phase);return s`<article class="card" aria-label="Current moon phase">
|
|
2428
2668
|
<div class="hero">
|
|
2429
|
-
<span class="emoji" aria-hidden="true">${
|
|
2669
|
+
<span class="emoji" aria-hidden="true">${t}</span>
|
|
2430
2670
|
<div>
|
|
2431
2671
|
<h2 class="label">${e.phase??"Moon"}</h2>
|
|
2432
|
-
${e.date?
|
|
2672
|
+
${e.date?s`<div class="date">${e.date}</div>`:l}
|
|
2433
2673
|
</div>
|
|
2434
2674
|
</div>
|
|
2435
2675
|
<div class="stats">
|
|
2436
|
-
${typeof e.illumination=="number"?
|
|
2676
|
+
${typeof e.illumination=="number"?s`<div>
|
|
2437
2677
|
<span>Illumination</span>
|
|
2438
|
-
<strong>${
|
|
2439
|
-
</div>`:
|
|
2440
|
-
${typeof e.age=="number"?
|
|
2678
|
+
<strong>${oa(e.illumination)}</strong>
|
|
2679
|
+
</div>`:l}
|
|
2680
|
+
${typeof e.age=="number"?s`<div>
|
|
2441
2681
|
<span>Age</span>
|
|
2442
|
-
<strong>${
|
|
2443
|
-
</div>`:
|
|
2444
|
-
${e.sign?
|
|
2682
|
+
<strong>${A(e.age,1)} days</strong>
|
|
2683
|
+
</div>`:l}
|
|
2684
|
+
${e.sign?s`<div>
|
|
2445
2685
|
<span>Sign</span>
|
|
2446
2686
|
<strong>${e.sign}</strong>
|
|
2447
|
-
</div>`:
|
|
2448
|
-
${typeof e.distance=="number"?
|
|
2687
|
+
</div>`:l}
|
|
2688
|
+
${typeof e.distance=="number"?s`<div>
|
|
2449
2689
|
<span>Distance</span>
|
|
2450
2690
|
<strong>${(e.distance/1e3).toFixed(0)}k km</strong>
|
|
2451
|
-
</div>`:
|
|
2691
|
+
</div>`:l}
|
|
2452
2692
|
</div>
|
|
2453
|
-
${e.meaning?.description?
|
|
2454
|
-
${e.meaning?.keywords?.length?
|
|
2455
|
-
${e.meaning.keywords.map(
|
|
2456
|
-
</div>`:
|
|
2457
|
-
</article>`}renderListItem(e){let
|
|
2458
|
-
<span aria-hidden="true">${
|
|
2693
|
+
${e.meaning?.description?s`<p class="meaning">${e.meaning.description}</p>`:l}
|
|
2694
|
+
${e.meaning?.keywords?.length?s`<div class="keywords">
|
|
2695
|
+
${e.meaning.keywords.map(r=>s`<span>${r}</span>`)}
|
|
2696
|
+
</div>`:l}
|
|
2697
|
+
</article>`}renderListItem(e){let t=dr(e.phase);return s`<div class="list-item" role="listitem">
|
|
2698
|
+
<span aria-hidden="true">${t}</span>
|
|
2459
2699
|
<span>${e.phase}</span>
|
|
2460
2700
|
<span>${e.date??""}</span>
|
|
2461
|
-
</div>`}};
|
|
2701
|
+
</div>`}};re.styles=[v,f`
|
|
2462
2702
|
.card {
|
|
2463
2703
|
background: var(--roxy-bg, #fff);
|
|
2464
2704
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -2540,33 +2780,33 @@
|
|
|
2540
2780
|
.list-item:last-child {
|
|
2541
2781
|
border-bottom: none;
|
|
2542
2782
|
}
|
|
2543
|
-
`],p([
|
|
2783
|
+
`],p([y({attribute:!1})],re.prototype,"data",2),p([y({type:String,reflect:!0})],re.prototype,"mode",2),re=p([b("roxy-moon-phase")],re);function dr(n){return n?er[n.toLowerCase()]??"\u{1F319}":"\u{1F319}"}function oa(n){let a=n<=1?n*100:n;return`${Math.round(a)}%`}var ye=class extends x{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No nakshatra data</div>`;let e=this.data,t=e.remedies;return s`<article class="wrap" aria-label=${`Nakshatra ${e.name}`}>
|
|
2544
2784
|
<header class="head">
|
|
2545
2785
|
<h2 class="name">${e.name}</h2>
|
|
2546
|
-
${typeof e.number=="number"?
|
|
2547
|
-
${e.range?
|
|
2786
|
+
${typeof e.number=="number"?s`<span class="number">Nakshatra ${e.number} of 27</span>`:l}
|
|
2787
|
+
${e.range?s`<span class="range">${e.range}</span>`:l}
|
|
2548
2788
|
</header>
|
|
2549
2789
|
|
|
2550
2790
|
<dl class="facts">
|
|
2551
|
-
${e.lord?
|
|
2552
|
-
${e.deity?
|
|
2553
|
-
${e.symbol?
|
|
2791
|
+
${e.lord?s`<div class="fact"><dt>Lord</dt><dd>${e.lord}</dd></div>`:l}
|
|
2792
|
+
${e.deity?s`<div class="fact"><dt>Deity</dt><dd>${e.deity}</dd></div>`:l}
|
|
2793
|
+
${e.symbol?s`<div class="fact"><dt>Symbol</dt><dd>${e.symbol}</dd></div>`:l}
|
|
2554
2794
|
</dl>
|
|
2555
2795
|
|
|
2556
|
-
${e.characteristics?
|
|
2796
|
+
${e.characteristics?s`<div class="section">
|
|
2557
2797
|
<h3>Characteristics</h3>
|
|
2558
2798
|
<p>${e.characteristics}</p>
|
|
2559
|
-
</div>`:
|
|
2799
|
+
</div>`:l}
|
|
2560
2800
|
|
|
2561
|
-
${
|
|
2801
|
+
${t?s`<div class="section">
|
|
2562
2802
|
<h3>Remedies</h3>
|
|
2563
2803
|
<div class="remedies">
|
|
2564
|
-
${
|
|
2565
|
-
${
|
|
2566
|
-
${
|
|
2804
|
+
${t.mantras?s`<div class="remedy"><strong>Mantras:</strong> ${t.mantras}</div>`:l}
|
|
2805
|
+
${t.gemstones?s`<div class="remedy"><strong>Gemstones:</strong> ${t.gemstones}</div>`:l}
|
|
2806
|
+
${t.rituals?s`<div class="remedy"><strong>Rituals:</strong> ${t.rituals}</div>`:l}
|
|
2567
2807
|
</div>
|
|
2568
|
-
</div>`:
|
|
2569
|
-
</article>`}};
|
|
2808
|
+
</div>`:l}
|
|
2809
|
+
</article>`}};ye.styles=[v,f`
|
|
2570
2810
|
.wrap {
|
|
2571
2811
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
2572
2812
|
border-radius: var(--roxy-radius-md, 8px);
|
|
@@ -2642,12 +2882,12 @@
|
|
|
2642
2882
|
color: var(--roxy-muted, #71717a);
|
|
2643
2883
|
font-weight: var(--roxy-weight-bold, 600);
|
|
2644
2884
|
}
|
|
2645
|
-
`],p([
|
|
2885
|
+
`],p([y({attribute:!1})],ye.prototype,"data",2),ye=p([b("roxy-nakshatra-card")],ye);var Tt=420,S=Tt/2,Ne=164,Pt=146,Ve=120,ze=96,na=178,ia=196,K=class extends x{constructor(){super(...arguments);this.data=null;this.houseSystem="placidus";this.view="wheel"}getPlanets(){return this.data?.planets??[]}getAscendant(){return this.data?.ascendant?.longitude??0}getMidheaven(){let e=this.data?.midheaven?.longitude;return typeof e=="number"?e:null}toAngle(e){return 180+this.getAscendant()-e}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.getPlanets(),t=this.data.aspects??[],r=this.view;return s`<div class="wrap">
|
|
2646
2886
|
<header>
|
|
2647
2887
|
<h2 class="title">Natal chart</h2>
|
|
2648
|
-
${this.data.birthDetails?
|
|
2888
|
+
${this.data.birthDetails?s`<div class="meta">
|
|
2649
2889
|
${[this.data.birthDetails.date,this.data.birthDetails.time].filter(Boolean).join(" \xB7 ")}
|
|
2650
|
-
</div>`:
|
|
2890
|
+
</div>`:l}
|
|
2651
2891
|
</header>
|
|
2652
2892
|
<div
|
|
2653
2893
|
class="tablist"
|
|
@@ -2655,32 +2895,32 @@
|
|
|
2655
2895
|
aria-label="Natal chart views"
|
|
2656
2896
|
@keydown=${this.onTabKeyDown}
|
|
2657
2897
|
>
|
|
2658
|
-
${["wheel","grid"].map(o=>
|
|
2898
|
+
${["wheel","grid"].map(o=>s`<button
|
|
2659
2899
|
class="tab"
|
|
2660
2900
|
role="tab"
|
|
2661
2901
|
id="tab-${o}"
|
|
2662
|
-
aria-selected=${
|
|
2902
|
+
aria-selected=${r===o?"true":"false"}
|
|
2663
2903
|
aria-controls="panel-${o}"
|
|
2664
|
-
tabindex=${
|
|
2904
|
+
tabindex=${r===o?"0":"-1"}
|
|
2665
2905
|
@click=${()=>{this.view=o}}
|
|
2666
2906
|
>
|
|
2667
2907
|
${o==="wheel"?"Wheel":"Aspect grid"}
|
|
2668
2908
|
</button>`)}
|
|
2669
2909
|
</div>
|
|
2670
|
-
<div id="panel-${
|
|
2671
|
-
${
|
|
2910
|
+
<div id="panel-${r}" role="tabpanel" aria-labelledby="tab-${r}">
|
|
2911
|
+
${r==="wheel"?this.renderWheel(e,t):this.renderAspectGrid(e,t)}
|
|
2672
2912
|
</div>
|
|
2673
2913
|
<div class="legend">
|
|
2674
2914
|
<span>${e.length} planets</span>
|
|
2675
|
-
<span>${
|
|
2676
|
-
${this.data.houseSystem?
|
|
2915
|
+
<span>${t.length} aspects</span>
|
|
2916
|
+
${this.data.houseSystem?s`<span>${this.data.houseSystem} houses</span>`:l}
|
|
2677
2917
|
<span><span class="legend-swatch" style="background: var(--roxy-success)"></span>harmonious</span>
|
|
2678
2918
|
<span><span class="legend-swatch" style="background: var(--roxy-danger)"></span>challenging</span>
|
|
2679
2919
|
</div>
|
|
2680
2920
|
${this.renderDetails()}
|
|
2681
2921
|
${this.renderInterpretations()}
|
|
2682
|
-
</div>`}onTabKeyDown(e){if(e.key!=="ArrowRight"&&e.key!=="ArrowLeft")return;e.preventDefault(),this.view=this.view==="wheel"?"grid":"wheel";let
|
|
2683
|
-
viewBox="0 0 ${
|
|
2922
|
+
</div>`}onTabKeyDown(e){if(e.key!=="ArrowRight"&&e.key!=="ArrowLeft")return;e.preventDefault(),this.view=this.view==="wheel"?"grid":"wheel";let t=this.view;requestAnimationFrame(()=>{this.shadowRoot?.querySelector(`#tab-${t}`)?.focus()})}renderWheel(e,t){return s`<svg
|
|
2923
|
+
viewBox="0 0 ${Tt} ${Tt}"
|
|
2684
2924
|
role="img"
|
|
2685
2925
|
aria-label="Natal chart wheel with twelve houses, planets, and aspects"
|
|
2686
2926
|
>
|
|
@@ -2689,86 +2929,87 @@
|
|
|
2689
2929
|
Twelve zodiac sign segments around a circular wheel. Planet glyphs are
|
|
2690
2930
|
placed at their ecliptic longitudes. Aspect lines connect related planets.
|
|
2691
2931
|
</desc>
|
|
2692
|
-
<circle class="wheel-line" cx=${
|
|
2693
|
-
<circle class="wheel-line" cx=${
|
|
2694
|
-
<circle class="wheel-line" cx=${
|
|
2695
|
-
<circle class="wheel-line" cx=${
|
|
2932
|
+
<circle class="wheel-line" cx=${S} cy=${S} r=${Ne} stroke-width="1.5" />
|
|
2933
|
+
<circle class="wheel-line" cx=${S} cy=${S} r=${Pt-14} stroke-width="0.8" />
|
|
2934
|
+
<circle class="wheel-line" cx=${S} cy=${S} r=${Ve} stroke-width="1" />
|
|
2935
|
+
<circle class="wheel-line" cx=${S} cy=${S} r=${ze-16} stroke-width="0.5" />
|
|
2696
2936
|
${this.renderTicks()} ${this.renderSpokes()} ${this.renderSigns()}
|
|
2697
2937
|
${this.renderHouseNumbers()} ${this.renderCuspDegrees()}
|
|
2698
|
-
${this.renderAspects(e,
|
|
2938
|
+
${this.renderAspects(e,t)} ${this.renderPlanets(e)}
|
|
2699
2939
|
${this.renderAngles()}
|
|
2700
|
-
</svg>`}renderAspectGrid(e,
|
|
2940
|
+
</svg>`}renderAspectGrid(e,t){let r=e.map(i=>E(i.name)),o=new Map;for(let i of t){let d=[E(i.planet1),E(i.planet2)].sort().join("|");o.set(d,i)}return r.length===0?s`<p class="roxy-empty" role="status">No planets to grid</p>`:s`<div class="grid-scroll">
|
|
2701
2941
|
<table class="aspect-grid" aria-label="Planet by planet aspect grid">
|
|
2702
2942
|
<thead>
|
|
2703
2943
|
<tr>
|
|
2704
2944
|
<th></th>
|
|
2705
|
-
${
|
|
2945
|
+
${r.slice(0,-1).map(i=>{let d=R[i]??i.slice(0,2);return s`<th scope="col" title=${i}>${d}</th>`})}
|
|
2706
2946
|
</tr>
|
|
2707
2947
|
</thead>
|
|
2708
2948
|
<tbody>
|
|
2709
|
-
${
|
|
2710
|
-
<th scope="row" title=${
|
|
2711
|
-
${
|
|
2712
|
-
<span class="asp">${
|
|
2949
|
+
${r.slice(1).map((i,d)=>{let c=R[i]??i.slice(0,2);return s`<tr>
|
|
2950
|
+
<th scope="row" title=${i}>${c}</th>
|
|
2951
|
+
${r.slice(0,d+1).map(m=>{let g=o.get([i,m].sort().join("|"));if(!g)return s`<td class="empty"></td>`;let h=Re(g),u=kt[h]??kt[h.replace(/-/g,"")]??h.slice(0,3),k=qe[h]??"aspect-other",$=A(g.orb,1);return s`<td class=${`cell ${k}`} title=${`${i} ${h} ${m}${$?` (orb ${$}\xB0)`:""}`}>
|
|
2952
|
+
<span class="asp">${u}</span>
|
|
2713
2953
|
</td>`})}
|
|
2714
|
-
${
|
|
2954
|
+
${r.slice(d+1,-1).map(()=>s`<td class="empty"></td>`)}
|
|
2715
2955
|
</tr>`})}
|
|
2716
2956
|
</tbody>
|
|
2717
2957
|
</table>
|
|
2718
|
-
</div>`}renderAngles(){let e=this.getAscendant(),
|
|
2958
|
+
</div>`}renderAngles(){let e=this.getAscendant(),t=this.getMidheaven(),r=[this.renderAngleMark(e,"ASC"),this.renderAngleMark(Et(e),"DSC")];t!==null&&(r.push(this.renderAngleMark(t,"MC")),r.push(this.renderAngleMark(Et(t),"IC")));let o=this.data?.partOfFortune?.longitude;typeof o=="number"&&r.push(this.renderAngleMark(I(o),"PoF"));let i=this.data?.vertex?.longitude;return typeof i=="number"&&r.push(this.renderAngleMark(I(i),"Vtx")),r}renderAngleMark(e,t){let r=this.toAngle(e),o=L(S,S,Ne,r),i=L(S,S,na,r),d=L(S,S,ia,r);return w`
|
|
2719
2959
|
<g>
|
|
2720
|
-
<line class="angle-tick" x1=${o.x} y1=${o.y} x2=${
|
|
2721
|
-
<text class="angle-marker" x=${d.x} y=${d.y} text-anchor="middle" dominant-baseline="central">${
|
|
2960
|
+
<line class="angle-tick" x1=${o.x} y1=${o.y} x2=${i.x} y2=${i.y} />
|
|
2961
|
+
<text class="angle-marker" x=${d.x} y=${d.y} text-anchor="middle" dominant-baseline="central">${t}</text>
|
|
2722
2962
|
</g>
|
|
2723
|
-
`}renderSpokes(){let e=this.data?.houses??[];return(e.length===12?e.map(
|
|
2724
|
-
|
|
2725
|
-
<text class="planet-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
${e.
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
<span class="pill pill--
|
|
2734
|
-
<span class="pill pill--
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2963
|
+
`}renderSpokes(){let e=this.data?.houses??[];return(e.length===12?e.map(r=>r.longitude):Array.from({length:12},(r,o)=>this.getAscendant()+o*30)).map(r=>{let o=this.toAngle(r),i=L(S,S,Ve,o),d=L(S,S,Ne,o);return w`<line class="wheel-line" x1=${i.x} y1=${i.y} x2=${d.x} y2=${d.y} stroke-width="0.8" />`})}renderSigns(){return M.map((e,t)=>{let r=this.toAngle(t*30+15),o=L(S,S,Pt,r);return w`<text class="sign-glyph" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${G[e]}</text>`})}renderHouseNumbers(){let e=this.data?.houses??[];if(e.length===12)return e.map((r,o)=>{let i=e[(o+1)%12],d=or(r.longitude,i?i.longitude:r.longitude+30),c=L(S,S,Ve-12,this.toAngle(d));return w`<text class="house-num" x=${c.x} y=${c.y} text-anchor="middle" dominant-baseline="central">${r.number}</text>`});let t=Math.floor(this.getAscendant()/30);return Array.from({length:12},(r,o)=>{let i=this.toAngle(o*30+15),d=L(S,S,Ve-12,i),c=(o-t+12)%12+1;return w`<text class="house-num" x=${d.x} y=${d.y} text-anchor="middle" dominant-baseline="central">${c}</text>`})}renderTicks(){let e=[];for(let t=0;t<360;t+=5){let r=this.toAngle(t),o=t%30===0,i=o?Pt-14:Ne-5,d=L(S,S,i,r),c=L(S,S,Ne,r);e.push(w`<line class=${o?"tick tick-major":"tick"} x1=${d.x} y1=${d.y} x2=${c.x} y2=${c.y} stroke-width=${o?1:.5} />`)}return e}renderCuspDegrees(){let e=this.data?.houses??[];return e.length!==12?l:e.map(t=>{let r=this.toAngle(t.longitude),o=L(S,S,Ve+9,r),i=B(t.longitude);return w`<text class="cusp-deg" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${i.degree}°${String(i.minute).padStart(2,"0")}'</text>`})}renderPlanets(e){let r=e.filter(i=>Number.isFinite(i.longitude)).map(i=>({p:i,trueLon:I(i.longitude),displayLon:I(i.longitude)})).sort((i,d)=>i.trueLon-d.trueLon);for(let i=1;i<r.length;i++){let d=r[i-1],c=r[i];if(!d||!c)continue;let m=d.displayLon+7;c.displayLon<m&&(c.displayLon=m)}let o=r[r.length-1];if(o&&o.displayLon>360){let i=o.displayLon-360;for(let d of r)d.displayLon-=i}return r.map(({p:i,trueLon:d,displayLon:c})=>{let m=this.toAngle(d),g=this.toAngle(c),h=L(S,S,ze,g),u=L(S,S,ze-13,g),k=L(S,S,Ne-4,m),$=L(S,S,ze+8,g),$e=R[E(i.name)]??i.name.slice(0,2),Ye=B(i.longitude),_e=i.isRetrograde===!0,Ue=`${Ye.degree}\xB0${String(Ye.minute).padStart(2,"0")}'`,Fe=Math.abs(c-d)>.5;return w`<g>
|
|
2964
|
+
${Fe?w`<line class="planet-leader" x1=${k.x} y1=${k.y} x2=${$.x} y2=${$.y} />`:l}
|
|
2965
|
+
<text class="planet-glyph" x=${h.x} y=${h.y} text-anchor="middle" dominant-baseline="central"><title>${i.name}${_e?" retrograde":""} - ${Ue} ${i.sign??""}</title>${$e}</text>
|
|
2966
|
+
<text class="planet-deg" x=${u.x} y=${u.y} text-anchor="middle" dominant-baseline="central">${Ue}${_e?w`<tspan class="retro"> ℞</tspan>`:l}</text>
|
|
2967
|
+
</g>`})}renderDetails(){let e=this.data?.summary,t=this.data?.aspectsInterpretation;if(!e&&!t)return l;let r=e?.retrogradePlanets??[];return s`<div class="details">
|
|
2968
|
+
${e?.dominantElement||e?.dominantModality?s`<div class="pill-row">
|
|
2969
|
+
${e.dominantElement?s`<span class="pill">Dominant element: ${e.dominantElement}</span>`:l}
|
|
2970
|
+
${e.dominantModality?s`<span class="pill">Dominant modality: ${e.dominantModality}</span>`:l}
|
|
2971
|
+
</div>`:l}
|
|
2972
|
+
${t?s`<div class="pill-row">
|
|
2973
|
+
<span class="pill pill--success">Harmonious ${t.harmonious}</span>
|
|
2974
|
+
<span class="pill pill--danger">Challenging ${t.challenging}</span>
|
|
2975
|
+
<span class="pill pill--muted">Neutral ${t.neutral}</span>
|
|
2976
|
+
</div>`:l}
|
|
2977
|
+
${r.length>0?s`<div class="pill-row">
|
|
2978
|
+
${r.map(o=>{let i=R[o]??o.slice(0,2);return s`<span class="pill pill--muted">${i} ${o} R</span>`})}
|
|
2979
|
+
</div>`:l}
|
|
2980
|
+
${t?.summary?s`<p class="summary">${t.summary}</p>`:l}
|
|
2740
2981
|
${this.renderElementModalityGrid()}
|
|
2741
|
-
</div>`}renderElementModalityGrid(){let e=this.getPlanets();if(e.length===0)return
|
|
2982
|
+
</div>`}renderElementModalityGrid(){let e=this.getPlanets();if(e.length===0)return l;let t=["Fire","Earth","Air","Water"],r=["Cardinal","Fixed","Mutable"],o=M,i={};for(let d of t)i[d]={Cardinal:[],Fixed:[],Mutable:[]};for(let d of e){let c=o.indexOf(E(d.sign??""));if(c<0)continue;let m=t[c%4],g=r[c%3],h=R[E(d.name)]??E(d.name).slice(0,2);i[m]?.[g]?.push(h)}return s`<table class="em-grid" aria-label="Element and modality distribution">
|
|
2742
2983
|
<thead>
|
|
2743
2984
|
<tr>
|
|
2744
2985
|
<th></th>
|
|
2745
|
-
${
|
|
2986
|
+
${r.map(d=>s`<th scope="col">${d.slice(0,3)}</th>`)}
|
|
2746
2987
|
<th scope="col">Total</th>
|
|
2747
2988
|
</tr>
|
|
2748
2989
|
</thead>
|
|
2749
2990
|
<tbody>
|
|
2750
|
-
${
|
|
2991
|
+
${t.map(d=>{let c=r.reduce((m,g)=>m+(i[d]?.[g]?.length??0),0);return s`<tr>
|
|
2751
2992
|
<th scope="row">${d}</th>
|
|
2752
|
-
${
|
|
2993
|
+
${r.map(m=>s`<td>${(i[d]?.[m]??[]).join(" ")}</td>`)}
|
|
2753
2994
|
<td class="em-total">${c}</td>
|
|
2754
2995
|
</tr>`})}
|
|
2755
2996
|
<tr>
|
|
2756
2997
|
<th scope="row">Total</th>
|
|
2757
|
-
${
|
|
2998
|
+
${r.map(d=>s`<td class="em-total">${t.reduce((c,m)=>c+(i[m]?.[d]?.length??0),0)}</td>`)}
|
|
2758
2999
|
<td class="em-total">${e.length}</td>
|
|
2759
3000
|
</tr>
|
|
2760
3001
|
</tbody>
|
|
2761
|
-
</table>`}renderInterpretations(){let e=this.getPlanets().filter(
|
|
3002
|
+
</table>`}renderInterpretations(){let e=this.getPlanets().filter(t=>t.interpretation);return e.length===0?l:s`<section class="interpretations">
|
|
2762
3003
|
<h3>Planet readings</h3>
|
|
2763
|
-
${e.map((r
|
|
2764
|
-
<summary>${
|
|
3004
|
+
${e.map((t,r)=>{let o=t.interpretation,i=R[E(t.name)]??"",d=A(t.degree??0,1);return s`<details class="interp-card" name="natal-planet-readings" ?open=${r===0}>
|
|
3005
|
+
<summary>${i} ${t.name} <small>${t.sign??""} ${d}</small></summary>
|
|
2765
3006
|
<div class="interp-body">
|
|
2766
|
-
${o.summary?
|
|
2767
|
-
${o.detailed?
|
|
2768
|
-
${o.keywords?.length?
|
|
3007
|
+
${o.summary?s`<p class="interp-summary">${o.summary}</p>`:l}
|
|
3008
|
+
${o.detailed?s`<p class="interp-detail">${o.detailed}</p>`:l}
|
|
3009
|
+
${o.keywords?.length?s`<div class="interp-keywords">${o.keywords.map(c=>s`<span class="kw">${c}</span>`)}</div>`:l}
|
|
2769
3010
|
</div>
|
|
2770
3011
|
</details>`})}
|
|
2771
|
-
</section>`}renderAspects(e,
|
|
3012
|
+
</section>`}renderAspects(e,t){let r=new Map;for(let o of e){if(typeof o.longitude!="number")continue;let i=E(o.name);i&&r.set(i,o.longitude)}return t.map(o=>{let i=r.get(E(o.planet1)),d=r.get(E(o.planet2));if(i===void 0||d===void 0)return l;let c=L(S,S,ze-18,this.toAngle(i)),m=L(S,S,ze-18,this.toAngle(d)),g=Re(o),h=qe[g]??"aspect-other",u=A(o.orb,1);return w`<line class=${`aspect ${h}`} x1=${c.x} y1=${c.y} x2=${m.x} y2=${m.y}><title>${o.planet1} ${g||""} ${o.planet2}${u?` (orb ${u}\xB0)`:""}</title></line>`})}};K.styles=[v,f`
|
|
2772
3013
|
.wrap {
|
|
2773
3014
|
width: 100%;
|
|
2774
3015
|
display: grid;
|
|
@@ -2790,7 +3031,8 @@
|
|
|
2790
3031
|
svg {
|
|
2791
3032
|
display: block;
|
|
2792
3033
|
width: 100%;
|
|
2793
|
-
max-width:
|
|
3034
|
+
max-width: 560px;
|
|
3035
|
+
aspect-ratio: 1 / 1;
|
|
2794
3036
|
height: auto;
|
|
2795
3037
|
margin: 0 auto;
|
|
2796
3038
|
}
|
|
@@ -2819,10 +3061,33 @@
|
|
|
2819
3061
|
font-family: var(--roxy-font-sans);
|
|
2820
3062
|
}
|
|
2821
3063
|
|
|
3064
|
+
/* Below 480px the chart container shrinks to ~320px on phones.
|
|
3065
|
+
* Bump in-SVG text up proportionally so the 7px degree band
|
|
3066
|
+
* does not collapse below ~6px on screen.
|
|
3067
|
+
*/
|
|
3068
|
+
@container (max-width: 480px) {
|
|
3069
|
+
.sign-glyph,
|
|
3070
|
+
.planet-glyph {
|
|
3071
|
+
font-size: 18px;
|
|
3072
|
+
}
|
|
3073
|
+
.planet-deg {
|
|
3074
|
+
font-size: 10px;
|
|
3075
|
+
}
|
|
3076
|
+
.house-num {
|
|
3077
|
+
font-size: 12px;
|
|
3078
|
+
}
|
|
3079
|
+
}
|
|
3080
|
+
|
|
2822
3081
|
.planet-deg .retro {
|
|
2823
3082
|
fill: var(--roxy-danger, #dc2626);
|
|
2824
3083
|
}
|
|
2825
3084
|
|
|
3085
|
+
.planet-leader {
|
|
3086
|
+
stroke: var(--roxy-accent, #f59e0b);
|
|
3087
|
+
stroke-width: 0.5;
|
|
3088
|
+
opacity: 0.55;
|
|
3089
|
+
}
|
|
3090
|
+
|
|
2826
3091
|
.house-num {
|
|
2827
3092
|
fill: var(--roxy-muted, #71717a);
|
|
2828
3093
|
font-size: 9px;
|
|
@@ -3081,45 +3346,45 @@
|
|
|
3081
3346
|
color: var(--roxy-accent-fg, #b45309);
|
|
3082
3347
|
font-size: var(--roxy-text-xs, 0.75rem);
|
|
3083
3348
|
}
|
|
3084
|
-
`],p([
|
|
3349
|
+
`],p([y({attribute:!1})],K.prototype,"data",2),p([y({type:String,attribute:"house-system",reflect:!0})],K.prototype,"houseSystem",2),p([z()],K.prototype,"view",2),K=p([b("roxy-natal-chart")],K);var ae=class extends x{constructor(){super(...arguments);this.data=null;this.type="life-path"}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No numerology data</div>`;let t=la[this.type]??this.type;return"coreNumbers"in e?this.renderChart(e,t):"personalYear"in e?this.renderPersonalYear(e,t):this.renderNumberCard(e,t)}renderNumberCard(e,t){let r=e.meaning?.keywords??[];return s`<article class="card" aria-label=${t}>
|
|
3085
3350
|
<div class="hero">
|
|
3086
|
-
${typeof e.number=="number"?
|
|
3351
|
+
${typeof e.number=="number"?s`<div class="numeral">${e.number}</div>`:l}
|
|
3087
3352
|
<div>
|
|
3088
|
-
<p class="label">${
|
|
3089
|
-
${e.meaning?.title?
|
|
3353
|
+
<p class="label">${t}</p>
|
|
3354
|
+
${e.meaning?.title?s`<h2 class="title">${e.meaning.title}</h2>`:l}
|
|
3090
3355
|
</div>
|
|
3091
3356
|
</div>
|
|
3092
|
-
${e.meaning?.description?
|
|
3093
|
-
${e.calculation?
|
|
3094
|
-
${
|
|
3095
|
-
${
|
|
3096
|
-
</div>`:
|
|
3097
|
-
${e.hasKarmicDebt&&e.karmicDebtNumber?
|
|
3357
|
+
${e.meaning?.description?s`<p class="meaning">${e.meaning.description}</p>`:l}
|
|
3358
|
+
${e.calculation?s`<pre class="calc">${e.calculation}</pre>`:l}
|
|
3359
|
+
${r.length>0?s`<div class="chips">
|
|
3360
|
+
${r.map(o=>s`<span>${o}</span>`)}
|
|
3361
|
+
</div>`:l}
|
|
3362
|
+
${e.hasKarmicDebt&&e.karmicDebtNumber?s`<div class="karmic">
|
|
3098
3363
|
Karmic debt ${e.karmicDebtNumber}.
|
|
3099
|
-
${
|
|
3100
|
-
</div>`:
|
|
3101
|
-
</article>`}renderPersonalYear(e,
|
|
3364
|
+
${da(e.karmicDebtMeaning)}
|
|
3365
|
+
</div>`:l}
|
|
3366
|
+
</article>`}renderPersonalYear(e,t){return s`<article class="card" aria-label=${t}>
|
|
3102
3367
|
<div class="hero">
|
|
3103
|
-
${typeof e.personalYear=="number"?
|
|
3368
|
+
${typeof e.personalYear=="number"?s`<div class="numeral">${e.personalYear}</div>`:l}
|
|
3104
3369
|
<div>
|
|
3105
|
-
<p class="label">${
|
|
3106
|
-
${e.theme?
|
|
3370
|
+
<p class="label">${t}</p>
|
|
3371
|
+
${e.theme?s`<h2 class="title">${e.theme}</h2>`:l}
|
|
3107
3372
|
</div>
|
|
3108
3373
|
</div>
|
|
3109
|
-
${e.forecast?
|
|
3110
|
-
${e.advice?
|
|
3111
|
-
</article>`}renderChart(e,
|
|
3374
|
+
${e.forecast?s`<p class="meaning">${e.forecast}</p>`:l}
|
|
3375
|
+
${e.advice?s`<p>${e.advice}</p>`:l}
|
|
3376
|
+
</article>`}renderChart(e,t){let r=Object.entries(e.coreNumbers).filter(([,o])=>o!=null);return s`<article class="card" aria-label=${t}>
|
|
3112
3377
|
<div>
|
|
3113
|
-
<p class="label">${
|
|
3114
|
-
${e.profile?.name?
|
|
3378
|
+
<p class="label">${t}</p>
|
|
3379
|
+
${e.profile?.name?s`<h2 class="title">${e.profile.name}</h2>`:l}
|
|
3115
3380
|
</div>
|
|
3116
|
-
${
|
|
3117
|
-
${
|
|
3118
|
-
<span>${
|
|
3119
|
-
<strong>${
|
|
3381
|
+
${r.length>0?s`<div class="cores">
|
|
3382
|
+
${r.map(([o,i])=>s`<div class="item">
|
|
3383
|
+
<span>${ce(o)}</span>
|
|
3384
|
+
<strong>${i.number??""}</strong>
|
|
3120
3385
|
</div>`)}
|
|
3121
|
-
</div>`:
|
|
3122
|
-
</article>`}};
|
|
3386
|
+
</div>`:l}
|
|
3387
|
+
</article>`}};ae.styles=[v,f`
|
|
3123
3388
|
.card {
|
|
3124
3389
|
background: var(--roxy-bg, #fff);
|
|
3125
3390
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -3215,56 +3480,70 @@
|
|
|
3215
3480
|
font-size: var(--roxy-text-sm, 0.875rem);
|
|
3216
3481
|
color: var(--roxy-fg, #0a0a0a);
|
|
3217
3482
|
}
|
|
3218
|
-
`],p([
|
|
3483
|
+
`],p([y({attribute:!1})],ae.prototype,"data",2),p([y({type:String,reflect:!0})],ae.prototype,"type",2),ae=p([b("roxy-numerology-card")],ae);var la={"life-path":"Life Path",expression:"Expression","personal-year":"Personal Year",chart:"Numerology chart"};function da(n){return n?[n.description,n.challenge,n.resolution].filter(Boolean).join(" "):""}var se=class extends x{constructor(){super(...arguments);this.data=null;this.detail="detailed"}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No panchang data</div>`;let t="sunrise"in e?e:null,r=[["Tithi",this.formatPart(e.tithi)],["Nakshatra",this.formatPart(e.nakshatra)],["Yoga",this.formatPart(e.yoga)],["Karana",this.formatPart(e.karana)]];t&&r.push(["Vara",this.formatPart(t.vara)]);let o=t?[["Brahma Muhurta",t.brahmaMuhurta],["Abhijit Muhurta",t.abhijitMuhurta],["Vijaya Muhurta",t.vijayaMuhurta],["Godhuli Muhurta",t.godhuliMuhurta],["Nishita Muhurta",t.nishitaMuhurta],["Pratah Sandhya",t.pratahSandhya],["Sayahna Sandhya",t.sayahnaSandhya]]:[],i=t?[["Rahu Kaal",t.rahuKaal],["Yamaganda",t.yamaganda],["Gulika",t.gulika]]:[],d=t&&"transitions"in t?t.transitions:void 0;return s`<div class="wrap" aria-label="Panchang">
|
|
3219
3484
|
<header class="head">
|
|
3220
3485
|
<h2 class="title">Panchang</h2>
|
|
3221
|
-
<span class="date">${
|
|
3486
|
+
<span class="date">${t?rt(t.date):""}</span>
|
|
3222
3487
|
</header>
|
|
3223
3488
|
<table>
|
|
3224
3489
|
<tbody>
|
|
3225
|
-
${
|
|
3226
|
-
<th>${
|
|
3227
|
-
<td>${
|
|
3490
|
+
${r.map(([c,m])=>s`<tr>
|
|
3491
|
+
<th>${c}</th>
|
|
3492
|
+
<td>${m}</td>
|
|
3228
3493
|
</tr>`)}
|
|
3229
|
-
${
|
|
3494
|
+
${t?.sunrise?s`<tr>
|
|
3230
3495
|
<th>Sunrise</th>
|
|
3231
|
-
<td>${
|
|
3232
|
-
</tr>`:
|
|
3233
|
-
${
|
|
3496
|
+
<td>${j(t.sunrise)}</td>
|
|
3497
|
+
</tr>`:l}
|
|
3498
|
+
${t?.sunset?s`<tr>
|
|
3234
3499
|
<th>Sunset</th>
|
|
3235
|
-
<td>${
|
|
3236
|
-
</tr>`:
|
|
3237
|
-
${
|
|
3500
|
+
<td>${j(t.sunset)}</td>
|
|
3501
|
+
</tr>`:l}
|
|
3502
|
+
${t?.moonrise?s`<tr>
|
|
3238
3503
|
<th>Moonrise</th>
|
|
3239
|
-
<td>${
|
|
3240
|
-
</tr>`:
|
|
3241
|
-
${
|
|
3504
|
+
<td>${j(t.moonrise)}</td>
|
|
3505
|
+
</tr>`:l}
|
|
3506
|
+
${t?.moonset?s`<tr>
|
|
3242
3507
|
<th>Moonset</th>
|
|
3243
|
-
<td>${
|
|
3244
|
-
</tr>`:
|
|
3508
|
+
<td>${j(t.moonset)}</td>
|
|
3509
|
+
</tr>`:l}
|
|
3245
3510
|
</tbody>
|
|
3246
3511
|
</table>
|
|
3247
|
-
${
|
|
3512
|
+
${d?s`
|
|
3513
|
+
<div class="section">Next transitions</div>
|
|
3514
|
+
<table>
|
|
3515
|
+
<tbody>
|
|
3516
|
+
${this.renderTransitionRow("Tithi",d.tithi)}
|
|
3517
|
+
${this.renderTransitionRow("Nakshatra",d.nakshatra)}
|
|
3518
|
+
${this.renderTransitionRow("Yoga",d.yoga)}
|
|
3519
|
+
${this.renderTransitionRow("Karana",d.karana)}
|
|
3520
|
+
</tbody>
|
|
3521
|
+
</table>
|
|
3522
|
+
`:l}
|
|
3523
|
+
${this.detail==="detailed"&&(o.some(c=>!!c[1])||i.some(c=>!!c[1]))?s`
|
|
3248
3524
|
<div class="section">Auspicious muhurtas</div>
|
|
3249
3525
|
<table>
|
|
3250
3526
|
<tbody>
|
|
3251
|
-
${o.filter(([,
|
|
3252
|
-
<th>${
|
|
3253
|
-
<td>${
|
|
3527
|
+
${o.filter(([,c])=>!!c).map(([c,m])=>s`<tr>
|
|
3528
|
+
<th>${c}</th>
|
|
3529
|
+
<td>${At(m)}</td>
|
|
3254
3530
|
</tr>`)}
|
|
3255
3531
|
</tbody>
|
|
3256
3532
|
</table>
|
|
3257
3533
|
<div class="section">Inauspicious periods</div>
|
|
3258
3534
|
<table>
|
|
3259
3535
|
<tbody>
|
|
3260
|
-
${
|
|
3261
|
-
<th>${
|
|
3262
|
-
<td>${
|
|
3536
|
+
${i.filter(([,c])=>!!c).map(([c,m])=>s`<tr>
|
|
3537
|
+
<th>${c}</th>
|
|
3538
|
+
<td>${At(m)}</td>
|
|
3263
3539
|
</tr>`)}
|
|
3264
3540
|
</tbody>
|
|
3265
3541
|
</table>
|
|
3266
|
-
`:
|
|
3267
|
-
</div>`}
|
|
3542
|
+
`:l}
|
|
3543
|
+
</div>`}renderTransitionRow(e,t){if(!t?.endsAt)return l;let r=j(t.endsAt),o=t.next?` \u2192 ${t.next}`:"";return s`<tr>
|
|
3544
|
+
<th>${e}</th>
|
|
3545
|
+
<td>ends ${r}${o}</td>
|
|
3546
|
+
</tr>`}formatPart(e){if(!e)return"";if(typeof e=="string")return e;if(typeof e=="object"){let t=e;return[t.name,t.paksha?`(${t.paksha} paksha)`:"",t.lord?`\xB7 ${t.lord}`:"",t.phase].filter(Boolean).join(" ")}return String(e)}};se.styles=[v,f`
|
|
3268
3547
|
.wrap {
|
|
3269
3548
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
3270
3549
|
border-radius: var(--roxy-radius-md, 8px);
|
|
@@ -3322,46 +3601,46 @@
|
|
|
3322
3601
|
text-transform: uppercase;
|
|
3323
3602
|
letter-spacing: 0.06em;
|
|
3324
3603
|
}
|
|
3325
|
-
`],p([
|
|
3604
|
+
`],p([y({attribute:!1})],se.prototype,"data",2),p([y({type:String,reflect:!0})],se.prototype,"detail",2),se=p([b("roxy-panchang-table")],se);var Rt=[{key:"sthanaBala",label:"Sthana",color:"var(--roxy-info, #0284c7)"},{key:"digBala",label:"Dig",color:"var(--roxy-success, #16a34a)"},{key:"kalaBala",label:"Kala",color:"var(--roxy-warning, #ea580c)"},{key:"chestaBala",label:"Chesta",color:"var(--roxy-accent, #f59e0b)"},{key:"naisargikaBala",label:"Naisargika",color:"var(--roxy-secondary, #475569)"},{key:"drikBala",label:"Drik",color:"var(--roxy-danger, #dc2626)"}],ue=class extends x{constructor(){super(...arguments);this.data=null}render(){if(!this.data?.planets?.length)return s`<div class="roxy-empty" role="status">No shadbala data</div>`;let e=[...this.data.planets].sort((t,r)=>t.relativeRank-r.relativeRank);return s`<div class="wrap" aria-label="Shadbala planetary strength">
|
|
3326
3605
|
<div class="head">
|
|
3327
3606
|
<h2 class="title">Shadbala</h2>
|
|
3328
3607
|
<p class="subtitle">${e.length} planets ranked by strength</p>
|
|
3329
3608
|
</div>
|
|
3330
3609
|
|
|
3331
3610
|
<div role="list" aria-label="Planet strength bars">
|
|
3332
|
-
${e.map(
|
|
3611
|
+
${e.map(t=>this.renderPlanetRow(t))}
|
|
3333
3612
|
</div>
|
|
3334
3613
|
|
|
3335
3614
|
<div class="legend" aria-label="Strength component legend">
|
|
3336
|
-
${
|
|
3615
|
+
${Rt.map(t=>s`<div class="legend-row">
|
|
3337
3616
|
<span
|
|
3338
3617
|
class="legend-swatch"
|
|
3339
|
-
style="background: ${
|
|
3618
|
+
style="background: ${t.color}"
|
|
3340
3619
|
aria-hidden="true"
|
|
3341
3620
|
></span>
|
|
3342
|
-
${
|
|
3621
|
+
${t.label}
|
|
3343
3622
|
</div>`)}
|
|
3344
3623
|
</div>
|
|
3345
|
-
</div>`}renderPlanetRow(e){let
|
|
3624
|
+
</div>`}renderPlanetRow(e){let t=R[E(e.planet)]??"",r=Rt.map(g=>Math.max(0,e[g.key])),o=r.reduce((g,h)=>g+h,0),i=typeof e.strengthRatio=="number"&&e.strengthRatio>=1,d=i?"adequacy-badge--adequate":"adequacy-badge--weak",c=i?"adequate":"weak",m=A(e.totalRupas,2)&&A(e.minRequired,2)?`${A(e.totalRupas,2)} / ${A(e.minRequired,2)} R`:"";return s`<div class="planet-row" role="listitem" aria-label="${e.planet} shadbala">
|
|
3346
3625
|
<div class="planet-label">
|
|
3347
|
-
<span class="glyph" aria-hidden="true">${
|
|
3626
|
+
<span class="glyph" aria-hidden="true">${t}</span>
|
|
3348
3627
|
${e.planet}
|
|
3349
3628
|
<span class="rank-badge" aria-label="rank ${e.relativeRank}">#${e.relativeRank}</span>
|
|
3350
3629
|
</div>
|
|
3351
3630
|
<div class="bar-wrap">
|
|
3352
3631
|
<div class="bar" role="img" aria-label="Strength components for ${e.planet}">
|
|
3353
|
-
${o>0?
|
|
3632
|
+
${o>0?Rt.map((g,h)=>{let u=r[h];if(u<=0)return l;let k=u/o*100;return s`<div
|
|
3354
3633
|
class="bar-segment"
|
|
3355
|
-
style="flex-grow: ${
|
|
3356
|
-
title="${
|
|
3357
|
-
></div>`}):
|
|
3634
|
+
style="flex-grow: ${k}; background: ${g.color};"
|
|
3635
|
+
title="${g.label}: ${A(u,1)}"
|
|
3636
|
+
></div>`}):l}
|
|
3358
3637
|
</div>
|
|
3359
3638
|
</div>
|
|
3360
3639
|
<div class="pills">
|
|
3361
|
-
${m?
|
|
3640
|
+
${m?s`<span class="rupas-label">${m}</span>`:l}
|
|
3362
3641
|
<span class="${`adequacy-badge ${d}`}">${c}</span>
|
|
3363
3642
|
</div>
|
|
3364
|
-
</div>`}};
|
|
3643
|
+
</div>`}};ue.styles=[v,f`
|
|
3365
3644
|
.wrap {
|
|
3366
3645
|
display: grid;
|
|
3367
3646
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -3507,18 +3786,18 @@
|
|
|
3507
3786
|
justify-content: flex-start;
|
|
3508
3787
|
}
|
|
3509
3788
|
}
|
|
3510
|
-
`],p([
|
|
3789
|
+
`],p([y({attribute:!1})],ue.prototype,"data",2),ue=p([b("roxy-shadbala-table")],ue);var Mt=360,T=Mt/2,Nt=170,ca=154,zt=124,Me=96,xe=class extends x{constructor(){super(...arguments);this.data=null}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No synastry data</div>`;let{person1:e,person2:t,compatibilityScore:r,analysis:o}=this.data,i=this.data.interAspects??[],d=e?.planets??[],c=t?.planets??[],m=typeof r=="number"?Math.round(r):void 0,g=o?.overall,h=o?.strengths??[],u=o?.challenges??[];return d.length>0&&c.length>0?s`<div
|
|
3511
3790
|
class="wrap"
|
|
3512
3791
|
aria-label="Synastry compatibility chart"
|
|
3513
3792
|
>
|
|
3514
3793
|
<div class="head">
|
|
3515
3794
|
<h2 class="title">Synastry</h2>
|
|
3516
|
-
${typeof m=="number"?
|
|
3795
|
+
${typeof m=="number"?s`<span class="score" aria-label=${`Score ${m} of 100`}
|
|
3517
3796
|
>${m} / 100</span
|
|
3518
|
-
>`:
|
|
3797
|
+
>`:l}
|
|
3519
3798
|
</div>
|
|
3520
3799
|
<svg
|
|
3521
|
-
viewBox="0 0 ${
|
|
3800
|
+
viewBox="0 0 ${Mt} ${Mt}"
|
|
3522
3801
|
role="img"
|
|
3523
3802
|
aria-label="Dual chart wheel comparing two natal charts"
|
|
3524
3803
|
>
|
|
@@ -3527,7 +3806,7 @@
|
|
|
3527
3806
|
class="wheel-line"
|
|
3528
3807
|
cx=${T}
|
|
3529
3808
|
cy=${T}
|
|
3530
|
-
r=${
|
|
3809
|
+
r=${Nt}
|
|
3531
3810
|
stroke-width="1.5"
|
|
3532
3811
|
/>
|
|
3533
3812
|
<circle
|
|
@@ -3545,8 +3824,9 @@
|
|
|
3545
3824
|
stroke-width="0.6"
|
|
3546
3825
|
/>
|
|
3547
3826
|
${this.renderSpokes()} ${this.renderSigns()}
|
|
3548
|
-
${this.renderInterAspectLines(d,c,
|
|
3549
|
-
${this.renderRing(d,
|
|
3827
|
+
${this.renderInterAspectLines(d,c,i)}
|
|
3828
|
+
${this.renderRing(d,zt,"p1",1)} ${this.renderRing(c,Me,"p2",2)}
|
|
3829
|
+
${this.renderAscendants(this.data)}
|
|
3550
3830
|
</svg>
|
|
3551
3831
|
<div class="legend-row">
|
|
3552
3832
|
<span><span class="swatch" style="background: var(--roxy-accent)"></span>Person 1</span>
|
|
@@ -3554,31 +3834,31 @@
|
|
|
3554
3834
|
<span><span class="swatch" style="background: var(--roxy-success)"></span>harmonious</span>
|
|
3555
3835
|
<span><span class="swatch" style="background: var(--roxy-danger)"></span>challenging</span>
|
|
3556
3836
|
</div>
|
|
3557
|
-
${
|
|
3558
|
-
${
|
|
3559
|
-
${h.length>0||
|
|
3560
|
-
${h.length?
|
|
3837
|
+
${g?s`<p class="summary">${g}</p>`:l}
|
|
3838
|
+
${i.length>0?this.renderAspects(i):l}
|
|
3839
|
+
${h.length>0||u.length>0?s`<div class="lists">
|
|
3840
|
+
${h.length?s`<div>
|
|
3561
3841
|
<h3>Strengths</h3>
|
|
3562
3842
|
<ul>
|
|
3563
|
-
${h.map($=>
|
|
3843
|
+
${h.map($=>s`<li>${$}</li>`)}
|
|
3564
3844
|
</ul>
|
|
3565
|
-
</div>`:
|
|
3566
|
-
${
|
|
3845
|
+
</div>`:l}
|
|
3846
|
+
${u.length?s`<div>
|
|
3567
3847
|
<h3>Challenges</h3>
|
|
3568
3848
|
<ul>
|
|
3569
|
-
${
|
|
3849
|
+
${u.map($=>s`<li>${$}</li>`)}
|
|
3570
3850
|
</ul>
|
|
3571
|
-
</div>`:
|
|
3572
|
-
</div>`:
|
|
3573
|
-
</div>`:
|
|
3851
|
+
</div>`:l}
|
|
3852
|
+
</div>`:l}
|
|
3853
|
+
</div>`:s`<div
|
|
3574
3854
|
class="wrap"
|
|
3575
3855
|
aria-label="Synastry compatibility chart"
|
|
3576
3856
|
>
|
|
3577
3857
|
<div class="head">
|
|
3578
3858
|
<h2 class="title">Synastry</h2>
|
|
3579
|
-
${typeof m=="number"?
|
|
3859
|
+
${typeof m=="number"?s`<span class="score" aria-label=${`Score ${m} of 100`}
|
|
3580
3860
|
>${m} / 100</span
|
|
3581
|
-
>`:
|
|
3861
|
+
>`:l}
|
|
3582
3862
|
</div>
|
|
3583
3863
|
<div class="missing-planets" role="status">
|
|
3584
3864
|
Synastry response missing planet positions. Pass
|
|
@@ -3586,23 +3866,29 @@
|
|
|
3586
3866
|
<code>person2.planets</code> arrays from the natal-chart endpoint, or
|
|
3587
3867
|
use the <code><roxy-data></code> fallback.
|
|
3588
3868
|
</div>
|
|
3589
|
-
${
|
|
3590
|
-
${
|
|
3591
|
-
${h.length>0||
|
|
3592
|
-
${h.length?
|
|
3869
|
+
${g?s`<p class="summary">${g}</p>`:l}
|
|
3870
|
+
${i.length>0?this.renderAspects(i):l}
|
|
3871
|
+
${h.length>0||u.length>0?s`<div class="lists">
|
|
3872
|
+
${h.length?s`<div>
|
|
3593
3873
|
<h3>Strengths</h3>
|
|
3594
3874
|
<ul>
|
|
3595
|
-
${h.map($=>
|
|
3875
|
+
${h.map($=>s`<li>${$}</li>`)}
|
|
3596
3876
|
</ul>
|
|
3597
|
-
</div>`:
|
|
3598
|
-
${
|
|
3877
|
+
</div>`:l}
|
|
3878
|
+
${u.length?s`<div>
|
|
3599
3879
|
<h3>Challenges</h3>
|
|
3600
3880
|
<ul>
|
|
3601
|
-
${
|
|
3881
|
+
${u.map($=>s`<li>${$}</li>`)}
|
|
3602
3882
|
</ul>
|
|
3603
|
-
</div>`:
|
|
3604
|
-
</div>`:
|
|
3605
|
-
</div>`}toAngle(e){return 180-e}renderSpokes(){return Array.from({length:12},(e,
|
|
3883
|
+
</div>`:l}
|
|
3884
|
+
</div>`:l}
|
|
3885
|
+
</div>`}toAngle(e){return 180-e}renderSpokes(){return Array.from({length:12},(e,t)=>{let r=this.toAngle(t*30),o=L(T,T,Me-14,r),i=L(T,T,Nt,r);return w`<line class="wheel-line" x1=${o.x} y1=${o.y} x2=${i.x} y2=${i.y} stroke-width="0.6" />`})}renderSigns(){return M.map((e,t)=>{let r=this.toAngle(t*30+15),o=L(T,T,ca,r);return w`<text class="sign" x=${o.x} y=${o.y} text-anchor="middle" dominant-baseline="central">${G[e]}</text>`})}renderRing(e,t,r,o){return e.map(i=>{if(!Number.isFinite(i.longitude))return l;let d=this.toAngle(i.longitude),c=L(T,T,t,d),g=L(T,T,t+(o===1?-12:-10),d),h=R[E(i.name)]??i.name.slice(0,2),u=B(i.longitude),k=i.isRetrograde===!0,$=`${u.degree}\xB0${String(u.minute).padStart(2,"0")}'`,$e=`${i.name}${k?" retrograde":""} - ${$} ${u.sign}`;return w`<g>
|
|
3886
|
+
<text class=${r} x=${c.x} y=${c.y} text-anchor="middle" dominant-baseline="central"><title>${$e}</title>${h}<tspan class="person-tag" dy="-0.55em" dx="0.15em">${o}</tspan></text>
|
|
3887
|
+
<text class="planet-deg" x=${g.x} y=${g.y} text-anchor="middle" dominant-baseline="central">${u.degree}°${k?w`<tspan class="retro"> ℞</tspan>`:l}</text>
|
|
3888
|
+
</g>`})}renderAscendants(e){let t=[],r=(o,i)=>{if(!o)return;let d=M.findIndex(k=>k.toLowerCase()===o.sign.toLowerCase());if(d===-1)return;let c=d*30+o.degree,m=this.toAngle(c),g=i===1?zt+14:Me+14,h=L(T,T,g,m),u=L(T,T,Nt+14,m);t.push(w`<g>
|
|
3889
|
+
<line class="asc-tick" x1=${h.x} y1=${h.y} x2=${u.x} y2=${u.y} />
|
|
3890
|
+
<text class="asc-label" x=${u.x} y=${u.y} text-anchor="middle" dominant-baseline="central">Asc${i}</text>
|
|
3891
|
+
</g>`)};return r(e.person1?.ascendant,1),r(e.person2?.ascendant,2),t}renderInterAspectLines(e,t,r){let o=(i,d)=>{let c=E(d);for(let m of i)if(E(m.name)===c&&typeof m.longitude=="number")return m.longitude};return r.map(i=>{let d=o(e,i.planet1),c=o(t,i.planet2);if(d===void 0||c===void 0)return l;let m=L(T,T,zt-12,this.toAngle(d)),g=L(T,T,Me+8,this.toAngle(c)),h=Re(i),u=qe[h]??"aspect-other",k=A(i.orb,1);return w`<line class=${`aspect ${u}`} x1=${m.x} y1=${m.y} x2=${g.x} y2=${g.y}><title>${i.planet1} ${h} ${i.planet2}${k?` (orb ${k}\xB0)`:""}</title></line>`})}renderAspects(e){return s`<table>
|
|
3606
3892
|
<thead>
|
|
3607
3893
|
<tr>
|
|
3608
3894
|
<th>Planet 1</th>
|
|
@@ -3613,15 +3899,15 @@
|
|
|
3613
3899
|
</tr>
|
|
3614
3900
|
</thead>
|
|
3615
3901
|
<tbody>
|
|
3616
|
-
${e.slice(0,12).map(
|
|
3617
|
-
<td>${
|
|
3618
|
-
<td>${
|
|
3619
|
-
<td>${
|
|
3620
|
-
<td class="orb">${
|
|
3621
|
-
<td>${
|
|
3902
|
+
${e.slice(0,12).map(t=>s`<tr>
|
|
3903
|
+
<td>${t.planet1}</td>
|
|
3904
|
+
<td>${t.planet2}</td>
|
|
3905
|
+
<td>${Re(t)||""}</td>
|
|
3906
|
+
<td class="orb">${A(t.orb,1)}</td>
|
|
3907
|
+
<td>${pa(t.strength)}</td>
|
|
3622
3908
|
</tr>`)}
|
|
3623
3909
|
</tbody>
|
|
3624
|
-
</table>`}};
|
|
3910
|
+
</table>`}};xe.styles=[v,f`
|
|
3625
3911
|
.wrap {
|
|
3626
3912
|
display: grid;
|
|
3627
3913
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -3651,7 +3937,9 @@
|
|
|
3651
3937
|
svg {
|
|
3652
3938
|
display: block;
|
|
3653
3939
|
width: 100%;
|
|
3654
|
-
max-width:
|
|
3940
|
+
max-width: 560px;
|
|
3941
|
+
aspect-ratio: 1 / 1;
|
|
3942
|
+
height: auto;
|
|
3655
3943
|
margin: 0 auto;
|
|
3656
3944
|
}
|
|
3657
3945
|
|
|
@@ -3673,6 +3961,31 @@
|
|
|
3673
3961
|
font-weight: 600;
|
|
3674
3962
|
font-size: 13px;
|
|
3675
3963
|
}
|
|
3964
|
+
.person-tag {
|
|
3965
|
+
font-size: 7px;
|
|
3966
|
+
font-weight: 700;
|
|
3967
|
+
opacity: 0.85;
|
|
3968
|
+
}
|
|
3969
|
+
.planet-deg {
|
|
3970
|
+
fill: var(--roxy-muted, #71717a);
|
|
3971
|
+
font-size: 7px;
|
|
3972
|
+
font-family: var(--roxy-font-sans);
|
|
3973
|
+
}
|
|
3974
|
+
.planet-deg .retro {
|
|
3975
|
+
fill: var(--roxy-danger, #dc2626);
|
|
3976
|
+
}
|
|
3977
|
+
.asc-tick {
|
|
3978
|
+
stroke: var(--roxy-accent-fg, #b45309);
|
|
3979
|
+
stroke-width: 1;
|
|
3980
|
+
opacity: 0.75;
|
|
3981
|
+
}
|
|
3982
|
+
.asc-label {
|
|
3983
|
+
fill: var(--roxy-accent-fg, #b45309);
|
|
3984
|
+
font-size: 9px;
|
|
3985
|
+
font-weight: 700;
|
|
3986
|
+
font-family: var(--roxy-font-sans);
|
|
3987
|
+
letter-spacing: 0.04em;
|
|
3988
|
+
}
|
|
3676
3989
|
.aspect {
|
|
3677
3990
|
stroke-width: 0.8;
|
|
3678
3991
|
fill: none;
|
|
@@ -3773,33 +4086,33 @@
|
|
|
3773
4086
|
padding: 0 4px;
|
|
3774
4087
|
border-radius: 4px;
|
|
3775
4088
|
}
|
|
3776
|
-
`],p([
|
|
4089
|
+
`],p([y({attribute:!1})],xe.prototype,"data",2),xe=p([b("roxy-synastry-chart")],xe);function pa(n){return typeof n=="number"?Math.round(n).toString():""}var oe=class extends x{constructor(){super(...arguments);this.data=null;this.flipped=!1;this.toggleFlip=()=>{this.flipped=!this.flipped}}render(){let e=this.data;return e?"card"in e?this.renderDailyCard(e):this.renderFullCard(e):s`<div class="roxy-empty" role="status">No tarot data</div>`}renderDailyCard(e){let t=e.card,r=this.flipped!==!!t.reversed,o=t.keywords??[];return s`<article class="card" aria-label=${t.name??"Tarot card"}>
|
|
3777
4090
|
<div class="image-wrap">
|
|
3778
|
-
${
|
|
3779
|
-
class=${`image ${
|
|
3780
|
-
src=${
|
|
3781
|
-
alt=${
|
|
4091
|
+
${t.imageUrl?s`<img
|
|
4092
|
+
class=${`image ${r?"reversed":""}`}
|
|
4093
|
+
src=${t.imageUrl}
|
|
4094
|
+
alt=${t.name??"Tarot card"}
|
|
3782
4095
|
tabindex="0"
|
|
3783
4096
|
@click=${this.toggleFlip}
|
|
3784
|
-
@keydown=${
|
|
3785
|
-
/>`:
|
|
3786
|
-
class=${`image ${
|
|
4097
|
+
@keydown=${i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this.toggleFlip())}}
|
|
4098
|
+
/>`:s`<div
|
|
4099
|
+
class=${`image ${r?"reversed":""}`}
|
|
3787
4100
|
style="aspect-ratio: 0.6; display: flex; align-items: center; justify-content: center; color: var(--roxy-muted)"
|
|
3788
4101
|
>
|
|
3789
|
-
${
|
|
4102
|
+
${t.name??"?"}
|
|
3790
4103
|
</div>`}
|
|
3791
4104
|
</div>
|
|
3792
4105
|
<div>
|
|
3793
4106
|
<div class="meta">
|
|
3794
|
-
${
|
|
3795
|
-
${
|
|
4107
|
+
${t.arcana?s`${t.arcana} arcana`:l}
|
|
4108
|
+
${r?s` · reversed`:l}
|
|
3796
4109
|
</div>
|
|
3797
|
-
<h2 class="title">${
|
|
3798
|
-
${e.dailyMessage?
|
|
3799
|
-
${
|
|
3800
|
-
${o.length>0?
|
|
3801
|
-
${o.map(
|
|
3802
|
-
</div>`:
|
|
4110
|
+
<h2 class="title">${t.name??"Tarot card"}</h2>
|
|
4111
|
+
${e.dailyMessage?s`<p class="message">${e.dailyMessage}</p>`:l}
|
|
4112
|
+
${t.meaning?s`<p>${t.meaning}</p>`:l}
|
|
4113
|
+
${o.length>0?s`<div class="chips">
|
|
4114
|
+
${o.map(i=>s`<span>${i}</span>`)}
|
|
4115
|
+
</div>`:l}
|
|
3803
4116
|
<button
|
|
3804
4117
|
class="flip"
|
|
3805
4118
|
type="button"
|
|
@@ -3809,17 +4122,17 @@
|
|
|
3809
4122
|
Flip card
|
|
3810
4123
|
</button>
|
|
3811
4124
|
</div>
|
|
3812
|
-
</article>`}renderFullCard(e){let
|
|
4125
|
+
</article>`}renderFullCard(e){let t=this.flipped,r=t?e.reversed:e.upright,o=t?e.keywords?.reversed??[]:e.keywords?.upright??[];return s`<article class="card" aria-label=${e.name??"Tarot card"}>
|
|
3813
4126
|
<div class="image-wrap">
|
|
3814
|
-
${e.imageUrl?
|
|
3815
|
-
class=${`image ${
|
|
4127
|
+
${e.imageUrl?s`<img
|
|
4128
|
+
class=${`image ${t?"reversed":""}`}
|
|
3816
4129
|
src=${e.imageUrl}
|
|
3817
4130
|
alt=${e.name??"Tarot card"}
|
|
3818
4131
|
tabindex="0"
|
|
3819
4132
|
@click=${this.toggleFlip}
|
|
3820
|
-
@keydown=${
|
|
3821
|
-
/>`:
|
|
3822
|
-
class=${`image ${
|
|
4133
|
+
@keydown=${i=>{(i.key==="Enter"||i.key===" ")&&(i.preventDefault(),this.toggleFlip())}}
|
|
4134
|
+
/>`:s`<div
|
|
4135
|
+
class=${`image ${t?"reversed":""}`}
|
|
3823
4136
|
style="aspect-ratio: 0.6; display: flex; align-items: center; justify-content: center; color: var(--roxy-muted)"
|
|
3824
4137
|
>
|
|
3825
4138
|
${e.name??"?"}
|
|
@@ -3827,15 +4140,15 @@
|
|
|
3827
4140
|
</div>
|
|
3828
4141
|
<div>
|
|
3829
4142
|
<div class="meta">
|
|
3830
|
-
${e.arcana?
|
|
3831
|
-
${e.number!==void 0&&e.number!==null?
|
|
3832
|
-
${
|
|
4143
|
+
${e.arcana?s`${e.arcana} arcana`:l}
|
|
4144
|
+
${e.number!==void 0&&e.number!==null?s` · ${e.number}`:l}
|
|
4145
|
+
${t?s` · reversed`:l}
|
|
3833
4146
|
</div>
|
|
3834
4147
|
<h2 class="title">${e.name??"Tarot card"}</h2>
|
|
3835
|
-
${
|
|
3836
|
-
${o.length>0?
|
|
3837
|
-
${o.map(
|
|
3838
|
-
</div>`:
|
|
4148
|
+
${r?.description?s`<p>${r.description}</p>`:l}
|
|
4149
|
+
${o.length>0?s`<div class="chips">
|
|
4150
|
+
${o.map(i=>s`<span>${i}</span>`)}
|
|
4151
|
+
</div>`:l}
|
|
3839
4152
|
<button
|
|
3840
4153
|
class="flip"
|
|
3841
4154
|
type="button"
|
|
@@ -3845,7 +4158,7 @@
|
|
|
3845
4158
|
Flip card
|
|
3846
4159
|
</button>
|
|
3847
4160
|
</div>
|
|
3848
|
-
</article>`}};
|
|
4161
|
+
</article>`}};oe.styles=[v,f`
|
|
3849
4162
|
.card {
|
|
3850
4163
|
background: var(--roxy-bg, #fff);
|
|
3851
4164
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
@@ -3935,51 +4248,51 @@
|
|
|
3935
4248
|
.flip:hover {
|
|
3936
4249
|
transform: scale(1.02);
|
|
3937
4250
|
}
|
|
3938
|
-
`],p([
|
|
4251
|
+
`],p([y({attribute:!1})],oe.prototype,"data",2),p([z()],oe.prototype,"flipped",2),oe=p([b("roxy-tarot-card")],oe);var ne=class extends x{constructor(){super(...arguments);this.data=null;this.spread="three-card"}render(){let e=this.data;if(!e)return s`<div class="roxy-empty" role="status">No tarot spread</div>`;let t="answer"in e,r="cards"in e&&!("spread"in e),o=r?[]:"positions"in e?e.positions??[]:[],i=r&&"cards"in e?e.cards:[],d=t?e.answer:void 0,c=t?e.strength:void 0,m="spread"in e?e.spread:this.spread.replace(/-/g," "),g="question"in e?e.question:void 0,h="summary"in e?e.summary:void 0,u=t?e.interpretation:void 0,k=d?d.toLowerCase().replace(/[^a-z]/g,""):"";return s`<article class="wrap" aria-label="Tarot spread">
|
|
3939
4252
|
<header class="head">
|
|
3940
4253
|
<h2 class="title">${m}</h2>
|
|
3941
|
-
${
|
|
4254
|
+
${g?s`<span class="question">"${g}"</span>`:l}
|
|
3942
4255
|
</header>
|
|
3943
|
-
${
|
|
3944
|
-
<span class=${`answer ${
|
|
3945
|
-
${c?
|
|
3946
|
-
</div>`:
|
|
3947
|
-
${o.length>0?
|
|
3948
|
-
${o.map($=>
|
|
4256
|
+
${t?s`<div>
|
|
4257
|
+
<span class=${`answer ${k}`}>${d}</span>
|
|
4258
|
+
${c?s`<small> · ${c}</small>`:l}
|
|
4259
|
+
</div>`:l}
|
|
4260
|
+
${o.length>0?s`<div class="grid">
|
|
4261
|
+
${o.map($=>s`<div class="card">
|
|
3949
4262
|
<p class="label">${$.name??""}</p>
|
|
3950
4263
|
<div class="image">
|
|
3951
|
-
${$.card?.imageUrl?
|
|
4264
|
+
${$.card?.imageUrl?s`<img
|
|
3952
4265
|
src=${$.card.imageUrl}
|
|
3953
4266
|
alt=${$.card.name??"tarot card"}
|
|
3954
4267
|
class=${$.card.reversed?"reversed":""}
|
|
3955
|
-
/>`:
|
|
4268
|
+
/>`:s`${$.card?.name??"?"}`}
|
|
3956
4269
|
</div>
|
|
3957
4270
|
<p class="name">
|
|
3958
4271
|
${$.card?.name??""}
|
|
3959
|
-
${$.card?.reversed?
|
|
4272
|
+
${$.card?.reversed?s`<small>(reversed)</small>`:l}
|
|
3960
4273
|
</p>
|
|
3961
|
-
${$.interpretation?
|
|
4274
|
+
${$.interpretation?s`<p class="interp">${$.interpretation}</p>`:l}
|
|
3962
4275
|
</div>`)}
|
|
3963
|
-
</div>`:
|
|
3964
|
-
${
|
|
3965
|
-
${
|
|
4276
|
+
</div>`:l}
|
|
4277
|
+
${i.length>0?s`<div class="grid">
|
|
4278
|
+
${i.map($=>s`<div class="card">
|
|
3966
4279
|
<div class="image">
|
|
3967
|
-
${$.imageUrl?
|
|
4280
|
+
${$.imageUrl?s`<img
|
|
3968
4281
|
src=${$.imageUrl}
|
|
3969
4282
|
alt=${$.name??"tarot card"}
|
|
3970
4283
|
class=${$.reversed?"reversed":""}
|
|
3971
|
-
/>`:
|
|
4284
|
+
/>`:s`${$.name??"?"}`}
|
|
3972
4285
|
</div>
|
|
3973
4286
|
<p class="name">
|
|
3974
4287
|
${$.name??""}
|
|
3975
|
-
${$.reversed?
|
|
4288
|
+
${$.reversed?s`<small>(reversed)</small>`:l}
|
|
3976
4289
|
</p>
|
|
3977
|
-
${$.meaning?
|
|
4290
|
+
${$.meaning?s`<p class="interp">${$.meaning}</p>`:l}
|
|
3978
4291
|
</div>`)}
|
|
3979
|
-
</div>`:
|
|
3980
|
-
${h?
|
|
3981
|
-
${
|
|
3982
|
-
</article>`}};
|
|
4292
|
+
</div>`:l}
|
|
4293
|
+
${h?s`<p class="reading">${h}</p>`:l}
|
|
4294
|
+
${u?s`<p class="reading">${u}</p>`:l}
|
|
4295
|
+
</article>`}};ne.styles=[v,f`
|
|
3983
4296
|
.wrap {
|
|
3984
4297
|
display: grid;
|
|
3985
4298
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -4085,28 +4398,28 @@
|
|
|
4085
4398
|
margin: 0;
|
|
4086
4399
|
color: var(--roxy-fg, #0a0a0a);
|
|
4087
4400
|
}
|
|
4088
|
-
`],p([
|
|
4401
|
+
`],p([y({attribute:!1})],ne.prototype,"data",2),p([y({type:String,reflect:!0})],ne.prototype,"spread",2),ne=p([b("roxy-tarot-spread")],ne);var fe=class extends x{constructor(){super(...arguments);this.data=null}render(){if(!this.data?.transitPlanets?.length)return s`<div class="roxy-empty" role="status">No transits data</div>`;let{transitDate:e,transitTime:t,transitPlanets:r,transitAspects:o,summary:i}=this.data,d=[rt(e),j(t)].filter(Boolean).join(" ");return s`<div class="wrap" aria-label="Transit positions table">
|
|
4089
4402
|
<div class="head">
|
|
4090
4403
|
<h2 class="title">Transits</h2>
|
|
4091
|
-
${d?
|
|
4404
|
+
${d?s`<p class="subtitle">${d}</p>`:l}
|
|
4092
4405
|
</div>
|
|
4093
4406
|
|
|
4094
|
-
${
|
|
4407
|
+
${i?this.renderSummaryPills(i):l}
|
|
4095
4408
|
|
|
4096
4409
|
<div>
|
|
4097
4410
|
<p class="section-label">Planet positions</p>
|
|
4098
4411
|
<div class="overflow-scroll">
|
|
4099
|
-
${this.renderPlanetsTable(
|
|
4412
|
+
${this.renderPlanetsTable(r)}
|
|
4100
4413
|
</div>
|
|
4101
4414
|
</div>
|
|
4102
4415
|
|
|
4103
|
-
${o?.length?
|
|
4416
|
+
${o?.length?s`<div>
|
|
4104
4417
|
<p class="section-label">Transit aspects</p>
|
|
4105
4418
|
<div class="overflow-scroll">
|
|
4106
4419
|
${this.renderAspectsList(o)}
|
|
4107
4420
|
</div>
|
|
4108
|
-
</div>`:
|
|
4109
|
-
</div>`}renderSummaryPills(e){return
|
|
4421
|
+
</div>`:l}
|
|
4422
|
+
</div>`}renderSummaryPills(e){return s`<div class="summary-pills" role="region" aria-label="Aspect summary">
|
|
4110
4423
|
<span class="pill pill--muted">
|
|
4111
4424
|
Total: ${e.totalAspects}
|
|
4112
4425
|
</span>
|
|
@@ -4119,7 +4432,7 @@
|
|
|
4119
4432
|
<span class="pill pill--muted">
|
|
4120
4433
|
Neutral: ${e.neutral}
|
|
4121
4434
|
</span>
|
|
4122
|
-
</div>`}renderPlanetsTable(e){return
|
|
4435
|
+
</div>`}renderPlanetsTable(e){return s`<table class="planets-table">
|
|
4123
4436
|
<thead>
|
|
4124
4437
|
<tr>
|
|
4125
4438
|
<th scope="col">Planet</th>
|
|
@@ -4129,50 +4442,50 @@
|
|
|
4129
4442
|
</tr>
|
|
4130
4443
|
</thead>
|
|
4131
4444
|
<tbody>
|
|
4132
|
-
${e.map(
|
|
4445
|
+
${e.map(t=>{let r=R[E(t.name)]??"",o=G[E(t.sign)]??"",i=t.speed>=0?"\u2191":"\u2193";return s`<tr>
|
|
4133
4446
|
<td>
|
|
4134
4447
|
<div class="planet-cell">
|
|
4135
|
-
<span class="glyph" aria-hidden="true">${
|
|
4136
|
-
${
|
|
4137
|
-
${
|
|
4448
|
+
<span class="glyph" aria-hidden="true">${r}</span>
|
|
4449
|
+
${t.name}
|
|
4450
|
+
${t.isRetrograde?s`<span class="retro-badge" aria-label="retrograde">R</span>`:l}
|
|
4138
4451
|
</div>
|
|
4139
4452
|
</td>
|
|
4140
4453
|
<td>
|
|
4141
4454
|
<div class="planet-cell">
|
|
4142
4455
|
<span class="glyph" aria-hidden="true">${o}</span>
|
|
4143
|
-
${
|
|
4456
|
+
${t.sign}
|
|
4144
4457
|
</div>
|
|
4145
4458
|
</td>
|
|
4146
|
-
<td class="num">${
|
|
4459
|
+
<td class="num">${A(t.degree,2)}</td>
|
|
4147
4460
|
<td class="speed">
|
|
4148
|
-
<span class="speed-arrow" aria-hidden="true">${
|
|
4149
|
-
${
|
|
4461
|
+
<span class="speed-arrow" aria-hidden="true">${i}</span>
|
|
4462
|
+
${A(Math.abs(t.speed),4)}
|
|
4150
4463
|
</td>
|
|
4151
4464
|
</tr>`})}
|
|
4152
4465
|
</tbody>
|
|
4153
|
-
</table>`}renderAspectsList(e){return
|
|
4154
|
-
${e.map((r
|
|
4466
|
+
</table>`}renderAspectsList(e){return s`<div role="list" aria-label="Transit aspects">
|
|
4467
|
+
${e.map((t,r)=>{let o=R[E(t.transitPlanet)]??"",i=R[E(t.natalPlanet)]??"",d=(t.nature??"neutral").toLowerCase(),c=t.interpretation,m=(t.type??"").toLowerCase(),g=t.isApplying?"Applying":"Separating";return s`<details class="aspect-card" role="listitem" name="transit-aspects" ?open=${r===0}>
|
|
4155
4468
|
<summary>
|
|
4156
4469
|
<span aria-hidden="true">${o}</span>
|
|
4157
|
-
${
|
|
4470
|
+
${t.transitPlanet}
|
|
4158
4471
|
<span class="nature-badge ${d}">${m}</span>
|
|
4159
|
-
<span aria-hidden="true">${
|
|
4160
|
-
${
|
|
4472
|
+
<span aria-hidden="true">${i}</span>
|
|
4473
|
+
${t.natalPlanet}
|
|
4161
4474
|
<span class="meta">
|
|
4162
|
-
${
|
|
4475
|
+
${g} · orb ${A(t.orb,2)}° · strength ${A(t.strength,1)}
|
|
4163
4476
|
</span>
|
|
4164
4477
|
</summary>
|
|
4165
4478
|
<div class="interp-body">
|
|
4166
|
-
${c?.summary?
|
|
4167
|
-
${c?.impact?
|
|
4168
|
-
${c?.timing?
|
|
4169
|
-
${c?.guidance?
|
|
4170
|
-
${c?.keywords?.length?
|
|
4171
|
-
${c.keywords.map(h=>
|
|
4172
|
-
</div>`:
|
|
4479
|
+
${c?.summary?s`<p>${c.summary}</p>`:l}
|
|
4480
|
+
${c?.impact?s`<p><strong>Impact:</strong> ${c.impact}</p>`:l}
|
|
4481
|
+
${c?.timing?s`<p><strong>Timing:</strong> ${c.timing}</p>`:l}
|
|
4482
|
+
${c?.guidance?s`<p><strong>Guidance:</strong> ${c.guidance}</p>`:l}
|
|
4483
|
+
${c?.keywords?.length?s`<div class="interp-keywords">
|
|
4484
|
+
${c.keywords.map(h=>s`<span class="kw">${h}</span>`)}
|
|
4485
|
+
</div>`:l}
|
|
4173
4486
|
</div>
|
|
4174
4487
|
</details>`})}
|
|
4175
|
-
</div>`}};
|
|
4488
|
+
</div>`}};fe.styles=[v,f`
|
|
4176
4489
|
.wrap {
|
|
4177
4490
|
display: grid;
|
|
4178
4491
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -4368,68 +4681,21 @@
|
|
|
4368
4681
|
background: color-mix(in srgb, var(--roxy-border, #e4e4e7) 60%, transparent);
|
|
4369
4682
|
color: var(--roxy-fg, #0a0a0a);
|
|
4370
4683
|
}
|
|
4371
|
-
`],p([
|
|
4372
|
-
<
|
|
4684
|
+
`],p([y({attribute:!1})],fe.prototype,"data",2),fe=p([b("roxy-transits-table")],fe);var ie=class extends x{constructor(){super(...arguments);this.data=null;this.chartStyle="north";this.setStyle=e=>{this.chartStyle=e}}viewModel(){return this.data?.meta?ot(this.data.meta,"D1 Rashi"):null}render(){let e=this.viewModel();return e?s`<div class="wrap">
|
|
4685
|
+
<div class="header">
|
|
4686
|
+
<h2 class="title">Vedic kundli</h2>
|
|
4687
|
+
${it(this.chartStyle,this.setStyle)}
|
|
4688
|
+
</div>
|
|
4373
4689
|
<svg
|
|
4374
|
-
viewBox="0 0
|
|
4690
|
+
viewBox="0 0 400 400"
|
|
4691
|
+
preserveAspectRatio="xMidYMid meet"
|
|
4375
4692
|
role="img"
|
|
4376
4693
|
aria-label="Vedic birth chart with twelve sign houses"
|
|
4377
4694
|
>
|
|
4378
4695
|
<title>Vedic kundli</title>
|
|
4379
|
-
${
|
|
4380
|
-
${e.map(l=>o(l))}
|
|
4696
|
+
${nt(e,this.chartStyle)}
|
|
4381
4697
|
</svg>
|
|
4382
|
-
</div>`}};
|
|
4383
|
-
.wrap {
|
|
4384
|
-
display: grid;
|
|
4385
|
-
gap: var(--roxy-space-md, 1rem);
|
|
4386
|
-
}
|
|
4387
|
-
.title {
|
|
4388
|
-
font-size: var(--roxy-text-lg, 1.125rem);
|
|
4389
|
-
font-weight: var(--roxy-weight-bold, 600);
|
|
4390
|
-
margin: 0;
|
|
4391
|
-
}
|
|
4392
|
-
svg {
|
|
4393
|
-
display: block;
|
|
4394
|
-
width: 100%;
|
|
4395
|
-
max-width: 360px;
|
|
4396
|
-
margin: 0 auto;
|
|
4397
|
-
}
|
|
4398
|
-
.line {
|
|
4399
|
-
fill: transparent;
|
|
4400
|
-
stroke: var(--roxy-border, #e4e4e7);
|
|
4401
|
-
}
|
|
4402
|
-
.sign-text {
|
|
4403
|
-
fill: var(--roxy-muted, #71717a);
|
|
4404
|
-
font-size: 9px;
|
|
4405
|
-
font-weight: 500;
|
|
4406
|
-
font-family: var(--roxy-font-sans);
|
|
4407
|
-
}
|
|
4408
|
-
.planet-text {
|
|
4409
|
-
fill: var(--roxy-fg, #0a0a0a);
|
|
4410
|
-
font-size: 10px;
|
|
4411
|
-
font-weight: 600;
|
|
4412
|
-
font-family: var(--roxy-font-sans);
|
|
4413
|
-
}
|
|
4414
|
-
.house-num {
|
|
4415
|
-
fill: var(--roxy-muted, #71717a);
|
|
4416
|
-
font-size: 9px;
|
|
4417
|
-
font-weight: 400;
|
|
4418
|
-
font-family: var(--roxy-font-sans);
|
|
4419
|
-
}
|
|
4420
|
-
.lagna-marker {
|
|
4421
|
-
fill: var(--roxy-accent-fg, #b45309);
|
|
4422
|
-
font-size: 8px;
|
|
4423
|
-
font-weight: 700;
|
|
4424
|
-
font-family: var(--roxy-font-sans);
|
|
4425
|
-
letter-spacing: 0.05em;
|
|
4426
|
-
}
|
|
4427
|
-
.lagna-bg {
|
|
4428
|
-
fill: color-mix(in srgb, var(--roxy-accent, #f59e0b) 12%, transparent);
|
|
4429
|
-
stroke: color-mix(in srgb, var(--roxy-accent, #f59e0b) 45%, transparent);
|
|
4430
|
-
stroke-width: 0.8;
|
|
4431
|
-
}
|
|
4432
|
-
`],p([g({attribute:!1})],Q.prototype,"data",2),p([g({type:String,reflect:!0,attribute:"chart-style"})],Q.prototype,"chartStyle",2),Q=p([f("roxy-vedic-kundli")],Q);var qt=["Lagna","Sun","Moon","Mars","Mercury","Jupiter","Venus","Saturn","Rahu","Ketu"],me=class extends u{constructor(){super(...arguments);this.data=null}orderedRows(){let e=this.data?.meta??{},r=new Set,a=[];for(let o of qt){let l=e[o];l&&(a.push([o,l]),r.add(o))}for(let[o,l]of Object.entries(e))r.has(o)||a.push([o,l]);return a}render(){if(!this.data?.meta)return t`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.orderedRows();return t`<div class="wrap" aria-label="Vedic planetary positions" tabindex="0">
|
|
4698
|
+
</div>`:s`<div class="roxy-empty" role="status">No kundli data</div>`}};ie.styles=[v,lt],p([y({attribute:!1})],ie.prototype,"data",2),p([y({type:String,reflect:!0,attribute:"chart-style"})],ie.prototype,"chartStyle",2),ie=p([b("roxy-vedic-kundli")],ie);var ma=["Lagna","Sun","Moon","Mars","Mercury","Jupiter","Venus","Saturn","Rahu","Ketu"],be=class extends x{constructor(){super(...arguments);this.data=null}orderedRows(){let e=this.data?.meta??{},t=new Set,r=[];for(let o of ma){let i=e[o];i&&(r.push([o,i]),t.add(o))}for(let[o,i]of Object.entries(e))t.has(o)||r.push([o,i]);return r}render(){if(!this.data?.meta)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.orderedRows();return s`<div class="wrap" aria-label="Vedic planetary positions" tabindex="0">
|
|
4433
4699
|
<header class="head">
|
|
4434
4700
|
<h2 class="title">Planetary positions</h2>
|
|
4435
4701
|
</header>
|
|
@@ -4448,26 +4714,26 @@
|
|
|
4448
4714
|
</tr>
|
|
4449
4715
|
</thead>
|
|
4450
4716
|
<tbody>
|
|
4451
|
-
${e.map(([r
|
|
4717
|
+
${e.map(([t,r])=>{let o=(r.graha??t)==="Lagna",i=R[E(r.graha??t)]??"",d=G[E(r.rashi??"")]??"";return s`<tr class=${o?"lagna":""}>
|
|
4452
4718
|
<td class="graha">
|
|
4453
|
-
${
|
|
4719
|
+
${i?s`<span class="glyph">${i}</span>`:l}${r.graha??t}
|
|
4454
4720
|
</td>
|
|
4455
4721
|
<td>
|
|
4456
|
-
${d?
|
|
4722
|
+
${d?s`<span class="glyph">${d}</span>`:l}${r.rashi??""}
|
|
4457
4723
|
</td>
|
|
4458
4724
|
<td class="num">
|
|
4459
|
-
${typeof
|
|
4725
|
+
${typeof r.longitude=="number"?at(r.longitude):""}
|
|
4460
4726
|
</td>
|
|
4461
|
-
<td>${
|
|
4462
|
-
<td class="num">${
|
|
4463
|
-
<td>${
|
|
4464
|
-
<td class="num">${typeof
|
|
4465
|
-
<td>${
|
|
4466
|
-
<td>${
|
|
4727
|
+
<td>${r.nakshatra?.name??""}</td>
|
|
4728
|
+
<td class="num">${r.nakshatra?.pada??""}</td>
|
|
4729
|
+
<td>${r.nakshatra?.lord??""}</td>
|
|
4730
|
+
<td class="num">${typeof r.house=="number"?r.house:""}</td>
|
|
4731
|
+
<td>${r.awastha??""}</td>
|
|
4732
|
+
<td>${r.isRetrograde?s`<span class="retro">R</span>`:l}</td>
|
|
4467
4733
|
</tr>`})}
|
|
4468
4734
|
</tbody>
|
|
4469
4735
|
</table>
|
|
4470
|
-
</div>`}};
|
|
4736
|
+
</div>`}};be.styles=[v,f`
|
|
4471
4737
|
.wrap {
|
|
4472
4738
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
4473
4739
|
border-radius: var(--roxy-radius-md, 8px);
|
|
@@ -4533,7 +4799,7 @@
|
|
|
4533
4799
|
.num {
|
|
4534
4800
|
font-variant-numeric: tabular-nums;
|
|
4535
4801
|
}
|
|
4536
|
-
`],p([
|
|
4802
|
+
`],p([y({attribute:!1})],be.prototype,"data",2),be=p([b("roxy-vedic-planets-table")],be);var ve=class extends x{constructor(){super(...arguments);this.data=null}rows(){let e=this.data;if(!e)return[];let t=(e.planets??[]).map(r=>({name:r.name,sign:r.sign,longitude:r.longitude,house:r.house,speed:r.speed,isRetrograde:r.isRetrograde}));for(let[r,o]of[["Ascendant",e.ascendant],["Midheaven",e.midheaven],["Part of Fortune",e.partOfFortune],["Vertex",e.vertex]])o&&t.push({name:r,sign:o.sign,longitude:o.longitude,isPoint:!0});return t}render(){if(!this.data?.planets)return s`<div class="roxy-empty" role="status">No chart data</div>`;let e=this.rows();return s`<div class="wrap" aria-label="Western planetary positions" tabindex="0">
|
|
4537
4803
|
<header class="head">
|
|
4538
4804
|
<h2 class="title">Planetary positions</h2>
|
|
4539
4805
|
</header>
|
|
@@ -4548,25 +4814,25 @@
|
|
|
4548
4814
|
</tr>
|
|
4549
4815
|
</thead>
|
|
4550
4816
|
<tbody>
|
|
4551
|
-
${e.map(
|
|
4817
|
+
${e.map(t=>{let r=R[E(t.name)]??"",o=G[E(t.sign??"")]??"",i=typeof t.speed=="number"?A(t.speed,3):"";return s`<tr class=${t.isPoint?"point":""}>
|
|
4552
4818
|
<td class="body">
|
|
4553
|
-
${
|
|
4819
|
+
${r?s`<span class="glyph">${r}</span>`:l}${t.name}
|
|
4554
4820
|
</td>
|
|
4555
4821
|
<td>
|
|
4556
|
-
${o?
|
|
4822
|
+
${o?s`<span class="glyph">${o}</span>`:l}${t.sign??""}
|
|
4557
4823
|
</td>
|
|
4558
4824
|
<td class="num">
|
|
4559
|
-
${typeof
|
|
4825
|
+
${typeof t.longitude=="number"?at(t.longitude):""}
|
|
4560
4826
|
</td>
|
|
4561
|
-
<td class="num">${typeof
|
|
4827
|
+
<td class="num">${typeof t.house=="number"?t.house:""}</td>
|
|
4562
4828
|
<td class="num">
|
|
4563
|
-
${
|
|
4564
|
-
${
|
|
4829
|
+
${i?s`${i}°/day`:l}
|
|
4830
|
+
${t.isRetrograde?s`<span class="retro"> ℞</span>`:l}
|
|
4565
4831
|
</td>
|
|
4566
4832
|
</tr>`})}
|
|
4567
4833
|
</tbody>
|
|
4568
4834
|
</table>
|
|
4569
|
-
</div>`}};
|
|
4835
|
+
</div>`}};ve.styles=[v,f`
|
|
4570
4836
|
.wrap {
|
|
4571
4837
|
border: 1px solid var(--roxy-border, #e4e4e7);
|
|
4572
4838
|
border-radius: var(--roxy-radius-md, 8px);
|
|
@@ -4626,20 +4892,20 @@
|
|
|
4626
4892
|
.num {
|
|
4627
4893
|
font-variant-numeric: tabular-nums;
|
|
4628
4894
|
}
|
|
4629
|
-
`],p([
|
|
4895
|
+
`],p([y({attribute:!1})],ve.prototype,"data",2),ve=p([b("roxy-western-planets-table")],ve);var le=class extends x{constructor(){super(...arguments);this.data=null;this.filter="";this.handleInput=e=>{this.filter=e.target.value}}renderQualityChip(e){let t=`quality-chip quality-${e}`;return s`<span class=${t}>${e}</span>`}renderDetailCard(e){return s`<div class="detail-card">
|
|
4630
4896
|
<p class="detail-name">
|
|
4631
4897
|
${e.name}
|
|
4632
|
-
${e.quality?this.renderQualityChip(e.quality):
|
|
4898
|
+
${e.quality?this.renderQualityChip(e.quality):l}
|
|
4633
4899
|
</p>
|
|
4634
|
-
${e.description?
|
|
4635
|
-
${e.result?
|
|
4900
|
+
${e.description?s`<p class="description">${e.description}</p>`:l}
|
|
4901
|
+
${e.result?s`<details>
|
|
4636
4902
|
<summary>Effects</summary>
|
|
4637
4903
|
<div class="result-body">${e.result}</div>
|
|
4638
|
-
</details>`:
|
|
4639
|
-
</div>`}render(){if(!this.data)return
|
|
4904
|
+
</details>`:l}
|
|
4905
|
+
</div>`}render(){if(!this.data)return s`<div class="roxy-empty" role="status">No yoga data</div>`;let e=this.data,t=this.filter.toLowerCase();if("description"in e&&typeof e.description=="string"){let r=e;return s`<div class="wrap">${this.renderDetailCard(r)}</div>`}if("yogas"in e&&Array.isArray(e.yogas)){let r=e.yogas;if(r.length>0&&"description"in r[0]){let m=r,g=t?m.filter(u=>u.name.toLowerCase().includes(t)):m,h=e.total;return s`<div class="wrap">
|
|
4640
4906
|
<div class="head">
|
|
4641
4907
|
<h2 class="title">Yoga catalog</h2>
|
|
4642
|
-
${h!==void 0?
|
|
4908
|
+
${h!==void 0?s`<span class="count">${h} total</span>`:l}
|
|
4643
4909
|
</div>
|
|
4644
4910
|
<div class="search-wrap">
|
|
4645
4911
|
<input
|
|
@@ -4657,12 +4923,12 @@
|
|
|
4657
4923
|
aria-live="polite"
|
|
4658
4924
|
aria-label="Yoga results"
|
|
4659
4925
|
>
|
|
4660
|
-
${
|
|
4926
|
+
${g.length>0?g.map(u=>this.renderDetailCard(u)):s`<p class="no-results">No yogas match your search.</p>`}
|
|
4661
4927
|
</div>
|
|
4662
|
-
</div>`}let
|
|
4928
|
+
</div>`}let i=r,d=t?i.filter(m=>m.name.toLowerCase().includes(t)):i,c=e.total;return s`<div class="wrap">
|
|
4663
4929
|
<div class="head">
|
|
4664
4930
|
<h2 class="title">Yoga catalog</h2>
|
|
4665
|
-
${c!==void 0?
|
|
4931
|
+
${c!==void 0?s`<span class="count">${c} total</span>`:l}
|
|
4666
4932
|
</div>
|
|
4667
4933
|
<div class="search-wrap">
|
|
4668
4934
|
<input
|
|
@@ -4680,12 +4946,12 @@
|
|
|
4680
4946
|
aria-live="polite"
|
|
4681
4947
|
aria-label="Yoga results"
|
|
4682
4948
|
>
|
|
4683
|
-
${d.length>0?d.map(m=>
|
|
4949
|
+
${d.length>0?d.map(m=>s`<div class="yoga-chip">
|
|
4684
4950
|
${m.name}
|
|
4685
4951
|
<span class="yoga-id">${m.id}</span>
|
|
4686
|
-
</div>`):
|
|
4952
|
+
</div>`):s`<p class="no-results">No yogas match your search.</p>`}
|
|
4687
4953
|
</div>
|
|
4688
|
-
</div>`}return
|
|
4954
|
+
</div>`}return s`<div class="roxy-empty" role="status">No yoga data</div>`}};le.styles=[v,f`
|
|
4689
4955
|
.wrap {
|
|
4690
4956
|
display: grid;
|
|
4691
4957
|
gap: var(--roxy-space-md, 1rem);
|
|
@@ -4833,7 +5099,7 @@
|
|
|
4833
5099
|
display: grid;
|
|
4834
5100
|
gap: var(--roxy-space-sm, 0.5rem);
|
|
4835
5101
|
}
|
|
4836
|
-
`],p([g({attribute:!1})],ee.prototype,"data",2),p([C()],ee.prototype,"filter",2),ee=p([f("roxy-yoga-list")],ee);var Qe=[{pascal:"RoxyNatalChart",tag:"roxy-natal-chart",slug:"natal-chart",heading:"Natal chart",description:"Western natal chart wheel for /astrology/natal-chart responses",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Natal chart wheel with planet glyphs and aspect lines",topic:"Astrology"},{pascal:"RoxySynastryChart",tag:"roxy-synastry-chart",slug:"synastry-chart",heading:"Synastry",description:"Dual-wheel synastry chart with inter-aspects table",docsLabel:"Western",endpointLabel:"POST /astrology/synastry",docsSummary:"Dual-wheel synastry with inter-aspects table",topic:"Astrology"},{pascal:"RoxyWesternPlanetsTable",tag:"roxy-western-planets-table",slug:"western-planets-table",heading:"Western planets",description:"Western planetary positions table with sign, degree, house, and motion plus the chart angles",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Sign, degree, house, motion columns plus ASC, MC, PoF, Vertex",topic:"Astrology"},{pascal:"RoxyTransitsTable",tag:"roxy-transits-table",slug:"transits-table",heading:"Transits",description:"Live planet positions plus aspects to a natal chart",docsLabel:"Western",endpointLabel:"POST /astrology/transits",docsSummary:"Transit planet positions plus optional aspects to a natal chart",topic:"Astrology"},{pascal:"RoxyMoonPhase",tag:"roxy-moon-phase",slug:"moon-phase",heading:"Moon phase",description:"Moon phase card and calendar",docsLabel:"Western",endpointLabel:"GET /astrology/moon-phase/{current,upcoming,calendar/...}",docsSummary:"Moon phase card and calendar",topic:"Astrology"},{pascal:"RoxyHoroscopeCard",tag:"roxy-horoscope-card",slug:"horoscope-card",heading:"Daily horoscope",description:"Daily, weekly, or monthly horoscope card for /astrology/horoscope/...",docsLabel:"Western",endpointLabel:"GET /astrology/horoscope/{sign}/{daily,weekly,monthly}",docsSummary:"Daily, weekly, or monthly horoscope card",topic:"Astrology"},{pascal:"RoxyCompatibilityCard",tag:"roxy-compatibility-card",slug:"compatibility-card",heading:"Compatibility score",description:"Cross-domain compatibility score card",docsLabel:"Cross",endpointLabel:"POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility",docsSummary:"Score card with category breakdown",topic:"Astrology"},{pascal:"RoxyVedicKundli",tag:"roxy-vedic-kundli",slug:"vedic-kundli",heading:"Vedic kundli",description:"South, North, or East Indian Vedic kundli for /vedic-astrology/birth-chart with per-planet degree and nakshatra detail",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"South, North, or East Indian kundli with degree detail",topic:"Vedic"},{pascal:"RoxyDivisionalChart",tag:"roxy-divisional-chart",slug:"divisional-chart",heading:"Divisional chart",description:"D2 to D60 varga chart wheel with Vargottama markers",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/divisional-chart",docsSummary:"Generic divisional varga wheel from D2 Hora to D60 Shashtiamsa",topic:"Vedic"},{pascal:"RoxyKpChart",tag:"roxy-kp-chart",slug:"kp-chart",heading:"KP chart",description:"Full KP chart with Ascendant, Placidus cusps, and planets in tabbed stellar-hierarchy tables",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/chart",docsSummary:"Ascendant, cusps, and planets with KP stellar hierarchy",topic:"Vedic"},{pascal:"RoxyVedicPlanetsTable",tag:"roxy-vedic-planets-table",slug:"vedic-planets-table",heading:"Vedic planets",description:"Vedic planetary positions table with degree, nakshatra, pada, nakshatra lord, bhava, and avastha",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"Degree, nakshatra, pada, lord, bhava, avastha columns",topic:"Vedic"},{pascal:"RoxyKpPlanetsTable",tag:"roxy-kp-planets-table",slug:"kp-planets-table",heading:"KP planets",description:"KP planets table with sub-lord and sub-sub-lord columns",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/planets",docsSummary:"Sub-lord and sub-sub-lord columns",topic:"Vedic"},{pascal:"RoxyKpRulingPlanets",tag:"roxy-kp-ruling-planets",slug:"kp-ruling-planets",heading:"KP ruling planets",description:"KP ruling planets with day lord, Moon and Lagna stellar hierarchies, and house significators",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/ruling-planets",docsSummary:"Day lord, Moon/Lagna hierarchies, ruling planets, significators",topic:"Vedic"},{pascal:"RoxyAshtakavargaGrid",tag:"roxy-ashtakavarga-grid",slug:"ashtakavarga-grid",heading:"Ashtakavarga",description:"Sarva and Bhinna ashtakavarga heatmap with bindu scores",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/ashtakavarga",docsSummary:"Sarva, Bhinna, and Shodhya Pinda views in a tabbed heatmap",topic:"Vedic"},{pascal:"RoxyShadbalaTable",tag:"roxy-shadbala-table",slug:"shadbala-table",heading:"Shadbala",description:"Six-fold planetary strength with adequacy badge per planet",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/shadbala",docsSummary:"Six-fold planetary strength bar plus rupas and adequacy badge",topic:"Vedic"},{pascal:"RoxyDashaTimeline",tag:"roxy-dasha-timeline",slug:"dasha-timeline",heading:"Vimshottari dasha",description:"Vimshottari dasha timeline with active mahadasha highlighted",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dasha/{current,major,sub/...}",docsSummary:"Vimshottari mahadasha + antardasha + pratyantardasha",topic:"Vedic"},{pascal:"RoxyGunaMilan",tag:"roxy-guna-milan",slug:"guna-milan",heading:"Guna milan",description:"36-point Ashtakoota matrimonial compatibility breakdown",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/compatibility",docsSummary:"36-point Ashtakoota with eight sub-scores",topic:"Vedic"},{pascal:"RoxyPanchangTable",tag:"roxy-panchang-table",slug:"panchang-table",heading:"Panchang",description:"Panchang muhurta table with auspicious and inauspicious periods",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/{basic,detailed}",docsSummary:"15+ muhurtas in detailed mode",topic:"Vedic"},{pascal:"RoxyChoghadiyaGrid",tag:"roxy-choghadiya-grid",slug:"choghadiya-grid",heading:"Choghadiya",description:"Day and night Choghadiya muhurta tiles for activity timing",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/choghadiya",docsSummary:"Day and night Choghadiya muhurta tiles colored by effect",topic:"Vedic"},{pascal:"RoxyYogaList",tag:"roxy-yoga-list",slug:"yoga-list",heading:"Yoga catalog",description:"Yoga reference cards from the catalog with optional detail mode",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/yoga, /yoga/{id}",docsSummary:"Filterable yoga cards from the 300 plus yoga catalog",topic:"Vedic"},{pascal:"RoxyNakshatraCard",tag:"roxy-nakshatra-card",slug:"nakshatra-card",heading:"Nakshatra",description:"Nakshatra reference card with lord, deity, symbol, characteristics, and remedies",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/nakshatras/{id}",docsSummary:"Lord, deity, symbol, characteristics, remedies",topic:"Vedic"},{pascal:"RoxyDoshaCard",tag:"roxy-dosha-card",slug:"dosha-card",heading:"Manglik dosha",description:"Manglik, Kaal Sarp, or Sade Sati presence card",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati}",docsSummary:"Presence, severity, remedies, scoped effects",topic:"Vedic"},{pascal:"RoxyNumerologyCard",tag:"roxy-numerology-card",slug:"numerology-card",heading:"Life path number",description:"Numerology card for life path, expression, personal year, or full chart",docsLabel:"Numerology",endpointLabel:"POST /numerology/{life-path,expression,personal-year,chart}",docsSummary:"Life path, expression, personal year, full chart",topic:"Numerology"},{pascal:"RoxyTarotCard",tag:"roxy-tarot-card",slug:"tarot-card",heading:"Daily tarot card",description:"Single tarot card with upright/reversed flip animation",docsLabel:"Tarot",endpointLabel:"GET /tarot/cards/{id}, POST /tarot/daily",docsSummary:"Single card with upright and reversed flip",topic:"Tarot"},{pascal:"RoxyTarotSpread",tag:"roxy-tarot-spread",slug:"tarot-spread",heading:"Three-card spread",description:"Tarot spread renderer for three-card, Celtic Cross, love, or yes/no",docsLabel:"Tarot",endpointLabel:"POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw",docsSummary:"Spreads with positions and reading",topic:"Tarot"},{pascal:"RoxyBiorhythmChart",tag:"roxy-biorhythm-chart",slug:"biorhythm-chart",heading:"Daily biorhythm",description:"Daily biorhythm bars or multi-day forecast cycle lines",docsLabel:"Biorhythm",endpointLabel:"POST /biorhythm/{daily,forecast,critical-days}",docsSummary:"Daily bars, forecast cycle lines, critical days",topic:"Biorhythm"},{pascal:"RoxyHexagram",tag:"roxy-hexagram",slug:"hexagram",heading:"I Ching hexagram",description:"I Ching hexagram with trigram glyphs, judgment, image, and changing lines",docsLabel:"I Ching",endpointLabel:"GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast",docsSummary:"Hexagram with trigrams, judgment, image, changing lines",topic:"I Ching"},{pascal:"RoxyEndpointForm",tag:"roxy-endpoint-form",slug:"endpoint-form",heading:"Schema-driven form",description:"Schema-driven form that emits roxy-submit with a validated payload",docsLabel:"Helper",endpointLabel:"Any endpoint via x-roxy-ui hints",docsSummary:"Schema-driven form, emits roxy-submit",topic:"Helpers",selfFetching:!0},{pascal:"RoxyLocationSearch",tag:"roxy-location-search",slug:"location-search",heading:"City search",description:"City search input with debounced /location/search calls",docsLabel:"Helper",endpointLabel:"GET /location/search",docsSummary:"Debounced city search input, emits roxy-location-select",topic:"Helpers",selfFetching:!0},{pascal:"RoxyData",tag:"roxy-data",slug:"data",heading:"Generic renderer",description:"Generic fallback renderer for any OpenAPI response shape",docsLabel:"Helper",endpointLabel:"Any response shape",docsSummary:"Generic fallback renderer for unknown shapes",topic:"Helpers",selfFetching:!0}];var Zr="0.3.1";var Kt=Qe.map(i=>i.slug);return at(Ut);})();
|
|
5102
|
+
`],p([y({attribute:!1})],le.prototype,"data",2),p([z()],le.prototype,"filter",2),le=p([b("roxy-yoga-list")],le);var dt=[{pascal:"RoxyNatalChart",tag:"roxy-natal-chart",slug:"natal-chart",heading:"Natal chart",description:"Western natal chart wheel for /astrology/natal-chart responses",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Natal chart wheel with planet glyphs and aspect lines",topic:"Astrology"},{pascal:"RoxySynastryChart",tag:"roxy-synastry-chart",slug:"synastry-chart",heading:"Synastry",description:"Dual-wheel synastry chart with inter-aspects table",docsLabel:"Western",endpointLabel:"POST /astrology/synastry",docsSummary:"Dual-wheel synastry with inter-aspects table",topic:"Astrology"},{pascal:"RoxyWesternPlanetsTable",tag:"roxy-western-planets-table",slug:"western-planets-table",heading:"Western planets",description:"Western planetary positions table with sign, degree, house, and motion plus the chart angles",docsLabel:"Western",endpointLabel:"POST /astrology/natal-chart",docsSummary:"Sign, degree, house, motion columns plus ASC, MC, PoF, Vertex",topic:"Astrology"},{pascal:"RoxyTransitsTable",tag:"roxy-transits-table",slug:"transits-table",heading:"Transits",description:"Live planet positions plus aspects to a natal chart",docsLabel:"Western",endpointLabel:"POST /astrology/transits",docsSummary:"Transit planet positions plus optional aspects to a natal chart",topic:"Astrology"},{pascal:"RoxyMoonPhase",tag:"roxy-moon-phase",slug:"moon-phase",heading:"Moon phase",description:"Moon phase card and calendar",docsLabel:"Western",endpointLabel:"GET /astrology/moon-phase/{current,upcoming,calendar/...}",docsSummary:"Moon phase card and calendar",topic:"Astrology"},{pascal:"RoxyHoroscopeCard",tag:"roxy-horoscope-card",slug:"horoscope-card",heading:"Daily horoscope",description:"Daily, weekly, or monthly horoscope card for /astrology/horoscope/...",docsLabel:"Western",endpointLabel:"GET /astrology/horoscope/{sign}/{daily,weekly,monthly}",docsSummary:"Daily, weekly, or monthly horoscope card",topic:"Astrology"},{pascal:"RoxyCompatibilityCard",tag:"roxy-compatibility-card",slug:"compatibility-card",heading:"Compatibility score",description:"Cross-domain compatibility score card",docsLabel:"Cross",endpointLabel:"POST /astrology/compatibility-score, /numerology/compatibility, /biorhythm/compatibility",docsSummary:"Score card with category breakdown",topic:"Astrology"},{pascal:"RoxyVedicKundli",tag:"roxy-vedic-kundli",slug:"vedic-kundli",heading:"Vedic kundli",description:"South, North, or East Indian Vedic kundli for /vedic-astrology/birth-chart with per-planet degree and nakshatra detail",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"South, North, or East Indian kundli with degree detail",topic:"Vedic"},{pascal:"RoxyDivisionalChart",tag:"roxy-divisional-chart",slug:"divisional-chart",heading:"Divisional chart",description:"D2 to D60 varga chart wheel with Vargottama markers",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/divisional-chart",docsSummary:"Generic divisional varga wheel from D2 Hora to D60 Shashtiamsa",topic:"Vedic"},{pascal:"RoxyKpChart",tag:"roxy-kp-chart",slug:"kp-chart",heading:"KP chart",description:"Full KP chart with Ascendant, Placidus cusps, and planets in tabbed stellar-hierarchy tables",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/chart",docsSummary:"Ascendant, cusps, and planets with KP stellar hierarchy",topic:"Vedic"},{pascal:"RoxyVedicPlanetsTable",tag:"roxy-vedic-planets-table",slug:"vedic-planets-table",heading:"Vedic planets",description:"Vedic planetary positions table with degree, nakshatra, pada, nakshatra lord, bhava, and avastha",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/birth-chart",docsSummary:"Degree, nakshatra, pada, lord, bhava, avastha columns",topic:"Vedic"},{pascal:"RoxyKpPlanetsTable",tag:"roxy-kp-planets-table",slug:"kp-planets-table",heading:"KP planets",description:"KP planets table with sub-lord and sub-sub-lord columns",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/planets",docsSummary:"Sub-lord and sub-sub-lord columns",topic:"Vedic"},{pascal:"RoxyKpRulingPlanets",tag:"roxy-kp-ruling-planets",slug:"kp-ruling-planets",heading:"KP ruling planets",description:"KP ruling planets with day lord, Moon and Lagna stellar hierarchies, and house significators",docsLabel:"Vedic (KP)",endpointLabel:"POST /vedic-astrology/kp/ruling-planets",docsSummary:"Day lord, Moon/Lagna hierarchies, ruling planets, significators",topic:"Vedic"},{pascal:"RoxyAshtakavargaGrid",tag:"roxy-ashtakavarga-grid",slug:"ashtakavarga-grid",heading:"Ashtakavarga",description:"Sarva and Bhinna ashtakavarga heatmap with bindu scores",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/ashtakavarga",docsSummary:"Sarva, Bhinna, and Shodhya Pinda views in a tabbed heatmap",topic:"Vedic"},{pascal:"RoxyShadbalaTable",tag:"roxy-shadbala-table",slug:"shadbala-table",heading:"Shadbala",description:"Six-fold planetary strength with adequacy badge per planet",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/shadbala",docsSummary:"Six-fold planetary strength bar plus rupas and adequacy badge",topic:"Vedic"},{pascal:"RoxyDashaTimeline",tag:"roxy-dasha-timeline",slug:"dasha-timeline",heading:"Vimshottari dasha",description:"Vimshottari dasha timeline with active mahadasha highlighted",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dasha/{current,major,sub/...}",docsSummary:"Vimshottari mahadasha + antardasha + pratyantardasha",topic:"Vedic"},{pascal:"RoxyGunaMilan",tag:"roxy-guna-milan",slug:"guna-milan",heading:"Guna milan",description:"36-point Ashtakoota matrimonial compatibility breakdown",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/compatibility",docsSummary:"36-point Ashtakoota with eight sub-scores",topic:"Vedic"},{pascal:"RoxyPanchangTable",tag:"roxy-panchang-table",slug:"panchang-table",heading:"Panchang",description:"Panchang muhurta table with auspicious and inauspicious periods",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/{basic,detailed}",docsSummary:"15+ muhurtas in detailed mode",topic:"Vedic"},{pascal:"RoxyChoghadiyaGrid",tag:"roxy-choghadiya-grid",slug:"choghadiya-grid",heading:"Choghadiya",description:"Day and night Choghadiya muhurta tiles for activity timing",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/panchang/choghadiya",docsSummary:"Day and night Choghadiya muhurta tiles colored by effect",topic:"Vedic"},{pascal:"RoxyYogaList",tag:"roxy-yoga-list",slug:"yoga-list",heading:"Yoga catalog",description:"Yoga reference cards from the catalog with optional detail mode",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/yoga, /yoga/{id}",docsSummary:"Filterable yoga cards from the 300 plus yoga catalog",topic:"Vedic"},{pascal:"RoxyNakshatraCard",tag:"roxy-nakshatra-card",slug:"nakshatra-card",heading:"Nakshatra",description:"Nakshatra reference card with lord, deity, symbol, characteristics, and remedies",docsLabel:"Vedic",endpointLabel:"GET /vedic-astrology/nakshatras/{id}",docsSummary:"Lord, deity, symbol, characteristics, remedies",topic:"Vedic"},{pascal:"RoxyDoshaCard",tag:"roxy-dosha-card",slug:"dosha-card",heading:"Manglik dosha",description:"Manglik, Kaal Sarp, or Sade Sati presence card",docsLabel:"Vedic",endpointLabel:"POST /vedic-astrology/dosha/{manglik,kalsarpa,sadhesati}",docsSummary:"Presence, severity, remedies, scoped effects",topic:"Vedic"},{pascal:"RoxyNumerologyCard",tag:"roxy-numerology-card",slug:"numerology-card",heading:"Life path number",description:"Numerology card for life path, expression, personal year, or full chart",docsLabel:"Numerology",endpointLabel:"POST /numerology/{life-path,expression,personal-year,chart}",docsSummary:"Life path, expression, personal year, full chart",topic:"Numerology"},{pascal:"RoxyTarotCard",tag:"roxy-tarot-card",slug:"tarot-card",heading:"Daily tarot card",description:"Single tarot card with upright/reversed flip animation",docsLabel:"Tarot",endpointLabel:"GET /tarot/cards/{id}, POST /tarot/daily",docsSummary:"Single card with upright and reversed flip",topic:"Tarot"},{pascal:"RoxyTarotSpread",tag:"roxy-tarot-spread",slug:"tarot-spread",heading:"Three-card spread",description:"Tarot spread renderer for three-card, Celtic Cross, love, or yes/no",docsLabel:"Tarot",endpointLabel:"POST /tarot/spreads/{three-card,celtic-cross,love}, /tarot/yes-no, /tarot/draw",docsSummary:"Spreads with positions and reading",topic:"Tarot"},{pascal:"RoxyBiorhythmChart",tag:"roxy-biorhythm-chart",slug:"biorhythm-chart",heading:"Daily biorhythm",description:"Daily biorhythm bars or multi-day forecast cycle lines",docsLabel:"Biorhythm",endpointLabel:"POST /biorhythm/{daily,forecast,critical-days}",docsSummary:"Daily bars, forecast cycle lines, critical days",topic:"Biorhythm"},{pascal:"RoxyHexagram",tag:"roxy-hexagram",slug:"hexagram",heading:"I Ching hexagram",description:"I Ching hexagram with trigram glyphs, judgment, image, and changing lines",docsLabel:"I Ching",endpointLabel:"GET /iching/hexagrams/{number}, /iching/cast, POST /iching/daily, /iching/daily/cast",docsSummary:"Hexagram with trigrams, judgment, image, changing lines",topic:"I Ching"},{pascal:"RoxyEndpointForm",tag:"roxy-endpoint-form",slug:"endpoint-form",heading:"Schema-driven form",description:"Schema-driven form that emits roxy-submit with a validated payload",docsLabel:"Helper",endpointLabel:"Any endpoint via x-roxy-ui hints",docsSummary:"Schema-driven form, emits roxy-submit",topic:"Helpers",selfFetching:!0},{pascal:"RoxyLocationSearch",tag:"roxy-location-search",slug:"location-search",heading:"City search",description:"City search input with debounced /location/search calls",docsLabel:"Helper",endpointLabel:"GET /location/search",docsSummary:"Debounced city search input, emits roxy-location-select",topic:"Helpers",selfFetching:!0},{pascal:"RoxyData",tag:"roxy-data",slug:"data",heading:"Generic renderer",description:"Generic fallback renderer for any OpenAPI response shape",docsLabel:"Helper",endpointLabel:"Any response shape",docsSummary:"Generic fallback renderer for unknown shapes",topic:"Helpers",selfFetching:!0}];var cr="0.4.1";var ha=dt.map(n=>n.slug);return yr(ga);})();
|
|
4837
5103
|
/*! Bundled license information:
|
|
4838
5104
|
|
|
4839
5105
|
@lit/reactive-element/css-tag.js:
|