@roxyapi/ui 0.2.3 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/AGENTS.md +15 -10
  2. package/README.md +15 -10
  3. package/dist/cdn/components/compatibility-card.js.map +1 -1
  4. package/dist/cdn/components/dasha-timeline.js +8 -8
  5. package/dist/cdn/components/dasha-timeline.js.map +2 -2
  6. package/dist/cdn/components/divisional-chart.js +35 -23
  7. package/dist/cdn/components/divisional-chart.js.map +4 -4
  8. package/dist/cdn/components/guna-milan.js.map +1 -1
  9. package/dist/cdn/components/kp-chart.js +306 -0
  10. package/dist/cdn/components/kp-chart.js.map +7 -0
  11. package/dist/cdn/components/kp-planets-table.js.map +1 -1
  12. package/dist/cdn/components/kp-ruling-planets.js +269 -0
  13. package/dist/cdn/components/kp-ruling-planets.js.map +7 -0
  14. package/dist/cdn/components/location-search.js +7 -5
  15. package/dist/cdn/components/location-search.js.map +3 -3
  16. package/dist/cdn/components/moon-phase.js.map +1 -1
  17. package/dist/cdn/components/nakshatra-card.js +229 -0
  18. package/dist/cdn/components/nakshatra-card.js.map +7 -0
  19. package/dist/cdn/components/natal-chart.js +228 -115
  20. package/dist/cdn/components/natal-chart.js.map +4 -4
  21. package/dist/cdn/components/numerology-card.js +3 -3
  22. package/dist/cdn/components/numerology-card.js.map +2 -2
  23. package/dist/cdn/components/panchang-table.js.map +1 -1
  24. package/dist/cdn/components/shadbala-table.js.map +1 -1
  25. package/dist/cdn/components/synastry-chart.js +3 -3
  26. package/dist/cdn/components/synastry-chart.js.map +2 -2
  27. package/dist/cdn/components/transits-table.js.map +1 -1
  28. package/dist/cdn/components/vedic-kundli.js +34 -22
  29. package/dist/cdn/components/vedic-kundli.js.map +4 -4
  30. package/dist/cdn/components/vedic-planets-table.js +231 -0
  31. package/dist/cdn/components/vedic-planets-table.js.map +7 -0
  32. package/dist/cdn/components/western-planets-table.js +220 -0
  33. package/dist/cdn/components/western-planets-table.js.map +7 -0
  34. package/dist/cdn/roxy-ui.js +1078 -331
  35. package/dist/cdn/roxy-ui.js.map +4 -4
  36. package/dist/components/compatibility-card.js.map +1 -1
  37. package/dist/components/dasha-timeline.d.ts.map +1 -1
  38. package/dist/components/dasha-timeline.js.map +2 -2
  39. package/dist/components/divisional-chart.d.ts +5 -3
  40. package/dist/components/divisional-chart.d.ts.map +1 -1
  41. package/dist/components/divisional-chart.js +159 -38
  42. package/dist/components/divisional-chart.js.map +3 -3
  43. package/dist/components/guna-milan.js.map +1 -1
  44. package/dist/components/kp-chart.d.ts +26 -0
  45. package/dist/components/kp-chart.d.ts.map +1 -0
  46. package/dist/components/kp-chart.js +382 -0
  47. package/dist/components/kp-chart.js.map +7 -0
  48. package/dist/components/kp-planets-table.js.map +1 -1
  49. package/dist/components/kp-ruling-planets.d.ts +20 -0
  50. package/dist/components/kp-ruling-planets.d.ts.map +1 -0
  51. package/dist/components/kp-ruling-planets.js +275 -0
  52. package/dist/components/kp-ruling-planets.js.map +7 -0
  53. package/dist/components/location-search.d.ts.map +1 -1
  54. package/dist/components/location-search.js +9 -2
  55. package/dist/components/location-search.js.map +2 -2
  56. package/dist/components/moon-phase.js.map +1 -1
  57. package/dist/components/nakshatra-card.d.ts +18 -0
  58. package/dist/components/nakshatra-card.d.ts.map +1 -0
  59. package/dist/components/nakshatra-card.js +231 -0
  60. package/dist/components/nakshatra-card.js.map +7 -0
  61. package/dist/components/natal-chart.d.ts +28 -0
  62. package/dist/components/natal-chart.d.ts.map +1 -1
  63. package/dist/components/natal-chart.js +401 -104
  64. package/dist/components/natal-chart.js.map +2 -2
  65. package/dist/components/numerology-card.d.ts.map +1 -1
  66. package/dist/components/numerology-card.js.map +2 -2
  67. package/dist/components/panchang-table.js.map +1 -1
  68. package/dist/components/shadbala-table.js.map +1 -1
  69. package/dist/components/synastry-chart.js.map +2 -2
  70. package/dist/components/transits-table.js.map +1 -1
  71. package/dist/components/vedic-kundli.d.ts +7 -3
  72. package/dist/components/vedic-kundli.d.ts.map +1 -1
  73. package/dist/components/vedic-kundli.js +209 -87
  74. package/dist/components/vedic-kundli.js.map +3 -3
  75. package/dist/components/vedic-planets-table.d.ts +21 -0
  76. package/dist/components/vedic-planets-table.d.ts.map +1 -0
  77. package/dist/components/vedic-planets-table.js +355 -0
  78. package/dist/components/vedic-planets-table.js.map +7 -0
  79. package/dist/components/western-planets-table.d.ts +21 -0
  80. package/dist/components/western-planets-table.d.ts.map +1 -0
  81. package/dist/components/western-planets-table.js +350 -0
  82. package/dist/components/western-planets-table.js.map +7 -0
  83. package/dist/index.cjs +2042 -695
  84. package/dist/index.cjs.map +4 -4
  85. package/dist/index.d.ts +5 -0
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +2029 -682
  88. package/dist/index.js.map +4 -4
  89. package/dist/manifest.d.ts.map +1 -1
  90. package/dist/manifest.json +23 -18
  91. package/dist/styles/tokens.css +4 -0
  92. package/dist/types/types.gen.d.ts +343 -49
  93. package/dist/types/types.gen.d.ts.map +1 -1
  94. package/dist/utils/degree.d.ts +12 -0
  95. package/dist/utils/degree.d.ts.map +1 -1
  96. package/dist/utils/format.d.ts +1 -1
  97. package/dist/utils/kundli-render.d.ts +85 -12
  98. package/dist/utils/kundli-render.d.ts.map +1 -1
  99. package/dist/version.d.ts +1 -1
  100. package/package.json +1 -1
  101. package/src/components/dasha-timeline.ts +1 -7
  102. package/src/components/divisional-chart.ts +27 -41
  103. package/src/components/kp-chart.ts +313 -0
  104. package/src/components/kp-ruling-planets.ts +196 -0
  105. package/src/components/location-search.ts +16 -2
  106. package/src/components/nakshatra-card.ts +149 -0
  107. package/src/components/natal-chart.ts +408 -119
  108. package/src/components/numerology-card.ts +1 -5
  109. package/src/components/vedic-kundli.ts +30 -40
  110. package/src/components/vedic-planets-table.ts +184 -0
  111. package/src/components/western-planets-table.ts +180 -0
  112. package/src/index.ts +5 -0
  113. package/src/manifest.ts +146 -84
  114. package/src/styles/tokens.css +4 -0
  115. package/src/types/types.gen.ts +343 -49
  116. package/src/utils/degree.ts +21 -0
  117. package/src/utils/format.ts +1 -1
  118. package/src/utils/kundli-render.ts +234 -29
  119. package/src/version.ts +1 -1
