@roxyapi/ui 0.5.0 → 0.6.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 (153) hide show
  1. package/README.md +1 -1
  2. package/dist/cdn/components/ashtakavarga-grid.js +3 -362
  3. package/dist/cdn/components/ashtakavarga-grid.js.map +2 -2
  4. package/dist/cdn/components/biorhythm-chart.js +2 -225
  5. package/dist/cdn/components/biorhythm-chart.js.map +2 -2
  6. package/dist/cdn/components/choghadiya-grid.js +2 -231
  7. package/dist/cdn/components/choghadiya-grid.js.map +2 -2
  8. package/dist/cdn/components/compatibility-card.js +2 -230
  9. package/dist/cdn/components/compatibility-card.js.map +2 -2
  10. package/dist/cdn/components/dasha-timeline.js +3 -283
  11. package/dist/cdn/components/dasha-timeline.js.map +4 -4
  12. package/dist/cdn/components/data.js +3 -230
  13. package/dist/cdn/components/data.js.map +2 -2
  14. package/dist/cdn/components/divisional-chart.js +3 -356
  15. package/dist/cdn/components/divisional-chart.js.map +4 -4
  16. package/dist/cdn/components/dosha-card.js +2 -225
  17. package/dist/cdn/components/dosha-card.js.map +2 -2
  18. package/dist/cdn/components/endpoint-form.js +2 -243
  19. package/dist/cdn/components/endpoint-form.js.map +2 -2
  20. package/dist/cdn/components/guna-milan.js +2 -269
  21. package/dist/cdn/components/guna-milan.js.map +2 -2
  22. package/dist/cdn/components/hexagram.js +3 -247
  23. package/dist/cdn/components/hexagram.js.map +2 -2
  24. package/dist/cdn/components/horoscope-card.js +3 -281
  25. package/dist/cdn/components/horoscope-card.js.map +2 -2
  26. package/dist/cdn/components/kp-chart.js +2 -277
  27. package/dist/cdn/components/kp-chart.js.map +2 -2
  28. package/dist/cdn/components/kp-planets-table.js +2 -195
  29. package/dist/cdn/components/kp-planets-table.js.map +2 -2
  30. package/dist/cdn/components/kp-ruling-planets.js +2 -240
  31. package/dist/cdn/components/kp-ruling-planets.js.map +2 -2
  32. package/dist/cdn/components/location-search.js +2 -240
  33. package/dist/cdn/components/location-search.js.map +2 -2
  34. package/dist/cdn/components/moon-phase.js +3 -223
  35. package/dist/cdn/components/moon-phase.js.map +2 -2
  36. package/dist/cdn/components/nakshatra-card.js +2 -200
  37. package/dist/cdn/components/nakshatra-card.js.map +2 -2
  38. package/dist/cdn/components/natal-chart.js +3 -563
  39. package/dist/cdn/components/natal-chart.js.map +4 -4
  40. package/dist/cdn/components/numerology-card.js +2 -232
  41. package/dist/cdn/components/numerology-card.js.map +2 -2
  42. package/dist/cdn/components/panchang-table.js +3 -220
  43. package/dist/cdn/components/panchang-table.js.map +2 -2
  44. package/dist/cdn/components/shadbala-table.js +3 -284
  45. package/dist/cdn/components/shadbala-table.js.map +2 -2
  46. package/dist/cdn/components/synastry-chart.js +2 -398
  47. package/dist/cdn/components/synastry-chart.js.map +2 -2
  48. package/dist/cdn/components/tarot-card.js +3 -261
  49. package/dist/cdn/components/tarot-card.js.map +2 -2
  50. package/dist/cdn/components/tarot-spread.js +2 -248
  51. package/dist/cdn/components/tarot-spread.js.map +2 -2
  52. package/dist/cdn/components/transits-table.js +3 -382
  53. package/dist/cdn/components/transits-table.js.map +4 -4
  54. package/dist/cdn/components/vedic-kundli.js +3 -305
  55. package/dist/cdn/components/vedic-kundli.js.map +4 -4
  56. package/dist/cdn/components/vedic-planets-table.js +2 -202
  57. package/dist/cdn/components/vedic-planets-table.js.map +2 -2
  58. package/dist/cdn/components/western-planets-table.js +3 -192
  59. package/dist/cdn/components/western-planets-table.js.map +2 -2
  60. package/dist/cdn/components/yoga-list.js +2 -305
  61. package/dist/cdn/components/yoga-list.js.map +2 -2
  62. package/dist/cdn/roxy-ui.js +3 -5102
  63. package/dist/cdn/roxy-ui.js.map +4 -4
  64. package/dist/cdn/widgets.js +1 -114
  65. package/dist/components/ashtakavarga-grid.js +1 -577
  66. package/dist/components/ashtakavarga-grid.js.map +3 -3
  67. package/dist/components/biorhythm-chart.js +1 -378
  68. package/dist/components/biorhythm-chart.js.map +3 -3
  69. package/dist/components/choghadiya-grid.js +1 -397
  70. package/dist/components/choghadiya-grid.js.map +3 -3
  71. package/dist/components/compatibility-card.js +1 -359
  72. package/dist/components/compatibility-card.js.map +3 -3
  73. package/dist/components/dasha-timeline.d.ts.map +1 -1
  74. package/dist/components/dasha-timeline.js +1 -447
  75. package/dist/components/dasha-timeline.js.map +4 -4
  76. package/dist/components/data.js +1 -408
  77. package/dist/components/data.js.map +3 -3
  78. package/dist/components/divisional-chart.d.ts.map +1 -1
  79. package/dist/components/divisional-chart.js +1 -932
  80. package/dist/components/divisional-chart.js.map +4 -4
  81. package/dist/components/dosha-card.js +1 -339
  82. package/dist/components/dosha-card.js.map +3 -3
  83. package/dist/components/endpoint-form.js +1 -505
  84. package/dist/components/endpoint-form.js.map +3 -3
  85. package/dist/components/guna-milan.js +1 -420
  86. package/dist/components/guna-milan.js.map +3 -3
  87. package/dist/components/hexagram.js +1 -426
  88. package/dist/components/hexagram.js.map +3 -3
  89. package/dist/components/horoscope-card.js +1 -427
  90. package/dist/components/horoscope-card.js.map +3 -3
  91. package/dist/components/kp-chart.js +1 -441
  92. package/dist/components/kp-chart.js.map +3 -3
  93. package/dist/components/kp-planets-table.js +1 -292
  94. package/dist/components/kp-planets-table.js.map +3 -3
  95. package/dist/components/kp-ruling-planets.js +1 -334
  96. package/dist/components/kp-ruling-planets.js.map +3 -3
  97. package/dist/components/location-search.js +1 -461
  98. package/dist/components/location-search.js.map +3 -3
  99. package/dist/components/moon-phase.js +1 -373
  100. package/dist/components/moon-phase.js.map +3 -3
  101. package/dist/components/nakshatra-card.js +1 -290
  102. package/dist/components/nakshatra-card.js.map +3 -3
  103. package/dist/components/natal-chart.d.ts +0 -1
  104. package/dist/components/natal-chart.d.ts.map +1 -1
  105. package/dist/components/natal-chart.js +1 -1086
  106. package/dist/components/natal-chart.js.map +4 -4
  107. package/dist/components/numerology-card.js +1 -361
  108. package/dist/components/numerology-card.js.map +3 -3
  109. package/dist/components/panchang-table.js +1 -396
  110. package/dist/components/panchang-table.js.map +3 -3
  111. package/dist/components/shadbala-table.js +1 -459
  112. package/dist/components/shadbala-table.js.map +3 -3
  113. package/dist/components/synastry-chart.js +1 -704
  114. package/dist/components/synastry-chart.js.map +3 -3
  115. package/dist/components/tarot-card.js +1 -379
  116. package/dist/components/tarot-card.js.map +3 -3
  117. package/dist/components/tarot-spread.js +1 -356
  118. package/dist/components/tarot-spread.js.map +3 -3
  119. package/dist/components/transits-table.d.ts +2 -0
  120. package/dist/components/transits-table.d.ts.map +1 -1
  121. package/dist/components/transits-table.js +1 -594
  122. package/dist/components/transits-table.js.map +4 -4
  123. package/dist/components/vedic-kundli.d.ts.map +1 -1
  124. package/dist/components/vedic-kundli.js +1 -848
  125. package/dist/components/vedic-kundli.js.map +4 -4
  126. package/dist/components/vedic-planets-table.js +1 -414
  127. package/dist/components/vedic-planets-table.js.map +3 -3
  128. package/dist/components/western-planets-table.js +1 -409
  129. package/dist/components/western-planets-table.js.map +3 -3
  130. package/dist/components/yoga-list.js +1 -429
  131. package/dist/components/yoga-list.js.map +3 -3
  132. package/dist/index.cjs +1 -8726
  133. package/dist/index.cjs.map +4 -4
  134. package/dist/index.js +1 -8706
  135. package/dist/index.js.map +4 -4
  136. package/dist/utils/disclosure.d.ts +16 -0
  137. package/dist/utils/disclosure.d.ts.map +1 -0
  138. package/dist/utils/kundli-render.d.ts.map +1 -1
  139. package/dist/utils/kundli-styles.d.ts.map +1 -1
  140. package/dist/utils/tablist.d.ts +44 -0
  141. package/dist/utils/tablist.d.ts.map +1 -0
  142. package/dist/version.d.ts +1 -1
  143. package/package.json +3 -1
  144. package/src/components/dasha-timeline.ts +10 -1
  145. package/src/components/divisional-chart.ts +2 -0
  146. package/src/components/natal-chart.ts +37 -62
  147. package/src/components/transits-table.ts +45 -18
  148. package/src/components/vedic-kundli.ts +2 -1
  149. package/src/utils/disclosure.ts +62 -0
  150. package/src/utils/kundli-render.ts +21 -35
  151. package/src/utils/kundli-styles.ts +0 -31
  152. package/src/utils/tablist.ts +124 -0
  153. package/src/version.ts +1 -1
