@orochibraru/ui 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +84 -3
- package/dist/components/blocks/accent-toggle.svelte +7 -3
- package/dist/components/blocks/accent-toggle.svelte.d.ts +1 -1
- package/dist/components/blocks/bottom-nav.svelte +1 -1
- package/dist/components/blocks/command-palette.svelte +268 -0
- package/dist/components/blocks/command-palette.svelte.d.ts +37 -0
- package/dist/components/blocks/error-page.svelte +23 -7
- package/dist/components/blocks/error-page.svelte.d.ts +4 -0
- package/dist/components/blocks/fab.svelte +1 -1
- package/dist/components/blocks/install-prompt.svelte +14 -8
- package/dist/components/blocks/install-prompt.svelte.d.ts +2 -1
- package/dist/components/blocks/music-player/labelled-slider.svelte +3 -12
- package/dist/components/blocks/music-player/labelled-slider.svelte.d.ts +1 -2
- package/dist/components/blocks/music-player.svelte +13 -12
- package/dist/components/blocks/otp-field.svelte +77 -33
- package/dist/components/blocks/otp-field.svelte.d.ts +7 -0
- package/dist/components/blocks/password-input.svelte +56 -16
- package/dist/components/blocks/password-input.svelte.d.ts +3 -0
- package/dist/components/blocks/stepper/stepper-phone-header.svelte +93 -0
- package/dist/components/blocks/stepper/stepper-phone-header.svelte.d.ts +13 -0
- package/dist/components/blocks/stepper.svelte +175 -0
- package/dist/components/blocks/stepper.svelte.d.ts +30 -0
- package/dist/components/blocks/time-range-picker.svelte +229 -0
- package/dist/components/blocks/time-range-picker.svelte.d.ts +33 -0
- package/dist/components/blocks/time-series-chart/data-table.svelte +43 -0
- package/dist/components/blocks/time-series-chart/data-table.svelte.d.ts +15 -0
- package/dist/components/blocks/time-series-chart/legend.svelte +23 -0
- package/dist/components/blocks/time-series-chart/legend.svelte.d.ts +10 -0
- package/dist/components/blocks/time-series-chart/marks.svelte +118 -0
- package/dist/components/blocks/time-series-chart/marks.svelte.d.ts +29 -0
- package/dist/components/blocks/time-series-chart/messages.d.ts +13 -0
- package/dist/components/blocks/time-series-chart/messages.js +12 -0
- package/dist/components/blocks/time-series-chart/readout.svelte +44 -0
- package/dist/components/blocks/time-series-chart/readout.svelte.d.ts +15 -0
- package/dist/components/blocks/time-series-chart/scale.d.ts +24 -0
- package/dist/components/blocks/time-series-chart/scale.js +136 -0
- package/dist/components/blocks/time-series-chart/time.d.ts +7 -0
- package/dist/components/blocks/time-series-chart/time.js +96 -0
- package/dist/components/blocks/time-series-chart.svelte +492 -0
- package/dist/components/blocks/time-series-chart.svelte.d.ts +18 -0
- package/dist/components/blocks/top-loading-bar.svelte +1 -1
- package/dist/components/blocks/video-player/center-controls.svelte +7 -7
- package/dist/components/blocks/video-player/control-bar.svelte +41 -35
- package/dist/components/blocks/video-player/control-button.svelte +1 -1
- package/dist/components/blocks/video-player/option-menu.svelte +1 -1
- package/dist/components/blocks/video-player/scrub-bar.svelte +39 -12
- package/dist/components/blocks/video-player/scrub-bar.svelte.d.ts +2 -0
- package/dist/components/blocks/video-player.svelte +2 -2
- package/dist/components/kit/accordion.svelte +70 -0
- package/dist/components/kit/accordion.svelte.d.ts +37 -0
- package/dist/components/kit/avatar-group.svelte +84 -0
- package/dist/components/kit/avatar-group.svelte.d.ts +14 -0
- package/dist/components/kit/bar-list.svelte +104 -0
- package/dist/components/kit/bar-list.svelte.d.ts +22 -0
- package/dist/components/kit/breadcrumbs.svelte +102 -0
- package/dist/components/kit/breadcrumbs.svelte.d.ts +14 -0
- package/dist/components/kit/checkbox-list.svelte +98 -0
- package/dist/components/kit/checkbox-list.svelte.d.ts +15 -0
- package/dist/components/kit/checkbox.svelte +84 -0
- package/dist/components/kit/checkbox.svelte.d.ts +8 -0
- package/dist/components/kit/confirm-dialog.svelte +127 -0
- package/dist/components/kit/confirm-dialog.svelte.d.ts +19 -0
- package/dist/components/kit/data-table.svelte +280 -0
- package/dist/components/kit/data-table.svelte.d.ts +46 -0
- package/dist/components/kit/date-field.svelte +210 -0
- package/dist/components/kit/date-field.svelte.d.ts +14 -0
- package/dist/components/kit/field-frame.svelte +71 -0
- package/dist/components/kit/field-frame.svelte.d.ts +26 -0
- package/dist/components/kit/fieldset-frame.svelte +69 -0
- package/dist/components/kit/fieldset-frame.svelte.d.ts +14 -0
- package/dist/components/kit/file-dropzone/files.d.ts +14 -0
- package/dist/components/kit/file-dropzone/files.js +69 -0
- package/dist/components/kit/file-dropzone.svelte +253 -0
- package/dist/components/kit/file-dropzone.svelte.d.ts +25 -0
- package/dist/components/kit/form.svelte +335 -0
- package/dist/components/kit/form.svelte.d.ts +61 -0
- package/dist/components/kit/input.svelte +73 -0
- package/dist/components/kit/input.svelte.d.ts +9 -0
- package/dist/components/kit/menu.svelte +163 -0
- package/dist/components/kit/menu.svelte.d.ts +28 -0
- package/dist/components/kit/pagination.svelte +134 -0
- package/dist/components/kit/pagination.svelte.d.ts +17 -0
- package/dist/components/kit/radio-list.svelte +131 -0
- package/dist/components/kit/radio-list.svelte.d.ts +15 -0
- package/dist/components/kit/segmented-control/segment.svelte +47 -0
- package/dist/components/kit/segmented-control/segment.svelte.d.ts +11 -0
- package/dist/components/kit/segmented-control.svelte +70 -0
- package/dist/components/kit/segmented-control.svelte.d.ts +16 -0
- package/dist/components/kit/select.svelte +244 -0
- package/dist/components/kit/select.svelte.d.ts +26 -0
- package/dist/components/kit/status-badge.svelte +54 -0
- package/dist/components/kit/status-badge.svelte.d.ts +31 -0
- package/dist/components/kit/switch.svelte +84 -0
- package/dist/components/kit/switch.svelte.d.ts +8 -0
- package/dist/components/kit/tabs.svelte +86 -0
- package/dist/components/kit/tabs.svelte.d.ts +20 -0
- package/dist/components/kit/textarea.svelte +92 -0
- package/dist/components/kit/textarea.svelte.d.ts +11 -0
- package/dist/components/ui/drawer/drawer-content.svelte +1 -1
- package/dist/components/ui/input-group/input-group-input.svelte.d.ts +1 -1
- package/dist/components/ui/sidebar/sidebar-input.svelte.d.ts +1 -1
- package/dist/components/ui/sonner/sonner.svelte +2 -4
- package/dist/mcp-content.json +1 -1
- package/dist/mcp.js +11 -11
- package/dist/server/hooks.d.ts +9 -0
- package/dist/server/hooks.js +41 -0
- package/dist/server/logger.d.ts +39 -0
- package/dist/server/logger.js +144 -0
- package/dist/server/telemetry.d.ts +23 -0
- package/dist/server/telemetry.js +82 -0
- package/dist/theme.css +18 -6
- package/package.json +40 -1
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export function niceStep(span, count) {
|
|
2
|
+
const raw = span / Math.max(1, count);
|
|
3
|
+
const magnitude = 10 ** Math.floor(Math.log10(raw));
|
|
4
|
+
const residual = raw / magnitude;
|
|
5
|
+
if (residual > 5) {
|
|
6
|
+
return 10 * magnitude;
|
|
7
|
+
}
|
|
8
|
+
if (residual > 2) {
|
|
9
|
+
return 5 * magnitude;
|
|
10
|
+
}
|
|
11
|
+
if (residual > 1) {
|
|
12
|
+
return 2 * magnitude;
|
|
13
|
+
}
|
|
14
|
+
return magnitude;
|
|
15
|
+
}
|
|
16
|
+
export function niceTicks(minimum, maximum, count) {
|
|
17
|
+
const low = Math.min(0, minimum);
|
|
18
|
+
const high = Math.max(0, maximum) === low ? low + 1 : Math.max(0, maximum);
|
|
19
|
+
const step = niceStep(high - low, count);
|
|
20
|
+
const decimals = Math.max(0, -Math.floor(Math.log10(step)));
|
|
21
|
+
const first = Math.floor(low / step);
|
|
22
|
+
const last = Math.ceil(high / step);
|
|
23
|
+
const ticks = [];
|
|
24
|
+
for (let index = first; index <= last; index++) {
|
|
25
|
+
ticks.push(Number((index * step).toFixed(decimals)));
|
|
26
|
+
}
|
|
27
|
+
return ticks;
|
|
28
|
+
}
|
|
29
|
+
export function scaleLinear(domain, range) {
|
|
30
|
+
const [domainStart, domainEnd] = domain;
|
|
31
|
+
const [rangeStart, rangeEnd] = range;
|
|
32
|
+
const span = domainEnd - domainStart;
|
|
33
|
+
return (value) => span === 0
|
|
34
|
+
? (rangeStart + rangeEnd) / 2
|
|
35
|
+
: rangeStart + ((value - domainStart) / span) * (rangeEnd - rangeStart);
|
|
36
|
+
}
|
|
37
|
+
export function columnsOf(series) {
|
|
38
|
+
const times = new Set();
|
|
39
|
+
for (const entry of series) {
|
|
40
|
+
for (const point of entry.points) {
|
|
41
|
+
times.add(point.at.getTime());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return [...times].sort((first, second) => first - second);
|
|
45
|
+
}
|
|
46
|
+
export function valueMap(series) {
|
|
47
|
+
return new Map(series.points.map((point) => [point.at.getTime(), point.value]));
|
|
48
|
+
}
|
|
49
|
+
export function valueExtent(series) {
|
|
50
|
+
let minimum = Infinity;
|
|
51
|
+
let maximum = -Infinity;
|
|
52
|
+
for (const entry of series) {
|
|
53
|
+
for (const point of entry.points) {
|
|
54
|
+
if (point.value !== null && Number.isFinite(point.value)) {
|
|
55
|
+
minimum = Math.min(minimum, point.value);
|
|
56
|
+
maximum = Math.max(maximum, point.value);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return minimum === Infinity ? null : [minimum, maximum];
|
|
61
|
+
}
|
|
62
|
+
export function segmentsOf(points) {
|
|
63
|
+
const sorted = [...points].sort((first, second) => first.at.getTime() - second.at.getTime());
|
|
64
|
+
const segments = [];
|
|
65
|
+
let current = [];
|
|
66
|
+
for (const point of sorted) {
|
|
67
|
+
if (point.value === null || !Number.isFinite(point.value)) {
|
|
68
|
+
if (current.length) {
|
|
69
|
+
segments.push(current);
|
|
70
|
+
}
|
|
71
|
+
current = [];
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
current.push(point);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (current.length) {
|
|
78
|
+
segments.push(current);
|
|
79
|
+
}
|
|
80
|
+
return segments;
|
|
81
|
+
}
|
|
82
|
+
export function nearestIndex(times, target) {
|
|
83
|
+
let low = 0;
|
|
84
|
+
let high = times.length - 1;
|
|
85
|
+
while (high - low > 1) {
|
|
86
|
+
const middle = Math.floor((low + high) / 2);
|
|
87
|
+
if ((times[middle] ?? 0) <= target) {
|
|
88
|
+
low = middle;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
high = middle;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
const lowDistance = Math.abs(target - (times[low] ?? 0));
|
|
95
|
+
const highDistance = Math.abs((times[high] ?? 0) - target);
|
|
96
|
+
return highDistance < lowDistance ? high : low;
|
|
97
|
+
}
|
|
98
|
+
export function medianSpacing(times) {
|
|
99
|
+
const gaps = times
|
|
100
|
+
.slice(1)
|
|
101
|
+
.map((time, index) => time - (times[index] ?? time))
|
|
102
|
+
.sort((first, second) => first - second);
|
|
103
|
+
return gaps[Math.floor(gaps.length / 2)] ?? 0;
|
|
104
|
+
}
|
|
105
|
+
export function linePath(positions) {
|
|
106
|
+
return positions
|
|
107
|
+
.map((position, index) => `${index ? "L" : "M"}${position.x.toFixed(1)},${position.y.toFixed(1)}`)
|
|
108
|
+
.join("");
|
|
109
|
+
}
|
|
110
|
+
export function areaPath(positions, baseline) {
|
|
111
|
+
const first = positions[0];
|
|
112
|
+
const last = positions.at(-1);
|
|
113
|
+
if (!first || !last) {
|
|
114
|
+
return "";
|
|
115
|
+
}
|
|
116
|
+
return `${linePath(positions)}L${last.x.toFixed(1)},${baseline.toFixed(1)}L${first.x.toFixed(1)},${baseline.toFixed(1)}Z`;
|
|
117
|
+
}
|
|
118
|
+
export function barPath(left, width, top, baseline) {
|
|
119
|
+
const height = Math.abs(baseline - top);
|
|
120
|
+
if (height < 0.5 || width <= 0) {
|
|
121
|
+
return "";
|
|
122
|
+
}
|
|
123
|
+
const radius = Math.min(4, width / 2, height);
|
|
124
|
+
const right = left + width;
|
|
125
|
+
const direction = top <= baseline ? 1 : -1;
|
|
126
|
+
const sweep = direction === 1 ? 1 : 0;
|
|
127
|
+
const corner = top + direction * radius;
|
|
128
|
+
return [
|
|
129
|
+
`M${left},${baseline}`,
|
|
130
|
+
`V${corner}`,
|
|
131
|
+
`A${radius},${radius} 0 0 ${sweep} ${left + radius},${top}`,
|
|
132
|
+
`H${right - radius}`,
|
|
133
|
+
`A${radius},${radius} 0 0 ${sweep} ${right},${corner}`,
|
|
134
|
+
`V${baseline}Z`,
|
|
135
|
+
].join("");
|
|
136
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type TimeUnit = "minute" | "hour" | "day" | "month" | "year";
|
|
2
|
+
export declare function timeTicks(start: Date, end: Date, maximum: number): {
|
|
3
|
+
ticks: Date[];
|
|
4
|
+
unit: TimeUnit;
|
|
5
|
+
};
|
|
6
|
+
export declare function formatTick(date: Date, unit: TimeUnit): string;
|
|
7
|
+
export declare function formatInstant(date: Date, spacing: number): string;
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
const minute = 60_000;
|
|
2
|
+
const hour = 60 * minute;
|
|
3
|
+
const day = 24 * hour;
|
|
4
|
+
const intervals = [
|
|
5
|
+
{ unit: "minute", step: 1, length: minute },
|
|
6
|
+
{ unit: "minute", step: 5, length: 5 * minute },
|
|
7
|
+
{ unit: "minute", step: 15, length: 15 * minute },
|
|
8
|
+
{ unit: "minute", step: 30, length: 30 * minute },
|
|
9
|
+
{ unit: "hour", step: 1, length: hour },
|
|
10
|
+
{ unit: "hour", step: 3, length: 3 * hour },
|
|
11
|
+
{ unit: "hour", step: 6, length: 6 * hour },
|
|
12
|
+
{ unit: "hour", step: 12, length: 12 * hour },
|
|
13
|
+
{ unit: "day", step: 1, length: day },
|
|
14
|
+
{ unit: "day", step: 2, length: 2 * day },
|
|
15
|
+
{ unit: "day", step: 7, length: 7 * day },
|
|
16
|
+
{ unit: "day", step: 14, length: 14 * day },
|
|
17
|
+
{ unit: "month", step: 1, length: 30 * day },
|
|
18
|
+
{ unit: "month", step: 3, length: 91 * day },
|
|
19
|
+
{ unit: "month", step: 6, length: 182 * day },
|
|
20
|
+
{ unit: "year", step: 1, length: 365 * day },
|
|
21
|
+
{ unit: "year", step: 2, length: 730 * day },
|
|
22
|
+
{ unit: "year", step: 5, length: 1826 * day },
|
|
23
|
+
{ unit: "year", step: 10, length: 3652 * day },
|
|
24
|
+
];
|
|
25
|
+
function floorTo(date, unit, step) {
|
|
26
|
+
const result = new Date(date);
|
|
27
|
+
if (unit === "minute") {
|
|
28
|
+
result.setMinutes(Math.floor(result.getMinutes() / step) * step, 0, 0);
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
if (unit === "hour") {
|
|
32
|
+
result.setHours(Math.floor(result.getHours() / step) * step, 0, 0, 0);
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
result.setHours(0, 0, 0, 0);
|
|
36
|
+
if (unit === "month") {
|
|
37
|
+
result.setMonth(Math.floor(result.getMonth() / step) * step, 1);
|
|
38
|
+
}
|
|
39
|
+
if (unit === "year") {
|
|
40
|
+
result.setFullYear(Math.floor(result.getFullYear() / step) * step, 0, 1);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
function advance(date, unit, step) {
|
|
45
|
+
const result = new Date(date);
|
|
46
|
+
if (unit === "minute") {
|
|
47
|
+
result.setMinutes(result.getMinutes() + step);
|
|
48
|
+
}
|
|
49
|
+
else if (unit === "hour") {
|
|
50
|
+
result.setHours(result.getHours() + step);
|
|
51
|
+
}
|
|
52
|
+
else if (unit === "day") {
|
|
53
|
+
result.setDate(result.getDate() + step);
|
|
54
|
+
}
|
|
55
|
+
else if (unit === "month") {
|
|
56
|
+
result.setMonth(result.getMonth() + step);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
result.setFullYear(result.getFullYear() + step);
|
|
60
|
+
}
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
export function timeTicks(start, end, maximum) {
|
|
64
|
+
const span = Math.max(0, end.getTime() - start.getTime());
|
|
65
|
+
const { unit, step } = intervals.find((candidate) => span / candidate.length <= maximum) ?? { unit: "year", step: Math.ceil(span / (365 * day) / maximum) };
|
|
66
|
+
const ticks = [];
|
|
67
|
+
let tick = floorTo(start, unit, step);
|
|
68
|
+
while (tick.getTime() <= end.getTime() && ticks.length <= maximum + 2) {
|
|
69
|
+
if (tick.getTime() >= start.getTime()) {
|
|
70
|
+
ticks.push(tick);
|
|
71
|
+
}
|
|
72
|
+
tick = advance(tick, unit, step);
|
|
73
|
+
}
|
|
74
|
+
return { ticks, unit };
|
|
75
|
+
}
|
|
76
|
+
export function formatTick(date, unit) {
|
|
77
|
+
const midnight = date.getHours() === 0 && date.getMinutes() === 0 && unit !== "minute";
|
|
78
|
+
const options = unit === "year"
|
|
79
|
+
? { year: "numeric" }
|
|
80
|
+
: unit === "month"
|
|
81
|
+
? date.getMonth() === 0
|
|
82
|
+
? { month: "short", year: "numeric" }
|
|
83
|
+
: { month: "short" }
|
|
84
|
+
: unit === "day" || midnight
|
|
85
|
+
? { day: "numeric", month: "short" }
|
|
86
|
+
: { hour: "numeric", minute: "2-digit" };
|
|
87
|
+
return new Intl.DateTimeFormat(undefined, options).format(date);
|
|
88
|
+
}
|
|
89
|
+
export function formatInstant(date, spacing) {
|
|
90
|
+
const options = spacing > 0 && spacing < day
|
|
91
|
+
? { day: "numeric", month: "short", hour: "numeric", minute: "2-digit" }
|
|
92
|
+
: spacing >= 28 * day
|
|
93
|
+
? { month: "long", year: "numeric" }
|
|
94
|
+
: { weekday: "short", day: "numeric", month: "short", year: "numeric" };
|
|
95
|
+
return new Intl.DateTimeFormat(undefined, options).format(date);
|
|
96
|
+
}
|