@rinzai/zen 0.14.0 → 0.16.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/CHANGELOG.md +153 -0
- package/README.md +16 -1
- package/dist/animated-number/index.js +14 -14
- package/dist/breadcrumbs/index.js +14 -14
- package/dist/calendar/index.js +29 -29
- package/dist/calendar-heatmap/index.js +12 -12
- package/dist/canvas/index.js +19 -19
- package/dist/carousel/index.d.ts.map +1 -1
- package/dist/carousel/index.js +29 -29
- package/dist/chart/index.js +7 -7
- package/dist/code-block/index.js +5 -5
- package/dist/collapse/index.js +6 -6
- package/dist/color-picker/index.js +10 -10
- package/dist/combobox/index.js +61 -61
- package/dist/command-palette/index.js +5 -5
- package/dist/confirm-dialog/index.js +4 -4
- package/dist/date-picker/index.js +15 -15
- package/dist/dialog/index.d.ts.map +1 -1
- package/dist/dialog/index.js +45 -65
- package/dist/docs/README.md +205 -0
- package/dist/docs/accordion.md +122 -0
- package/dist/docs/alert.md +69 -0
- package/dist/docs/animated-number.md +105 -0
- package/dist/docs/avatar.md +91 -0
- package/dist/docs/backdrop.md +94 -0
- package/dist/docs/badge.md +37 -0
- package/dist/docs/breadcrumbs.md +44 -0
- package/dist/docs/button-group.md +76 -0
- package/dist/docs/button.md +131 -0
- package/dist/docs/calendar-heatmap.md +73 -0
- package/dist/docs/calendar.md +101 -0
- package/dist/docs/canvas.md +584 -0
- package/dist/docs/card.md +180 -0
- package/dist/docs/carousel.md +162 -0
- package/dist/docs/chart.md +325 -0
- package/dist/docs/checkbox.md +88 -0
- package/dist/docs/chip.md +52 -0
- package/dist/docs/code-block.md +116 -0
- package/dist/docs/code-input.md +52 -0
- package/dist/docs/collapse.md +46 -0
- package/dist/docs/color-picker.md +145 -0
- package/dist/docs/combobox.md +208 -0
- package/dist/docs/command-palette.md +65 -0
- package/dist/docs/date-picker.md +167 -0
- package/dist/docs/dialog.md +271 -0
- package/dist/docs/disclosure.md +88 -0
- package/dist/docs/editable-cell.md +90 -0
- package/dist/docs/empty-state.md +46 -0
- package/dist/docs/field.md +82 -0
- package/dist/docs/file-drop.md +44 -0
- package/dist/docs/filter-bar.md +66 -0
- package/dist/docs/header.md +51 -0
- package/dist/docs/hover-card.md +110 -0
- package/dist/docs/icon-picker.md +65 -0
- package/dist/docs/input-group.md +89 -0
- package/dist/docs/input.md +33 -0
- package/dist/docs/inset.md +57 -0
- package/dist/docs/kbd.md +34 -0
- package/dist/docs/keypad.md +51 -0
- package/dist/docs/load-more.md +66 -0
- package/dist/docs/locale-provider.md +99 -0
- package/dist/docs/marquee.md +86 -0
- package/dist/docs/menu.md +456 -0
- package/dist/docs/meter.md +102 -0
- package/dist/docs/money-input.md +169 -0
- package/dist/docs/month-picker.md +80 -0
- package/dist/docs/navigation-menu.md +157 -0
- package/dist/docs/number-field.md +129 -0
- package/dist/docs/page-header.md +44 -0
- package/dist/docs/page-transition.md +93 -0
- package/dist/docs/pagination.md +42 -0
- package/dist/docs/pills.md +85 -0
- package/dist/docs/player-bar.md +158 -0
- package/dist/docs/popover.md +200 -0
- package/dist/docs/progress-ring.md +70 -0
- package/dist/docs/radio-cards.md +82 -0
- package/dist/docs/radio-group.md +86 -0
- package/dist/docs/range-slider.md +64 -0
- package/dist/docs/repeat-picker.md +44 -0
- package/dist/docs/resizable.md +107 -0
- package/dist/docs/seek-bar.md +97 -0
- package/dist/docs/segmented.md +89 -0
- package/dist/docs/select.md +148 -0
- package/dist/docs/separator.md +76 -0
- package/dist/docs/side-nav.md +75 -0
- package/dist/docs/skeleton.md +89 -0
- package/dist/docs/slider.md +87 -0
- package/dist/docs/sortable.md +244 -0
- package/dist/docs/sparkline.md +56 -0
- package/dist/docs/spinner.md +69 -0
- package/dist/docs/status-pill.md +81 -0
- package/dist/docs/stepper.md +59 -0
- package/dist/docs/tab-bar.md +78 -0
- package/dist/docs/table-of-contents.md +43 -0
- package/dist/docs/table.md +714 -0
- package/dist/docs/tabs.md +140 -0
- package/dist/docs/tag-input.md +45 -0
- package/dist/docs/textarea.md +25 -0
- package/dist/docs/theme-toggle.md +85 -0
- package/dist/docs/theming.md +193 -0
- package/dist/docs/time-field.md +71 -0
- package/dist/docs/timeline.md +50 -0
- package/dist/docs/toast.md +53 -0
- package/dist/docs/toggle-group.md +83 -0
- package/dist/docs/toggle.md +38 -0
- package/dist/docs/toolbar.md +97 -0
- package/dist/docs/tooltip.md +102 -0
- package/dist/docs/tree.md +295 -0
- package/dist/docs/trend.md +50 -0
- package/dist/filter-bar/index.js +6 -6
- package/dist/header/index.js +6 -6
- package/dist/icon-picker/index.js +5 -5
- package/dist/icons/arrow-path.d.ts +3 -0
- package/dist/icons/arrow-path.d.ts.map +1 -0
- package/dist/icons/arrows-right-left.d.ts +3 -0
- package/dist/icons/arrows-right-left.d.ts.map +1 -0
- package/dist/icons/backward.d.ts +3 -0
- package/dist/icons/backward.d.ts.map +1 -0
- package/dist/icons/forward.d.ts +3 -0
- package/dist/icons/forward.d.ts.map +1 -0
- package/dist/icons/heart-solid.d.ts +3 -0
- package/dist/icons/heart-solid.d.ts.map +1 -0
- package/dist/icons/heart.d.ts +3 -0
- package/dist/icons/heart.d.ts.map +1 -0
- package/dist/icons/musical-note.d.ts +3 -0
- package/dist/icons/musical-note.d.ts.map +1 -0
- package/dist/icons/pause.d.ts +3 -0
- package/dist/icons/pause.d.ts.map +1 -0
- package/dist/icons/play.d.ts +3 -0
- package/dist/icons/play.d.ts.map +1 -0
- package/dist/icons/queue-list.d.ts +3 -0
- package/dist/icons/queue-list.d.ts.map +1 -0
- package/dist/icons/speaker-wave.d.ts +3 -0
- package/dist/icons/speaker-wave.d.ts.map +1 -0
- package/dist/icons/speaker-x-mark.d.ts +3 -0
- package/dist/icons/speaker-x-mark.d.ts.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/keypad/index.js +5 -5
- package/dist/lib.js +86 -80
- package/dist/load-more/index.js +5 -5
- package/dist/marquee/index.d.ts +15 -0
- package/dist/marquee/index.d.ts.map +1 -0
- package/dist/marquee/index.js +90 -0
- package/dist/menu/index.d.ts +7 -1
- package/dist/menu/index.d.ts.map +1 -1
- package/dist/menu/index.js +222 -178
- package/dist/money-input/index.js +54 -54
- package/dist/month-picker/index.js +11 -11
- package/dist/number-field/index.js +5 -5
- package/dist/pagination/index.js +12 -12
- package/dist/player-bar/index.d.ts +11 -0
- package/dist/player-bar/index.d.ts.map +1 -0
- package/dist/player-bar/index.js +17 -0
- package/dist/radio-cards/index.d.ts +2 -1
- package/dist/radio-cards/index.d.ts.map +1 -1
- package/dist/radio-cards/index.js +3 -3
- package/dist/range-slider/index.js +11 -11
- package/dist/repeat-picker/index.js +5 -5
- package/dist/resizable/index.js +22 -22
- package/dist/seek-bar/index.d.ts +26 -0
- package/dist/seek-bar/index.d.ts.map +1 -0
- package/dist/seek-bar/index.js +121 -0
- package/dist/segmented/index.d.ts +3 -2
- package/dist/segmented/index.d.ts.map +1 -1
- package/dist/segmented/index.js +19 -18
- package/dist/select/index.js +21 -21
- package/dist/slider/index.d.ts +2 -1
- package/dist/slider/index.d.ts.map +1 -1
- package/dist/sortable/index.d.ts +13 -1
- package/dist/sortable/index.d.ts.map +1 -1
- package/dist/sortable/index.js +74 -55
- package/dist/sortable/shared.js +14 -14
- package/dist/sortable/tree.js +17 -17
- package/dist/sparkline/index.js +4 -4
- package/dist/stepper/index.js +13 -13
- package/dist/tab-bar/index.d.ts +4 -2
- package/dist/tab-bar/index.d.ts.map +1 -1
- package/dist/tab-bar/index.js +24 -19
- package/dist/table/index.js +26 -26
- package/dist/table/selection.js +9 -9
- package/dist/table-of-contents/index.js +11 -11
- package/dist/tag-input/index.js +5 -5
- package/dist/textarea/index.d.ts +6 -2
- package/dist/textarea/index.d.ts.map +1 -1
- package/dist/textarea/index.js +2 -1
- package/dist/theme-toggle/index.js +4 -4
- package/dist/theme.css +143 -0
- package/dist/time-field/index.js +21 -21
- package/dist/toast/index.d.ts.map +1 -1
- package/dist/toast/index.js +41 -41
- package/dist/tooltip/index.d.ts +9 -3
- package/dist/tooltip/index.d.ts.map +1 -1
- package/dist/tooltip/index.js +19 -16
- package/dist/tree/index.js +34 -34
- package/dist/trend/index.js +5 -5
- package/dist/utils/duration.d.ts +3 -0
- package/dist/utils/duration.d.ts.map +1 -0
- package/dist/utils/duration.js +7 -0
- package/dist/utils/messages.d.ts +3 -0
- package/dist/utils/messages.d.ts.map +1 -1
- package/dist/utils/messages.js +4 -1
- package/dist/utils/slot.d.ts +5 -2
- package/dist/utils/slot.d.ts.map +1 -1
- package/dist/utils/slot.js +16 -11
- package/dist/utils/swipe.d.ts +7 -0
- package/dist/utils/swipe.d.ts.map +1 -1
- package/dist/utils/swipe.js +45 -25
- package/dist/utils/useAnchoredPopup.d.ts +2 -1
- package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
- package/dist/utils/useAnchoredPopup.js +10 -5
- package/dist/utils/useHeightVar.d.ts +7 -0
- package/dist/utils/useHeightVar.d.ts.map +1 -0
- package/dist/utils/useHeightVar.js +17 -0
- package/dist/utils/useMediaPlayer.d.ts +38 -0
- package/dist/utils/useMediaPlayer.d.ts.map +1 -0
- package/dist/utils/useMediaPlayer.js +91 -0
- package/dist/utils/useMediaSession.d.ts +24 -0
- package/dist/utils/useMediaSession.d.ts.map +1 -0
- package/dist/utils/useMediaSession.js +76 -0
- package/dist/utils/useVirtualList.d.ts +6 -1
- package/dist/utils/useVirtualList.d.ts.map +1 -1
- package/dist/utils/useVirtualList.js +12 -12
- package/dist/zen.css +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Calendar Heatmap
|
|
2
|
+
|
|
3
|
+
A month of days shaded by their value, like spending per day.
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { CalendarHeatmap } from '@rinzai/zen';
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Examples
|
|
10
|
+
|
|
11
|
+
### Default
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { CalendarHeatmap, type DateString, formatDate, formatMoney } from '@rinzai/zen';
|
|
15
|
+
import { useState } from 'react';
|
|
16
|
+
|
|
17
|
+
const SPENT: Partial<Record<DateString, number>> = {
|
|
18
|
+
'2026-09-01': 185000,
|
|
19
|
+
'2026-09-03': 3840,
|
|
20
|
+
'2026-09-05': 2500,
|
|
21
|
+
'2026-09-06': 7800,
|
|
22
|
+
'2026-09-08': 1460,
|
|
23
|
+
'2026-09-12': 16450,
|
|
24
|
+
'2026-09-13': 9150,
|
|
25
|
+
'2026-09-15': 4200,
|
|
26
|
+
'2026-09-19': 3180,
|
|
27
|
+
'2026-09-20': 41200,
|
|
28
|
+
'2026-09-22': 1199,
|
|
29
|
+
'2026-09-26': 6420,
|
|
30
|
+
'2026-09-27': 2210,
|
|
31
|
+
};
|
|
32
|
+
const money = (cents: number) => formatMoney(cents, 'USD', 'en-US', { showDecimals: false });
|
|
33
|
+
|
|
34
|
+
/** What was spent each day of a month: pick a day to see it. */
|
|
35
|
+
export default function Default() {
|
|
36
|
+
const [day, setDay] = useState<DateString | null>('2026-09-12');
|
|
37
|
+
return (
|
|
38
|
+
<div className="flex w-full max-w-xs flex-col gap-3">
|
|
39
|
+
<CalendarHeatmap
|
|
40
|
+
month="2026-09"
|
|
41
|
+
values={SPENT}
|
|
42
|
+
locale="en-US"
|
|
43
|
+
format={money}
|
|
44
|
+
onSelectedChange={setDay}
|
|
45
|
+
selected={day}
|
|
46
|
+
/>
|
|
47
|
+
<p className="text-muted-foreground mt-0! text-sm">
|
|
48
|
+
{day ? `${formatDate(day, 'en-US', 'long')}: ${money(SPENT[day] ?? 0)} spent` : 'Pick a day'}
|
|
49
|
+
</p>
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## API reference
|
|
56
|
+
|
|
57
|
+
### CalendarHeatmap
|
|
58
|
+
|
|
59
|
+
A month as a grid of days, each shaded by its value (e.g. what was spent
|
|
60
|
+
that day): busy days stand out at a glance. Hover a day for its figure;
|
|
61
|
+
with `onSelectedChange`, days are buttons.
|
|
62
|
+
|
|
63
|
+
| Prop | Type | Default | Description |
|
|
64
|
+
| --- | --- | --- | --- |
|
|
65
|
+
| `month` (required) | `string` | | |
|
|
66
|
+
| `values` (required) | `Partial<Record<string, number>>` | | Each day's value, by date ("2026-09-03"); days missing have none. |
|
|
67
|
+
| `className` | `string` | | |
|
|
68
|
+
| `format` | `((value: number) => string)` | | Turns a value into text for its label, e.g. as money. |
|
|
69
|
+
| `label` | `string` | | Accessible name (default: the month, e.g. "September 2026"). |
|
|
70
|
+
| `locale` | `string` | | |
|
|
71
|
+
| `onSelectedChange` | `((day: string) => void)` | | Makes the days buttons. |
|
|
72
|
+
| `selected` | `string \| null` | | |
|
|
73
|
+
| `weekStartsOn` | `number` | | 0 for Sunday … 6 for Saturday (default: the locale's). |
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Calendar
|
|
2
|
+
|
|
3
|
+
A month grid to pick a date or a range, fully keyboard-driven, with limits, blocked days and a year view to jump far.
|
|
4
|
+
|
|
5
|
+
```tsx
|
|
6
|
+
import { Calendar } from '@rinzai/zen';
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Examples
|
|
10
|
+
|
|
11
|
+
### Default
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
import { Calendar, formatDate } from '@rinzai/zen';
|
|
15
|
+
import { useState } from 'react';
|
|
16
|
+
|
|
17
|
+
/** Click a day, or use the keyboard: arrows, Home/End, Page Up/Down (Shift for years). The title jumps to any month and year. */
|
|
18
|
+
export default function Default() {
|
|
19
|
+
const [date, setDate] = useState<string | null>('2026-09-30');
|
|
20
|
+
return (
|
|
21
|
+
<div className="flex flex-col items-center gap-3">
|
|
22
|
+
<Calendar value={date} onValueChange={setDate} locale="en-US" />
|
|
23
|
+
<p className="text-muted-foreground mt-0! text-xs">
|
|
24
|
+
{date ? formatDate(date, 'en-US', 'full') : 'No date'}
|
|
25
|
+
</p>
|
|
26
|
+
</div>
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Range
|
|
32
|
+
|
|
33
|
+
```tsx
|
|
34
|
+
import { Calendar, type DateRange, daysBetween, formatDateRange } from '@rinzai/zen';
|
|
35
|
+
import { useState } from 'react';
|
|
36
|
+
|
|
37
|
+
/** Two months side by side: pick a start, then an end. The days between are previewed as you point. */
|
|
38
|
+
export default function Range() {
|
|
39
|
+
const [range, setRange] = useState<DateRange | null>({ start: '2026-10-05', end: '2026-10-12' });
|
|
40
|
+
return (
|
|
41
|
+
<div className="flex flex-col items-center gap-3">
|
|
42
|
+
<Calendar mode="range" months={2} value={range} onValueChange={setRange} locale="en-GB" />
|
|
43
|
+
<p className="text-muted-foreground mt-0! text-xs">
|
|
44
|
+
{range?.end
|
|
45
|
+
? `${formatDateRange(range.start, range.end, 'en-GB')} · ${daysBetween(range.start, range.end) + 1} days`
|
|
46
|
+
: 'Pick the last day'}
|
|
47
|
+
</p>
|
|
48
|
+
</div>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Limits
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
import { addDays, Calendar, dayOfWeek, today } from '@rinzai/zen';
|
|
57
|
+
import { useState } from 'react';
|
|
58
|
+
|
|
59
|
+
/** Only the next 60 days, and no weekends: min, max and isDisabled. Weeks start on Monday here, whatever the locale. */
|
|
60
|
+
export default function Limits() {
|
|
61
|
+
const start = today();
|
|
62
|
+
const [date, setDate] = useState<string | null>(null);
|
|
63
|
+
return (
|
|
64
|
+
<Calendar
|
|
65
|
+
value={date}
|
|
66
|
+
onValueChange={setDate}
|
|
67
|
+
locale="en-US"
|
|
68
|
+
weekStartsOn={1}
|
|
69
|
+
min={start}
|
|
70
|
+
max={addDays(start, 60)}
|
|
71
|
+
isDisabled={(d) => dayOfWeek(d) === 0 || dayOfWeek(d) === 6}
|
|
72
|
+
/>
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## API reference
|
|
78
|
+
|
|
79
|
+
### Calendar
|
|
80
|
+
|
|
81
|
+
A month grid to pick a date, or a range of dates, fully keyboard-driven:
|
|
82
|
+
arrows move by day and week, Home and End to the week's ends, Page Up and
|
|
83
|
+
Down by month (with Shift, by year). The title opens a year and month grid
|
|
84
|
+
to jump far. Dates are "YYYY-MM-DD" strings, so they never shift a day with
|
|
85
|
+
time zones. Inline on a page, or in a popup with DatePicker.
|
|
86
|
+
|
|
87
|
+
| Prop | Type | Default | Description |
|
|
88
|
+
| --- | --- | --- | --- |
|
|
89
|
+
| `autoFocus` | `boolean` | | Focus the chosen date (or today) when shown, e.g. in a popup. |
|
|
90
|
+
| `className` | `string` | | |
|
|
91
|
+
| `defaultMonth` | `string` | | Month shown first ("YYYY-MM"). Defaults to the chosen date's, or this month. |
|
|
92
|
+
| `defaultValue` | `DateRange \| string \| null` | | The first date, when the calendar keeps its own. The first range, when the calendar keeps its own. |
|
|
93
|
+
| `isDisabled` | `((date: string) => boolean)` | | Dates that can't be picked, e.g. weekends or booked days. |
|
|
94
|
+
| `locale` | `string` | | Decides month and weekday names, and the first day of the week, e.g. "en-IN". Defaults to the LocaleProvider's. |
|
|
95
|
+
| `max` | `string` | | Latest date that can be picked. |
|
|
96
|
+
| `min` | `string` | | Earliest date that can be picked ("YYYY-MM-DD"). |
|
|
97
|
+
| `mode` | `"range" \| "single"` | | Pick a start and then an end; the days between are highlighted, previewed while pointing. |
|
|
98
|
+
| `months` | `number` | | Months shown side by side (e.g. 2 for ranges). |
|
|
99
|
+
| `onValueChange` | `((date: string) => void) \| ((range: DateRange) => void)` | | |
|
|
100
|
+
| `value` | `DateRange \| string \| null` | | "YYYY-MM-DD", or null for none, when you keep it. The range when you keep it; `end` is null while only the start is picked. |
|
|
101
|
+
| `weekStartsOn` | `number` | | 0 for Sunday … 6 for Saturday. Defaults to the locale's. |
|