@@ -0,0 +1,124 @@
1
+ import type { TemplateResult } from 'lit';
2
+ import { css, html, nothing } from 'lit';
3
+
4
+ /** A single tab in a {@link renderTablist} strip. */
5
+ export interface TablistItem<T extends string = string> {
6
+ id: T;
7
+ label: string;
8
+ }
9
+
10
+ /**
11
+ * Shared styling for every horizontal tab strip in the library (natal chart
12
+ * views, transits, kundli styles). Keeping one rule set means the tabs look
13
+ * identical everywhere and theme through the same --roxy-* tokens.
14
+ */
15
+ export const tablistStyles = css`
16
+ .roxy-tablist {
17
+ display: flex;
18
+ gap: 2px;
19
+ border-bottom: 2px solid var(--roxy-border, #e4e4e7);
20
+ }
21
+ .roxy-tab {
22
+ padding: var(--roxy-space-xs, 0.25rem) var(--roxy-space-md, 1rem);
23
+ font-size: var(--roxy-text-sm, 0.875rem);
24
+ background: none;
25
+ border: none;
26
+ border-bottom: 2px solid transparent;
27
+ margin-bottom: -2px;
28
+ cursor: pointer;
29
+ color: var(--roxy-muted, #71717a);
30
+ font-family: inherit;
31
+ transition: color var(--roxy-motion-duration, 200ms)
32
+ var(--roxy-motion-easing, ease);
33
+ }
34
+ .roxy-tab[aria-selected='true'] {
35
+ color: var(--roxy-accent-fg, #b45309);
36
+ border-bottom-color: var(--roxy-accent, #f59e0b);
37
+ font-weight: var(--roxy-weight-bold, 600);
38
+ }
39
+ .roxy-tab:hover:not([aria-selected='true']) {
40
+ color: var(--roxy-fg, #0a0a0a);
41
+ }
42
+ .roxy-tab:focus-visible {
43
+ outline: 2px solid var(--roxy-ring, rgba(245, 158, 11, 0.4));
44
+ outline-offset: 2px;
45
+ border-radius: 4px;
46
+ }
47
+ `;
48
+
49
+ /**
50
+ * Render a WAI-ARIA tablist. The host component owns the active-tab state; this
51
+ * helper draws the buttons, wires click plus Left/Right arrow navigation with a
52
+ * roving tabindex, and moves focus to the newly selected tab. Pair with
53
+ * {@link tablistStyles}.
54
+ *
55
+ * Pass `controls: true` when each tab governs a sibling
56
+ * `<div role="tabpanel" id="${idPrefix}-panel-${id}">` so the buttons advertise
57
+ * `aria-controls`. Omit it for tablists that swap a single rendered view in
58
+ * place with no separate panel element (the kundli style switch).
59
+ *
60
+ * @example
61
+ * ```ts
62
+ * renderTablist({
63
+ * items: [{ id: 'wheel', label: 'Wheel' }, { id: 'grid', label: 'Aspect grid' }],
64
+ * active: this.view,
65
+ * onSelect: (v) => { this.view = v; },
66
+ * label: 'Natal chart views',
67
+ * idPrefix: 'natal',
68
+ * controls: true,
69
+ * })
70
+ * ```
71
+ */
72
+ export function renderTablist<T extends string>(opts: {
73
+ items: ReadonlyArray<TablistItem<T>>;
74
+ active: T;
75
+ onSelect: (id: T) => void;
76
+ label: string;
77
+ idPrefix: string;
78
+ controls?: boolean;
79
+ }): TemplateResult {
80
+ const { items, active, onSelect, label, idPrefix, controls = false } = opts;
81
+ const onKeyDown = (e: KeyboardEvent) => {
82
+ if (e.key !== 'ArrowRight' && e.key !== 'ArrowLeft') return;
83
+ e.preventDefault();
84
+ const idx = items.findIndex((it) => it.id === active);
85
+ if (idx === -1) return;
86
+ const delta = e.key === 'ArrowRight' ? 1 : -1;
87
+ const next = items[(idx + delta + items.length) % items.length];
88
+ if (!next) return;
89
+ onSelect(next.id);
90
+ const root = (e.currentTarget as HTMLElement).getRootNode() as
91
+ | ShadowRoot
92
+ | Document;
93
+ requestAnimationFrame(() => {
94
+ root
95
+ .querySelector<HTMLButtonElement>(`#${idPrefix}-tab-${next.id}`)
96
+ ?.focus();
97
+ });
98
+ };
99
+ return html`<div
100
+ class="roxy-tablist"
101
+ role="tablist"
102
+ aria-label=${label}
103
+ @keydown=${onKeyDown}
104
+ >
105
+ ${items.map(
106
+ (it) => html`<button
107
+ type="button"
108
+ class="roxy-tab"
109
+ role="tab"
110
+ id="${idPrefix}-tab-${it.id}"
111
+ aria-selected=${active === it.id ? 'true' : 'false'}
112
+ aria-controls=${
113
+ // Only the active panel is rendered, so only the active tab points
114
+ // at a live element; otherwise aria-controls would dangle.
115
+ controls && active === it.id ? `${idPrefix}-panel-${it.id}` : nothing
116
+ }
117
+ tabindex=${active === it.id ? '0' : '-1'}
118
+ @click=${() => onSelect(it.id)}
119
+ >
120
+ ${it.label}
121
+ </button>`,
122
+ )}
123
+ </div>`;
124
+ }
package/src/version.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by scripts/sync-version.ts. Do not edit.
2
- export const ROXY_UI_VERSION = '0.5.0';
2
+ export const ROXY_UI_VERSION = '0.6.0';