@roxyapi/ui 0.5.0 → 0.6.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 (152) 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 +2 -282
  11. package/dist/cdn/components/dasha-timeline.js.map +2 -2
  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 +34 -321
  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 +9 -560
  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 +5 -395
  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 +35 -271
  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 +41 -5059
  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.js +1 -447
  74. package/dist/components/dasha-timeline.js.map +3 -3
  75. package/dist/components/data.js +1 -408
  76. package/dist/components/data.js.map +3 -3
  77. package/dist/components/divisional-chart.d.ts.map +1 -1
  78. package/dist/components/divisional-chart.js +64 -929
  79. package/dist/components/divisional-chart.js.map +4 -4
  80. package/dist/components/dosha-card.js +1 -339
  81. package/dist/components/dosha-card.js.map +3 -3
  82. package/dist/components/endpoint-form.js +1 -505
  83. package/dist/components/endpoint-form.js.map +3 -3
  84. package/dist/components/guna-milan.js +1 -420
  85. package/dist/components/guna-milan.js.map +3 -3
  86. package/dist/components/hexagram.js +1 -426
  87. package/dist/components/hexagram.js.map +3 -3
  88. package/dist/components/horoscope-card.js +1 -427
  89. package/dist/components/horoscope-card.js.map +3 -3
  90. package/dist/components/kp-chart.js +1 -441
  91. package/dist/components/kp-chart.js.map +3 -3
  92. package/dist/components/kp-planets-table.js +1 -292
  93. package/dist/components/kp-planets-table.js.map +3 -3
  94. package/dist/components/kp-ruling-planets.js +1 -334
  95. package/dist/components/kp-ruling-planets.js.map +3 -3
  96. package/dist/components/location-search.js +1 -461
  97. package/dist/components/location-search.js.map +3 -3
  98. package/dist/components/moon-phase.js +1 -373
  99. package/dist/components/moon-phase.js.map +3 -3
  100. package/dist/components/nakshatra-card.js +1 -290
  101. package/dist/components/nakshatra-card.js.map +3 -3
  102. package/dist/components/natal-chart.d.ts +0 -1
  103. package/dist/components/natal-chart.d.ts.map +1 -1
  104. package/dist/components/natal-chart.js +8 -1084
  105. package/dist/components/natal-chart.js.map +4 -4
  106. package/dist/components/numerology-card.js +1 -361
  107. package/dist/components/numerology-card.js.map +3 -3
  108. package/dist/components/panchang-table.js +1 -396
  109. package/dist/components/panchang-table.js.map +3 -3
  110. package/dist/components/shadbala-table.js +1 -459
  111. package/dist/components/shadbala-table.js.map +3 -3
  112. package/dist/components/synastry-chart.js +7 -704
  113. package/dist/components/synastry-chart.js.map +3 -3
  114. package/dist/components/tarot-card.js +1 -379
  115. package/dist/components/tarot-card.js.map +3 -3
  116. package/dist/components/tarot-spread.js +1 -356
  117. package/dist/components/tarot-spread.js.map +3 -3
  118. package/dist/components/transits-table.d.ts +2 -0
  119. package/dist/components/transits-table.d.ts.map +1 -1
  120. package/dist/components/transits-table.js +1 -594
  121. package/dist/components/transits-table.js.map +4 -4
  122. package/dist/components/vedic-kundli.d.ts.map +1 -1
  123. package/dist/components/vedic-kundli.js +64 -845
  124. package/dist/components/vedic-kundli.js.map +4 -4
  125. package/dist/components/vedic-planets-table.js +1 -414
  126. package/dist/components/vedic-planets-table.js.map +3 -3
  127. package/dist/components/western-planets-table.js +1 -409
  128. package/dist/components/western-planets-table.js.map +3 -3
  129. package/dist/components/yoga-list.js +1 -429
  130. package/dist/components/yoga-list.js.map +3 -3
  131. package/dist/index.cjs +77 -8721
  132. package/dist/index.cjs.map +4 -4
  133. package/dist/index.js +77 -8701
  134. package/dist/index.js.map +4 -4
  135. package/dist/utils/disclosure.d.ts +16 -0
  136. package/dist/utils/disclosure.d.ts.map +1 -0
  137. package/dist/utils/kundli-render.d.ts.map +1 -1
  138. package/dist/utils/kundli-styles.d.ts.map +1 -1
  139. package/dist/utils/tablist.d.ts +44 -0
  140. package/dist/utils/tablist.d.ts.map +1 -0
  141. package/dist/version.d.ts +1 -1
  142. package/package.json +3 -1
  143. package/src/components/dasha-timeline.ts +7 -7
  144. package/src/components/divisional-chart.ts +2 -0
  145. package/src/components/natal-chart.ts +37 -62
  146. package/src/components/transits-table.ts +45 -18
  147. package/src/components/vedic-kundli.ts +2 -1
  148. package/src/utils/disclosure.ts +62 -0
  149. package/src/utils/kundli-render.ts +21 -35
  150. package/src/utils/kundli-styles.ts +0 -31
  151. package/src/utils/tablist.ts +124 -0
  152. 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.1';