@@ -0,0 +1,231 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result) __defProp(target, key, result);
9
+ return result;
10
+ };
11
+
12
+ // packages/ui/src/components/nakshatra-card.ts
13
+ import { css as css2, html, LitElement, nothing } from "lit";
14
+ import { customElement, property } from "lit/decorators.js";
15
+
16
+ // packages/ui/src/utils/base-styles.ts
17
+ import { css } from "lit";
18
+ var baseStyles = css`
19
+ :host {
20
+ display: block;
21
+ container-type: inline-size;
22
+ font-family: var(
23
+ --roxy-font-sans,
24
+ system-ui,
25
+ -apple-system,
26
+ BlinkMacSystemFont,
27
+ 'Segoe UI',
28
+ Roboto,
29
+ sans-serif
30
+ );
31
+ color: var(--roxy-fg, #0a0a0a);
32
+ background: transparent;
33
+ font-size: var(--roxy-text-base, 1rem);
34
+ line-height: var(--roxy-leading-normal, 1.5);
35
+ animation: roxy-fade-in var(--roxy-motion-duration, 200ms)
36
+ var(--roxy-motion-easing, cubic-bezier(0.4, 0, 0.2, 1)) both;
37
+ }
38
+
39
+ *,
40
+ *::before,
41
+ *::after {
42
+ box-sizing: border-box;
43
+ }
44
+
45
+ @keyframes roxy-fade-in {
46
+ from {
47
+ opacity: 0;
48
+ transform: translateY(2px);
49
+ }
50
+ to {
51
+ opacity: 1;
52
+ transform: translateY(0);
53
+ }
54
+ }
55
+
56
+ @media (prefers-reduced-motion: reduce) {
57
+ :host {
58
+ animation: none;
59
+ }
60
+ }
61
+
62
+ .roxy-skeleton {
63
+ background: linear-gradient(
64
+ 90deg,
65
+ var(--roxy-border, #e4e4e7) 0%,
66
+ color-mix(in srgb, var(--roxy-border, #e4e4e7) 60%, transparent) 50%,
67
+ var(--roxy-border, #e4e4e7) 100%
68
+ );
69
+ background-size: 200% 100%;
70
+ animation: roxy-shimmer 1.4s ease-in-out infinite;
71
+ border-radius: var(--roxy-radius-md, 8px);
72
+ }
73
+
74
+ @keyframes roxy-shimmer {
75
+ 0% {
76
+ background-position: 200% 0;
77
+ }
78
+ 100% {
79
+ background-position: -200% 0;
80
+ }
81
+ }
82
+
83
+ @media (prefers-reduced-motion: reduce) {
84
+ .roxy-skeleton {
85
+ animation: none;
86
+ }
87
+ }
88
+
89
+ .roxy-empty {
90
+ padding: var(--roxy-space-lg, 1.5rem);
91
+ color: var(--roxy-muted, #71717a);
92
+ text-align: center;
93
+ font-size: var(--roxy-text-sm, 0.875rem);
94
+ }
95
+
96
+ :host(:focus-within) .roxy-card {
97
+ outline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));
98
+ outline-offset: 2px;
99
+ }
100
+ `;
101
+
102
+ // packages/ui/src/components/nakshatra-card.ts
103
+ var RoxyNakshatraCard = class extends LitElement {
104
+ constructor() {
105
+ super(...arguments);
106
+ this.data = null;
107
+ }
108
+ render() {
109
+ if (!this.data)
110
+ return html`<div class="roxy-empty" role="status">No nakshatra data</div>`;
111
+ const n = this.data;
112
+ const remedies = n.remedies;
113
+ return html`<article class="wrap" aria-label=${`Nakshatra ${n.name}`}>
114
+ <header class="head">
115
+ <h2 class="name">${n.name}</h2>
116
+ ${typeof n.number === "number" ? html`<span class="number">Nakshatra ${n.number} of 27</span>` : nothing}
117
+ ${n.range ? html`<span class="range">${n.range}</span>` : nothing}
118
+ </header>
119
+
120
+ <dl class="facts">
121
+ ${n.lord ? html`<div class="fact"><dt>Lord</dt><dd>${n.lord}</dd></div>` : nothing}
122
+ ${n.deity ? html`<div class="fact"><dt>Deity</dt><dd>${n.deity}</dd></div>` : nothing}
123
+ ${n.symbol ? html`<div class="fact"><dt>Symbol</dt><dd>${n.symbol}</dd></div>` : nothing}
124
+ </dl>
125
+
126
+ ${n.characteristics ? html`<div class="section">
127
+ <h3>Characteristics</h3>
128
+ <p>${n.characteristics}</p>
129
+ </div>` : nothing}
130
+
131
+ ${remedies ? html`<div class="section">
132
+ <h3>Remedies</h3>
133
+ <div class="remedies">
134
+ ${remedies.mantras ? html`<div class="remedy"><strong>Mantras:</strong> ${remedies.mantras}</div>` : nothing}
135
+ ${remedies.gemstones ? html`<div class="remedy"><strong>Gemstones:</strong> ${remedies.gemstones}</div>` : nothing}
136
+ ${remedies.rituals ? html`<div class="remedy"><strong>Rituals:</strong> ${remedies.rituals}</div>` : nothing}
137
+ </div>
138
+ </div>` : nothing}
139
+ </article>`;
140
+ }
141
+ };
142
+ RoxyNakshatraCard.styles = [
143
+ baseStyles,
144
+ css2`
145
+ .wrap {
146
+ border: 1px solid var(--roxy-border, #e4e4e7);
147
+ border-radius: var(--roxy-radius-md, 8px);
148
+ background: var(--roxy-bg, #fff);
149
+ padding: var(--roxy-space-md, 1rem);
150
+ display: grid;
151
+ gap: var(--roxy-space-md, 1rem);
152
+ box-shadow: var(--roxy-shadow-sm);
153
+ }
154
+ .head {
155
+ display: flex;
156
+ align-items: baseline;
157
+ gap: var(--roxy-space-sm, 0.5rem);
158
+ flex-wrap: wrap;
159
+ }
160
+ .name {
161
+ margin: 0;
162
+ font-size: var(--roxy-text-lg, 1.125rem);
163
+ font-weight: var(--roxy-weight-bold, 600);
164
+ }
165
+ .number {
166
+ color: var(--roxy-accent-fg, #b45309);
167
+ font-size: var(--roxy-text-sm, 0.875rem);
168
+ font-weight: var(--roxy-weight-bold, 600);
169
+ }
170
+ .range {
171
+ color: var(--roxy-muted, #71717a);
172
+ font-size: var(--roxy-text-sm, 0.875rem);
173
+ }
174
+ .facts {
175
+ display: grid;
176
+ grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
177
+ gap: var(--roxy-space-sm, 0.5rem);
178
+ }
179
+ .fact {
180
+ display: grid;
181
+ gap: 2px;
182
+ }
183
+ .fact dt {
184
+ color: var(--roxy-muted, #71717a);
185
+ font-size: var(--roxy-text-xs, 0.75rem);
186
+ text-transform: uppercase;
187
+ letter-spacing: 0.05em;
188
+ }
189
+ .fact dd {
190
+ margin: 0;
191
+ color: var(--roxy-fg, #0a0a0a);
192
+ font-size: var(--roxy-text-sm, 0.875rem);
193
+ }
194
+ .section h3 {
195
+ margin: 0 0 var(--roxy-space-xs, 0.25rem);
196
+ font-size: var(--roxy-text-sm, 0.875rem);
197
+ font-weight: var(--roxy-weight-bold, 600);
198
+ color: var(--roxy-muted, #71717a);
199
+ text-transform: uppercase;
200
+ letter-spacing: 0.05em;
201
+ }
202
+ .section p {
203
+ margin: 0;
204
+ font-size: var(--roxy-text-sm, 0.875rem);
205
+ color: var(--roxy-fg, #0a0a0a);
206
+ line-height: 1.5;
207
+ }
208
+ .remedies {
209
+ display: grid;
210
+ gap: var(--roxy-space-xs, 0.25rem);
211
+ }
212
+ .remedy {
213
+ font-size: var(--roxy-text-sm, 0.875rem);
214
+ color: var(--roxy-fg, #0a0a0a);
215
+ }
216
+ .remedy strong {
217
+ color: var(--roxy-muted, #71717a);
218
+ font-weight: var(--roxy-weight-bold, 600);
219
+ }
220
+ `
221
+ ];
222
+ __decorateClass([
223
+ property({ attribute: false })
224
+ ], RoxyNakshatraCard.prototype, "data", 2);
225
+ RoxyNakshatraCard = __decorateClass([
226
+ customElement("roxy-nakshatra-card")
227
+ ], RoxyNakshatraCard);
228
+ export {
229
+ RoxyNakshatraCard
230
+ };
231
+ //# sourceMappingURL=nakshatra-card.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/nakshatra-card.ts", "../../src/utils/base-styles.ts"],
4
+ "sourcesContent": ["import { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport type { NakshatraResponse } from '../types/index.js';\nimport { baseStyles } from '../utils/base-styles.js';\n\n/**\n * Nakshatra reference card. Renders /vedic-astrology/nakshatras/{id}: the\n * lunar mansion number, longitude range, ruling planet, presiding deity,\n * symbol, native characteristics, and traditional remedies.\n */\n@customElement('roxy-nakshatra-card')\nexport class RoxyNakshatraCard extends LitElement {\n\tstatic styles = [\n\t\tbaseStyles,\n\t\tcss`\n\t\t\t.wrap {\n\t\t\t\tborder: 1px solid var(--roxy-border, #e4e4e7);\n\t\t\t\tborder-radius: var(--roxy-radius-md, 8px);\n\t\t\t\tbackground: var(--roxy-bg, #fff);\n\t\t\t\tpadding: var(--roxy-space-md, 1rem);\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: var(--roxy-space-md, 1rem);\n\t\t\t\tbox-shadow: var(--roxy-shadow-sm);\n\t\t\t}\n\t\t\t.head {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: baseline;\n\t\t\t\tgap: var(--roxy-space-sm, 0.5rem);\n\t\t\t\tflex-wrap: wrap;\n\t\t\t}\n\t\t\t.name {\n\t\t\t\tmargin: 0;\n\t\t\t\tfont-size: var(--roxy-text-lg, 1.125rem);\n\t\t\t\tfont-weight: var(--roxy-weight-bold, 600);\n\t\t\t}\n\t\t\t.number {\n\t\t\t\tcolor: var(--roxy-accent-fg, #b45309);\n\t\t\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t\t\t\tfont-weight: var(--roxy-weight-bold, 600);\n\t\t\t}\n\t\t\t.range {\n\t\t\t\tcolor: var(--roxy-muted, #71717a);\n\t\t\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t\t\t}\n\t\t\t.facts {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgrid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));\n\t\t\t\tgap: var(--roxy-space-sm, 0.5rem);\n\t\t\t}\n\t\t\t.fact {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: 2px;\n\t\t\t}\n\t\t\t.fact dt {\n\t\t\t\tcolor: var(--roxy-muted, #71717a);\n\t\t\t\tfont-size: var(--roxy-text-xs, 0.75rem);\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.05em;\n\t\t\t}\n\t\t\t.fact dd {\n\t\t\t\tmargin: 0;\n\t\t\t\tcolor: var(--roxy-fg, #0a0a0a);\n\t\t\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t\t\t}\n\t\t\t.section h3 {\n\t\t\t\tmargin: 0 0 var(--roxy-space-xs, 0.25rem);\n\t\t\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t\t\t\tfont-weight: var(--roxy-weight-bold, 600);\n\t\t\t\tcolor: var(--roxy-muted, #71717a);\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.05em;\n\t\t\t}\n\t\t\t.section p {\n\t\t\t\tmargin: 0;\n\t\t\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t\t\t\tcolor: var(--roxy-fg, #0a0a0a);\n\t\t\t\tline-height: 1.5;\n\t\t\t}\n\t\t\t.remedies {\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: var(--roxy-space-xs, 0.25rem);\n\t\t\t}\n\t\t\t.remedy {\n\t\t\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t\t\t\tcolor: var(--roxy-fg, #0a0a0a);\n\t\t\t}\n\t\t\t.remedy strong {\n\t\t\t\tcolor: var(--roxy-muted, #71717a);\n\t\t\t\tfont-weight: var(--roxy-weight-bold, 600);\n\t\t\t}\n\t\t`,\n\t];\n\n\t@property({ attribute: false })\n\tdata: NakshatraResponse | null = null;\n\n\trender() {\n\t\tif (!this.data)\n\t\t\treturn html`<div class=\"roxy-empty\" role=\"status\">No nakshatra data</div>`;\n\t\tconst n = this.data;\n\t\tconst remedies = n.remedies;\n\n\t\treturn html`<article class=\"wrap\" aria-label=${`Nakshatra ${n.name}`}>\n\t\t\t<header class=\"head\">\n\t\t\t\t<h2 class=\"name\">${n.name}</h2>\n\t\t\t\t${\n\t\t\t\t\ttypeof n.number === 'number'\n\t\t\t\t\t\t? html`<span class=\"number\">Nakshatra ${n.number} of 27</span>`\n\t\t\t\t\t\t: nothing\n\t\t\t\t}\n\t\t\t\t${n.range ? html`<span class=\"range\">${n.range}</span>` : nothing}\n\t\t\t</header>\n\n\t\t\t<dl class=\"facts\">\n\t\t\t\t${n.lord ? html`<div class=\"fact\"><dt>Lord</dt><dd>${n.lord}</dd></div>` : nothing}\n\t\t\t\t${n.deity ? html`<div class=\"fact\"><dt>Deity</dt><dd>${n.deity}</dd></div>` : nothing}\n\t\t\t\t${n.symbol ? html`<div class=\"fact\"><dt>Symbol</dt><dd>${n.symbol}</dd></div>` : nothing}\n\t\t\t</dl>\n\n\t\t\t${\n\t\t\t\tn.characteristics\n\t\t\t\t\t? html`<div class=\"section\">\n\t\t\t\t\t\t<h3>Characteristics</h3>\n\t\t\t\t\t\t<p>${n.characteristics}</p>\n\t\t\t\t\t</div>`\n\t\t\t\t\t: nothing\n\t\t\t}\n\n\t\t\t${\n\t\t\t\tremedies\n\t\t\t\t\t? html`<div class=\"section\">\n\t\t\t\t\t\t<h3>Remedies</h3>\n\t\t\t\t\t\t<div class=\"remedies\">\n\t\t\t\t\t\t\t${remedies.mantras ? html`<div class=\"remedy\"><strong>Mantras:</strong> ${remedies.mantras}</div>` : nothing}\n\t\t\t\t\t\t\t${remedies.gemstones ? html`<div class=\"remedy\"><strong>Gemstones:</strong> ${remedies.gemstones}</div>` : nothing}\n\t\t\t\t\t\t\t${remedies.rituals ? html`<div class=\"remedy\"><strong>Rituals:</strong> ${remedies.rituals}</div>` : nothing}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>`\n\t\t\t\t\t: nothing\n\t\t\t}\n\t\t</article>`;\n\t}\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'roxy-nakshatra-card': RoxyNakshatraCard;\n\t}\n}\n", "import { css } from 'lit';\n\n/**\n * Shared host styles every component pulls in. Sets default font, color,\n * container query support, and the entry fade-in.\n */\nexport const baseStyles = css`\n\t:host {\n\t\tdisplay: block;\n\t\tcontainer-type: inline-size;\n\t\tfont-family: var(\n\t\t\t--roxy-font-sans,\n\t\t\tsystem-ui,\n\t\t\t-apple-system,\n\t\t\tBlinkMacSystemFont,\n\t\t\t'Segoe UI',\n\t\t\tRoboto,\n\t\t\tsans-serif\n\t\t);\n\t\tcolor: var(--roxy-fg, #0a0a0a);\n\t\tbackground: transparent;\n\t\tfont-size: var(--roxy-text-base, 1rem);\n\t\tline-height: var(--roxy-leading-normal, 1.5);\n\t\tanimation: roxy-fade-in var(--roxy-motion-duration, 200ms)\n\t\t\tvar(--roxy-motion-easing, cubic-bezier(0.4, 0, 0.2, 1)) both;\n\t}\n\n\t*,\n\t*::before,\n\t*::after {\n\t\tbox-sizing: border-box;\n\t}\n\n\t@keyframes roxy-fade-in {\n\t\tfrom {\n\t\t\topacity: 0;\n\t\t\ttransform: translateY(2px);\n\t\t}\n\t\tto {\n\t\t\topacity: 1;\n\t\t\ttransform: translateY(0);\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t:host {\n\t\t\tanimation: none;\n\t\t}\n\t}\n\n\t.roxy-skeleton {\n\t\tbackground: linear-gradient(\n\t\t\t90deg,\n\t\t\tvar(--roxy-border, #e4e4e7) 0%,\n\t\t\tcolor-mix(in srgb, var(--roxy-border, #e4e4e7) 60%, transparent) 50%,\n\t\t\tvar(--roxy-border, #e4e4e7) 100%\n\t\t);\n\t\tbackground-size: 200% 100%;\n\t\tanimation: roxy-shimmer 1.4s ease-in-out infinite;\n\t\tborder-radius: var(--roxy-radius-md, 8px);\n\t}\n\n\t@keyframes roxy-shimmer {\n\t\t0% {\n\t\t\tbackground-position: 200% 0;\n\t\t}\n\t\t100% {\n\t\t\tbackground-position: -200% 0;\n\t\t}\n\t}\n\n\t@media (prefers-reduced-motion: reduce) {\n\t\t.roxy-skeleton {\n\t\t\tanimation: none;\n\t\t}\n\t}\n\n\t.roxy-empty {\n\t\tpadding: var(--roxy-space-lg, 1.5rem);\n\t\tcolor: var(--roxy-muted, #71717a);\n\t\ttext-align: center;\n\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t}\n\n\t:host(:focus-within) .roxy-card {\n\t\toutline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));\n\t\toutline-offset: 2px;\n\t}\n`;\n"],
5
+ "mappings": ";;;;;;;;;;;;AAAA,SAAS,OAAAA,MAAK,MAAM,YAAY,eAAe;AAC/C,SAAS,eAAe,gBAAgB;;;ACDxC,SAAS,WAAW;AAMb,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ADKnB,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAA3C;AAAA;AAmFN,gBAAiC;AAAA;AAAA,EAEjC,SAAS;AACR,QAAI,CAAC,KAAK;AACT,aAAO;AACR,UAAM,IAAI,KAAK;AACf,UAAM,WAAW,EAAE;AAEnB,WAAO,wCAAwC,aAAa,EAAE,IAAI,EAAE;AAAA;AAAA,uBAE/C,EAAE,IAAI;AAAA,MAExB,OAAO,EAAE,WAAW,WACjB,sCAAsC,EAAE,MAAM,kBAC9C,OACJ;AAAA,MACE,EAAE,QAAQ,2BAA2B,EAAE,KAAK,YAAY,OAAO;AAAA;AAAA;AAAA;AAAA,MAI/D,EAAE,OAAO,0CAA0C,EAAE,IAAI,gBAAgB,OAAO;AAAA,MAChF,EAAE,QAAQ,2CAA2C,EAAE,KAAK,gBAAgB,OAAO;AAAA,MACnF,EAAE,SAAS,4CAA4C,EAAE,MAAM,gBAAgB,OAAO;AAAA;AAAA;AAAA,KAIxF,EAAE,kBACC;AAAA;AAAA,WAEI,EAAE,eAAe;AAAA,eAErB,OACJ;AAAA;AAAA,KAGC,WACG;AAAA;AAAA;AAAA,SAGE,SAAS,UAAU,qDAAqD,SAAS,OAAO,WAAW,OAAO;AAAA,SAC1G,SAAS,YAAY,uDAAuD,SAAS,SAAS,WAAW,OAAO;AAAA,SAChH,SAAS,UAAU,qDAAqD,SAAS,OAAO,WAAW,OAAO;AAAA;AAAA,eAG5G,OACJ;AAAA;AAAA,EAEF;AACD;AAnIa,kBACL,SAAS;AAAA,EACf;AAAA,EACAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA6ED;AAGA;AAAA,EADC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAlFlB,kBAmFZ;AAnFY,oBAAN;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB;",
6
+ "names": ["css", "css"]
7
+ }
@@ -8,18 +8,46 @@ export declare class RoxyNatalChart extends LitElement {
8
8
  static styles: import("lit").CSSResult[];
9
9
  data: NatalChartResponse | null;
10
10
  houseSystem: 'placidus' | 'whole-sign' | 'equal' | 'koch';
11
+ /** Which view is showing: the wheel or the planet-by-planet aspect grid. */
12
+ private view;
11
13
  private getPlanets;
12
14
  private getAscendant;
13
15
  private getMidheaven;
14
16
  private toAngle;
15
17
  render(): import("lit").TemplateResult<1>;
18
+ private onTabKeyDown;
19
+ private renderWheel;
20
+ /**
21
+ * Planet-by-planet aspect grid: the lower-triangular matrix astrologers read
22
+ * alongside the wheel. Each filled cell shows the aspect glyph colored by
23
+ * nature, with the exact orb in the SVG-free `<title>` tooltip.
24
+ */
25
+ private renderAspectGrid;
16
26
  private renderAngles;
17
27
  private renderAngleMark;
18
28
  private renderSpokes;
19
29
  private renderSigns;
20
30
  private renderHouseNumbers;
31
+ /**
32
+ * Degree ticks on the outer zodiac band: a short mark every 5 degrees and a
33
+ * longer one on each 30-degree sign cusp, so the wheel reads like a
34
+ * reference-grade chart rather than a bare ring of glyphs.
35
+ */
36
+ private renderTicks;
37
+ /**
38
+ * Degree-and-minute label printed next to each house cusp on the wheel, so
39
+ * the exact cusp position is readable without leaving the chart.
40
+ */
41
+ private renderCuspDegrees;
21
42
  private renderPlanets;
22
43
  private renderDetails;
44
+ /**
45
+ * Element by modality grid: the 4x3 cross-tab astrologers read for chart
46
+ * balance. Each planet is placed by its sign into one cell (Fire/Earth/Air/
47
+ * Water row, Cardinal/Fixed/Mutable column). Derived purely from the planet
48
+ * signs, with row, column, and grand totals.
49
+ */
50
+ private renderElementModalityGrid;
23
51
  private renderInterpretations;
24
52
  private renderAspects;
25
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"natal-chart.d.ts","sourceRoot":"","sources":["../../src/components/natal-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAgB,MAAM,KAAK,CAAC;AAG1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAsB5D;;;GAGG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC7C,MAAM,CAAC,MAAM,4BAwOX;IAGF,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAGvC,WAAW,EAAE,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAc;IAEvE,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,OAAO;IAIf,MAAM;IAiEN,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,aAAa;IA8ErB,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,aAAa;CA6BrB;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,kBAAkB,EAAE,cAAc,CAAC;KACnC;CACD"}
1
+ {"version":3,"file":"natal-chart.d.ts","sourceRoot":"","sources":["../../src/components/natal-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAgB,MAAM,KAAK,CAAC;AAQ1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AA4B5D;;;GAGG;AACH,qBACa,cAAe,SAAQ,UAAU;IAC7C,MAAM,CAAC,MAAM,4BA4TX;IAGF,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAQ;IAGvC,WAAW,EAAE,UAAU,GAAG,YAAY,GAAG,OAAO,GAAG,MAAM,CAAc;IAEvE,4EAA4E;IAE5E,OAAO,CAAC,IAAI,CAA6B;IAEzC,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,OAAO;IAIf,MAAM;IA6DN,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,WAAW;IAsBnB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,kBAAkB;IA8B1B;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAenB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;IAiBrB,OAAO,CAAC,aAAa;IAwCrB;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IAsDjC,OAAO,CAAC,qBAAqB;IAyB7B,OAAO,CAAC,aAAa;CA6BrB;AAED,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,kBAAkB,EAAE,cAAc,CAAC;KACnC;CACD"}