@skylab-kulubu/skylcn-ui 0.1.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.
- package/LICENSE +21 -0
- package/README.md +100 -0
- package/dist/assets/skylab-mark.d.ts +5 -0
- package/dist/assets/skylab-mark.d.ts.map +1 -0
- package/dist/assets/skylab-mark.js +29 -0
- package/dist/assets/skylab-mark.js.map +1 -0
- package/dist/charts/chart-frame.d.ts +42 -0
- package/dist/charts/chart-frame.d.ts.map +1 -0
- package/dist/charts/chart-frame.js +33 -0
- package/dist/charts/chart-frame.js.map +1 -0
- package/dist/charts/charts.d.ts +84 -0
- package/dist/charts/charts.d.ts.map +1 -0
- package/dist/charts/charts.js +194 -0
- package/dist/charts/charts.js.map +1 -0
- package/dist/charts/index.d.ts +3 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +3 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/components/accordion.d.ts +7 -0
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js +17 -0
- package/dist/components/accordion.js.map +1 -0
- package/dist/components/app-shell.d.ts +96 -0
- package/dist/components/app-shell.d.ts.map +1 -0
- package/dist/components/app-shell.js +191 -0
- package/dist/components/app-shell.js.map +1 -0
- package/dist/components/avatar.d.ts +28 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/avatar.js +26 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +41 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +42 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/bar-list.d.ts +33 -0
- package/dist/components/bar-list.d.ts.map +1 -0
- package/dist/components/bar-list.js +31 -0
- package/dist/components/bar-list.js.map +1 -0
- package/dist/components/breadcrumbs.d.ts +16 -0
- package/dist/components/breadcrumbs.d.ts.map +1 -0
- package/dist/components/breadcrumbs.js +21 -0
- package/dist/components/breadcrumbs.js.map +1 -0
- package/dist/components/button.d.ts +30 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +51 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +44 -0
- package/dist/components/calendar.d.ts.map +1 -0
- package/dist/components/calendar.js +93 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +38 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +38 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +42 -0
- package/dist/components/carousel.d.ts.map +1 -0
- package/dist/components/carousel.js +92 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/checkbox.d.ts +3 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +9 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/command.d.ts +31 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/command.js +91 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/copy-button.d.ts +10 -0
- package/dist/components/copy-button.d.ts.map +1 -0
- package/dist/components/copy-button.js +23 -0
- package/dist/components/copy-button.js.map +1 -0
- package/dist/components/data-list.d.ts +70 -0
- package/dist/components/data-list.d.ts.map +1 -0
- package/dist/components/data-list.js +119 -0
- package/dist/components/data-list.js.map +1 -0
- package/dist/components/dialog.d.ts +41 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +49 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/display-extra.d.ts +91 -0
- package/dist/components/display-extra.d.ts.map +1 -0
- package/dist/components/display-extra.js +91 -0
- package/dist/components/display-extra.js.map +1 -0
- package/dist/components/drawer.d.ts +22 -0
- package/dist/components/drawer.d.ts.map +1 -0
- package/dist/components/drawer.js +50 -0
- package/dist/components/drawer.js.map +1 -0
- package/dist/components/feedback.d.ts +63 -0
- package/dist/components/feedback.d.ts.map +1 -0
- package/dist/components/feedback.js +59 -0
- package/dist/components/feedback.js.map +1 -0
- package/dist/components/field.d.ts +21 -0
- package/dist/components/field.d.ts.map +1 -0
- package/dist/components/field.js +38 -0
- package/dist/components/field.js.map +1 -0
- package/dist/components/form-extra.d.ts +58 -0
- package/dist/components/form-extra.d.ts.map +1 -0
- package/dist/components/form-extra.js +51 -0
- package/dist/components/form-extra.js.map +1 -0
- package/dist/components/icon-swap.d.ts +15 -0
- package/dist/components/icon-swap.d.ts.map +1 -0
- package/dist/components/icon-swap.js +13 -0
- package/dist/components/icon-swap.js.map +1 -0
- package/dist/components/list.d.ts +43 -0
- package/dist/components/list.d.ts.map +1 -0
- package/dist/components/list.js +30 -0
- package/dist/components/list.js.map +1 -0
- package/dist/components/menu.d.ts +41 -0
- package/dist/components/menu.d.ts.map +1 -0
- package/dist/components/menu.js +67 -0
- package/dist/components/menu.js.map +1 -0
- package/dist/components/month-calendar.d.ts +38 -0
- package/dist/components/month-calendar.d.ts.map +1 -0
- package/dist/components/month-calendar.js +64 -0
- package/dist/components/month-calendar.js.map +1 -0
- package/dist/components/motion.d.ts +43 -0
- package/dist/components/motion.d.ts.map +1 -0
- package/dist/components/motion.js +56 -0
- package/dist/components/motion.js.map +1 -0
- package/dist/components/navigation-menu.d.ts +28 -0
- package/dist/components/navigation-menu.d.ts.map +1 -0
- package/dist/components/navigation-menu.js +26 -0
- package/dist/components/navigation-menu.js.map +1 -0
- package/dist/components/page-header.d.ts +45 -0
- package/dist/components/page-header.d.ts.map +1 -0
- package/dist/components/page-header.js +37 -0
- package/dist/components/page-header.js.map +1 -0
- package/dist/components/pagination.d.ts +19 -0
- package/dist/components/pagination.d.ts.map +1 -0
- package/dist/components/pagination.js +70 -0
- package/dist/components/pagination.js.map +1 -0
- package/dist/components/popover.d.ts +10 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +15 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/preview-card.d.ts +11 -0
- package/dist/components/preview-card.d.ts.map +1 -0
- package/dist/components/preview-card.js +18 -0
- package/dist/components/preview-card.js.map +1 -0
- package/dist/components/proportion-bar.d.ts +16 -0
- package/dist/components/proportion-bar.d.ts.map +1 -0
- package/dist/components/proportion-bar.js +20 -0
- package/dist/components/proportion-bar.js.map +1 -0
- package/dist/components/radio-group.d.ts +11 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group.js +13 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/reveal.d.ts +19 -0
- package/dist/components/reveal.d.ts.map +1 -0
- package/dist/components/reveal.js +25 -0
- package/dist/components/reveal.js.map +1 -0
- package/dist/components/segmented-control.d.ts +16 -0
- package/dist/components/segmented-control.d.ts.map +1 -0
- package/dist/components/segmented-control.js +21 -0
- package/dist/components/segmented-control.js.map +1 -0
- package/dist/components/select.d.ts +25 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +33 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/side-nav.d.ts +33 -0
- package/dist/components/side-nav.d.ts.map +1 -0
- package/dist/components/side-nav.js +52 -0
- package/dist/components/side-nav.js.map +1 -0
- package/dist/components/skeleton.d.ts +4 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +7 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/skylab-loader.d.ts +10 -0
- package/dist/components/skylab-loader.d.ts.map +1 -0
- package/dist/components/skylab-loader.js +12 -0
- package/dist/components/skylab-loader.js.map +1 -0
- package/dist/components/sparkline.d.ts +12 -0
- package/dist/components/sparkline.d.ts.map +1 -0
- package/dist/components/sparkline.js +26 -0
- package/dist/components/sparkline.js.map +1 -0
- package/dist/components/state-card.d.ts +27 -0
- package/dist/components/state-card.d.ts.map +1 -0
- package/dist/components/state-card.js +17 -0
- package/dist/components/state-card.js.map +1 -0
- package/dist/components/switch.d.ts +15 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +12 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/tabs.d.ts +8 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +17 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/toast.d.ts +17 -0
- package/dist/components/toast.d.ts.map +1 -0
- package/dist/components/toast.js +30 -0
- package/dist/components/toast.js.map +1 -0
- package/dist/components/tooltip.d.ts +15 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +13 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/tree.d.ts +26 -0
- package/dist/components/tree.d.ts.map +1 -0
- package/dist/components/tree.js +92 -0
- package/dist/components/tree.js.map +1 -0
- package/dist/components/trend-badge.d.ts +13 -0
- package/dist/components/trend-badge.d.ts.map +1 -0
- package/dist/components/trend-badge.js +22 -0
- package/dist/components/trend-badge.js.map +1 -0
- package/dist/data-table/data-table.d.ts +59 -0
- package/dist/data-table/data-table.d.ts.map +1 -0
- package/dist/data-table/data-table.js +207 -0
- package/dist/data-table/data-table.js.map +1 -0
- package/dist/data-table/index.d.ts +2 -0
- package/dist/data-table/index.d.ts.map +1 -0
- package/dist/data-table/index.js +2 -0
- package/dist/data-table/index.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +2 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +2 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/motion-preference.d.ts +11 -0
- package/dist/lib/motion-preference.d.ts.map +1 -0
- package/dist/lib/motion-preference.js +42 -0
- package/dist/lib/motion-preference.js.map +1 -0
- package/dist/lib/motion-tokens.d.ts +55 -0
- package/dist/lib/motion-tokens.d.ts.map +1 -0
- package/dist/lib/motion-tokens.js +26 -0
- package/dist/lib/motion-tokens.js.map +1 -0
- package/dist/lib/motion.d.ts +3 -0
- package/dist/lib/motion.d.ts.map +1 -0
- package/dist/lib/motion.js +19 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/provider.d.ts +160 -0
- package/dist/lib/provider.d.ts.map +1 -0
- package/dist/lib/provider.js +156 -0
- package/dist/lib/provider.js.map +1 -0
- package/dist/lib/theme-script.d.ts +15 -0
- package/dist/lib/theme-script.d.ts.map +1 -0
- package/dist/lib/theme-script.js +15 -0
- package/dist/lib/theme-script.js.map +1 -0
- package/dist/lib/theme.d.ts +13 -0
- package/dist/lib/theme.d.ts.map +1 -0
- package/dist/lib/theme.js +78 -0
- package/dist/lib/theme.js.map +1 -0
- package/dist/lib/use-pending-indicator.d.ts +7 -0
- package/dist/lib/use-pending-indicator.d.ts.map +1 -0
- package/dist/lib/use-pending-indicator.js +27 -0
- package/dist/lib/use-pending-indicator.js.map +1 -0
- package/dist/lib/use-reduced-motion.d.ts +7 -0
- package/dist/lib/use-reduced-motion.d.ts.map +1 -0
- package/dist/lib/use-reduced-motion.js +28 -0
- package/dist/lib/use-reduced-motion.js.map +1 -0
- package/dist/styles/theme.css +368 -0
- package/dist/styles/tokens.css +248 -0
- package/package.json +90 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SKY LAB
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# skylcn-ui
|
|
2
|
+
|
|
3
|
+
SKY LAB web ürünlerinin ortak tasarım sistemi: token'lar, tema ve [Base UI](https://base-ui.com) üzerine shadcn yaklaşımıyla yazılmış bileşenler. Karar kaydı: [ADR 0055](https://github.com/skylab-kulubu/e-skylab/blob/main/docs/adr/0055-skylcn-ui-is-the-shared-design-system.md).
|
|
4
|
+
|
|
5
|
+
## Kurulum
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
pnpm add @skylab-kulubu/skylcn-ui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Kullanım
|
|
12
|
+
|
|
13
|
+
Tailwind 4 kullanan uygulamalar temayı Tailwind'den hemen sonra içe aktarır:
|
|
14
|
+
|
|
15
|
+
```css
|
|
16
|
+
@import 'tailwindcss';
|
|
17
|
+
@import '@skylab-kulubu/skylcn-ui/theme.css';
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { Button, SkylcnProvider, ThemeScript } from '@skylab-kulubu/skylcn-ui';
|
|
22
|
+
|
|
23
|
+
export default function RootLayout({ children }) {
|
|
24
|
+
return (
|
|
25
|
+
<html lang="tr" suppressHydrationWarning>
|
|
26
|
+
<head>
|
|
27
|
+
<ThemeScript />
|
|
28
|
+
</head>
|
|
29
|
+
<body>
|
|
30
|
+
<SkylcnProvider locale="tr">{children}</SkylcnProvider>
|
|
31
|
+
</body>
|
|
32
|
+
</html>
|
|
33
|
+
);
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- Yazı tiplerini uygulama yükler (Space Grotesk ve Space Mono) ve `--skylcn-font-sans` / `--skylcn-font-mono` değişkenlerine bağlar. Yüklenmezse sistem yazı tipine düşülür; Keycloak teması gibi yüzeylerde bu yeterlidir.
|
|
38
|
+
- Koyu tema varsayılandır; `data-theme="light"` açık temaya geçirir. `useTheme` seçimi hatırlar ve temayı kısa bir geçişle değiştirir.
|
|
39
|
+
- Sayfanın yanlış temada açılıp titrememesi için `<ThemeScript />` `<head>` içine konur ve `<html>` etiketine `suppressHydrationWarning` eklenir.
|
|
40
|
+
- `SkylcnProvider` hazır metinlerin dilini (`tr` / `en`) ve iç bağlantılar için kullanılacak bileşeni (Next.js'te `next/link`) belirler.
|
|
41
|
+
- Tailwind kullanmayan yüzeyler yalnızca token'ları alır: `@skylab-kulubu/skylcn-ui/tokens.css`.
|
|
42
|
+
|
|
43
|
+
## Giriş noktaları
|
|
44
|
+
|
|
45
|
+
- `@skylab-kulubu/skylcn-ui` — bileşenler, hareket yardımcıları, tema ve token'lar.
|
|
46
|
+
- `@skylab-kulubu/skylcn-ui/charts` — Recharts üzerine grafikler (alan, çizgi, çubuk, halka). Grafik kullanmayan uygulama Recharts'ı hiç yüklemez.
|
|
47
|
+
- `@skylab-kulubu/skylcn-ui/data-table` — TanStack Table üzerine yönetim tablosu.
|
|
48
|
+
- `@skylab-kulubu/skylcn-ui/theme.css` ve `/tokens.css` — Tailwind teması ve yalın CSS token'ları.
|
|
49
|
+
|
|
50
|
+
## Bileşenler
|
|
51
|
+
|
|
52
|
+
Tüm bileşenler canlı örnekleriyle doküman uygulamasındaki playground'da (`/playground/components`):
|
|
53
|
+
|
|
54
|
+
- **Eylemler:** Button, IconButton, IconSwap, CopyButton, SegmentedControl
|
|
55
|
+
- **Form:** Field, Input, Textarea, Select, Combobox, MultiSelect, Checkbox, RadioGroup, Switch, ToggleRow, NumberField, Slider, DatePicker, DateRangePicker, Calendar, Dropzone, OTPField
|
|
56
|
+
- **Katmanlar:** Dialog, ConfirmDialog, Drawer (sağ, sol, alt; kaydırarak kapanır), Popover, PreviewCard, Tooltip, Menu, ContextMenu, Toast, CommandPalette
|
|
57
|
+
- **Gezinme:** AppShell, SideNav, NavigationMenu, Tabs, Accordion, Stepper, Breadcrumbs, Pagination, PageHeader
|
|
58
|
+
- **Veri:** DataList, DataTable, ListPanel, Card, StatCard, Badge, StatusDot, Avatar, AvatarGroup, DescriptionList, Timeline, Tree, MonthCalendar, BarList, ProportionBar, TrendBadge, Sparkline, Notice, Banner, BulkBar, Progress, Meter, Kbd, StateCard, StatusPage, Skeleton
|
|
59
|
+
- **Hareket:** Reveal, Collapse, Swap, AnimatedNumber
|
|
60
|
+
|
|
61
|
+
## İlkeler
|
|
62
|
+
|
|
63
|
+
- **Erişilebilirlik:** Okunacak her metin her yüzeyde en az 4.5:1 kontrastta kalır; `faint` tonu yalnızca süs ve devre dışı durumlar içindir. Odak halkası anında görünür ve Windows yüksek kontrast modunda da çizilir. Yüksek kontrast isteyen okura sessiz metin ve çizgiler bir kademe güçlenir.
|
|
64
|
+
- **Hareket:** Süreler, eğriler ve mesafeler token'dır. Hareket azaltma tercihinde kısa solmalar kalır, kayma ve büyüme kalkar. Animasyon yalnızca bir şeyin nereden gelip nereye gittiğini ya da durumunun değiştiğini anlatıyorsa kullanılır.
|
|
65
|
+
- **Mobil:** Dokunmatik ekranda kontroller büyür ve yazı alanları 16px olur; bu sayede iOS alana yakınlaştırma yapmaz.
|
|
66
|
+
|
|
67
|
+
## Tarayıcı desteği
|
|
68
|
+
|
|
69
|
+
Chrome/Edge 113, Safari 17.2 ve Firefox 112 ile sonrası. Tema geçişindeki yumuşak solma View Transitions API'si olan tarayıcılarda çalışır, olmayanlarda tema anında değişir.
|
|
70
|
+
|
|
71
|
+
## Geliştirme
|
|
72
|
+
|
|
73
|
+
```sh
|
|
74
|
+
pnpm install
|
|
75
|
+
pnpm --filter @skylab-kulubu/skylcn-ui build
|
|
76
|
+
pnpm dev # playground: senaryolar ve bileşen kütüphanesi
|
|
77
|
+
pnpm typecheck
|
|
78
|
+
pnpm lint
|
|
79
|
+
pnpm test # birim ve erişilebilirlik (axe) testleri
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Uçtan uca testler docs uygulamasının üretim derlemesine karşı çalışır; her sayfa iki temada axe'tan geçer ve ana etkileşimler denenir:
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
pnpm --filter docs build
|
|
86
|
+
pnpm --filter docs exec playwright install chromium # ya da PLAYWRIGHT_CHROMIUM_EXECUTABLE ile kurulu bir Chromium
|
|
87
|
+
pnpm --filter docs e2e
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Playground statik dosya olarak da derlenebilir; `DOCS_BASE_PATH` onu bir alt yolda sunar:
|
|
91
|
+
|
|
92
|
+
```sh
|
|
93
|
+
DOCS_EXPORT=1 DOCS_BASE_PATH=/playground pnpm --filter docs build # çıktı: apps/docs/out
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Her değişiklik bir Changesets kaydıyla gelir: `pnpm changeset`.
|
|
97
|
+
|
|
98
|
+
## Lisans
|
|
99
|
+
|
|
100
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const SKYLAB_MARK_VIEWBOX = "0 0 586.43 553.91";
|
|
2
|
+
export declare const SKYLAB_MARK_PATHS: readonly string[];
|
|
3
|
+
/** Each path's distance from the mark's centre, 0 to 1, in the order of the paths above. */
|
|
4
|
+
export declare const SKYLAB_MARK_RADII: readonly number[];
|
|
5
|
+
//# sourceMappingURL=skylab-mark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skylab-mark.d.ts","sourceRoot":"","sources":["../../src/assets/skylab-mark.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,mBAAmB,sBAAsB,CAAC;AAEvD,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAoB9C,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAG9C,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// The SKY LAB mark, from skylab-assets (logos/skylab/skylab.svg). Update it there first.
|
|
2
|
+
export const SKYLAB_MARK_VIEWBOX = '0 0 586.43 553.91';
|
|
3
|
+
export const SKYLAB_MARK_PATHS = [
|
|
4
|
+
'M129.34,102.51c4.97,13.34,9.95,23.8,11.9,24.98,2.9,1.75,48.38,10.04,56.2,10.25,5.56.14,8.06-1.05,9.84-4.69,1.19-2.44,1.33-5.61,1.35-32.04.03-27.71-.05-29.46-1.43-31.73-1.14-1.88-6.21-5.11-22.93-14.62-11.81-6.72-30.27-17.29-41.03-23.49-26.67-15.38-28.42-16.25-32.63-16.25-1.93,0-4.24.52-5.15,1.16-2.06,1.44-3.48,6.49-2.82,10.05.79,4.3,15.21,45.51,26.71,76.39ZM129.08,44.32c.42.16,14.33,8.07,30.93,17.58l30.17,17.29.02,19.36c.01,10.65-.12,19.36-.29,19.36-.77,0-37.61-6.09-37.69-6.23-.05-.09-2.04-5.74-4.41-12.57-2.37-6.82-5.11-14.61-6.09-17.29-.98-2.69-4.18-11.73-7.11-20.09-2.93-8.36-5.54-15.77-5.81-16.46-.27-.71-.15-1.13.28-.96Z',
|
|
5
|
+
'M261.67,381.54c1.26-.9,2.52-1.8,3.79-2.7v-22.05c-1.26.96-2.52,1.93-3.79,2.89v21.86Z',
|
|
6
|
+
'M284.09,79.39l-8.75,8.84-.26,147.75-.26,147.75h18.41s.72,0,.72,0h17.67l-.26-147.75-.26-147.75-8.75-8.84c-3.7-3.73-6.97-6.93-8.4-8.22h0c-.39-.35-.64-.56-.72-.59h0s0,0,0,0c0,0,0,0,0,0h0c-.08.04-.33.25-.72.6h0c-1.43,1.29-4.7,4.49-8.4,8.22Z',
|
|
7
|
+
'M202.27,271.08c0,.34-.13,6.64-.3,14.01-.17,7.37-.1,13.18.16,12.92.26-.26,1.88-5.36,3.59-11.32l3.11-10.85-3.28-2.69c-1.81-1.48-3.28-2.41-3.27-2.08Z',
|
|
8
|
+
'M136.66,297.27c-6-2.41-52.8-15.43-55.46-15.42-1.45,0-3.57.62-4.71,1.37-4.07,2.68-74.49,73.44-75.5,75.86-1.54,3.69-1.28,7.22.68,9.05,4.24,3.97,7.92,4.08,46.26,1.29,51.63-3.74,66.28-5.48,69.29-8.21,2.12-1.92,21.5-41.59,24.59-50.33,2.39-6.78.69-11.26-5.16-13.62ZM112.73,329.81l-7.65,16.59-5.37.48c-15.44,1.38-65.9,4.47-65.9,4.04,0-.28,11.25-11.53,25-25,13.75-13.47,25.17-24.52,25.38-24.54,1.39-.16,35.59,10.33,35.85,11,.18.46-3.12,8.3-7.32,17.43Z',
|
|
9
|
+
'M251.13,383.35v-138.73c0-76.3-.09-138.73-.19-138.73s-8.06,7.87-17.67,17.49l-17.48,17.49v242.48h35.34Z',
|
|
10
|
+
'M72.95,193.32c7.63,6.14,16.92,13.51,20.65,16.37,3.72,2.86,19.96,15.53,36.09,28.14,16.13,12.61,29.54,22.94,29.81,22.94.27,0,3.28-3.05,6.69-6.79,5.83-6.38,6.12-6.87,4.78-7.81-4.47-3.13-79.32-62.27-79.1-62.49.31-.31,33.05-1.48,72.78-2.59,15.51-.43,30.99-.98,34.4-1.22l6.2-.43v-18.66l-11.47.12c-6.31.07-20.26.38-31.02.69-42.59,1.25-83.27,3.16-94.99,4.46-11.04,1.22-14.35,5.18-10.53,12.59,1.45,2.82,4.56,5.73,15.69,14.68Z',
|
|
11
|
+
'M213.15,391.35l-11.27,7.33c-.34,1.94-.58,3.62-1.24,5.5-1.75,4.99-14.45,16.35-18.93,20.79-4.23,4.18-8.96,8.8-13.09,13.09-3.62,3.76-11.35,10.24-16.5,6.71-1.19-.82-2.07-1.65-2.94-2.81-1.69-2.25-3.72-10.13-3.68-10.47.09-.84-5.35,14.76.63,19.27,1.26.95,2.87,1.37,3.33,1.47,2.83.62,5.61-.26,8.67-1.44,7.27-2.82,15.55-9.4,22.18-13.77,14.19-9.35,28.13-19.21,42.23-28.92,6.42-4.42,13.83-9.22,20.19-13.52.61-.41,1.41-1.28,1.76-2.3h-29.08c-.22,0-1.6-.8-2.25-.93Z',
|
|
12
|
+
'M156.39,277.82v160.03l17.67-17.66,17.67-17.66v-79.15c0-43.53-.25-79.13-.56-79.11-.31.02-8.26,7.57-17.67,16.79l-17.11,16.75Z',
|
|
13
|
+
'M254.51,96.18c4.54,1.63,6.52,6.14,6.99,15.91l.36,7.54,1.8-4.42c.37-1.08.74-2.16,1.12-3.24.16-3.38.38-8.63.49-15.1.18-10.23-.24-13.06,1.3-16.94,1.46-3.68,4.41-6.75,10.26-12.84l8.59-8.95,3.64-10.38c1.33-3.78,2.61-6.97,3.42-8.61h0c.33-.67.58-1.07.73-1.15.14.07.4.48.73,1.15h0c.81,1.64,2.09,4.83,3.42,8.61l3.64,10.38,8.59,8.95c5.85,6.09,8.8,9.16,10.26,12.84,1.54,3.88,1.12,6.7,1.3,16.94.11,6.47.33,11.72.49,15.1.37,1.08.74,2.16,1.12,3.24l1.8,4.42.36-7.54c.47-9.77,2.45-14.28,6.99-15.91,1.65-.59,3.09-1.13,3.2-1.2.24-.15-14.63-41.72-20.71-57.89-11.33-30.16-12.87-33.31-17.57-35.82-1.41-.75-2.18-1.15-2.89-1.25-.28-.02-.48-.03-.74-.02h0c-.25,0-.45,0-.72.02-.71.1-1.48.5-2.89,1.25-4.7,2.5-6.24,5.66-17.57,35.82-6.07,16.17-20.94,57.74-20.71,57.89.1.06,1.54.6,3.2,1.2Z',
|
|
14
|
+
'M379.16,133.04c1.78,3.64,4.28,4.83,9.84,4.69,7.82-.2,53.29-8.49,56.2-10.25,1.95-1.18,6.93-11.63,11.9-24.98,11.5-30.88,25.92-72.09,26.71-76.39.66-3.56-.76-8.61-2.82-10.05-.91-.64-3.22-1.16-5.15-1.16-4.21,0-5.96.87-32.63,16.25-10.75,6.2-29.21,16.77-41.03,23.49-16.72,9.51-21.8,12.75-22.93,14.62-1.38,2.28-1.46,4.02-1.43,31.73.02,26.42.16,29.59,1.35,32.04ZM396.23,98.56l.02-19.36,30.17-17.29c16.59-9.51,30.51-17.43,30.93-17.58.43-.16.55.25.28.96-.26.69-2.88,8.09-5.81,16.46-2.93,8.36-6.13,17.4-7.11,20.09-.98,2.69-3.72,10.47-6.09,17.29-2.37,6.82-4.35,12.48-4.41,12.57-.09.14-36.93,6.23-37.69,6.23-.17,0-.3-8.71-.29-19.36Z',
|
|
15
|
+
'M320.98,368.13v10.71c1.26.9,2.52,1.8,3.79,2.7v-21.86c-1.26-.96-2.52-1.93-3.79-2.89v11.35Z',
|
|
16
|
+
'M384.3,298.01c.26.26.34-5.55.16-12.92-.17-7.37-.31-13.67-.3-14.01,0-.34-1.47.6-3.27,2.08l-3.28,2.69,3.11,10.85c1.71,5.97,3.32,11.06,3.59,11.32Z',
|
|
17
|
+
'M585.43,359.08c-1.01-2.42-71.43-73.18-75.5-75.86-1.14-.75-3.26-1.36-4.71-1.37-2.66,0-49.46,13.01-55.46,15.42-5.85,2.35-7.55,6.84-5.16,13.62,3.09,8.75,22.47,48.41,24.59,50.33,3.02,2.73,17.67,4.47,69.29,8.21,38.34,2.78,42.02,2.68,46.26-1.29,1.96-1.84,2.22-5.36.68-9.05ZM486.71,346.88l-5.37-.48-7.65-16.59c-4.2-9.12-7.5-16.97-7.32-17.43.26-.67,34.46-11.16,35.85-11,.21.02,11.63,11.07,25.38,24.54,13.75,13.47,25,24.72,25,25,0,.43-50.45-2.66-65.9-4.04Z',
|
|
18
|
+
'M370.64,383.35v-242.48l-17.48-17.49c-9.61-9.62-17.56-17.49-17.67-17.49s-.19,62.43-.19,138.73v138.73h35.34Z',
|
|
19
|
+
'M392.63,160.9l-11.47-.12v18.66l6.2.43c3.41.24,18.89.79,34.4,1.22,39.73,1.11,72.47,2.27,72.78,2.59.22.22-74.63,59.36-79.1,62.49-1.34.94-1.05,1.42,4.78,7.81,3.42,3.74,6.43,6.8,6.69,6.79.27,0,13.68-10.33,29.81-22.94,16.13-12.61,32.37-25.27,36.09-28.14,3.72-2.86,13.01-10.23,20.65-16.37,11.13-8.95,14.24-11.86,15.69-14.68,3.82-7.41.51-11.37-10.53-12.59-11.72-1.3-52.4-3.21-94.99-4.46-10.75-.32-24.71-.63-31.02-.69Z',
|
|
20
|
+
'M440.93,431.49c.04.34-1.99,8.22-3.68,10.47-.87,1.16-1.75,1.99-2.94,2.81-5.15,3.53-12.88-2.95-16.5-6.71-4.13-4.29-8.87-8.91-13.09-13.09-4.48-4.43-17.18-15.8-18.93-20.79-.66-1.89-.9-3.56-1.24-5.5l-11.27-7.33c-.65.13-2.03.93-2.25.93h-29.08c.35,1.03,1.15,1.89,1.76,2.3,6.36,4.3,13.76,9.1,20.19,13.52,14.1,9.71,28.05,19.57,42.23,28.92,6.64,4.37,14.92,10.95,22.18,13.77,3.06,1.19,5.84,2.07,8.67,1.44.45-.1,2.07-.52,3.33-1.47,5.98-4.51.54-20.11.63-19.27Z',
|
|
21
|
+
'M395.27,244.28c-.31-.02-.56,35.58-.56,79.11v79.15l17.67,17.66,17.67,17.66v-160.03l-17.11-16.75c-9.41-9.21-17.36-16.77-17.67-16.79Z',
|
|
22
|
+
'M300.36,401.43c-2.31-2.23-4.69-3.25-7.16-3.06h0c-2.46-.18-4.83.83-7.14,3.06-4.65,4.49-35.63,41.91-36.71,44.34-.59,1.33-.89,3.51-.67,4.86.79,4.81,36.66,97.97,38.46,99.88,1.9,2.02,4.08,3.19,6.07,3.39h0s0,0,0,0c0,0,0,0,.01,0h0c1.98-.2,4.16-1.37,6.07-3.39,1.8-1.91,37.67-95.07,38.46-99.88.22-1.34-.08-3.53-.67-4.86-1.08-2.43-32.06-39.84-36.71-44.34ZM305.97,484.19c-6.69,18.05-12.37,32.91-12.62,33.03-.01,0-.06-.07-.12-.19v-.03s0,0,0,.02c0,0,0,0,0-.02v.03c-.06.13-.11.2-.12.19-.25-.11-5.93-14.97-12.62-33.03-6.69-18.05-12.11-32.98-12.05-33.18.42-1.34,23.95-28.28,24.67-28.24.02,0,.07.03.12.06h0s0,0,0,0c0,0,0,0,0,0h0c.05-.04.1-.07.12-.07.71-.04,24.25,26.91,24.67,28.24.06.2-5.36,15.13-12.05,33.18Z',
|
|
23
|
+
];
|
|
24
|
+
/** Each path's distance from the mark's centre, 0 to 1, in the order of the paths above. */
|
|
25
|
+
export const SKYLAB_MARK_RADII = [
|
|
26
|
+
1, 0.4, 0.2, 0.36, 0.93, 0.28, 0.72, 0.72, 0.56, 0.89, 1, 0.4, 0.36, 0.93, 0.28, 0.72, 0.72, 0.56,
|
|
27
|
+
0.82,
|
|
28
|
+
];
|
|
29
|
+
//# sourceMappingURL=skylab-mark.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skylab-mark.js","sourceRoot":"","sources":["../../src/assets/skylab-mark.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAEzF,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAEvD,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,unBAAunB;IACvnB,qFAAqF;IACrF,8OAA8O;IAC9O,oJAAoJ;IACpJ,6bAA6b;IAC7b,uGAAuG;IACvG,kaAAka;IACla,qcAAqc;IACrc,6HAA6H;IAC7H,yvBAAyvB;IACzvB,4mBAA4mB;IAC5mB,2FAA2F;IAC3F,iJAAiJ;IACjJ,icAAic;IACjc,4GAA4G;IAC5G,4ZAA4Z;IAC5Z,icAAic;IACjc,oIAAoI;IACpI,srBAAsrB;CACvrB,CAAC;AAEF,4FAA4F;AAC5F,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IACjG,IAAI;CACL,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export type LegendItem = {
|
|
3
|
+
key: string;
|
|
4
|
+
label: string;
|
|
5
|
+
color: string;
|
|
6
|
+
/** A figure after the label, such as a slice's share. */
|
|
7
|
+
detail?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ChartTable = {
|
|
10
|
+
head: readonly ReactNode[];
|
|
11
|
+
rows: readonly (readonly ReactNode[])[];
|
|
12
|
+
};
|
|
13
|
+
export type ChartFrameProps = {
|
|
14
|
+
title: ReactNode;
|
|
15
|
+
/** Next to the title, such as a TrendBadge. */
|
|
16
|
+
badge?: ReactNode;
|
|
17
|
+
description?: ReactNode;
|
|
18
|
+
/** Controls at the end of the title row, such as a menu. */
|
|
19
|
+
actions?: ReactNode;
|
|
20
|
+
/** Height of the plot, axis labels included. */
|
|
21
|
+
height: number;
|
|
22
|
+
/** Series or segments; a legend shows once there are two or more. */
|
|
23
|
+
legend: readonly LegendItem[];
|
|
24
|
+
/** Rectangles for bars, areas and slices; short strokes for lines. */
|
|
25
|
+
legendShape: 'rect' | 'line';
|
|
26
|
+
/** The same values as a table, the chart's accessible twin. */
|
|
27
|
+
table: ChartTable;
|
|
28
|
+
/** While data reloads the last render stays, dimmed, instead of a skeleton. */
|
|
29
|
+
loading?: boolean;
|
|
30
|
+
empty?: boolean;
|
|
31
|
+
/** Draws the card; turn off to set the chart straight into a section or another card. */
|
|
32
|
+
framed?: boolean;
|
|
33
|
+
className?: string;
|
|
34
|
+
/** Draws the plot for the series the reader has not hidden. */
|
|
35
|
+
children: (hidden: ReadonlySet<string>) => ReactNode;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* The card every chart sits in: title, a legend whose entries hide and show
|
|
39
|
+
* their series, a switch to the table view, and the loading and empty states.
|
|
40
|
+
*/
|
|
41
|
+
export declare function ChartFrame({ title, badge, description, actions, height, legend, legendShape, table, loading, empty, framed, className, children, }: ChartFrameProps): import("react").JSX.Element;
|
|
42
|
+
//# sourceMappingURL=chart-frame.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-frame.d.ts","sourceRoot":"","sources":["../../src/charts/chart-frame.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQjD,MAAM,MAAM,UAAU,GAAG;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IAC3B,IAAI,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,SAAS,CAAC;IACjB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,gDAAgD;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,sEAAsE;IACtE,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,KAAK,EAAE,UAAU,CAAC;IAClB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yFAAyF;IACzF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;CACtD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,WAAW,EACX,OAAO,EACP,MAAM,EACN,MAAM,EACN,WAAW,EACX,KAAK,EACL,OAAe,EACf,KAAa,EACb,MAAa,EACb,SAAS,EACT,QAAQ,GACT,EAAE,eAAe,+BAsJjB"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { ChartColumn, Table2 } from 'lucide-react';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import { Button } from '../components/button.js';
|
|
6
|
+
import { IconSwap } from '../components/icon-swap.js';
|
|
7
|
+
import { Swap } from '../components/motion.js';
|
|
8
|
+
import { Skeleton } from '../components/skeleton.js';
|
|
9
|
+
import { cn } from '../lib/cn.js';
|
|
10
|
+
import { useSkylcn } from '../lib/provider.js';
|
|
11
|
+
/**
|
|
12
|
+
* The card every chart sits in: title, a legend whose entries hide and show
|
|
13
|
+
* their series, a switch to the table view, and the loading and empty states.
|
|
14
|
+
*/
|
|
15
|
+
export function ChartFrame({ title, badge, description, actions, height, legend, legendShape, table, loading = false, empty = false, framed = true, className, children, }) {
|
|
16
|
+
const { messages } = useSkylcn();
|
|
17
|
+
const [hidden, setHidden] = useState(new Set());
|
|
18
|
+
const [asTable, setAsTable] = useState(false);
|
|
19
|
+
const toggle = (key) => setHidden((prev) => {
|
|
20
|
+
const next = new Set(prev);
|
|
21
|
+
if (next.has(key))
|
|
22
|
+
next.delete(key);
|
|
23
|
+
// At least one series stays on, so the plot never goes blank.
|
|
24
|
+
else if (legend.length - prev.size > 1)
|
|
25
|
+
next.add(key);
|
|
26
|
+
return next;
|
|
27
|
+
});
|
|
28
|
+
return (_jsxs("figure", { "data-slot": "chart", className: cn('m-0 flex min-w-0 flex-col', framed && 'rounded-xl border border-border bg-chart-surface', className), children: [_jsxs("figcaption", { className: cn('flex items-start gap-3', framed && 'px-4 pt-4'), children: [_jsxs("div", { className: "min-w-0 flex-1", children: [_jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [_jsx("p", { className: "truncate text-sm font-semibold text-foreground", children: title }), badge ? _jsx("span", { className: "shrink-0", children: badge }) : null] }), description ? (_jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: description })) : null] }), actions, _jsx(Button, { variant: "ghost", size: "icon-sm", "aria-pressed": asTable, "aria-label": asTable ? messages.showChart : messages.showTable, title: asTable ? messages.showChart : messages.showTable, onClick: () => setAsTable((value) => !value), children: _jsx(IconSwap, { swapped: asTable, icon: Table2, swappedIcon: ChartColumn, className: "size-4" }) })] }), legend.length > 1 && !asTable ? (_jsx("ul", { className: cn('flex flex-wrap gap-x-1 gap-y-0.5 pt-2', framed ? 'px-3' : '-mx-1.5'), children: legend.map((item) => {
|
|
29
|
+
const off = hidden.has(item.key);
|
|
30
|
+
return (_jsx("li", { children: _jsxs("button", { type: "button", "aria-pressed": !off, title: messages.toggleSeries(item.label), onClick: () => toggle(item.key), className: cn('flex items-center gap-1.5 rounded-md px-1.5 py-1 text-xs outline-hidden transition-[color,opacity] duration-(--motion-duration-fast)', 'hover:bg-accent focus-visible:ring-2 focus-visible:ring-ring', off ? 'text-subtle-foreground opacity-60' : 'text-secondary-foreground'), children: [_jsx("span", { "aria-hidden": true, className: cn('shrink-0 transition-opacity', legendShape === 'rect' ? 'size-2.5 rounded-xs' : 'h-0.5 w-3 rounded-full', off && 'opacity-30'), style: { background: item.color } }), _jsx("span", { className: cn(off && 'line-through decoration-subtle-foreground/60'), children: item.label }), item.detail ? (_jsx("span", { className: "text-subtle-foreground tabular-nums", children: item.detail })) : null] }) }, item.key));
|
|
31
|
+
}) })) : null, _jsx(Swap, { id: asTable ? 'table' : 'chart', className: cn('min-w-0 pt-2', framed && 'px-2 pb-3'), children: empty && loading ? (_jsx(Skeleton, { className: "mx-2 rounded-lg", style: { height: height - 8 } })) : empty ? (_jsx("p", { className: "grid place-items-center text-xs text-muted-foreground", style: { height }, children: messages.noData })) : asTable ? (_jsx("div", { className: "scrollbar overflow-auto px-2", style: { maxHeight: height }, children: _jsxs("table", { className: "w-full border-collapse text-xs", children: [_jsx("caption", { className: "sr-only", children: title }), _jsx("thead", { children: _jsx("tr", { className: "border-b border-border", children: table.head.map((cell, i) => (_jsx("th", { scope: "col", className: cn('sticky top-0 bg-chart-surface py-2 font-medium text-subtle-foreground', i === 0 ? 'pr-3 text-left' : 'px-3 text-right'), children: cell }, i))) }) }), _jsx("tbody", { className: "divide-y divide-border-subtle", children: table.rows.map((row, r) => (_jsx("tr", { children: row.map((cell, i) => i === 0 ? (_jsx("th", { scope: "row", className: "py-1.5 pr-3 text-left font-normal text-secondary-foreground", children: cell }, i)) : (_jsx("td", { className: "px-3 py-1.5 text-right text-foreground tabular-nums", children: cell }, i))) }, r))) })] }) })) : (_jsx("div", { "aria-busy": loading || undefined, className: cn('transition-opacity duration-(--motion-duration-base) [&_text]:tabular-nums', '[&_.recharts-surface]:rounded-md [&_.recharts-surface]:outline-hidden [&_.recharts-surface:focus-visible]:ring-2 [&_.recharts-surface:focus-visible]:ring-ring', loading && 'opacity-50'), children: children(hidden) })) })] }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=chart-frame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-frame.js","sourceRoot":"","sources":["../../src/charts/chart-frame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/** One row of chart data: the category or time under `x`, and a value per series key. */
|
|
3
|
+
export type ChartDatum = Record<string, string | number | null | undefined>;
|
|
4
|
+
/**
|
|
5
|
+
* The series a chart draws, in a fixed order. Colours follow that order through
|
|
6
|
+
* the eight chart tokens, so a series keeps its colour when others are hidden
|
|
7
|
+
* or filtered out; keep one config per chart and never reorder it by value.
|
|
8
|
+
*/
|
|
9
|
+
export type ChartSeries = Record<string, {
|
|
10
|
+
label: string;
|
|
11
|
+
color?: string;
|
|
12
|
+
}>;
|
|
13
|
+
type CartesianProps = {
|
|
14
|
+
data: readonly ChartDatum[];
|
|
15
|
+
/** The key of the category or time in each row. */
|
|
16
|
+
x: string;
|
|
17
|
+
/** Heads the first column of the table view. */
|
|
18
|
+
xLabel?: string;
|
|
19
|
+
series: ChartSeries;
|
|
20
|
+
title: ReactNode;
|
|
21
|
+
/** Next to the title, such as a TrendBadge. */
|
|
22
|
+
badge?: ReactNode;
|
|
23
|
+
description?: ReactNode;
|
|
24
|
+
actions?: ReactNode;
|
|
25
|
+
/** Draws the card; turn off to set the chart straight into a section or another card. */
|
|
26
|
+
framed?: boolean;
|
|
27
|
+
/** Plot height with its axes; 240 by default. */
|
|
28
|
+
height?: number;
|
|
29
|
+
formatValue?: (value: number) => string;
|
|
30
|
+
formatX?: (value: string | number) => string;
|
|
31
|
+
loading?: boolean;
|
|
32
|
+
className?: string;
|
|
33
|
+
};
|
|
34
|
+
type SharedProps = CartesianProps & {
|
|
35
|
+
/** A small chart for a card: no value axis or grid, lighter ticks; 120 high by default. */
|
|
36
|
+
compact?: boolean;
|
|
37
|
+
};
|
|
38
|
+
export type AreaChartProps = SharedProps & {
|
|
39
|
+
/** Stacks the areas so their tops show the running total. */
|
|
40
|
+
stacked?: boolean;
|
|
41
|
+
/** Marks every data point, for short series of a dozen points or fewer. */
|
|
42
|
+
markers?: boolean;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Change over time as filled areas; best for one to three series. A single
|
|
46
|
+
* series fades from a light wash at its line to nothing at the baseline.
|
|
47
|
+
*/
|
|
48
|
+
export declare function AreaChart({ stacked, markers, ...props }: AreaChartProps): import("react").JSX.Element;
|
|
49
|
+
export type LineChartProps = SharedProps & {
|
|
50
|
+
/** Marks every data point, for short series of a dozen points or fewer. */
|
|
51
|
+
markers?: boolean;
|
|
52
|
+
};
|
|
53
|
+
/** Trends of several series over the same time, as 2px lines. */
|
|
54
|
+
export declare function LineChart({ markers, ...props }: LineChartProps): import("react").JSX.Element;
|
|
55
|
+
export type BarChartProps = SharedProps & {
|
|
56
|
+
/** Stacks each category's series into one bar, parted by 2px gaps. */
|
|
57
|
+
stacked?: boolean;
|
|
58
|
+
/** `horizontal` lays bars sideways, for many or long category names. */
|
|
59
|
+
orientation?: 'vertical' | 'horizontal';
|
|
60
|
+
};
|
|
61
|
+
/** Magnitudes side by side: columns by default, bars sideways for long names. */
|
|
62
|
+
export declare function BarChart({ stacked, orientation, ...props }: BarChartProps): import("react").JSX.Element;
|
|
63
|
+
export type DonutSlice = {
|
|
64
|
+
key: string;
|
|
65
|
+
label: string;
|
|
66
|
+
value: number;
|
|
67
|
+
};
|
|
68
|
+
export type DonutChartProps = {
|
|
69
|
+
/** Up to six slices in a fixed order; the rest are folded into "Other". */
|
|
70
|
+
data: readonly DonutSlice[];
|
|
71
|
+
title: ReactNode;
|
|
72
|
+
description?: ReactNode;
|
|
73
|
+
actions?: ReactNode;
|
|
74
|
+
/** The figure in the hole; the total by default. */
|
|
75
|
+
centerLabel?: ReactNode;
|
|
76
|
+
height?: number;
|
|
77
|
+
formatValue?: (value: number) => string;
|
|
78
|
+
loading?: boolean;
|
|
79
|
+
className?: string;
|
|
80
|
+
};
|
|
81
|
+
/** Part of a whole at a glance, for up to six parts; compare close values with bars instead. */
|
|
82
|
+
export declare function DonutChart({ height, ...props }: DonutChartProps): import("react").JSX.Element;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=charts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.d.ts","sourceRoot":"","sources":["../../src/charts/charts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { useId } from 'react';
|
|
4
|
+
import { Area, AreaChart as AreaPrimitive, Bar, BarChart as BarPrimitive, CartesianGrid, Cell, Line, LineChart as LinePrimitive, Pie, PieChart as PiePrimitive, Tooltip, XAxis, YAxis, } from 'recharts';
|
|
5
|
+
import { AnimatedNumber } from '../components/motion.js';
|
|
6
|
+
import { useSkylcn } from '../lib/provider.js';
|
|
7
|
+
import { useReducedMotion } from '../lib/use-reduced-motion.js';
|
|
8
|
+
import { ChartFrame } from './chart-frame.js';
|
|
9
|
+
/**
|
|
10
|
+
* A lone series has nothing to be told apart from, so it takes the brand
|
|
11
|
+
* accent; two or more take the validated chart colours in order.
|
|
12
|
+
*/
|
|
13
|
+
function resolve(series) {
|
|
14
|
+
const entries = Object.entries(series);
|
|
15
|
+
return entries.map(([key, value], i) => ({
|
|
16
|
+
key,
|
|
17
|
+
label: value.label,
|
|
18
|
+
color: value.color ?? (entries.length === 1 ? 'var(--primary)' : `var(--chart-${(i % 8) + 1})`),
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
function useFormats(formatValue) {
|
|
22
|
+
const { locale } = useSkylcn();
|
|
23
|
+
const tag = locale === 'tr' ? 'tr-TR' : 'en-US';
|
|
24
|
+
const full = new Intl.NumberFormat(tag);
|
|
25
|
+
const compact = new Intl.NumberFormat(tag, { notation: 'compact', maximumFractionDigits: 1 });
|
|
26
|
+
return {
|
|
27
|
+
value: formatValue ?? ((value) => full.format(value)),
|
|
28
|
+
tick: formatValue ?? ((value) => compact.format(value)),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function tableOf({ data, x, xLabel, formatX }, resolved, format) {
|
|
32
|
+
return {
|
|
33
|
+
head: [xLabel ?? '', ...resolved.map((s) => s.label)],
|
|
34
|
+
rows: data.map((row) => [
|
|
35
|
+
formatX ? formatX(row[x]) : String(row[x] ?? ''),
|
|
36
|
+
...resolved.map((s) => (typeof row[s.key] === 'number' ? format(row[s.key]) : '—')),
|
|
37
|
+
]),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** The hover and keyboard readout: every series at that point, values first. */
|
|
41
|
+
function TooltipCard({ active, payload, label, resolved, format, formatX }) {
|
|
42
|
+
if (!active || !payload?.length)
|
|
43
|
+
return null;
|
|
44
|
+
return (_jsxs("div", { className: "min-w-36 rounded-lg border border-border bg-popover px-3 py-2 text-xs shadow-overlay", children: [label !== undefined ? (_jsx("p", { className: "mb-1.5 text-muted-foreground", children: formatX ? formatX(label) : label })) : null, _jsx("ul", { className: "flex flex-col gap-1", children: payload.map((item) => {
|
|
45
|
+
const series = resolved.find((s) => s.key === item.dataKey) ??
|
|
46
|
+
resolved.find((s) => s.key === item.name);
|
|
47
|
+
if (!series || typeof item.value !== 'number')
|
|
48
|
+
return null;
|
|
49
|
+
return (_jsxs("li", { className: "flex items-center gap-2", children: [_jsx("span", { "aria-hidden": true, className: "h-0.5 w-3 shrink-0 rounded-full", style: { background: series.color } }), _jsx("span", { className: "font-semibold text-foreground tabular-nums", children: format(item.value) }), _jsx("span", { className: "truncate text-muted-foreground", children: series.label })] }, series.key));
|
|
50
|
+
}) })] }));
|
|
51
|
+
}
|
|
52
|
+
const TICK = { fill: 'var(--subtle-foreground)', fontSize: 11 };
|
|
53
|
+
const TICK_COMPACT = { fill: 'var(--subtle-foreground)', fontSize: 10 };
|
|
54
|
+
const MARGIN = { top: 8, right: 12, bottom: 0, left: 4 };
|
|
55
|
+
function useMotion() {
|
|
56
|
+
const reduced = useReducedMotion();
|
|
57
|
+
return {
|
|
58
|
+
isAnimationActive: !reduced,
|
|
59
|
+
animationDuration: 450,
|
|
60
|
+
animationEasing: 'ease-out',
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
function chartTitle(title) {
|
|
64
|
+
return typeof title === 'string' ? title : undefined;
|
|
65
|
+
}
|
|
66
|
+
function frameProps(props, resolved, format) {
|
|
67
|
+
return {
|
|
68
|
+
title: props.title,
|
|
69
|
+
badge: props.badge,
|
|
70
|
+
framed: props.framed,
|
|
71
|
+
description: props.description,
|
|
72
|
+
actions: props.actions,
|
|
73
|
+
legend: resolved,
|
|
74
|
+
table: tableOf(props, resolved, format),
|
|
75
|
+
loading: props.loading,
|
|
76
|
+
empty: props.data.length === 0,
|
|
77
|
+
className: props.className,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
/** Grid, axes and the hover readout shared by area and line charts. */
|
|
81
|
+
function timeAxes(props, resolved, format) {
|
|
82
|
+
const compact = props.compact ?? false;
|
|
83
|
+
return [
|
|
84
|
+
compact ? null : _jsx(CartesianGrid, { vertical: false, stroke: "var(--chart-grid)" }, "grid"),
|
|
85
|
+
_jsx(XAxis, { dataKey: props.x, tickLine: false, axisLine: compact ? false : { stroke: 'var(--chart-axis)' }, tick: compact ? TICK_COMPACT : TICK, tickMargin: compact ? 4 : 8, minTickGap: 16, padding: { left: 8, right: 8 }, tickFormatter: props.formatX }, "x"),
|
|
86
|
+
_jsx(YAxis, { hide: compact, tickLine: false, axisLine: false, tick: TICK, width: "auto", tickFormatter: format.tick }, "y"),
|
|
87
|
+
_jsx(Tooltip, { isAnimationActive: false, cursor: { stroke: 'var(--chart-axis)', strokeWidth: 1 }, content: (tooltip) => (_jsx(TooltipCard, { active: tooltip.active, payload: tooltip.payload, label: tooltip.label, resolved: resolved, format: format.value, formatX: props.formatX })) }, "tooltip"),
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
const dot = (color) => ({
|
|
91
|
+
r: 4,
|
|
92
|
+
fill: color,
|
|
93
|
+
stroke: 'var(--chart-surface)',
|
|
94
|
+
strokeWidth: 2,
|
|
95
|
+
});
|
|
96
|
+
/**
|
|
97
|
+
* Change over time as filled areas; best for one to three series. A single
|
|
98
|
+
* series fades from a light wash at its line to nothing at the baseline.
|
|
99
|
+
*/
|
|
100
|
+
export function AreaChart({ stacked = false, markers = false, ...props }) {
|
|
101
|
+
const height = props.height ?? (props.compact ? 120 : 240);
|
|
102
|
+
const resolved = resolve(props.series);
|
|
103
|
+
const format = useFormats(props.formatValue);
|
|
104
|
+
const motion = useMotion();
|
|
105
|
+
const gradient = useId().replace(/:/g, '');
|
|
106
|
+
const single = resolved.length === 1;
|
|
107
|
+
return (_jsx(ChartFrame, { ...frameProps(props, resolved, format.value), height: height, legendShape: "rect", children: (hidden) => (_jsxs(AreaPrimitive, { data: props.data, responsive: true, style: { width: '100%', height }, margin: props.compact ? { ...MARGIN, left: 0, right: 0 } : MARGIN, title: chartTitle(props.title), children: [single ? (_jsx("defs", { children: _jsxs("linearGradient", { id: gradient, x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", style: { stopColor: resolved[0].color, stopOpacity: 0.28 } }), _jsx("stop", { offset: "100%", style: { stopColor: resolved[0].color, stopOpacity: 0 } })] }) })) : null, timeAxes(props, resolved, format), resolved
|
|
108
|
+
.filter((s) => !hidden.has(s.key))
|
|
109
|
+
.map((s) => (_jsx(Area, { dataKey: s.key, name: s.label, type: "monotone", stackId: stacked ? 'stack' : undefined, stroke: s.color, strokeWidth: 2, fill: single ? `url(#${gradient})` : s.color, fillOpacity: single ? 1 : 0.1, dot: markers ? dot(s.color) : false, activeDot: dot(s.color), ...motion }, s.key)))] })) }));
|
|
110
|
+
}
|
|
111
|
+
/** Trends of several series over the same time, as 2px lines. */
|
|
112
|
+
export function LineChart({ markers = false, ...props }) {
|
|
113
|
+
const height = props.height ?? (props.compact ? 120 : 240);
|
|
114
|
+
const resolved = resolve(props.series);
|
|
115
|
+
const format = useFormats(props.formatValue);
|
|
116
|
+
const motion = useMotion();
|
|
117
|
+
return (_jsx(ChartFrame, { ...frameProps(props, resolved, format.value), height: height, legendShape: "line", children: (hidden) => (_jsxs(LinePrimitive, { data: props.data, responsive: true, style: { width: '100%', height }, margin: props.compact ? { ...MARGIN, left: 0, right: 0 } : MARGIN, title: chartTitle(props.title), children: [timeAxes(props, resolved, format), resolved
|
|
118
|
+
.filter((s) => !hidden.has(s.key))
|
|
119
|
+
.map((s) => (_jsx(Line, { dataKey: s.key, name: s.label, type: "monotone", stroke: s.color, strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round", dot: markers ? dot(s.color) : false, activeDot: dot(s.color), ...motion }, s.key)))] })) }));
|
|
120
|
+
}
|
|
121
|
+
/** Magnitudes side by side: columns by default, bars sideways for long names. */
|
|
122
|
+
export function BarChart({ stacked = false, orientation = 'vertical', ...props }) {
|
|
123
|
+
const height = props.height ?? (props.compact ? 120 : 240);
|
|
124
|
+
const resolved = resolve(props.series);
|
|
125
|
+
const format = useFormats(props.formatValue);
|
|
126
|
+
const motion = useMotion();
|
|
127
|
+
const sideways = orientation === 'horizontal';
|
|
128
|
+
const compact = props.compact ?? false;
|
|
129
|
+
return (_jsx(ChartFrame, { ...frameProps(props, resolved, format.value), height: height, legendShape: "rect", children: (hidden) => {
|
|
130
|
+
const shown = resolved.filter((s) => !hidden.has(s.key));
|
|
131
|
+
const categoryAxis = {
|
|
132
|
+
dataKey: props.x,
|
|
133
|
+
type: 'category',
|
|
134
|
+
tickLine: false,
|
|
135
|
+
tick: compact ? TICK_COMPACT : TICK,
|
|
136
|
+
tickFormatter: props.formatX,
|
|
137
|
+
};
|
|
138
|
+
const valueAxis = {
|
|
139
|
+
type: 'number',
|
|
140
|
+
hide: compact,
|
|
141
|
+
tickLine: false,
|
|
142
|
+
axisLine: false,
|
|
143
|
+
tick: TICK,
|
|
144
|
+
tickFormatter: format.tick,
|
|
145
|
+
};
|
|
146
|
+
return (_jsxs(BarPrimitive, { data: props.data, layout: sideways ? 'vertical' : 'horizontal', responsive: true, style: { width: '100%', height }, margin: compact ? { ...MARGIN, left: 0, right: 0 } : MARGIN, barGap: 2, barCategoryGap: "24%", title: chartTitle(props.title), children: [compact ? null : (_jsx(CartesianGrid, { vertical: sideways, horizontal: !sideways, stroke: "var(--chart-grid)" })), sideways ? (_jsxs(_Fragment, { children: [_jsx(XAxis, { ...valueAxis }), _jsx(YAxis, { ...categoryAxis, axisLine: { stroke: 'var(--chart-axis)' }, width: "auto" })] })) : (_jsxs(_Fragment, { children: [_jsx(XAxis, { ...categoryAxis, axisLine: compact ? false : { stroke: 'var(--chart-axis)' }, tickMargin: compact ? 4 : 8, minTickGap: 8 }), _jsx(YAxis, { ...valueAxis, width: "auto" })] })), _jsx(Tooltip, { isAnimationActive: false, cursor: { fill: 'var(--accent)' }, content: (tooltip) => (_jsx(TooltipCard, { active: tooltip.active, payload: tooltip.payload, label: tooltip.label, resolved: resolved, format: format.value, formatX: props.formatX })) }), shown.map((s, i) => {
|
|
147
|
+
// Only the outer end of a bar is rounded; a stack rounds its last segment.
|
|
148
|
+
const rounded = !stacked || i === shown.length - 1;
|
|
149
|
+
const radius = !rounded
|
|
150
|
+
? [0, 0, 0, 0]
|
|
151
|
+
: sideways
|
|
152
|
+
? [0, 4, 4, 0]
|
|
153
|
+
: [4, 4, 0, 0];
|
|
154
|
+
return (_jsx(Bar, { dataKey: s.key, name: s.label, fill: s.color, maxBarSize: 24, radius: radius, stackId: stacked ? 'stack' : undefined, stroke: stacked ? 'var(--chart-surface)' : undefined, strokeWidth: stacked ? 2 : 0, activeBar: { fillOpacity: 0.85 }, ...motion }, s.key));
|
|
155
|
+
})] }));
|
|
156
|
+
} }));
|
|
157
|
+
}
|
|
158
|
+
const MAX_SLICES = 6;
|
|
159
|
+
/** Part of a whole at a glance, for up to six parts; compare close values with bars instead. */
|
|
160
|
+
export function DonutChart({ height = 220, ...props }) {
|
|
161
|
+
const { messages } = useSkylcn();
|
|
162
|
+
const format = useFormats(props.formatValue);
|
|
163
|
+
const motion = useMotion();
|
|
164
|
+
const kept = props.data.slice(0, MAX_SLICES - (props.data.length > MAX_SLICES ? 1 : 0));
|
|
165
|
+
const rest = props.data.slice(kept.length);
|
|
166
|
+
const slices = kept.map((slice, i) => ({
|
|
167
|
+
key: slice.key,
|
|
168
|
+
label: slice.label,
|
|
169
|
+
color: `var(--chart-${i + 1})`,
|
|
170
|
+
}));
|
|
171
|
+
const values = new Map(kept.map((slice) => [slice.key, slice.value]));
|
|
172
|
+
if (rest.length) {
|
|
173
|
+
slices.push({ key: '__other', label: messages.other, color: 'var(--subtle-foreground)' });
|
|
174
|
+
values.set('__other', rest.reduce((sum, slice) => sum + slice.value, 0));
|
|
175
|
+
}
|
|
176
|
+
const total = [...values.values()].reduce((sum, value) => sum + value, 0);
|
|
177
|
+
const percent = (value) => (total ? `${Math.round((value / total) * 100)}%` : '0%');
|
|
178
|
+
// Direct labels: each legend entry carries its share.
|
|
179
|
+
for (const slice of slices)
|
|
180
|
+
slice.detail = percent(values.get(slice.key) ?? 0);
|
|
181
|
+
return (_jsx(ChartFrame, { title: props.title, description: props.description, actions: props.actions, height: height, legend: slices, legendShape: "rect", table: {
|
|
182
|
+
head: ['', messages.total, '%'],
|
|
183
|
+
rows: slices.map((slice) => [
|
|
184
|
+
slice.label,
|
|
185
|
+
format.value(values.get(slice.key) ?? 0),
|
|
186
|
+
percent(values.get(slice.key) ?? 0),
|
|
187
|
+
]),
|
|
188
|
+
}, loading: props.loading, empty: props.data.length === 0, className: props.className, children: (hidden) => {
|
|
189
|
+
const shown = slices.filter((slice) => !hidden.has(slice.key));
|
|
190
|
+
const shownTotal = shown.reduce((sum, slice) => sum + (values.get(slice.key) ?? 0), 0);
|
|
191
|
+
return (_jsxs("div", { className: "relative", style: { height }, children: [_jsxs(PiePrimitive, { responsive: true, style: { width: '100%', height }, title: chartTitle(props.title), children: [_jsx(Tooltip, { isAnimationActive: false, content: (tooltip) => (_jsx(TooltipCard, { active: tooltip.active, payload: tooltip.payload, label: tooltip.label, resolved: slices, format: format.value })) }), _jsx(Pie, { data: shown.map((slice) => ({ ...slice, value: values.get(slice.key) ?? 0 })), dataKey: "value", nameKey: "key", innerRadius: "62%", outerRadius: "88%", stroke: "var(--chart-surface)", strokeWidth: 2, startAngle: 90, endAngle: -270, ...motion, children: shown.map((slice) => (_jsx(Cell, { fill: slice.color }, slice.key))) })] }), _jsx("div", { className: "pointer-events-none absolute inset-0 grid place-items-center", children: _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-xl font-semibold text-foreground", children: props.centerLabel ?? _jsx(AnimatedNumber, { value: shownTotal, format: format.value }) }), _jsx("p", { className: "text-3xs tracking-label text-subtle-foreground uppercase", children: messages.total })] }) })] }));
|
|
192
|
+
} }));
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=charts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/charts/charts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { AreaChart, BarChart, DonutChart, LineChart, type AreaChartProps, type BarChartProps, type ChartDatum, type ChartSeries, type DonutChartProps, type DonutSlice, type LineChartProps, } from './charts.js';
|
|
2
|
+
export { ChartFrame, type ChartFrameProps, type ChartTable, type LegendItem, } from './chart-frame.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,cAAc,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,EACV,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/charts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,QAAQ,EACR,UAAU,EACV,SAAS,GAQV,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,UAAU,GAIX,MAAM,kBAAkB,CAAC"}
|