@spatika/react 1.1.0 → 1.3.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/AGENTS.md +71 -0
- package/README.md +4 -3
- package/dist/composites/Card.d.ts +7 -1
- package/dist/composites/Card.d.ts.map +1 -1
- package/dist/composites/Card.js +10 -0
- package/dist/composites/ChartDataGrid.d.ts +33 -0
- package/dist/composites/ChartDataGrid.d.ts.map +1 -0
- package/dist/composites/ChartDataGrid.js +77 -0
- package/dist/composites/CoverHero.d.ts +1 -1
- package/dist/composites/CoverHero.d.ts.map +1 -1
- package/dist/composites/CoverHero.js +2 -2
- package/dist/composites/EntityMediaCard.d.ts +1 -1
- package/dist/composites/EntityMediaCard.d.ts.map +1 -1
- package/dist/composites/EntityMediaCard.js +12 -4
- package/dist/composites/EventCalendar.d.ts +72 -0
- package/dist/composites/EventCalendar.d.ts.map +1 -0
- package/dist/composites/EventCalendar.js +371 -0
- package/dist/composites/EventEditor.d.ts +22 -0
- package/dist/composites/EventEditor.d.ts.map +1 -0
- package/dist/composites/EventEditor.js +86 -0
- package/dist/composites/EventTimeline.d.ts +29 -0
- package/dist/composites/EventTimeline.d.ts.map +1 -0
- package/dist/composites/EventTimeline.js +186 -0
- package/dist/composites/MapChart.d.ts +24 -0
- package/dist/composites/MapChart.d.ts.map +1 -0
- package/dist/composites/MapChart.js +58 -0
- package/dist/composites/ProfileHero.d.ts +6 -4
- package/dist/composites/ProfileHero.d.ts.map +1 -1
- package/dist/composites/ProfileHero.js +8 -8
- package/dist/composites/ScatterWebGL.d.ts +22 -0
- package/dist/composites/ScatterWebGL.d.ts.map +1 -0
- package/dist/composites/ScatterWebGL.js +45 -0
- package/dist/composites/SiteFooter.d.ts +1 -1
- package/dist/composites/SiteFooter.js +1 -1
- package/dist/composites/SiteNav.d.ts +7 -2
- package/dist/composites/SiteNav.d.ts.map +1 -1
- package/dist/composites/SiteNav.js +9 -5
- package/dist/composites/StatCard.d.ts +2 -1
- package/dist/composites/StatCard.d.ts.map +1 -1
- package/dist/composites/StatCard.js +3 -3
- package/dist/composites/StatusDot.d.ts +1 -1
- package/dist/composites/Wordmark.d.ts +2 -2
- package/dist/composites/Wordmark.d.ts.map +1 -1
- package/dist/composites/cartesian-charts.d.ts +138 -0
- package/dist/composites/cartesian-charts.d.ts.map +1 -0
- package/dist/composites/cartesian-charts.js +401 -0
- package/dist/composites/chart-composition.d.ts +139 -0
- package/dist/composites/chart-composition.d.ts.map +1 -0
- package/dist/composites/chart-composition.js +486 -0
- package/dist/composites/chart-ui.d.ts +83 -0
- package/dist/composites/chart-ui.d.ts.map +1 -0
- package/dist/composites/chart-ui.js +108 -0
- package/dist/composites/charts-3d.d.ts +37 -0
- package/dist/composites/charts-3d.d.ts.map +1 -0
- package/dist/composites/charts-3d.js +121 -0
- package/dist/composites/flow-charts.d.ts +89 -0
- package/dist/composites/flow-charts.d.ts.map +1 -0
- package/dist/composites/flow-charts.js +186 -0
- package/dist/composites/radial-charts.d.ts +109 -0
- package/dist/composites/radial-charts.d.ts.map +1 -0
- package/dist/composites/radial-charts.js +176 -0
- package/dist/composites/scheduler-ui.d.ts +44 -0
- package/dist/composites/scheduler-ui.d.ts.map +1 -0
- package/dist/composites/scheduler-ui.js +71 -0
- package/dist/index.d.ts +68 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -7
- package/dist/lib/chart-export.d.ts +10 -0
- package/dist/lib/chart-export.d.ts.map +1 -0
- package/dist/lib/chart-export.js +102 -0
- package/dist/lib/charts.d.ts +235 -0
- package/dist/lib/charts.d.ts.map +1 -0
- package/dist/lib/charts.js +744 -0
- package/dist/lib/geo.d.ts +39 -0
- package/dist/lib/geo.d.ts.map +1 -0
- package/dist/lib/geo.js +101 -0
- package/dist/lib/iso.d.ts +21 -0
- package/dist/lib/iso.d.ts.map +1 -0
- package/dist/lib/iso.js +56 -0
- package/dist/lib/rrule.d.ts +20 -0
- package/dist/lib/rrule.d.ts.map +1 -0
- package/dist/lib/rrule.js +236 -0
- package/dist/lib/scheduler.d.ts +156 -0
- package/dist/lib/scheduler.d.ts.map +1 -0
- package/dist/lib/scheduler.js +502 -0
- package/dist/lib/webgl-scatter.d.ts +44 -0
- package/dist/lib/webgl-scatter.d.ts.map +1 -0
- package/dist/lib/webgl-scatter.js +185 -0
- package/dist/primitives/Accordion.d.ts +44 -20
- package/dist/primitives/Accordion.d.ts.map +1 -1
- package/dist/primitives/Accordion.js +82 -22
- package/dist/primitives/AppBar.d.ts +13 -0
- package/dist/primitives/AppBar.d.ts.map +1 -0
- package/dist/primitives/AppBar.js +27 -0
- package/dist/primitives/Autocomplete.d.ts +28 -0
- package/dist/primitives/Autocomplete.d.ts.map +1 -0
- package/dist/primitives/Autocomplete.js +118 -0
- package/dist/primitives/Avatar.d.ts +13 -1
- package/dist/primitives/Avatar.d.ts.map +1 -1
- package/dist/primitives/Avatar.js +17 -2
- package/dist/primitives/Backdrop.d.ts +17 -0
- package/dist/primitives/Backdrop.d.ts.map +1 -0
- package/dist/primitives/Backdrop.js +17 -0
- package/dist/primitives/BottomNavigation.d.ts +23 -0
- package/dist/primitives/BottomNavigation.d.ts.map +1 -0
- package/dist/primitives/BottomNavigation.js +30 -0
- package/dist/primitives/ButtonBase.d.ts +14 -0
- package/dist/primitives/ButtonBase.d.ts.map +1 -0
- package/dist/primitives/ButtonBase.js +13 -0
- package/dist/primitives/ButtonGroup.d.ts +25 -0
- package/dist/primitives/ButtonGroup.d.ts.map +1 -0
- package/dist/primitives/ButtonGroup.js +44 -0
- package/dist/primitives/CircularProgress.d.ts +16 -0
- package/dist/primitives/CircularProgress.d.ts.map +1 -0
- package/dist/primitives/CircularProgress.js +17 -0
- package/dist/primitives/ClickAwayListener.d.ts +16 -0
- package/dist/primitives/ClickAwayListener.d.ts.map +1 -0
- package/dist/primitives/ClickAwayListener.js +33 -0
- package/dist/primitives/Collapse.d.ts +19 -0
- package/dist/primitives/Collapse.d.ts.map +1 -0
- package/dist/primitives/Collapse.js +14 -0
- package/dist/primitives/Container.d.ts +13 -0
- package/dist/primitives/Container.d.ts.map +1 -0
- package/dist/primitives/Container.js +26 -0
- package/dist/primitives/Fab.d.ts +22 -0
- package/dist/primitives/Fab.d.ts.map +1 -0
- package/dist/primitives/Fab.js +42 -0
- package/dist/primitives/FormControl.d.ts +27 -0
- package/dist/primitives/FormControl.d.ts.map +1 -0
- package/dist/primitives/FormControl.js +24 -0
- package/dist/primitives/FormControlLabel.d.ts +18 -0
- package/dist/primitives/FormControlLabel.d.ts.map +1 -0
- package/dist/primitives/FormControlLabel.js +19 -0
- package/dist/primitives/Grid.d.ts +32 -0
- package/dist/primitives/Grid.d.ts.map +1 -0
- package/dist/primitives/Grid.js +50 -0
- package/dist/primitives/IconButton.d.ts +22 -0
- package/dist/primitives/IconButton.d.ts.map +1 -0
- package/dist/primitives/IconButton.js +39 -0
- package/dist/primitives/ImageList.d.ts +31 -0
- package/dist/primitives/ImageList.d.ts.map +1 -0
- package/dist/primitives/ImageList.js +33 -0
- package/dist/primitives/InputAdornment.d.ts +28 -0
- package/dist/primitives/InputAdornment.d.ts.map +1 -0
- package/dist/primitives/InputAdornment.js +13 -0
- package/dist/primitives/Link.d.ts +17 -0
- package/dist/primitives/Link.d.ts.map +1 -0
- package/dist/primitives/Link.js +29 -0
- package/dist/primitives/List.d.ts +41 -0
- package/dist/primitives/List.d.ts.map +1 -0
- package/dist/primitives/List.js +22 -0
- package/dist/primitives/Masonry.d.ts +14 -0
- package/dist/primitives/Masonry.d.ts.map +1 -0
- package/dist/primitives/Masonry.js +15 -0
- package/dist/primitives/Menu.d.ts +28 -0
- package/dist/primitives/Menu.d.ts.map +1 -0
- package/dist/primitives/Menu.js +54 -0
- package/dist/primitives/MobileStepper.d.ts +15 -0
- package/dist/primitives/MobileStepper.d.ts.map +1 -0
- package/dist/primitives/MobileStepper.js +8 -0
- package/dist/primitives/Modal.d.ts +18 -0
- package/dist/primitives/Modal.d.ts.map +1 -0
- package/dist/primitives/Modal.js +29 -0
- package/dist/primitives/NoSsr.d.ts +15 -0
- package/dist/primitives/NoSsr.d.ts.map +1 -0
- package/dist/primitives/NoSsr.js +19 -0
- package/dist/primitives/Paper.d.ts +22 -0
- package/dist/primitives/Paper.d.ts.map +1 -0
- package/dist/primitives/Paper.js +33 -0
- package/dist/primitives/Progress.d.ts +6 -2
- package/dist/primitives/Progress.d.ts.map +1 -1
- package/dist/primitives/Progress.js +8 -3
- package/dist/primitives/Snackbar.d.ts +23 -0
- package/dist/primitives/Snackbar.d.ts.map +1 -0
- package/dist/primitives/Snackbar.js +33 -0
- package/dist/primitives/SpeedDial.d.ts +26 -0
- package/dist/primitives/SpeedDial.d.ts.map +1 -0
- package/dist/primitives/SpeedDial.js +26 -0
- package/dist/primitives/Stack.d.ts +15 -0
- package/dist/primitives/Stack.d.ts.map +1 -0
- package/dist/primitives/Stack.js +45 -0
- package/dist/primitives/StarRating.d.ts +19 -1
- package/dist/primitives/StarRating.d.ts.map +1 -1
- package/dist/primitives/StarRating.js +36 -6
- package/dist/primitives/Stepper.d.ts +36 -0
- package/dist/primitives/Stepper.d.ts.map +1 -0
- package/dist/primitives/Stepper.js +53 -0
- package/dist/primitives/TablePagination.d.ts +16 -0
- package/dist/primitives/TablePagination.d.ts.map +1 -0
- package/dist/primitives/TablePagination.js +12 -0
- package/dist/primitives/TextField.d.ts +24 -0
- package/dist/primitives/TextField.d.ts.map +1 -0
- package/dist/primitives/TextField.js +19 -0
- package/dist/primitives/TextareaAutosize.d.ts +11 -0
- package/dist/primitives/TextareaAutosize.d.ts.map +1 -0
- package/dist/primitives/TextareaAutosize.js +26 -0
- package/dist/primitives/ToggleButton.d.ts +28 -0
- package/dist/primitives/ToggleButton.d.ts.map +1 -0
- package/dist/primitives/ToggleButton.js +56 -0
- package/dist/primitives/TransferList.d.ts +21 -0
- package/dist/primitives/TransferList.d.ts.map +1 -0
- package/dist/primitives/TransferList.js +40 -0
- package/dist/primitives/Typography.d.ts +23 -0
- package/dist/primitives/Typography.d.ts.map +1 -0
- package/dist/primitives/Typography.js +69 -0
- package/dist/primitives/transitions.d.ts +29 -0
- package/dist/primitives/transitions.d.ts.map +1 -0
- package/dist/primitives/transitions.js +52 -0
- package/package.json +28 -4
- package/skills/spatika-ui/SKILL.md +96 -0
- package/src/composites/Card.tsx +51 -1
- package/src/composites/ChartDataGrid.test.tsx +57 -0
- package/src/composites/ChartDataGrid.tsx +196 -0
- package/src/composites/CoverHero.test.tsx +38 -0
- package/src/composites/CoverHero.tsx +29 -22
- package/src/composites/EntityMediaCard.test.tsx +58 -0
- package/src/composites/EntityMediaCard.tsx +31 -13
- package/src/composites/EventCalendar.tsx +1030 -0
- package/src/composites/EventEditor.tsx +268 -0
- package/src/composites/EventTimeline.tsx +366 -0
- package/src/composites/MapChart.test.tsx +39 -0
- package/src/composites/MapChart.tsx +130 -0
- package/src/composites/ProfileHero.test.tsx +33 -0
- package/src/composites/ProfileHero.tsx +96 -79
- package/src/composites/ScatterWebGL.test.tsx +25 -0
- package/src/composites/ScatterWebGL.tsx +79 -0
- package/src/composites/SiteFooter.test.tsx +37 -0
- package/src/composites/SiteFooter.tsx +1 -1
- package/src/composites/SiteNav.test.tsx +46 -0
- package/src/composites/SiteNav.tsx +14 -4
- package/src/composites/StatCard.test.tsx +30 -0
- package/src/composites/StatCard.tsx +4 -0
- package/src/composites/Wordmark.test.tsx +23 -0
- package/src/composites/Wordmark.tsx +2 -2
- package/src/composites/cartesian-charts.test.tsx +52 -0
- package/src/composites/cartesian-charts.tsx +1287 -0
- package/src/composites/chart-composition.test.tsx +53 -0
- package/src/composites/chart-composition.tsx +898 -0
- package/src/composites/chart-ui.tsx +328 -0
- package/src/composites/charts-3d.test.tsx +25 -0
- package/src/composites/charts-3d.tsx +318 -0
- package/src/composites/charts.test.tsx +254 -0
- package/src/composites/chrome.test.tsx +29 -0
- package/src/composites/flow-charts.test.tsx +79 -0
- package/src/composites/flow-charts.tsx +607 -0
- package/src/composites/marketing.test.tsx +38 -34
- package/src/composites/radial-charts.test.tsx +74 -0
- package/src/composites/radial-charts.tsx +617 -0
- package/src/composites/scheduler-ui.tsx +306 -0
- package/src/composites/scheduler.test.tsx +280 -0
- package/src/index.test.ts +26 -0
- package/src/index.ts +287 -5
- package/src/lib/chart-export.test.ts +20 -0
- package/src/lib/chart-export.ts +99 -0
- package/src/lib/charts-platform.test.ts +93 -0
- package/src/lib/charts.test.ts +132 -0
- package/src/lib/charts.ts +1021 -0
- package/src/lib/geo.test.ts +42 -0
- package/src/lib/geo.ts +138 -0
- package/src/lib/iso.test.ts +22 -0
- package/src/lib/iso.ts +102 -0
- package/src/lib/rrule.test.ts +53 -0
- package/src/lib/rrule.ts +281 -0
- package/src/lib/scheduler.test.ts +199 -0
- package/src/lib/scheduler.ts +693 -0
- package/src/lib/tokens.test.ts +2 -2
- package/src/lib/webgl-scatter.test.ts +36 -0
- package/src/lib/webgl-scatter.ts +230 -0
- package/src/primitives/Accordion.tsx +218 -63
- package/src/primitives/AppBar.tsx +39 -0
- package/src/primitives/Autocomplete.tsx +236 -0
- package/src/primitives/Avatar.tsx +52 -1
- package/src/primitives/Backdrop.tsx +48 -0
- package/src/primitives/BottomNavigation.tsx +102 -0
- package/src/primitives/ButtonBase.tsx +34 -0
- package/src/primitives/ButtonGroup.tsx +90 -0
- package/src/primitives/CircularProgress.tsx +104 -0
- package/src/primitives/ClickAwayListener.tsx +46 -0
- package/src/primitives/Collapse.tsx +39 -0
- package/src/primitives/Container.tsx +40 -0
- package/src/primitives/Fab.tsx +62 -0
- package/src/primitives/FormControl.tsx +90 -0
- package/src/primitives/FormControlLabel.tsx +51 -0
- package/src/primitives/Grid.tsx +101 -0
- package/src/primitives/IconButton.tsx +59 -0
- package/src/primitives/ImageList.test.tsx +48 -0
- package/src/primitives/ImageList.tsx +112 -0
- package/src/primitives/InputAdornment.tsx +86 -0
- package/src/primitives/Link.tsx +48 -0
- package/src/primitives/List.tsx +121 -0
- package/src/primitives/Masonry.tsx +32 -0
- package/src/primitives/Menu.tsx +112 -0
- package/src/primitives/MobileStepper.tsx +64 -0
- package/src/primitives/Modal.tsx +70 -0
- package/src/primitives/NoSsr.tsx +28 -0
- package/src/primitives/Paper.tsx +55 -0
- package/src/primitives/Progress.tsx +25 -7
- package/src/primitives/Snackbar.tsx +83 -0
- package/src/primitives/SpeedDial.tsx +110 -0
- package/src/primitives/Stack.tsx +88 -0
- package/src/primitives/StarRating.tsx +87 -28
- package/src/primitives/Stepper.tsx +184 -0
- package/src/primitives/TablePagination.tsx +58 -0
- package/src/primitives/TextField.tsx +105 -0
- package/src/primitives/TextareaAutosize.tsx +49 -0
- package/src/primitives/ToggleButton.tsx +148 -0
- package/src/primitives/TransferList.tsx +110 -0
- package/src/primitives/Typography.tsx +90 -0
- package/src/primitives/mui-more.test.tsx +76 -0
- package/src/primitives/mui.test.tsx +134 -0
- package/src/primitives/transitions.tsx +120 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Spatika UI — agent guide
|
|
2
|
+
|
|
3
|
+
Glass React design system. Packages: `@spatika/tokens`, `@spatika/react`.
|
|
4
|
+
Human docs: https://spatika.sweyam.com · Machine index: https://spatika.sweyam.com/llms.txt
|
|
5
|
+
|
|
6
|
+
## Use this library
|
|
7
|
+
|
|
8
|
+
```bash
|
|
9
|
+
npm install @spatika/tokens @spatika/react
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
import "@spatika/tokens/styles.css";
|
|
14
|
+
import { SpatikaThemeProvider, Button } from "@spatika/react";
|
|
15
|
+
|
|
16
|
+
export function App() {
|
|
17
|
+
return (
|
|
18
|
+
<SpatikaThemeProvider defaultTheme="neelam">
|
|
19
|
+
<Button>Hello Spatika</Button>
|
|
20
|
+
</SpatikaThemeProvider>
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Must do
|
|
26
|
+
- Import `@spatika/tokens/styles.css` before any component
|
|
27
|
+
- Wrap the app in `<SpatikaThemeProvider>`
|
|
28
|
+
- Import from `@spatika/react` — never invent Spatika components
|
|
29
|
+
- Prefer composites (`PageShell`, `FloatingPageChromeBar`, `GlassCard`) over restyling primitives
|
|
30
|
+
- Use token CSS variables, never hardcoded hex
|
|
31
|
+
- Use `size="touch"` for mobile primary actions
|
|
32
|
+
- Animate transform / shadow / color only — never `transition-all` on glass
|
|
33
|
+
|
|
34
|
+
### Themes
|
|
35
|
+
`mukta` (pearl light) · `neelam` (sapphire dark) · `usha` (dawn) · `sandhya` (dusk, no blur)
|
|
36
|
+
|
|
37
|
+
### When to use
|
|
38
|
+
|
|
39
|
+
| Need | Component |
|
|
40
|
+
|---|---|
|
|
41
|
+
| App page frame | `PageShell` |
|
|
42
|
+
| List / directory chrome | `FloatingPageChromeBar` |
|
|
43
|
+
| Fixed safe-area bar | `AppHeader variant="chrome"` |
|
|
44
|
+
| Mobile tabs | `MobileTabBar` |
|
|
45
|
+
| Profile / story header | `CoverHero` / `ProfileHero` + `useCoverChromeBleed` |
|
|
46
|
+
| Glass surface | `GlassCard` |
|
|
47
|
+
| Labeled field | `TextField` |
|
|
48
|
+
| Filters | `FilterSheet` + `ChipGroup` |
|
|
49
|
+
| Empty list | `EmptyState` |
|
|
50
|
+
| Titled modal | `Dialog` (not `Modal`) |
|
|
51
|
+
| Toast stack | `Toaster` + `useToast` |
|
|
52
|
+
| Charts | `BarChart`, `LineChart`, or `ChartContainer` |
|
|
53
|
+
| Calendar | `EventCalendar` |
|
|
54
|
+
|
|
55
|
+
Canonical snippets: https://spatika.sweyam.com/docs/components.md
|
|
56
|
+
Prop types: `node_modules/@spatika/react/dist/index.d.ts`
|
|
57
|
+
|
|
58
|
+
Cursor skill (copy into the consumer repo):
|
|
59
|
+
`node_modules/@spatika/react/skills/spatika-ui/` → `.cursor/skills/spatika-ui/`
|
|
60
|
+
|
|
61
|
+
## Change this library
|
|
62
|
+
|
|
63
|
+
Monorepo: `packages/tokens` (CSS) → `packages/react` (components) → `apps/website` (docs).
|
|
64
|
+
|
|
65
|
+
When adding a component:
|
|
66
|
+
1. Export it from `packages/react/src/index.ts`
|
|
67
|
+
2. Add a catalog row in `apps/website/src/data/navigation.ts`
|
|
68
|
+
3. Add a live demo in `apps/website/src/demos/`
|
|
69
|
+
4. Add a canonical snippet in `apps/website/src/data/agent-snippets.ts`
|
|
70
|
+
|
|
71
|
+
Run `npm test` and `npm run typecheck` before opening a PR.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @spatika/react
|
|
2
2
|
|
|
3
|
-
React primitives and composites for Spatika — glass
|
|
3
|
+
React primitives and composites for **Spatika UI** — a glass React design system with four themes and shared tokens.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -45,8 +45,9 @@ Button sizes include `touch` / `icon-touch` (≥44px) for mobile-first chrome.
|
|
|
45
45
|
|
|
46
46
|
## What's included
|
|
47
47
|
|
|
48
|
-
- **Primitives** — Button,
|
|
49
|
-
- **Composites** — AppHeader, AppSidebar, Card, EntityCard, FloatingPageChrome, CoverHero, FilterSheet, MobileTabBar, CommandSearchField, NotificationBell, Timeline, AmountInput, SegmentedControl, Toaster, media cards, PIN/lock chrome, SiteNav, SiteFooter, SectionHeading, Tag
|
|
48
|
+
- **Primitives** — Button, ButtonGroup, Accordion, Autocomplete, Grid, Menu, Dialog, Stepper, List, Fab, and more
|
|
49
|
+
- **Composites** — AppHeader, AppSidebar, Card, EntityCard, FloatingPageChrome, CoverHero, FilterSheet, MobileTabBar, CommandSearchField, NotificationBell, Timeline, EventCalendar, EventTimeline, AmountInput, SegmentedControl, Toaster, media cards, PIN/lock chrome, SiteNav, SiteFooter, SectionHeading, Tag
|
|
50
|
+
- **Charts** — SVG charts covering the MUI X catalog, plus `ChartContainer` composition (mixed plots, zoom/pan, brush, dual axes, toolbar export)
|
|
50
51
|
|
|
51
52
|
## Tailwind tip
|
|
52
53
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ReactNode } from "react";
|
|
1
|
+
import type { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
2
2
|
export type CardProps = {
|
|
3
3
|
children: ReactNode;
|
|
4
4
|
className?: string;
|
|
@@ -24,6 +24,12 @@ export declare function CardContent({ className, children, }: {
|
|
|
24
24
|
className?: string;
|
|
25
25
|
children: ReactNode;
|
|
26
26
|
}): import("react").JSX.Element;
|
|
27
|
+
export declare function CardActionArea({ className, children, ...props }: ComponentPropsWithoutRef<"button">): import("react").JSX.Element;
|
|
28
|
+
export declare function CardMedia({ className, component, image, src, alt, height, ...props }: ComponentPropsWithoutRef<"img"> & {
|
|
29
|
+
component?: "img" | "div";
|
|
30
|
+
image?: string;
|
|
31
|
+
height?: number;
|
|
32
|
+
}): import("react").JSX.Element;
|
|
27
33
|
export declare function CardFooter({ className, children, }: {
|
|
28
34
|
className?: string;
|
|
29
35
|
children: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/composites/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../src/composites/Card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjE,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACtD,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CACvC,CAAC;AAgBF,mFAAmF;AACnF,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,OAAiB,EACjB,OAAc,GACf,EAAE,SAAS,+BAcX;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAMA;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAMA;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAMA;AAED,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BAMA;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,wBAAwB,CAAC,QAAQ,CAAC,+BAepC;AAED,wBAAgB,SAAS,CAAC,EACxB,SAAS,EACT,SAAiB,EACjB,KAAK,EACL,GAAG,EACH,GAAG,EACH,MAAY,EACZ,GAAG,KAAK,EACT,EAAE,wBAAwB,CAAC,KAAK,CAAC,GAAG;IACnC,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,+BAeA;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BASA"}
|
package/dist/composites/Card.js
CHANGED
|
@@ -28,6 +28,16 @@ export function CardDescription({ className, children, }) {
|
|
|
28
28
|
export function CardContent({ className, children, }) {
|
|
29
29
|
return (_jsx("div", { "data-slot": "card-content", className: cn(className), children: children }));
|
|
30
30
|
}
|
|
31
|
+
export function CardActionArea({ className, children, ...props }) {
|
|
32
|
+
return (_jsx("button", { type: "button", "data-slot": "card-action-area", className: cn("block w-full text-left outline-none transition-[transform,box-shadow] duration-150", "hover:-translate-y-0.5 focus-visible:ring-ring/50 focus-visible:ring-[3px]", className), ...props, children: children }));
|
|
33
|
+
}
|
|
34
|
+
export function CardMedia({ className, component = "img", image, src, alt, height = 160, ...props }) {
|
|
35
|
+
const Comp = component;
|
|
36
|
+
return (_jsx(Comp, { "data-slot": "card-media", src: component === "img" ? (src ?? image) : undefined, alt: alt, className: cn("w-full object-cover", component === "div" && "bg-muted", className), style: {
|
|
37
|
+
height,
|
|
38
|
+
...(component === "div" && image ? { backgroundImage: `url(${image})`, backgroundSize: "cover" } : undefined),
|
|
39
|
+
}, ...props }));
|
|
40
|
+
}
|
|
31
41
|
export function CardFooter({ className, children, }) {
|
|
32
42
|
return (_jsx("div", { "data-slot": "card-footer", className: cn("mt-4 flex flex-wrap items-center justify-end gap-2 border-t border-border/40 pt-3", className), children: children }));
|
|
33
43
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
export type ChartGridColumnType = "text" | "number" | "sparkline" | "bar";
|
|
3
|
+
export type ChartGridColumn = {
|
|
4
|
+
field: string;
|
|
5
|
+
headerName: string;
|
|
6
|
+
type?: ChartGridColumnType;
|
|
7
|
+
width?: number;
|
|
8
|
+
};
|
|
9
|
+
export type ChartDataGridRow = {
|
|
10
|
+
id: string;
|
|
11
|
+
} & Record<string, unknown>;
|
|
12
|
+
export type ChartDataGridProps = {
|
|
13
|
+
rows: ChartDataGridRow[];
|
|
14
|
+
columns: ChartGridColumn[];
|
|
15
|
+
chartType?: "bar" | "line" | "pie";
|
|
16
|
+
categoryField: string;
|
|
17
|
+
valueField: string;
|
|
18
|
+
height?: number;
|
|
19
|
+
className?: string;
|
|
20
|
+
selectedIds?: string[];
|
|
21
|
+
defaultSelectedIds?: string[];
|
|
22
|
+
onSelectionChange?: (ids: string[]) => void;
|
|
23
|
+
hideChart?: boolean;
|
|
24
|
+
hideLegend?: boolean;
|
|
25
|
+
};
|
|
26
|
+
export declare function renderChartCell(value: unknown, options?: {
|
|
27
|
+
variant?: "sparkline" | "bar";
|
|
28
|
+
color?: string;
|
|
29
|
+
height?: number;
|
|
30
|
+
max?: number;
|
|
31
|
+
}): ReactNode;
|
|
32
|
+
export declare function ChartDataGrid({ rows, columns, chartType, categoryField, valueField, height, className, selectedIds, defaultSelectedIds, onSelectionChange, hideChart, hideLegend, }: ChartDataGridProps): import("react").JSX.Element;
|
|
33
|
+
//# sourceMappingURL=ChartDataGrid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartDataGrid.d.ts","sourceRoot":"","sources":["../../src/composites/ChartDataGrid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAejD,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,CAC7B,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,GACA,SAAS,CAuBX;AAED,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,OAAO,EACP,SAAiB,EACjB,aAAa,EACb,UAAU,EACV,MAAY,EACZ,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,UAAiB,GAClB,EAAE,kBAAkB,+BA4GpB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { chartColor, formatChartNumber } from "../lib/charts";
|
|
4
|
+
import { cn } from "../lib/cn";
|
|
5
|
+
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "../primitives/Table";
|
|
6
|
+
import { ChartContainer } from "./chart-composition";
|
|
7
|
+
import { SparkLineChart } from "./cartesian-charts";
|
|
8
|
+
import { PieChart } from "./radial-charts";
|
|
9
|
+
export function renderChartCell(value, options) {
|
|
10
|
+
const color = options?.color ?? "var(--chart-1)";
|
|
11
|
+
if (Array.isArray(value) && value.every((item) => typeof item === "number")) {
|
|
12
|
+
return (_jsx(SparkLineChart, { data: value, plotType: options?.variant === "bar" ? "bar" : "line", color: color, height: options?.height ?? 32, showHighlight: false, area: options?.variant !== "bar" }));
|
|
13
|
+
}
|
|
14
|
+
const n = typeof value === "number" ? value : Number(value);
|
|
15
|
+
if (!Number.isFinite(n))
|
|
16
|
+
return "—";
|
|
17
|
+
const max = options?.max && options.max > 0 ? options.max : Math.max(n, 1);
|
|
18
|
+
const pct = Math.max(0, Math.min(100, (n / max) * 100));
|
|
19
|
+
return (_jsx("div", { className: "spk-chart-cell-bar", title: formatChartNumber(n), children: _jsx("span", { style: { width: `${pct}%`, background: color } }) }));
|
|
20
|
+
}
|
|
21
|
+
export function ChartDataGrid({ rows, columns, chartType = "bar", categoryField, valueField, height = 200, className, selectedIds, defaultSelectedIds, onSelectionChange, hideChart, hideLegend = true, }) {
|
|
22
|
+
const [internal, setInternal] = useState(defaultSelectedIds ?? []);
|
|
23
|
+
const selected = selectedIds ?? internal;
|
|
24
|
+
const setSelected = (ids) => {
|
|
25
|
+
if (selectedIds == null)
|
|
26
|
+
setInternal(ids);
|
|
27
|
+
onSelectionChange?.(ids);
|
|
28
|
+
};
|
|
29
|
+
const selectedIndex = selected.length ? rows.findIndex((row) => row.id === selected[0]) : -1;
|
|
30
|
+
const categories = rows.map((row) => String(row[categoryField] ?? row.id));
|
|
31
|
+
const values = rows.map((row) => Number(row[valueField] ?? 0));
|
|
32
|
+
const maxByField = new Map();
|
|
33
|
+
for (const col of columns) {
|
|
34
|
+
if (col.type === "bar" || col.type === "number") {
|
|
35
|
+
const nums = rows.map((row) => Number(row[col.field] ?? 0)).filter((n) => Number.isFinite(n));
|
|
36
|
+
maxByField.set(col.field, nums.length ? Math.max(...nums) : 1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const toggleRow = (id) => {
|
|
40
|
+
setSelected(selected[0] === id ? [] : [id]);
|
|
41
|
+
};
|
|
42
|
+
return (_jsxs("div", { "data-slot": "chart-data-grid", className: cn("spk-chart-data-grid", className), children: [hideChart ? null : chartType === "pie" ? (_jsx(PieChart, { height: height, hideLegend: hideLegend, series: [
|
|
43
|
+
{
|
|
44
|
+
innerRadius: 36,
|
|
45
|
+
paddingAngle: 2,
|
|
46
|
+
data: rows.map((row, i) => ({
|
|
47
|
+
id: row.id,
|
|
48
|
+
value: values[i] ?? 0,
|
|
49
|
+
label: categories[i],
|
|
50
|
+
color: selected.length && !selected.includes(row.id)
|
|
51
|
+
? `color-mix(in srgb, ${chartColor(i)} 28%, transparent)`
|
|
52
|
+
: undefined,
|
|
53
|
+
})),
|
|
54
|
+
},
|
|
55
|
+
] })) : (_jsx(ChartContainer, { height: height, hideLegend: hideLegend, highlightScope: "item", selected: selectedIndex >= 0 ? { seriesId: "value", dataIndex: selectedIndex } : null, xAxis: [{ data: categories }], series: [{ type: chartType, id: "value", label: valueField, data: values }], "aria-label": "Linked chart" })), _jsxs(Table, { containerClassName: "spk-chart-grid-table", children: [_jsx(TableHeader, { children: _jsx(TableRow, { children: columns.map((col) => (_jsx(TableHead, { style: col.width ? { width: col.width } : undefined, children: col.headerName }, col.field))) }) }), _jsx(TableBody, { children: rows.map((row, rowIndex) => (_jsx(TableRow, { "data-state": selected.includes(row.id) ? "selected" : undefined, onClick: () => toggleRow(row.id), style: { cursor: "pointer" }, children: columns.map((col, colIndex) => {
|
|
56
|
+
const value = row[col.field];
|
|
57
|
+
const color = chartColor(rowIndex);
|
|
58
|
+
let content;
|
|
59
|
+
if (col.type === "sparkline") {
|
|
60
|
+
content = renderChartCell(value, { variant: "sparkline", color, height: 32 });
|
|
61
|
+
}
|
|
62
|
+
else if (col.type === "bar") {
|
|
63
|
+
content = renderChartCell(value, {
|
|
64
|
+
variant: "bar",
|
|
65
|
+
color,
|
|
66
|
+
max: maxByField.get(col.field),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else if (col.type === "number" && typeof value === "number") {
|
|
70
|
+
content = formatChartNumber(value);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
content = value == null ? "—" : String(value);
|
|
74
|
+
}
|
|
75
|
+
return (_jsx(TableCell, { "data-field": col.field, children: colIndex === 0 ? (_jsx("span", { className: "spk-chart-grid-name", children: content })) : (content) }, col.field));
|
|
76
|
+
}) }, row.id))) })] })] }));
|
|
77
|
+
}
|
|
@@ -38,7 +38,7 @@ export type CoverHeroProps = {
|
|
|
38
38
|
className?: string;
|
|
39
39
|
/** Offset used when the compact bar pins under app chrome. */
|
|
40
40
|
compactOffsetClassName?: string;
|
|
41
|
-
/** When false,
|
|
41
|
+
/** When false, keep the cover inside this frame (docs / device previews). */
|
|
42
42
|
bleed?: boolean;
|
|
43
43
|
};
|
|
44
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoverHero.d.ts","sourceRoot":"","sources":["../../src/composites/CoverHero.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,sBAAsB,EAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,
|
|
1
|
+
{"version":3,"file":"CoverHero.d.ts","sourceRoot":"","sources":["../../src/composites/CoverHero.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,sBAAsB,EAIvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAK9B,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,MAAM,EACN,KAAK,EACL,OAAY,EACZ,iBAAqB,EACrB,QAAQ,EACR,UAAU,EACV,SAAS,EACT,QAAc,EACd,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,OAAiB,EACjB,MAAM,EACN,SAAqB,EACrB,eAAe,EACf,cAAc,EACd,QAAQ,EACR,SAAS,EACT,sBAAiC,EACjC,KAAY,GACb,EAAE,cAAc,+BA8QhB;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|
|
@@ -55,7 +55,7 @@ export function CoverHero({ title, kicker, facts, avatars = [], hiddenAvatarCoun
|
|
|
55
55
|
};
|
|
56
56
|
}, []);
|
|
57
57
|
useCoverChromeBleed(bleed && coverUnderChrome, scene.chromeInk);
|
|
58
|
-
return (_jsxs(_Fragment, { children: [_jsxs("header", { ref: heroRef, "data-slot": "cover-hero", className: cn("relative z-10 w-full overflow-visible", className), children: [_jsxs("div", { className: cn(mediaClass, "sm:rounded-b-[1.75rem]"), "aria-hidden": true, children: [!hideImages && coverUrl ? (_jsx("img", { src: coverUrl, alt: "", className: "absolute inset-0 size-full object-cover" })) : (_jsx(CoverPattern, { seed: seed, hue: coverHue, dark: dark, warm: warm, kind: coverKind })), _jsx("div", { className: "absolute inset-x-0 top-0 h-8 bg-gradient-to-b from-black/[0.04] to-transparent dark:from-black/12" }), _jsx("div", { className: "absolute inset-x-0 bottom-0 h-[22%] bg-gradient-to-t from-black/[0.03] via-transparent to-transparent dark:from-black/10" })] }), _jsxs("div", { className: "relative z-10 flex flex-col", children: [_jsx("div", { className: "relative min-h-[8.5rem] sm:min-h-[10.5rem] lg:min-h-[12rem]", children: _jsxs("div", { className: "absolute inset-x-0 top-0 z-30 flex items-start justify-between gap-2 px-3 pt-3 sm:px-5 sm:pt-4", children: [onBack ? (_jsxs("button", { type: "button", onClick: onBack, "aria-label": backLabel, "data-cover-ink": scene.headerInk, className: cn("cover-floating-shell flex items-center gap-1 px-3 py-1.5 text-xs font-semibold transition-colors active:scale-[0.96]", onDarkCover ? "text-white hover:bg-black/60" : "text-zinc-900 hover:bg-white/90"), children: [_jsx(ChevronLeft, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true }), _jsx("span", { className: "hidden sm:inline", children: "Back" })] })) : (_jsx("span", {})), floatingActions ? (_jsx("div", { "data-cover-ink": scene.headerInk, className: "cover-floating-shell flex items-center gap-1 p-1", children: floatingActions })) : null] }) }), _jsx("div", { ref: plateRef, className: "relative z-20 px-3.5 pb-4 sm:px-5 sm:pb-5 lg:px-8 lg:pb-6", children: _jsxs("div", { className: "cover-identity story-identity", style: { "--story-avatar-count": avatarCount }, children: [_jsx("div", { "aria-hidden": true, className: cn("pointer-events-none absolute inset-0 rounded-[1.35rem]", hasAvatars && "cover-identity__plate story-identity__plate", coverPlateClass(scene.headerInk)) }), _jsxs("div", { className: cn("relative z-10 flex flex-col items-center px-3 pb-3 text-center sm:px-6 sm:pb-4", hasAvatars ? "pt-0" : "pt-3 sm:pt-4"), children: [hasAvatars ? (_jsx("div", { className: "cover-identity__avatars story-identity__avatars", children: _jsxs("div", { className: "flex -space-x-5 sm:-space-x-6", children: [visibleAvatars.map((avatar, index) => {
|
|
58
|
+
return (_jsxs(_Fragment, { children: [_jsxs("header", { ref: heroRef, "data-slot": "cover-hero", "data-cover-bleed": bleed ? "true" : undefined, className: cn("relative z-10 w-full", bleed ? "overflow-visible" : "overflow-hidden rounded-[1.35rem] sm:rounded-[1.75rem]", className), children: [_jsxs("div", { className: cn(mediaClass, bleed && "sm:rounded-b-[1.75rem]"), "aria-hidden": true, children: [!hideImages && coverUrl ? (_jsx("img", { src: coverUrl, alt: "", className: "absolute inset-0 size-full object-cover" })) : (_jsx(CoverPattern, { seed: seed, hue: coverHue, dark: dark, warm: warm, kind: coverKind })), _jsx("div", { className: "absolute inset-x-0 top-0 h-8 bg-gradient-to-b from-black/[0.04] to-transparent dark:from-black/12" }), _jsx("div", { className: "absolute inset-x-0 bottom-0 h-[22%] bg-gradient-to-t from-black/[0.03] via-transparent to-transparent dark:from-black/10" })] }), _jsxs("div", { className: "relative z-10 flex flex-col", children: [_jsx("div", { className: "relative min-h-[8.5rem] sm:min-h-[10.5rem] lg:min-h-[12rem]", children: _jsxs("div", { className: "absolute inset-x-0 top-0 z-30 flex items-start justify-between gap-2 px-3 pt-3 sm:px-5 sm:pt-4", children: [onBack ? (_jsxs("button", { type: "button", onClick: onBack, "aria-label": backLabel, "data-cover-ink": scene.headerInk, className: cn("cover-floating-shell flex items-center gap-1 px-3 py-1.5 text-xs font-semibold transition-colors active:scale-[0.96]", onDarkCover ? "text-white hover:bg-black/60" : "text-zinc-900 hover:bg-white/90"), children: [_jsx(ChevronLeft, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": true }), _jsx("span", { className: "hidden sm:inline", children: "Back" })] })) : (_jsx("span", {})), floatingActions ? (_jsx("div", { "data-cover-ink": scene.headerInk, className: "cover-floating-shell flex items-center gap-1 p-1", children: floatingActions })) : null] }) }), _jsx("div", { ref: plateRef, className: "relative z-20 px-3.5 pb-4 sm:px-5 sm:pb-5 lg:px-8 lg:pb-6", children: _jsxs("div", { className: "cover-identity story-identity", style: { "--story-avatar-count": avatarCount }, children: [_jsx("div", { "aria-hidden": true, className: cn("pointer-events-none absolute inset-0 rounded-[1.35rem]", hasAvatars && "cover-identity__plate story-identity__plate", coverPlateClass(scene.headerInk)) }), _jsxs("div", { className: cn("relative z-10 flex flex-col items-center px-3 pb-3 text-center sm:px-6 sm:pb-4", hasAvatars ? "pt-0" : "pt-3 sm:pt-4"), children: [hasAvatars ? (_jsx("div", { className: "cover-identity__avatars story-identity__avatars", children: _jsxs("div", { className: "flex -space-x-5 sm:-space-x-6", children: [visibleAvatars.map((avatar, index) => {
|
|
59
59
|
const body = (_jsx("span", { style: {
|
|
60
60
|
width: "var(--story-avatar-size)",
|
|
61
61
|
height: "var(--story-avatar-size)",
|
|
@@ -66,6 +66,6 @@ export function CoverHero({ title, kicker, facts, avatars = [], hiddenAvatarCoun
|
|
|
66
66
|
height: "var(--story-avatar-size)",
|
|
67
67
|
}, className: "relative z-0 flex items-center justify-center rounded-full border-[3px] border-white bg-zinc-900/80 text-base font-black text-white dark:border-white/30", children: ["+", extra] })) : null] }) })) : null, _jsxs("div", { className: cn("w-full min-w-0", hasAvatars && "mt-2 sm:mt-2.5"), children: [kicker ? (_jsx("div", { className: "flex flex-wrap items-center justify-center gap-1.5", children: kicker })) : null, _jsx("h1", { className: cn("mt-2 text-balance text-[1.15rem] font-black leading-tight tracking-tight sm:text-[1.35rem] lg:text-[1.65rem]", coverTitleClass(scene.headerInk)), children: title }), facts && facts.length > 0 ? (_jsx("dl", { className: "mt-3 grid grid-cols-2 gap-x-4 gap-y-2 sm:flex sm:flex-wrap sm:justify-center sm:gap-x-6", children: facts.map((fact) => (_jsxs("div", { className: cn("flex min-w-0 items-center justify-center gap-2", fact.wide && "col-span-2 sm:col-span-1"), children: [fact.icon ? (_jsx("span", { className: cn("hidden h-7 w-7 shrink-0 items-center justify-center rounded-lg border backdrop-blur-md sm:flex", onDarkCover
|
|
68
68
|
? "border-white/20 bg-white/15 text-white/90"
|
|
69
|
-
: "border-zinc-950/10 bg-zinc-950/[0.06] text-zinc-700"), children: fact.icon })) : null, _jsxs("div", { className: "min-w-0 text-center sm:text-left", children: [_jsx("dt", { className: cn("text-[9px] font-black uppercase tracking-[0.18em]", coverMutedClass(scene.headerInk)), children: fact.label }), _jsx("dd", { className: cn("truncate text-[11px] font-bold sm:text-xs", coverTitleClass(scene.headerInk), fact.muted && "opacity-60"), children: fact.value })] })] }, fact.key))) })) : null, children] })] })] }) })] })] }), _jsx("div", { className: cn("sticky z-[60] h-0", compactOffsetClassName), children: !heroInView ? (_jsx("div", { className: "glass-header cover-chrome-bar absolute inset-x-0 top-0 border-b border-border/50 bg-background/85 backdrop-blur-md dark:bg-background/94", children: _jsxs("div", { className: "app-frame-pad flex items-center gap-2 py-1.5 sm:py-2", children: [onBack ? (_jsx("button", { type: "button", onClick: onBack, "aria-label": backLabel, className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-xl text-foreground transition-colors hover:bg-muted", children: _jsx(ChevronLeft, { className: "h-4 w-4", "aria-hidden": true }) })) : null, _jsx("h2", { className: "page-header-title min-w-0 flex-1 truncate", children: title }), compactActions] }) })) : null })] }));
|
|
69
|
+
: "border-zinc-950/10 bg-zinc-950/[0.06] text-zinc-700"), children: fact.icon })) : null, _jsxs("div", { className: "min-w-0 text-center sm:text-left", children: [_jsx("dt", { className: cn("text-[9px] font-black uppercase tracking-[0.18em]", coverMutedClass(scene.headerInk)), children: fact.label }), _jsx("dd", { className: cn("truncate text-[11px] font-bold sm:text-xs", coverTitleClass(scene.headerInk), fact.muted && "opacity-60"), children: fact.value })] })] }, fact.key))) })) : null, children] })] })] }) })] })] }), bleed ? (_jsx("div", { className: cn("sticky z-[60] h-0", compactOffsetClassName), children: !heroInView ? (_jsx("div", { className: "glass-header cover-chrome-bar absolute inset-x-0 top-0 border-b border-border/50 bg-background/85 backdrop-blur-md dark:bg-background/94", children: _jsxs("div", { className: "app-frame-pad flex items-center gap-2 py-1.5 sm:py-2", children: [onBack ? (_jsx("button", { type: "button", onClick: onBack, "aria-label": backLabel, className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-xl text-foreground transition-colors hover:bg-muted", children: _jsx(ChevronLeft, { className: "h-4 w-4", "aria-hidden": true }) })) : null, _jsx("h2", { className: "page-header-title min-w-0 flex-1 truncate", children: title }), compactActions] }) })) : null })) : null] }));
|
|
70
70
|
}
|
|
71
71
|
export { coverFloatingIconClass };
|
|
@@ -19,7 +19,7 @@ export type EntityMediaCardProps = {
|
|
|
19
19
|
imageClassName?: string;
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
|
-
* Entity card with photo (or initials
|
|
22
|
+
* Entity card with photo (or generated cover + initials) — contact / album tile.
|
|
23
23
|
*/
|
|
24
24
|
export declare function EntityMediaCard({ title, subtitle, statusLine, imageUrl, hideImage, fallbackLabel, tags, overlays, menu, meta, href, onClick, size, orientation, className, imageClassName, }: EntityMediaCardProps): import("react").JSX.Element;
|
|
25
25
|
//# sourceMappingURL=EntityMediaCard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityMediaCard.d.ts","sourceRoot":"","sources":["../../src/composites/EntityMediaCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"EntityMediaCard.d.ts","sourceRoot":"","sources":["../../src/composites/EntityMediaCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6BAA6B;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,WAAW,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,SAAS,EACT,aAAa,EACb,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,IAAc,EACd,WAAqB,EACrB,SAAS,EACT,cAAc,GACf,EAAE,oBAAoB,+BAyFtB"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "../lib/cn";
|
|
3
|
+
import { coverTitleClass } from "../lib/cover-chrome";
|
|
4
|
+
import { getCoverPattern } from "../lib/cover-pattern";
|
|
5
|
+
import { CoverPattern } from "./CoverPattern";
|
|
3
6
|
/**
|
|
4
|
-
* Entity card with photo (or initials
|
|
7
|
+
* Entity card with photo (or generated cover + initials) — contact / album tile.
|
|
5
8
|
*/
|
|
6
9
|
export function EntityMediaCard({ title, subtitle, statusLine, imageUrl, hideImage, fallbackLabel, tags, overlays, menu, meta, href, onClick, size = "large", orientation = "stack", className, imageClassName, }) {
|
|
7
10
|
const Comp = href ? "a" : onClick ? "button" : "div";
|
|
@@ -12,6 +15,11 @@ export function EntityMediaCard({ title, subtitle, statusLine, imageUrl, hideIma
|
|
|
12
15
|
.map((w) => w[0]?.toUpperCase() ?? "")
|
|
13
16
|
.join("") ||
|
|
14
17
|
"?";
|
|
15
|
-
const
|
|
16
|
-
|
|
18
|
+
const scene = getCoverPattern({ seed: title, hue: 210 });
|
|
19
|
+
const photoAspect = orientation === "row"
|
|
20
|
+
? "h-full min-h-[6.5rem]"
|
|
21
|
+
: size === "compact"
|
|
22
|
+
? "aspect-square"
|
|
23
|
+
: "aspect-[4/3]";
|
|
24
|
+
return (_jsxs(Comp, { href: href, type: onClick && !href ? "button" : undefined, onClick: onClick, "data-slot": "entity-media-card", "data-size": size, "data-orientation": orientation, className: cn("group flex h-full min-w-0 overflow-hidden rounded-2xl border border-border/60 bg-card text-left shadow-[0_8px_30px_color-mix(in_srgb,var(--foreground)_6%,transparent)] transition-[transform,border-color] duration-200", "hover:-translate-y-0.5 hover:border-primary/25", orientation === "row" ? "flex-row items-stretch" : "flex-col", className), children: [_jsxs("div", { className: cn("relative shrink-0 overflow-hidden bg-muted", orientation === "row" ? "w-[38%] min-w-[6.5rem] max-w-[9.5rem]" : "w-full", photoAspect, imageClassName), children: [!hideImage && imageUrl ? (_jsx("img", { src: imageUrl, alt: "", className: "absolute inset-0 size-full object-cover transition-transform duration-700 group-hover:scale-110" })) : (_jsxs(_Fragment, { children: [_jsx(CoverPattern, { seed: title, hue: 210 }), _jsx("div", { className: cn("absolute inset-0 flex items-center justify-center text-2xl font-black", coverTitleClass(scene.headerInk)), children: initials })] })), overlays ? _jsx("div", { className: "absolute inset-0 p-2", children: overlays }) : null] }), _jsxs("div", { className: cn("relative flex min-w-0 flex-1 flex-col justify-center bg-card", size === "compact" ? "gap-1 p-2.5" : "gap-1 p-3 sm:p-3.5"), children: [_jsxs("div", { className: "flex items-start justify-between gap-2", children: [_jsxs("div", { className: "min-w-0", children: [_jsx("h3", { className: "truncate font-bold tracking-tight group-hover:text-primary", children: title }), subtitle ? (_jsx("p", { className: "truncate text-xs font-medium text-muted-foreground", children: subtitle })) : null, statusLine ? (_jsx("p", { className: "mt-0.5 text-[9px] font-bold uppercase tracking-widest text-muted-foreground/80", children: statusLine })) : null] }), menu] }), meta, tags ? _jsx("div", { className: "mt-auto flex flex-wrap gap-1 pt-1", children: tags }) : null] })] }));
|
|
17
25
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type CalendarView, type NormalizedEvent, type SchedulerEvent, type SchedulerPreferences, type SchedulerResource } from "../lib/scheduler";
|
|
3
|
+
export type EventCalendarEventVariant = "month-bar" | "month-timed" | "all-day" | "time-grid" | "agenda";
|
|
4
|
+
export type EventCalendarEventRenderContext = {
|
|
5
|
+
view: CalendarView;
|
|
6
|
+
variant: EventCalendarEventVariant;
|
|
7
|
+
locale?: string;
|
|
8
|
+
hour12: boolean;
|
|
9
|
+
source?: SchedulerEvent;
|
|
10
|
+
defaultChildren: ReactNode;
|
|
11
|
+
};
|
|
12
|
+
export type EventCalendarToolbarContext = {
|
|
13
|
+
view: CalendarView;
|
|
14
|
+
date: Date;
|
|
15
|
+
title: string;
|
|
16
|
+
views: CalendarView[];
|
|
17
|
+
locale?: string;
|
|
18
|
+
preferences: Required<SchedulerPreferences>;
|
|
19
|
+
onViewChange: (view: CalendarView) => void;
|
|
20
|
+
onPrev: () => void;
|
|
21
|
+
onNext: () => void;
|
|
22
|
+
onToday: () => void;
|
|
23
|
+
onDateChange: (date: Date) => void;
|
|
24
|
+
onPreferencesChange: (next: Required<SchedulerPreferences>) => void;
|
|
25
|
+
};
|
|
26
|
+
export type EventCalendarProps = {
|
|
27
|
+
events?: SchedulerEvent[];
|
|
28
|
+
resources?: SchedulerResource[];
|
|
29
|
+
view?: CalendarView;
|
|
30
|
+
defaultView?: CalendarView;
|
|
31
|
+
onViewChange?: (view: CalendarView) => void;
|
|
32
|
+
date?: Date;
|
|
33
|
+
defaultDate?: Date;
|
|
34
|
+
onDateChange?: (date: Date) => void;
|
|
35
|
+
views?: CalendarView[];
|
|
36
|
+
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
|
|
37
|
+
hourStart?: number;
|
|
38
|
+
hourEnd?: number;
|
|
39
|
+
locale?: string;
|
|
40
|
+
readOnly?: boolean;
|
|
41
|
+
areEventsDraggable?: boolean;
|
|
42
|
+
areEventsResizable?: boolean;
|
|
43
|
+
preferences?: SchedulerPreferences;
|
|
44
|
+
defaultPreferences?: SchedulerPreferences;
|
|
45
|
+
onPreferencesChange?: (preferences: Required<SchedulerPreferences>) => void;
|
|
46
|
+
onEventClick?: (event: SchedulerEvent) => void;
|
|
47
|
+
onEventChange?: (event: SchedulerEvent, next: Partial<SchedulerEvent>) => void;
|
|
48
|
+
onEventCreate?: (event: SchedulerEvent) => void;
|
|
49
|
+
onEventDelete?: (event: SchedulerEvent) => void;
|
|
50
|
+
onSlotClick?: (slot: {
|
|
51
|
+
start: Date;
|
|
52
|
+
end: Date;
|
|
53
|
+
allDay: boolean;
|
|
54
|
+
}) => void;
|
|
55
|
+
/**
|
|
56
|
+
* Built-in create/edit dialog. Defaults to true.
|
|
57
|
+
* Set false when the host owns create/edit (custom schedule modal, etc.).
|
|
58
|
+
*/
|
|
59
|
+
showEventEditor?: boolean;
|
|
60
|
+
/** Preferences gear in the default toolbar. Ignored when `renderToolbar` is set. */
|
|
61
|
+
showPreferences?: boolean;
|
|
62
|
+
/** Extra controls after the view menu. Ignored when `renderToolbar` is set. */
|
|
63
|
+
toolbarTrailing?: ReactNode;
|
|
64
|
+
/** Replace event chip contents. The kit still wraps with the click/drag trigger. */
|
|
65
|
+
renderEvent?: (event: NormalizedEvent, context: EventCalendarEventRenderContext) => ReactNode;
|
|
66
|
+
/** Replace the toolbar. The default kit toolbar is used when omitted. */
|
|
67
|
+
renderToolbar?: (context: EventCalendarToolbarContext) => ReactNode;
|
|
68
|
+
className?: string;
|
|
69
|
+
};
|
|
70
|
+
/** Month / week / day / agenda calendar with editor, resize, recurrence, and preferences. */
|
|
71
|
+
export declare function EventCalendar({ events, resources, view: viewProp, defaultView, onViewChange, date: dateProp, defaultDate, onDateChange, views, weekStartsOn, hourStart, hourEnd, locale, readOnly, areEventsDraggable, areEventsResizable, preferences, defaultPreferences, onPreferencesChange, onEventClick, onEventChange, onEventCreate, onEventDelete, onSlotClick, showEventEditor, showPreferences, toolbarTrailing, renderEvent, renderToolbar, className, }: EventCalendarProps): import("react").JSX.Element;
|
|
72
|
+
//# sourceMappingURL=EventCalendar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventCalendar.d.ts","sourceRoot":"","sources":["../../src/composites/EventCalendar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EAkCL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAC;AAY1B,MAAM,MAAM,yBAAyB,GACjC,WAAW,GACX,aAAa,GACb,SAAS,GACT,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,MAAM,+BAA+B,GAAG;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,yBAAyB,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,eAAe,EAAE,SAAS,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;IAC5C,YAAY,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC3C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,mBAAmB,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACpC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,oBAAoB,CAAC;IACnC,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC;IAC5E,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC/E,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC1E;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oFAAoF;IACpF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,oFAAoF;IACpF,WAAW,CAAC,EAAE,CACZ,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,+BAA+B,KACrC,SAAS,CAAC;IACf,yEAAyE;IACzE,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,KAAK,SAAS,CAAC;IACpE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAuDF,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,EAC5B,MAAW,EACX,SAAc,EACd,IAAI,EAAE,QAAQ,EACd,WAAqB,EACrB,YAAY,EACZ,IAAI,EAAE,QAAQ,EACd,WAAW,EACX,YAAY,EACZ,KAA0C,EAC1C,YAAgB,EAChB,SAAa,EACb,OAAY,EACZ,MAAM,EACN,QAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EACX,eAAsB,EACtB,eAAsB,EACtB,eAAe,EACf,WAAW,EACX,aAAa,EACb,SAAS,GACV,EAAE,kBAAkB,+BA2VpB"}
|