@roxyapi/ui 0.0.1 → 0.1.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.
Files changed (166) hide show
  1. package/AGENTS.md +169 -0
  2. package/THEMING.md +129 -0
  3. package/dist/cdn/components/biorhythm-chart.js +261 -0
  4. package/dist/cdn/components/biorhythm-chart.js.map +7 -0
  5. package/dist/cdn/components/compatibility-card.js +257 -0
  6. package/dist/cdn/components/compatibility-card.js.map +7 -0
  7. package/dist/cdn/components/dasha-timeline.js +244 -0
  8. package/dist/cdn/components/dasha-timeline.js.map +7 -0
  9. package/dist/cdn/components/data.js +258 -0
  10. package/dist/cdn/components/data.js.map +7 -0
  11. package/dist/cdn/components/dosha-card.js +254 -0
  12. package/dist/cdn/components/dosha-card.js.map +7 -0
  13. package/dist/cdn/components/endpoint-form.js +253 -0
  14. package/dist/cdn/components/endpoint-form.js.map +7 -0
  15. package/dist/cdn/components/guna-milan.js +256 -0
  16. package/dist/cdn/components/guna-milan.js.map +7 -0
  17. package/dist/cdn/components/hexagram.js +275 -0
  18. package/dist/cdn/components/hexagram.js.map +7 -0
  19. package/dist/cdn/components/horoscope-card.js +302 -0
  20. package/dist/cdn/components/horoscope-card.js.map +7 -0
  21. package/dist/cdn/components/kp-planets-table.js +224 -0
  22. package/dist/cdn/components/kp-planets-table.js.map +7 -0
  23. package/dist/cdn/components/location-search.js +267 -0
  24. package/dist/cdn/components/location-search.js.map +7 -0
  25. package/dist/cdn/components/moon-phase.js +251 -0
  26. package/dist/cdn/components/moon-phase.js.map +7 -0
  27. package/dist/cdn/components/natal-chart.js +237 -0
  28. package/dist/cdn/components/natal-chart.js.map +7 -0
  29. package/dist/cdn/components/numerology-card.js +252 -0
  30. package/dist/cdn/components/numerology-card.js.map +7 -0
  31. package/dist/cdn/components/panchang-table.js +234 -0
  32. package/dist/cdn/components/panchang-table.js.map +7 -0
  33. package/dist/cdn/components/synastry-chart.js +303 -0
  34. package/dist/cdn/components/synastry-chart.js.map +7 -0
  35. package/dist/cdn/components/tarot-card.js +260 -0
  36. package/dist/cdn/components/tarot-card.js.map +7 -0
  37. package/dist/cdn/components/tarot-spread.js +261 -0
  38. package/dist/cdn/components/tarot-spread.js.map +7 -0
  39. package/dist/cdn/components/vedic-kundli.js +189 -0
  40. package/dist/cdn/components/vedic-kundli.js.map +7 -0
  41. package/dist/cdn/roxy-ui.js +2552 -0
  42. package/dist/cdn/roxy-ui.js.map +7 -0
  43. package/dist/cdn/widgets.js +114 -0
  44. package/dist/components/biorhythm-chart.d.ts +66 -0
  45. package/dist/components/biorhythm-chart.d.ts.map +1 -0
  46. package/dist/components/biorhythm-chart.js +318 -0
  47. package/dist/components/biorhythm-chart.js.map +7 -0
  48. package/dist/components/compatibility-card.d.ts +46 -0
  49. package/dist/components/compatibility-card.d.ts.map +1 -0
  50. package/dist/components/compatibility-card.js +279 -0
  51. package/dist/components/compatibility-card.js.map +7 -0
  52. package/dist/components/dasha-timeline.d.ts +53 -0
  53. package/dist/components/dasha-timeline.d.ts.map +1 -0
  54. package/dist/components/dasha-timeline.js +269 -0
  55. package/dist/components/dasha-timeline.js.map +7 -0
  56. package/dist/components/data.d.ts +40 -0
  57. package/dist/components/data.d.ts.map +1 -0
  58. package/dist/components/data.js +339 -0
  59. package/dist/components/data.js.map +7 -0
  60. package/dist/components/dosha-card.d.ts +35 -0
  61. package/dist/components/dosha-card.d.ts.map +1 -0
  62. package/dist/components/dosha-card.js +278 -0
  63. package/dist/components/dosha-card.js.map +7 -0
  64. package/dist/components/endpoint-form.d.ts +39 -0
  65. package/dist/components/endpoint-form.d.ts.map +1 -0
  66. package/dist/components/endpoint-form.js +432 -0
  67. package/dist/components/endpoint-form.js.map +7 -0
  68. package/dist/components/guna-milan.d.ts +35 -0
  69. package/dist/components/guna-milan.d.ts.map +1 -0
  70. package/dist/components/guna-milan.js +302 -0
  71. package/dist/components/guna-milan.js.map +7 -0
  72. package/dist/components/hexagram.d.ts +47 -0
  73. package/dist/components/hexagram.d.ts.map +1 -0
  74. package/dist/components/hexagram.js +334 -0
  75. package/dist/components/hexagram.js.map +7 -0
  76. package/dist/components/horoscope-card.d.ts +38 -0
  77. package/dist/components/horoscope-card.d.ts.map +1 -0
  78. package/dist/components/horoscope-card.js +332 -0
  79. package/dist/components/horoscope-card.js.map +7 -0
  80. package/dist/components/kp-planets-table.d.ts +36 -0
  81. package/dist/components/kp-planets-table.d.ts.map +1 -0
  82. package/dist/components/kp-planets-table.js +227 -0
  83. package/dist/components/kp-planets-table.js.map +7 -0
  84. package/dist/components/location-search.d.ts +56 -0
  85. package/dist/components/location-search.d.ts.map +1 -0
  86. package/dist/components/location-search.js +401 -0
  87. package/dist/components/location-search.js.map +7 -0
  88. package/dist/components/moon-phase.d.ts +38 -0
  89. package/dist/components/moon-phase.d.ts.map +1 -0
  90. package/dist/components/moon-phase.js +284 -0
  91. package/dist/components/moon-phase.js.map +7 -0
  92. package/dist/components/natal-chart.d.ts +65 -0
  93. package/dist/components/natal-chart.d.ts.map +1 -0
  94. package/dist/components/natal-chart.js +407 -0
  95. package/dist/components/natal-chart.js.map +7 -0
  96. package/dist/components/numerology-card.d.ts +55 -0
  97. package/dist/components/numerology-card.d.ts.map +1 -0
  98. package/dist/components/numerology-card.js +274 -0
  99. package/dist/components/numerology-card.js.map +7 -0
  100. package/dist/components/panchang-table.d.ts +77 -0
  101. package/dist/components/panchang-table.d.ts.map +1 -0
  102. package/dist/components/panchang-table.js +285 -0
  103. package/dist/components/panchang-table.js.map +7 -0
  104. package/dist/components/synastry-chart.d.ts +52 -0
  105. package/dist/components/synastry-chart.d.ts.map +1 -0
  106. package/dist/components/synastry-chart.js +415 -0
  107. package/dist/components/synastry-chart.js.map +7 -0
  108. package/dist/components/tarot-card.d.ts +47 -0
  109. package/dist/components/tarot-card.d.ts.map +1 -0
  110. package/dist/components/tarot-card.js +281 -0
  111. package/dist/components/tarot-card.js.map +7 -0
  112. package/dist/components/tarot-spread.d.ts +42 -0
  113. package/dist/components/tarot-spread.d.ts.map +1 -0
  114. package/dist/components/tarot-spread.js +271 -0
  115. package/dist/components/tarot-spread.js.map +7 -0
  116. package/dist/components/vedic-kundli.d.ts +45 -0
  117. package/dist/components/vedic-kundli.d.ts.map +1 -0
  118. package/dist/components/vedic-kundli.js +325 -0
  119. package/dist/components/vedic-kundli.js.map +7 -0
  120. package/dist/index.cjs +4174 -0
  121. package/dist/index.cjs.map +7 -0
  122. package/dist/index.d.ts +30 -0
  123. package/dist/index.d.ts.map +1 -0
  124. package/dist/index.js +4154 -0
  125. package/dist/index.js.map +7 -0
  126. package/dist/manifest.json +24 -0
  127. package/dist/styles/tokens.css +147 -0
  128. package/dist/tokens/index.d.ts +17 -0
  129. package/dist/tokens/index.d.ts.map +1 -0
  130. package/dist/utils/base-styles.d.ts +6 -0
  131. package/dist/utils/base-styles.d.ts.map +1 -0
  132. package/dist/utils/debounce.d.ts +5 -0
  133. package/dist/utils/debounce.d.ts.map +1 -0
  134. package/dist/utils/degree.d.ts +29 -0
  135. package/dist/utils/degree.d.ts.map +1 -0
  136. package/dist/utils/motion.d.ts +13 -0
  137. package/dist/utils/motion.d.ts.map +1 -0
  138. package/package.json +69 -3
  139. package/src/components/biorhythm-chart.ts +290 -0
  140. package/src/components/compatibility-card.ts +231 -0
  141. package/src/components/dasha-timeline.ts +251 -0
  142. package/src/components/data.ts +287 -0
  143. package/src/components/dosha-card.ts +215 -0
  144. package/src/components/endpoint-form.ts +433 -0
  145. package/src/components/guna-milan.ts +245 -0
  146. package/src/components/hexagram.ts +279 -0
  147. package/src/components/horoscope-card.ts +291 -0
  148. package/src/components/kp-planets-table.ts +156 -0
  149. package/src/components/location-search.ts +335 -0
  150. package/src/components/moon-phase.ts +221 -0
  151. package/src/components/natal-chart.ts +298 -0
  152. package/src/components/numerology-card.ts +243 -0
  153. package/src/components/panchang-table.ts +265 -0
  154. package/src/components/synastry-chart.ts +341 -0
  155. package/src/components/tarot-card.ts +235 -0
  156. package/src/components/tarot-spread.ts +224 -0
  157. package/src/components/vedic-kundli.ts +257 -0
  158. package/src/index.ts +61 -0
  159. package/src/styles/tokens.css +147 -0
  160. package/src/tokens/index.ts +130 -0
  161. package/src/types/index.ts +3 -0
  162. package/src/types/types.gen.ts +28526 -0
  163. package/src/utils/base-styles.ts +89 -0
  164. package/src/utils/debounce.ts +13 -0
  165. package/src/utils/degree.ts +64 -0
  166. package/src/utils/motion.ts +18 -0
