@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,89 @@
1
+ import { css } from 'lit';
2
+
3
+ /**
4
+ * Shared host styles every component pulls in. Sets default font, color,
5
+ * container query support, and the entry fade-in.
6
+ */
7
+ export const baseStyles = css`
8
+ :host {
9
+ display: block;
10
+ container-type: inline-size;
11
+ font-family: var(
12
+ --roxy-font-sans,
13
+ system-ui,
14
+ -apple-system,
15
+ BlinkMacSystemFont,
16
+ 'Segoe UI',
17
+ Roboto,
18
+ sans-serif
19
+ );
20
+ color: var(--roxy-fg, #0a0a0a);
21
+ background: transparent;
22
+ font-size: var(--roxy-text-base, 1rem);
23
+ line-height: var(--roxy-leading-normal, 1.5);
24
+ animation: roxy-fade-in var(--roxy-motion-duration, 200ms)
25
+ var(--roxy-motion-easing, cubic-bezier(0.4, 0, 0.2, 1)) both;
26
+ }
27
+
28
+ *,
29
+ *::before,
30
+ *::after {
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ @keyframes roxy-fade-in {
35
+ from {
36
+ opacity: 0;
37
+ transform: translateY(2px);
38
+ }
39
+ to {
40
+ opacity: 1;
41
+ transform: translateY(0);
42
+ }
43
+ }
44
+
45
+ @media (prefers-reduced-motion: reduce) {
46
+ :host {
47
+ animation: none;
48
+ }
49
+ }
50
+
51
+ .roxy-skeleton {
52
+ background: linear-gradient(
53
+ 90deg,
54
+ var(--roxy-border, #e4e4e7) 0%,
55
+ color-mix(in srgb, var(--roxy-border, #e4e4e7) 60%, transparent) 50%,
56
+ var(--roxy-border, #e4e4e7) 100%
57
+ );
58
+ background-size: 200% 100%;
59
+ animation: roxy-shimmer 1.4s ease-in-out infinite;
60
+ border-radius: var(--roxy-radius-md, 8px);
61
+ }
62
+
63
+ @keyframes roxy-shimmer {
64
+ 0% {
65
+ background-position: 200% 0;
66
+ }
67
+ 100% {
68
+ background-position: -200% 0;
69
+ }
70
+ }
71
+
72
+ @media (prefers-reduced-motion: reduce) {
73
+ .roxy-skeleton {
74
+ animation: none;
75
+ }
76
+ }
77
+
78
+ .roxy-empty {
79
+ padding: var(--roxy-space-lg, 1.5rem);
80
+ color: var(--roxy-muted, #71717a);
81
+ text-align: center;
82
+ font-size: var(--roxy-text-sm, 0.875rem);
83
+ }
84
+
85
+ :host(:focus-within) .roxy-card {
86
+ outline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));
87
+ outline-offset: 2px;
88
+ }
89
+ `;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Lightweight debounce for input handlers. Used by location search.
3
+ */
4
+ export function debounce<F extends (...args: never[]) => unknown>(
5
+ fn: F,
6
+ wait: number,
7
+ ): F {
8
+ let timer: ReturnType<typeof setTimeout> | undefined;
9
+ return ((...args: Parameters<F>) => {
10
+ if (timer) clearTimeout(timer);
11
+ timer = setTimeout(() => fn(...args), wait);
12
+ }) as F;
13
+ }
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Math helpers for converting raw ecliptic longitude decimals into the
3
+ * sign / degree / minute / second triplet used across chart components.
4
+ */
5
+
6
+ import { SIGNS_ORDER } from '../tokens/index.js';
7
+
8
+ export interface SignPosition {
9
+ sign: string;
10
+ signIndex: number;
11
+ degree: number;
12
+ minute: number;
13
+ second: number;
14
+ }
15
+
16
+ /**
17
+ * Wrap longitude into [0, 360) so negative or out-of-range values still
18
+ * resolve to a real sign. Robust to wonky upstream data.
19
+ */
20
+ export function normalizeLongitude(lon: number): number {
21
+ const wrapped = lon % 360;
22
+ return wrapped < 0 ? wrapped + 360 : wrapped;
23
+ }
24
+
25
+ /**
26
+ * Convert decimal ecliptic longitude (0-360) into sign/degree/minute/second.
27
+ * Used by every chart wheel and aspect table.
28
+ */
29
+ export function longitudeToSignPosition(longitude: number): SignPosition {
30
+ const lon = normalizeLongitude(longitude);
31
+ const signIndex = Math.floor(lon / 30) % 12;
32
+ const within = lon % 30;
33
+ const degree = Math.floor(within);
34
+ const minuteFloat = (within - degree) * 60;
35
+ const minute = Math.floor(minuteFloat);
36
+ const second = Math.round((minuteFloat - minute) * 60);
37
+ return {
38
+ sign: SIGNS_ORDER[signIndex] ?? 'Aries',
39
+ signIndex,
40
+ degree,
41
+ minute,
42
+ second,
43
+ };
44
+ }
45
+
46
+ /** Compact display string like "12° Leo 34'". Used in chart labels. */
47
+ export function formatSignPosition(longitude: number): string {
48
+ const { sign, degree, minute } = longitudeToSignPosition(longitude);
49
+ return `${degree}° ${sign} ${String(minute).padStart(2, '0')}'`;
50
+ }
51
+
52
+ /** Polar to cartesian for SVG wheel positioning. Angle in degrees, 0 at 3 o'clock. */
53
+ export function polarToCartesian(
54
+ cx: number,
55
+ cy: number,
56
+ radius: number,
57
+ angleDeg: number,
58
+ ): { x: number; y: number } {
59
+ const angleRad = (angleDeg * Math.PI) / 180;
60
+ return {
61
+ x: cx + radius * Math.cos(angleRad),
62
+ y: cy + radius * Math.sin(angleRad),
63
+ };
64
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Motion guard. All component animations honor:
3
+ * 1. --roxy-motion-duration CSS variable (set to 0ms to disable)
4
+ * 2. prefers-reduced-motion: reduce media query (forces 0ms regardless)
5
+ *
6
+ * Components apply transitions and entry animations using the duration var
7
+ * directly. The reduced-motion override is enforced at the tokens.css layer.
8
+ */
9
+
10
+ export function prefersReducedMotion(): boolean {
11
+ if (typeof window === 'undefined' || !window.matchMedia) return false;
12
+ return window.matchMedia('(prefers-reduced-motion: reduce)').matches;
13
+ }
14
+
15
+ /** CSS snippet that components paste into their styles to read the motion duration. */
16
+ export const MOTION_DURATION = 'var(--roxy-motion-duration, 200ms)';
17
+ export const MOTION_EASING =
18
+ 'var(--roxy-motion-easing, cubic-bezier(0.4, 0, 0.2, 1))';