@@ -0,0 +1,274 @@
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/numerology-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/numerology-card.ts
103
+ var RoxyNumerologyCard = class extends LitElement {
104
+ constructor() {
105
+ super(...arguments);
106
+ this.data = null;
107
+ this.type = "life-path";
108
+ }
109
+ render() {
110
+ const d = this.data;
111
+ if (!d)
112
+ return html`<div class="roxy-empty" role="status">No numerology data</div>`;
113
+ const headerLabel = LABELS[this.type] ?? this.type;
114
+ const number = d.personalYear ?? d.number;
115
+ const cores = d.coreNumbers ? Object.entries(d.coreNumbers).filter(
116
+ ([, v]) => v !== null && v !== void 0
117
+ ) : [];
118
+ return html`<article
119
+ class="card"
120
+ aria-label=${headerLabel}
121
+ >
122
+ <div class="hero">
123
+ ${typeof number === "number" ? html`<div class="numeral">${number}</div>` : nothing}
124
+ <div>
125
+ <p class="label">${headerLabel}</p>
126
+ ${d.title ? html`<h2 class="title">${d.title}</h2>` : d.type ? html`<h2 class="title">
127
+ ${d.type === "master" ? "Master number" : "Single digit"}
128
+ </h2>` : nothing}
129
+ </div>
130
+ </div>
131
+ ${d.theme ? html`<p><strong>Theme:</strong> ${d.theme}</p>` : nothing}
132
+ ${d.meaning ? html`<p class="meaning">${d.meaning}</p>` : nothing}
133
+ ${d.advice ? html`<p>${d.advice}</p>` : nothing}
134
+ ${d.calculation ? html`<pre class="calc">${d.calculation}</pre>` : nothing}
135
+ ${d.keywords?.length ? html`<div class="chips">
136
+ ${d.keywords.map((k) => html`<span>${k}</span>`)}
137
+ </div>` : nothing}
138
+ ${cores.length > 0 ? html`<div class="cores">
139
+ ${cores.map(([k, v]) => {
140
+ const value = typeof v === "number" ? v : v.number;
141
+ return html`<div class="item">
142
+ <span>${humanize(k)}</span>
143
+ <strong>${value ?? ""}</strong>
144
+ </div>`;
145
+ })}
146
+ </div>` : nothing}
147
+ ${d.hasKarmicDebt && d.karmicDebtNumber ? html`<div class="karmic">
148
+ Karmic debt ${d.karmicDebtNumber}.
149
+ ${d.karmicDebtMeaning ? d.karmicDebtMeaning : ""}
150
+ </div>` : nothing}
151
+ </article>`;
152
+ }
153
+ };
154
+ RoxyNumerologyCard.styles = [
155
+ baseStyles,
156
+ css2`
157
+ .card {
158
+ background: var(--roxy-bg, #fff);
159
+ border: 1px solid var(--roxy-border, #e4e4e7);
160
+ border-radius: var(--roxy-radius-md, 8px);
161
+ padding: var(--roxy-space-lg, 1.5rem);
162
+ box-shadow: var(--roxy-shadow-sm);
163
+ display: grid;
164
+ gap: var(--roxy-space-md, 1rem);
165
+ }
166
+
167
+ .hero {
168
+ display: flex;
169
+ align-items: center;
170
+ gap: var(--roxy-space-md, 1rem);
171
+ }
172
+ .numeral {
173
+ font-size: 4rem;
174
+ line-height: 1;
175
+ font-weight: var(--roxy-weight-bold, 600);
176
+ color: var(--roxy-accent-fg, #b45309);
177
+ font-variant-numeric: tabular-nums;
178
+ }
179
+ .label {
180
+ margin: 0;
181
+ font-size: var(--roxy-text-xs, 0.75rem);
182
+ color: var(--roxy-muted, #71717a);
183
+ text-transform: uppercase;
184
+ letter-spacing: 0.06em;
185
+ }
186
+ .title {
187
+ margin: 0;
188
+ font-size: var(--roxy-text-lg, 1.125rem);
189
+ font-weight: var(--roxy-weight-bold, 600);
190
+ }
191
+ .meaning {
192
+ margin: 0;
193
+ color: var(--roxy-fg, #0a0a0a);
194
+ }
195
+
196
+ .calc {
197
+ margin: 0;
198
+ font-family: var(--roxy-font-mono);
199
+ font-size: var(--roxy-text-xs, 0.75rem);
200
+ color: var(--roxy-muted, #71717a);
201
+ background: color-mix(in srgb, var(--roxy-border, #e4e4e7) 30%, transparent);
202
+ padding: var(--roxy-space-sm, 0.5rem);
203
+ border-radius: var(--roxy-radius-sm, 4px);
204
+ word-break: break-all;
205
+ }
206
+
207
+ .chips {
208
+ display: flex;
209
+ flex-wrap: wrap;
210
+ gap: var(--roxy-space-xs, 0.25rem);
211
+ }
212
+ .chips span {
213
+ background: color-mix(in srgb, var(--roxy-accent, #f59e0b) 14%, transparent);
214
+ padding: 2px 8px;
215
+ border-radius: var(--roxy-radius-full, 9999px);
216
+ font-size: var(--roxy-text-xs, 0.75rem);
217
+ }
218
+
219
+ .cores {
220
+ display: grid;
221
+ grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
222
+ gap: var(--roxy-space-sm, 0.5rem);
223
+ border-top: 1px solid var(--roxy-border, #e4e4e7);
224
+ padding-top: var(--roxy-space-md, 1rem);
225
+ }
226
+ .cores .item {
227
+ display: flex;
228
+ align-items: baseline;
229
+ gap: var(--roxy-space-xs, 0.25rem);
230
+ font-size: var(--roxy-text-sm, 0.875rem);
231
+ }
232
+ .cores .item span:first-child {
233
+ color: var(--roxy-muted, #71717a);
234
+ text-transform: capitalize;
235
+ }
236
+ .cores .item strong {
237
+ color: var(--roxy-accent-fg, #b45309);
238
+ font-variant-numeric: tabular-nums;
239
+ font-size: var(--roxy-text-base, 1rem);
240
+ font-weight: var(--roxy-weight-bold, 600);
241
+ }
242
+
243
+ .karmic {
244
+ background: color-mix(in srgb, var(--roxy-warning, #ea580c) 12%, transparent);
245
+ border: 1px solid color-mix(in srgb, var(--roxy-warning, #ea580c) 32%, transparent);
246
+ padding: var(--roxy-space-sm, 0.5rem) var(--roxy-space-md, 1rem);
247
+ border-radius: var(--roxy-radius-md, 8px);
248
+ font-size: var(--roxy-text-sm, 0.875rem);
249
+ color: var(--roxy-fg, #0a0a0a);
250
+ }
251
+ `
252
+ ];
253
+ __decorateClass([
254
+ property({ attribute: false })
255
+ ], RoxyNumerologyCard.prototype, "data", 2);
256
+ __decorateClass([
257
+ property({ type: String, reflect: true })
258
+ ], RoxyNumerologyCard.prototype, "type", 2);
259
+ RoxyNumerologyCard = __decorateClass([
260
+ customElement("roxy-numerology-card")
261
+ ], RoxyNumerologyCard);
262
+ var LABELS = {
263
+ "life-path": "Life Path",
264
+ expression: "Expression",
265
+ "personal-year": "Personal Year",
266
+ chart: "Numerology chart"
267
+ };
268
+ function humanize(s) {
269
+ return s.replace(/[_-]+/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/^\w/, (c) => c.toUpperCase());
270
+ }
271
+ export {
272
+ RoxyNumerologyCard
273
+ };
274
+ //# sourceMappingURL=numerology-card.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/components/numerology-card.ts", "../../src/utils/base-styles.ts"],
4
+ "sourcesContent": ["import { css, html, LitElement, nothing } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\nimport { baseStyles } from '../utils/base-styles.js';\n\ninterface NumerologyCommon {\n\tnumber?: number;\n\tcalculation?: string;\n\ttype?: 'single' | 'master' | string;\n\thasKarmicDebt?: boolean;\n\tkarmicDebtNumber?: number;\n\tkarmicDebtMeaning?: string;\n\tmeaning?: string;\n}\n\ninterface CoreNumber {\n\tnumber?: number;\n\ttype?: string;\n\tmeaning?: string;\n\tcalculation?: string;\n}\n\ninterface FullChart {\n\tprofile?: { fullName?: string; birthDate?: string };\n\tcoreNumbers?: Record<string, CoreNumber | number>;\n\tadditionalInsights?: Record<string, unknown>;\n\tbirthDayProfile?: Record<string, unknown>;\n\tmaturityStatus?: string;\n\tluckyAssociations?: Record<string, unknown>;\n\tsummary?: string;\n}\n\ninterface PersonalYear {\n\tyear?: number;\n\tpersonalYear?: number;\n\ttitle?: string;\n\ttheme?: string;\n\tkeywords?: string[];\n\tmeaning?: string;\n\tadvice?: string;\n}\n\ntype NumerologyData = NumerologyCommon & FullChart & PersonalYear;\n\n/**\n * Numerology card. Renders /numerology/{life-path,expression,personal-year,chart}.\n * Use the `type` attribute to switch the layout.\n */\n@customElement('roxy-numerology-card')\nexport class RoxyNumerologyCard extends LitElement {\n\tstatic styles = [\n\t\tbaseStyles,\n\t\tcss`\n\t\t\t.card {\n\t\t\t\tbackground: var(--roxy-bg, #fff);\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\tpadding: var(--roxy-space-lg, 1.5rem);\n\t\t\t\tbox-shadow: var(--roxy-shadow-sm);\n\t\t\t\tdisplay: grid;\n\t\t\t\tgap: var(--roxy-space-md, 1rem);\n\t\t\t}\n\n\t\t\t.hero {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tgap: var(--roxy-space-md, 1rem);\n\t\t\t}\n\t\t\t.numeral {\n\t\t\t\tfont-size: 4rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tfont-weight: var(--roxy-weight-bold, 600);\n\t\t\t\tcolor: var(--roxy-accent-fg, #b45309);\n\t\t\t\tfont-variant-numeric: tabular-nums;\n\t\t\t}\n\t\t\t.label {\n\t\t\t\tmargin: 0;\n\t\t\t\tfont-size: var(--roxy-text-xs, 0.75rem);\n\t\t\t\tcolor: var(--roxy-muted, #71717a);\n\t\t\t\ttext-transform: uppercase;\n\t\t\t\tletter-spacing: 0.06em;\n\t\t\t}\n\t\t\t.title {\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.meaning {\n\t\t\t\tmargin: 0;\n\t\t\t\tcolor: var(--roxy-fg, #0a0a0a);\n\t\t\t}\n\n\t\t\t.calc {\n\t\t\t\tmargin: 0;\n\t\t\t\tfont-family: var(--roxy-font-mono);\n\t\t\t\tfont-size: var(--roxy-text-xs, 0.75rem);\n\t\t\t\tcolor: var(--roxy-muted, #71717a);\n\t\t\t\tbackground: color-mix(in srgb, var(--roxy-border, #e4e4e7) 30%, transparent);\n\t\t\t\tpadding: var(--roxy-space-sm, 0.5rem);\n\t\t\t\tborder-radius: var(--roxy-radius-sm, 4px);\n\t\t\t\tword-break: break-all;\n\t\t\t}\n\n\t\t\t.chips {\n\t\t\t\tdisplay: flex;\n\t\t\t\tflex-wrap: wrap;\n\t\t\t\tgap: var(--roxy-space-xs, 0.25rem);\n\t\t\t}\n\t\t\t.chips span {\n\t\t\t\tbackground: color-mix(in srgb, var(--roxy-accent, #f59e0b) 14%, transparent);\n\t\t\t\tpadding: 2px 8px;\n\t\t\t\tborder-radius: var(--roxy-radius-full, 9999px);\n\t\t\t\tfont-size: var(--roxy-text-xs, 0.75rem);\n\t\t\t}\n\n\t\t\t.cores {\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\tborder-top: 1px solid var(--roxy-border, #e4e4e7);\n\t\t\t\tpadding-top: var(--roxy-space-md, 1rem);\n\t\t\t}\n\t\t\t.cores .item {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: baseline;\n\t\t\t\tgap: var(--roxy-space-xs, 0.25rem);\n\t\t\t\tfont-size: var(--roxy-text-sm, 0.875rem);\n\t\t\t}\n\t\t\t.cores .item span:first-child {\n\t\t\t\tcolor: var(--roxy-muted, #71717a);\n\t\t\t\ttext-transform: capitalize;\n\t\t\t}\n\t\t\t.cores .item strong {\n\t\t\t\tcolor: var(--roxy-accent-fg, #b45309);\n\t\t\t\tfont-variant-numeric: tabular-nums;\n\t\t\t\tfont-size: var(--roxy-text-base, 1rem);\n\t\t\t\tfont-weight: var(--roxy-weight-bold, 600);\n\t\t\t}\n\n\t\t\t.karmic {\n\t\t\t\tbackground: color-mix(in srgb, var(--roxy-warning, #ea580c) 12%, transparent);\n\t\t\t\tborder: 1px solid color-mix(in srgb, var(--roxy-warning, #ea580c) 32%, transparent);\n\t\t\t\tpadding: var(--roxy-space-sm, 0.5rem) var(--roxy-space-md, 1rem);\n\t\t\t\tborder-radius: var(--roxy-radius-md, 8px);\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`,\n\t];\n\n\t@property({ attribute: false })\n\tdata: NumerologyData | null = null;\n\n\t@property({ type: String, reflect: true })\n\ttype: 'life-path' | 'expression' | 'personal-year' | 'chart' = 'life-path';\n\n\trender() {\n\t\tconst d = this.data;\n\t\tif (!d)\n\t\t\treturn html`<div class=\"roxy-empty\" role=\"status\">No numerology data</div>`;\n\n\t\tconst headerLabel = LABELS[this.type] ?? this.type;\n\t\tconst number = d.personalYear ?? d.number;\n\t\tconst cores = d.coreNumbers\n\t\t\t? Object.entries(d.coreNumbers).filter(\n\t\t\t\t\t([, v]) => v !== null && v !== undefined,\n\t\t\t\t)\n\t\t\t: [];\n\n\t\treturn html`<article\n\t\t\tclass=\"card\"\n\t\t\taria-label=${headerLabel}\n\t\t>\n\t\t\t<div class=\"hero\">\n\t\t\t\t${typeof number === 'number' ? html`<div class=\"numeral\">${number}</div>` : nothing}\n\t\t\t\t<div>\n\t\t\t\t\t<p class=\"label\">${headerLabel}</p>\n\t\t\t\t\t${\n\t\t\t\t\t\td.title\n\t\t\t\t\t\t\t? html`<h2 class=\"title\">${d.title}</h2>`\n\t\t\t\t\t\t\t: d.type\n\t\t\t\t\t\t\t\t? html`<h2 class=\"title\">\n\t\t\t\t\t\t\t\t\t${d.type === 'master' ? 'Master number' : 'Single digit'}\n\t\t\t\t\t\t\t\t</h2>`\n\t\t\t\t\t\t\t\t: nothing\n\t\t\t\t\t}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t${d.theme ? html`<p><strong>Theme:</strong> ${d.theme}</p>` : nothing}\n\t\t\t${d.meaning ? html`<p class=\"meaning\">${d.meaning}</p>` : nothing}\n\t\t\t${d.advice ? html`<p>${d.advice}</p>` : nothing}\n\t\t\t${d.calculation ? html`<pre class=\"calc\">${d.calculation}</pre>` : nothing}\n\t\t\t${\n\t\t\t\td.keywords?.length\n\t\t\t\t\t? html`<div class=\"chips\">\n\t\t\t\t\t\t${d.keywords.map((k) => html`<span>${k}</span>`)}\n\t\t\t\t\t</div>`\n\t\t\t\t\t: nothing\n\t\t\t}\n\t\t\t${\n\t\t\t\tcores.length > 0\n\t\t\t\t\t? html`<div class=\"cores\">\n\t\t\t\t\t\t${cores.map(([k, v]) => {\n\t\t\t\t\t\t\tconst value =\n\t\t\t\t\t\t\t\ttypeof v === 'number' ? v : (v as CoreNumber).number;\n\t\t\t\t\t\t\treturn html`<div class=\"item\">\n\t\t\t\t\t\t\t\t<span>${humanize(k)}</span>\n\t\t\t\t\t\t\t\t<strong>${value ?? ''}</strong>\n\t\t\t\t\t\t\t</div>`;\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>`\n\t\t\t\t\t: nothing\n\t\t\t}\n\t\t\t${\n\t\t\t\td.hasKarmicDebt && d.karmicDebtNumber\n\t\t\t\t\t? html`<div class=\"karmic\">\n\t\t\t\t\t\tKarmic debt ${d.karmicDebtNumber}.\n\t\t\t\t\t\t${d.karmicDebtMeaning ? d.karmicDebtMeaning : ''}\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\nconst LABELS: Record<string, string> = {\n\t'life-path': 'Life Path',\n\texpression: 'Expression',\n\t'personal-year': 'Personal Year',\n\tchart: 'Numerology chart',\n};\n\nfunction humanize(s: string): string {\n\treturn s\n\t\t.replace(/[_-]+/g, ' ')\n\t\t.replace(/([a-z])([A-Z])/g, '$1 $2')\n\t\t.replace(/^\\w/, (c) => c.toUpperCase());\n}\n\ndeclare global {\n\tinterface HTMLElementTagNameMap {\n\t\t'roxy-numerology-card': RoxyNumerologyCard;\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": "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",
6
+ "names": ["css", "css"]
7
+ }
@@ -0,0 +1,77 @@
1
+ import { LitElement } from 'lit';
2
+ interface PanchangTime {
3
+ start?: string;
4
+ end?: string;
5
+ }
6
+ interface PanchangData {
7
+ date?: string;
8
+ location?: {
9
+ name?: string;
10
+ latitude?: number;
11
+ longitude?: number;
12
+ };
13
+ vara?: string;
14
+ sunrise?: string;
15
+ sunset?: string;
16
+ moonrise?: string;
17
+ moonset?: string;
18
+ sunSign?: string;
19
+ moonSign?: string;
20
+ sunNakshatra?: string;
21
+ tithi?: string | {
22
+ name?: string;
23
+ phase?: string;
24
+ end?: string;
25
+ };
26
+ nakshatra?: string | {
27
+ name?: string;
28
+ lord?: string;
29
+ end?: string;
30
+ };
31
+ yoga?: string | {
32
+ name?: string;
33
+ end?: string;
34
+ };
35
+ karana?: string | {
36
+ name?: string;
37
+ end?: string;
38
+ };
39
+ hora?: string;
40
+ rahuKaal?: PanchangTime;
41
+ yamaganda?: PanchangTime;
42
+ gulika?: PanchangTime;
43
+ abhijitMuhurta?: PanchangTime;
44
+ brahmaMuhurta?: PanchangTime;
45
+ vijayaMuhurta?: PanchangTime;
46
+ nishitaMuhurta?: PanchangTime;
47
+ godhuliMuhurta?: PanchangTime;
48
+ pratahSandhya?: PanchangTime;
49
+ sayahnaSandhya?: PanchangTime;
50
+ durMuhurta?: PanchangTime[];
51
+ varjyam?: PanchangTime[];
52
+ amritKalam?: PanchangTime[];
53
+ chandrabalam?: string | string[];
54
+ tarabalam?: string;
55
+ panchaka?: string;
56
+ bhadra?: string;
57
+ sunLongitude?: number;
58
+ moonLongitude?: number;
59
+ }
60
+ /**
61
+ * Panchang table for /vedic-astrology/panchang/{basic,detailed}. Detailed mode
62
+ * renders 15+ muhurtas. Basic mode renders the five elements only.
63
+ */
64
+ export declare class RoxyPanchangTable extends LitElement {
65
+ static styles: import("lit").CSSResult[];
66
+ data: PanchangData | null;
67
+ detail: 'basic' | 'detailed';
68
+ render(): import("lit").TemplateResult<1>;
69
+ private formatPart;
70
+ }
71
+ declare global {
72
+ interface HTMLElementTagNameMap {
73
+ 'roxy-panchang-table': RoxyPanchangTable;
74
+ }
75
+ }
76
+ export {};
77
+ //# sourceMappingURL=panchang-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panchang-table.d.ts","sourceRoot":"","sources":["../../src/components/panchang-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAIrD,UAAU,YAAY;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED,UAAU,YAAY;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChD,MAAM,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,cAAc,CAAC,EAAE,YAAY,CAAC;IAC9B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,qBACa,iBAAkB,SAAQ,UAAU;IAChD,MAAM,CAAC,MAAM,4BA6DX;IAGF,IAAI,EAAE,YAAY,GAAG,IAAI,CAAQ;IAGjC,MAAM,EAAE,OAAO,GAAG,UAAU,CAAc;IAE1C,MAAM;IAgHN,OAAO,CAAC,UAAU;CAmBlB;AAQD,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,qBAAqB;QAC9B,qBAAqB,EAAE,iBAAiB,CAAC;KACzC;CACD"}
@@ -0,0 +1,285 @@
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/panchang-table.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/panchang-table.ts
103
+ var RoxyPanchangTable = class extends LitElement {
104
+ constructor() {
105
+ super(...arguments);
106
+ this.data = null;
107
+ this.detail = "detailed";
108
+ }
109
+ render() {
110
+ const d = this.data;
111
+ if (!d)
112
+ return html`<div class="roxy-empty" role="status">No panchang data</div>`;
113
+ const fivefold = [
114
+ ["Tithi", this.formatPart(d.tithi)],
115
+ ["Nakshatra", this.formatPart(d.nakshatra)],
116
+ ["Yoga", this.formatPart(d.yoga)],
117
+ ["Karana", this.formatPart(d.karana)],
118
+ ["Vara", d.vara ?? ""]
119
+ ];
120
+ const muhurtas = [
121
+ ["Brahma Muhurta", d.brahmaMuhurta],
122
+ ["Abhijit Muhurta", d.abhijitMuhurta],
123
+ ["Vijaya Muhurta", d.vijayaMuhurta],
124
+ ["Godhuli Muhurta", d.godhuliMuhurta],
125
+ ["Nishita Muhurta", d.nishitaMuhurta],
126
+ ["Pratah Sandhya", d.pratahSandhya],
127
+ ["Sayahna Sandhya", d.sayahnaSandhya]
128
+ ];
129
+ const inauspicious = [
130
+ ["Rahu Kaal", d.rahuKaal],
131
+ ["Yamaganda", d.yamaganda],
132
+ ["Gulika", d.gulika]
133
+ ];
134
+ return html`<div class="wrap" aria-label="Panchang">
135
+ <header class="head">
136
+ <h2 class="title">Panchang</h2>
137
+ <span class="date">${d.date ?? ""}</span>
138
+ </header>
139
+ <table>
140
+ <tbody>
141
+ ${fivefold.map(
142
+ ([k, v]) => html`<tr>
143
+ <th>${k}</th>
144
+ <td>${v}</td>
145
+ </tr>`
146
+ )}
147
+ ${d.sunrise ? html`<tr>
148
+ <th>Sunrise</th>
149
+ <td>${d.sunrise}</td>
150
+ </tr>` : nothing}
151
+ ${d.sunset ? html`<tr>
152
+ <th>Sunset</th>
153
+ <td>${d.sunset}</td>
154
+ </tr>` : nothing}
155
+ ${d.moonrise ? html`<tr>
156
+ <th>Moonrise</th>
157
+ <td>${d.moonrise}</td>
158
+ </tr>` : nothing}
159
+ ${d.moonset ? html`<tr>
160
+ <th>Moonset</th>
161
+ <td>${d.moonset}</td>
162
+ </tr>` : nothing}
163
+ </tbody>
164
+ </table>
165
+ ${this.detail === "detailed" && (muhurtas.some((m) => !!m[1]) || inauspicious.some((m) => !!m[1])) ? html`
166
+ <div class="section">Auspicious muhurtas</div>
167
+ <table>
168
+ <tbody>
169
+ ${muhurtas.filter(([, v]) => !!v).map(
170
+ ([k, v]) => html`<tr>
171
+ <th>${k}</th>
172
+ <td>${formatRange(v)}</td>
173
+ </tr>`
174
+ )}
175
+ </tbody>
176
+ </table>
177
+ <div class="section">Inauspicious periods</div>
178
+ <table>
179
+ <tbody>
180
+ ${inauspicious.filter(([, v]) => !!v).map(
181
+ ([k, v]) => html`<tr>
182
+ <th>${k}</th>
183
+ <td>${formatRange(v)}</td>
184
+ </tr>`
185
+ )}
186
+ </tbody>
187
+ </table>
188
+ ` : nothing}
189
+ </div>`;
190
+ }
191
+ formatPart(v) {
192
+ if (!v) return "";
193
+ if (typeof v === "string") return v;
194
+ if (typeof v === "object") {
195
+ const obj = v;
196
+ const parts = [
197
+ obj.name,
198
+ obj.lord ? `(${obj.lord})` : "",
199
+ obj.phase
200
+ ].filter(Boolean);
201
+ return parts.join(" ");
202
+ }
203
+ return String(v);
204
+ }
205
+ };
206
+ RoxyPanchangTable.styles = [
207
+ baseStyles,
208
+ css2`
209
+ .wrap {
210
+ border: 1px solid var(--roxy-border, #e4e4e7);
211
+ border-radius: var(--roxy-radius-md, 8px);
212
+ background: var(--roxy-bg, #fff);
213
+ overflow: hidden;
214
+ box-shadow: var(--roxy-shadow-sm);
215
+ }
216
+ .head {
217
+ padding: var(--roxy-space-md, 1rem);
218
+ border-bottom: 1px solid var(--roxy-border, #e4e4e7);
219
+ display: flex;
220
+ justify-content: space-between;
221
+ flex-wrap: wrap;
222
+ gap: var(--roxy-space-sm, 0.5rem);
223
+ }
224
+ .title {
225
+ margin: 0;
226
+ font-size: var(--roxy-text-lg, 1.125rem);
227
+ font-weight: var(--roxy-weight-bold, 600);
228
+ }
229
+ .date {
230
+ color: var(--roxy-muted, #71717a);
231
+ font-size: var(--roxy-text-sm, 0.875rem);
232
+ }
233
+ table {
234
+ width: 100%;
235
+ border-collapse: collapse;
236
+ font-size: var(--roxy-text-sm, 0.875rem);
237
+ }
238
+ tbody tr:nth-child(odd) {
239
+ background: color-mix(in srgb, var(--roxy-border, #e4e4e7) 24%, transparent);
240
+ }
241
+ th,
242
+ td {
243
+ padding: var(--roxy-space-sm, 0.5rem) var(--roxy-space-md, 1rem);
244
+ text-align: left;
245
+ vertical-align: top;
246
+ }
247
+ th {
248
+ color: var(--roxy-muted, #71717a);
249
+ font-weight: var(--roxy-weight-bold, 600);
250
+ width: 38%;
251
+ text-transform: capitalize;
252
+ }
253
+ td {
254
+ color: var(--roxy-fg, #0a0a0a);
255
+ font-variant-numeric: tabular-nums;
256
+ }
257
+ .section {
258
+ border-top: 1px solid var(--roxy-border, #e4e4e7);
259
+ padding: var(--roxy-space-sm, 0.5rem) var(--roxy-space-md, 1rem);
260
+ font-size: var(--roxy-text-xs, 0.75rem);
261
+ color: var(--roxy-muted, #71717a);
262
+ font-weight: var(--roxy-weight-bold, 600);
263
+ text-transform: uppercase;
264
+ letter-spacing: 0.06em;
265
+ }
266
+ `
267
+ ];
268
+ __decorateClass([
269
+ property({ attribute: false })
270
+ ], RoxyPanchangTable.prototype, "data", 2);
271
+ __decorateClass([
272
+ property({ type: String, reflect: true })
273
+ ], RoxyPanchangTable.prototype, "detail", 2);
274
+ RoxyPanchangTable = __decorateClass([
275
+ customElement("roxy-panchang-table")
276
+ ], RoxyPanchangTable);
277
+ function formatRange(t) {
278
+ if (!t) return "";
279
+ if (t.start && t.end) return `${t.start} - ${t.end}`;
280
+ return t.start ?? t.end ?? "";
281
+ }
282
+ export {
283
+ RoxyPanchangTable
284
+ };
285
+ //# sourceMappingURL=panchang-table.js.map