@epilot/spark-ui 0.18.2 → 0.20.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/dist/components/attachment.d.cts +1 -1
- package/dist/components/attachment.d.ts +1 -1
- package/dist/components/avatar.cjs +1 -1
- package/dist/components/avatar.cjs.map +1 -1
- package/dist/components/avatar.js +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/badge.cjs +1 -1
- package/dist/components/badge.cjs.map +1 -1
- package/dist/components/badge.d.cts +2 -1
- package/dist/components/badge.d.ts +2 -1
- package/dist/components/badge.js +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/{energy-bar-chart.cjs → bar-chart-with-total.cjs} +4 -4
- package/dist/components/bar-chart-with-total.cjs.map +1 -0
- package/dist/components/bar-chart-with-total.d.cts +19 -0
- package/dist/components/bar-chart-with-total.d.ts +19 -0
- package/dist/components/{energy-bar-chart.js → bar-chart-with-total.js} +4 -4
- package/dist/components/bar-chart-with-total.js.map +1 -0
- package/dist/components/bar-chart.cjs +1 -1
- package/dist/components/bar-chart.js +2 -2
- package/dist/components/bubble.d.cts +1 -1
- package/dist/components/bubble.d.ts +1 -1
- package/dist/components/button-group.cjs +2 -2
- package/dist/components/button-group.cjs.map +1 -1
- package/dist/components/button-group.d.cts +1 -1
- package/dist/components/button-group.d.ts +1 -1
- package/dist/components/button-group.js +2 -2
- package/dist/components/button-group.js.map +1 -1
- package/dist/components/button.cjs +6 -4
- package/dist/components/button.cjs.map +1 -1
- package/dist/components/button.d.cts +6 -5
- package/dist/components/button.d.ts +6 -5
- package/dist/components/button.js +6 -4
- package/dist/components/button.js.map +1 -1
- package/dist/components/calendar.cjs +3 -3
- package/dist/components/calendar.cjs.map +1 -1
- package/dist/components/calendar.js +3 -3
- package/dist/components/calendar.js.map +1 -1
- package/dist/components/callout.cjs +10 -10
- package/dist/components/callout.cjs.map +1 -1
- package/dist/components/callout.d.cts +1 -1
- package/dist/components/callout.d.ts +1 -1
- package/dist/components/callout.js +10 -10
- package/dist/components/callout.js.map +1 -1
- package/dist/components/checkbox.cjs +1 -1
- package/dist/components/checkbox.cjs.map +1 -1
- package/dist/components/checkbox.js +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/circular-gauge.cjs +7 -7
- package/dist/components/circular-gauge.cjs.map +1 -1
- package/dist/components/circular-gauge.js +7 -7
- package/dist/components/circular-gauge.js.map +1 -1
- package/dist/components/day-of-week-picker.cjs +21 -41
- package/dist/components/day-of-week-picker.cjs.map +1 -1
- package/dist/components/day-of-week-picker.d.cts +19 -23
- package/dist/components/day-of-week-picker.d.ts +19 -23
- package/dist/components/day-of-week-picker.js +21 -41
- package/dist/components/day-of-week-picker.js.map +1 -1
- package/dist/components/{device-card.cjs → entity-card.cjs} +31 -31
- package/dist/components/entity-card.cjs.map +1 -0
- package/dist/components/{device-card.d.cts → entity-card.d.cts} +15 -15
- package/dist/components/{device-card.d.ts → entity-card.d.ts} +15 -15
- package/dist/components/{device-card.js → entity-card.js} +20 -20
- package/dist/components/entity-card.js.map +1 -0
- package/dist/components/field.cjs +1 -1
- package/dist/components/field.cjs.map +1 -1
- package/dist/components/field.js +1 -1
- package/dist/components/field.js.map +1 -1
- package/dist/components/{feed-in-hero.cjs → hero-metric.cjs} +10 -15
- package/dist/components/hero-metric.cjs.map +1 -0
- package/dist/components/hero-metric.d.cts +27 -0
- package/dist/components/hero-metric.d.ts +27 -0
- package/dist/components/{feed-in-hero.js → hero-metric.js} +7 -12
- package/dist/components/hero-metric.js.map +1 -0
- package/dist/components/info-block.d.cts +1 -1
- package/dist/components/info-block.d.ts +1 -1
- package/dist/components/input-date.cjs +6 -6
- package/dist/components/input-date.cjs.map +1 -1
- package/dist/components/input-date.d.cts +2 -1
- package/dist/components/input-date.d.ts +2 -1
- package/dist/components/input-date.js +6 -6
- package/dist/components/input-date.js.map +1 -1
- package/dist/components/input-group.d.cts +1 -1
- package/dist/components/input-group.d.ts +1 -1
- package/dist/components/input-otp.cjs +1 -1
- package/dist/components/input-otp.cjs.map +1 -1
- package/dist/components/input-otp.js +1 -1
- package/dist/components/input-otp.js.map +1 -1
- package/dist/components/input.cjs +1 -1
- package/dist/components/input.cjs.map +1 -1
- package/dist/components/input.js +1 -1
- package/dist/components/input.js.map +1 -1
- package/dist/components/label.cjs +1 -1
- package/dist/components/label.cjs.map +1 -1
- package/dist/components/label.js +1 -1
- package/dist/components/label.js.map +1 -1
- package/dist/components/line-chart.cjs +2 -2
- package/dist/components/line-chart.js +3 -3
- package/dist/components/number-flow.d.cts +12 -2
- package/dist/components/number-flow.d.ts +12 -2
- package/dist/components/page-header.d.cts +1 -1
- package/dist/components/page-header.d.ts +1 -1
- package/dist/components/period-tabs.cjs +2 -22
- package/dist/components/period-tabs.cjs.map +1 -1
- package/dist/components/period-tabs.d.cts +5 -22
- package/dist/components/period-tabs.d.ts +5 -22
- package/dist/components/period-tabs.js +2 -22
- package/dist/components/period-tabs.js.map +1 -1
- package/dist/components/pill.cjs +2 -2
- package/dist/components/pill.cjs.map +1 -1
- package/dist/components/pill.js +2 -2
- package/dist/components/pill.js.map +1 -1
- package/dist/components/progress.cjs +1 -1
- package/dist/components/progress.cjs.map +1 -1
- package/dist/components/progress.js +1 -1
- package/dist/components/progress.js.map +1 -1
- package/dist/components/radio.cjs +1 -1
- package/dist/components/radio.cjs.map +1 -1
- package/dist/components/radio.js +1 -1
- package/dist/components/radio.js.map +1 -1
- package/dist/components/sankey-chart.cjs +1 -11
- package/dist/components/sankey-chart.cjs.map +1 -1
- package/dist/components/sankey-chart.d.cts +2 -3
- package/dist/components/sankey-chart.d.ts +2 -3
- package/dist/components/sankey-chart.js +2 -11
- package/dist/components/sankey-chart.js.map +1 -1
- package/dist/components/segmented-control.cjs +2 -2
- package/dist/components/segmented-control.cjs.map +1 -1
- package/dist/components/segmented-control.js +2 -2
- package/dist/components/segmented-control.js.map +1 -1
- package/dist/components/select.cjs +32 -2
- package/dist/components/select.cjs.map +1 -1
- package/dist/components/select.d.cts +11 -1
- package/dist/components/select.d.ts +11 -1
- package/dist/components/select.js +32 -4
- package/dist/components/select.js.map +1 -1
- package/dist/components/stepper.cjs +1 -1
- package/dist/components/stepper.cjs.map +1 -1
- package/dist/components/stepper.d.cts +4 -4
- package/dist/components/stepper.d.ts +4 -4
- package/dist/components/stepper.js +1 -1
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/table.cjs +147 -0
- package/dist/components/table.cjs.map +1 -0
- package/dist/components/table.d.cts +75 -0
- package/dist/components/table.d.ts +75 -0
- package/dist/components/table.js +138 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/textarea.cjs +1 -1
- package/dist/components/textarea.cjs.map +1 -1
- package/dist/components/textarea.js +1 -1
- package/dist/components/textarea.js.map +1 -1
- package/dist/components/tooltip.cjs +1 -1
- package/dist/components/tooltip.cjs.map +1 -1
- package/dist/components/tooltip.js +1 -1
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/typography.cjs +1 -1
- package/dist/components/typography.cjs.map +1 -1
- package/dist/components/typography.d.cts +4 -1
- package/dist/components/typography.d.ts +4 -1
- package/dist/components/typography.js +1 -1
- package/dist/components/typography.js.map +1 -1
- package/dist/components/wizard-layout.cjs +57 -0
- package/dist/components/wizard-layout.cjs.map +1 -0
- package/dist/components/wizard-layout.d.cts +34 -0
- package/dist/components/wizard-layout.d.ts +34 -0
- package/dist/components/wizard-layout.js +50 -0
- package/dist/components/wizard-layout.js.map +1 -0
- package/dist/lib/accent-colors.cjs +4 -1
- package/dist/lib/accent-colors.cjs.map +1 -1
- package/dist/lib/accent-colors.d.cts +1 -1
- package/dist/lib/accent-colors.d.ts +1 -1
- package/dist/lib/accent-colors.js +4 -1
- package/dist/lib/accent-colors.js.map +1 -1
- package/dist/lib/accent-theme.cjs +144 -9
- package/dist/lib/accent-theme.cjs.map +1 -1
- package/dist/lib/accent-theme.d.cts +37 -1
- package/dist/lib/accent-theme.d.ts +37 -1
- package/dist/lib/accent-theme.js +140 -10
- package/dist/lib/accent-theme.js.map +1 -1
- package/dist/styles/index.css +10 -1
- package/dist/styles/spark-default.css +75 -321
- package/dist/styles/theme.css +54 -8
- package/dist/utils/format.cjs +0 -13
- package/dist/utils/format.cjs.map +1 -1
- package/dist/utils/format.d.cts +1 -7
- package/dist/utils/format.d.ts +1 -7
- package/dist/utils/format.js +1 -12
- package/dist/utils/format.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/battery-progress-row.cjs +0 -135
- package/dist/components/battery-progress-row.cjs.map +0 -1
- package/dist/components/battery-progress-row.d.cts +0 -69
- package/dist/components/battery-progress-row.d.ts +0 -69
- package/dist/components/battery-progress-row.js +0 -125
- package/dist/components/battery-progress-row.js.map +0 -1
- package/dist/components/device-card.cjs.map +0 -1
- package/dist/components/device-card.js.map +0 -1
- package/dist/components/energy-bar-chart.cjs.map +0 -1
- package/dist/components/energy-bar-chart.d.cts +0 -43
- package/dist/components/energy-bar-chart.d.ts +0 -43
- package/dist/components/energy-bar-chart.js.map +0 -1
- package/dist/components/energy-breakdown.cjs +0 -80
- package/dist/components/energy-breakdown.cjs.map +0 -1
- package/dist/components/energy-breakdown.d.cts +0 -24
- package/dist/components/energy-breakdown.d.ts +0 -24
- package/dist/components/energy-breakdown.js +0 -79
- package/dist/components/energy-breakdown.js.map +0 -1
- package/dist/components/energy-history-chart.cjs +0 -63
- package/dist/components/energy-history-chart.cjs.map +0 -1
- package/dist/components/energy-history-chart.d.cts +0 -64
- package/dist/components/energy-history-chart.d.ts +0 -64
- package/dist/components/energy-history-chart.js +0 -62
- package/dist/components/energy-history-chart.js.map +0 -1
- package/dist/components/feed-in-hero.cjs.map +0 -1
- package/dist/components/feed-in-hero.d.cts +0 -32
- package/dist/components/feed-in-hero.d.ts +0 -32
- package/dist/components/feed-in-hero.js.map +0 -1
- package/dist/components/metering-row.cjs +0 -59
- package/dist/components/metering-row.cjs.map +0 -1
- package/dist/components/metering-row.d.cts +0 -31
- package/dist/components/metering-row.d.ts +0 -31
- package/dist/components/metering-row.js +0 -55
- package/dist/components/metering-row.js.map +0 -1
- package/dist/components/money-saved-block.cjs +0 -83
- package/dist/components/money-saved-block.cjs.map +0 -1
- package/dist/components/money-saved-block.d.cts +0 -55
- package/dist/components/money-saved-block.d.ts +0 -55
- package/dist/components/money-saved-block.js +0 -76
- package/dist/components/money-saved-block.js.map +0 -1
- package/dist/components/on-off-button.cjs +0 -32
- package/dist/components/on-off-button.cjs.map +0 -1
- package/dist/components/on-off-button.d.cts +0 -18
- package/dist/components/on-off-button.d.ts +0 -18
- package/dist/components/on-off-button.js +0 -31
- package/dist/components/on-off-button.js.map +0 -1
- package/dist/components/onboarding-layout.cjs +0 -67
- package/dist/components/onboarding-layout.cjs.map +0 -1
- package/dist/components/onboarding-layout.d.cts +0 -44
- package/dist/components/onboarding-layout.d.ts +0 -44
- package/dist/components/onboarding-layout.js +0 -60
- package/dist/components/onboarding-layout.js.map +0 -1
- package/dist/components/power-history-chart.cjs +0 -498
- package/dist/components/power-history-chart.cjs.map +0 -1
- package/dist/components/power-history-chart.d.cts +0 -71
- package/dist/components/power-history-chart.d.ts +0 -71
- package/dist/components/power-history-chart.js +0 -496
- package/dist/components/power-history-chart.js.map +0 -1
- package/dist/components/power-history.cjs +0 -114
- package/dist/components/power-history.cjs.map +0 -1
- package/dist/components/power-history.d.cts +0 -40
- package/dist/components/power-history.d.ts +0 -41
- package/dist/components/power-history.js +0 -114
- package/dist/components/power-history.js.map +0 -1
- package/dist/components/power-network.cjs +0 -559
- package/dist/components/power-network.cjs.map +0 -1
- package/dist/components/power-network.d.cts +0 -80
- package/dist/components/power-network.d.ts +0 -80
- package/dist/components/power-network.js +0 -553
- package/dist/components/power-network.js.map +0 -1
- package/dist/components/smart-toggle-button.cjs +0 -24
- package/dist/components/smart-toggle-button.cjs.map +0 -1
- package/dist/components/smart-toggle-button.d.cts +0 -16
- package/dist/components/smart-toggle-button.d.ts +0 -16
- package/dist/components/smart-toggle-button.js +0 -23
- package/dist/components/smart-toggle-button.js.map +0 -1
- package/dist/components/solar-forecast-chart.cjs +0 -108
- package/dist/components/solar-forecast-chart.cjs.map +0 -1
- package/dist/components/solar-forecast-chart.d.cts +0 -77
- package/dist/components/solar-forecast-chart.d.ts +0 -77
- package/dist/components/solar-forecast-chart.js +0 -103
- package/dist/components/solar-forecast-chart.js.map +0 -1
- package/dist/number-flow-Bch81ixZ.d.cts +0 -14
- package/dist/number-flow-Bch81ixZ.d.ts +0 -14
- package/dist/utils/build-sankey-nodes.cjs +0 -72
- package/dist/utils/build-sankey-nodes.cjs.map +0 -1
- package/dist/utils/build-sankey-nodes.d.cts +0 -27
- package/dist/utils/build-sankey-nodes.d.ts +0 -27
- package/dist/utils/build-sankey-nodes.js +0 -71
- package/dist/utils/build-sankey-nodes.js.map +0 -1
|
@@ -7,34 +7,13 @@ let react_jsx_runtime = require("react/jsx-runtime");
|
|
|
7
7
|
let cnfast = require("cnfast");
|
|
8
8
|
//#region src/components/day-of-week-picker.tsx
|
|
9
9
|
const WEEK_DAYS = [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
value: "wednesday",
|
|
20
|
-
short: "Wed"
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
value: "thursday",
|
|
24
|
-
short: "Thu"
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
value: "friday",
|
|
28
|
-
short: "Fri"
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
value: "saturday",
|
|
32
|
-
short: "Sat"
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
value: "sunday",
|
|
36
|
-
short: "Sun"
|
|
37
|
-
}
|
|
10
|
+
"monday",
|
|
11
|
+
"tuesday",
|
|
12
|
+
"wednesday",
|
|
13
|
+
"thursday",
|
|
14
|
+
"friday",
|
|
15
|
+
"saturday",
|
|
16
|
+
"sunday"
|
|
38
17
|
];
|
|
39
18
|
const WEEKDAYS_ONLY = [
|
|
40
19
|
"monday",
|
|
@@ -44,8 +23,9 @@ const WEEKDAYS_ONLY = [
|
|
|
44
23
|
"friday"
|
|
45
24
|
];
|
|
46
25
|
const WEEKEND_ONLY = ["saturday", "sunday"];
|
|
47
|
-
const ALL_DAYS = WEEK_DAYS
|
|
48
|
-
const DayOfWeekPicker = react.forwardRef((
|
|
26
|
+
const ALL_DAYS = [...WEEK_DAYS];
|
|
27
|
+
const DayOfWeekPicker = react.forwardRef(function DayOfWeekPicker(props, ref) {
|
|
28
|
+
const { className, disabled, onValueChange, showPresets = false, value, dayLabels, dayAriaLabels, daysAriaLabel } = props;
|
|
49
29
|
const selected = react.useMemo(() => new Set(value), [value]);
|
|
50
30
|
const toggle = (day) => {
|
|
51
31
|
const next = new Set(selected);
|
|
@@ -60,47 +40,47 @@ const DayOfWeekPicker = react.forwardRef(({ className, disabled, onValueChange,
|
|
|
60
40
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
61
41
|
ref,
|
|
62
42
|
className: (0, cnfast.cn)("flex flex-col gap-2", className),
|
|
63
|
-
children: [showPresets && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
43
|
+
children: [showPresets && props.showPresets ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
64
44
|
role: "group",
|
|
65
|
-
"aria-label": presetsAriaLabel,
|
|
45
|
+
"aria-label": props.presetsAriaLabel,
|
|
66
46
|
className: "flex flex-wrap gap-1.5",
|
|
67
47
|
children: [
|
|
68
48
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PresetButton, {
|
|
69
49
|
active: matches(WEEKDAYS_ONLY),
|
|
70
50
|
disabled,
|
|
71
51
|
onClick: () => setPreset(WEEKDAYS_ONLY),
|
|
72
|
-
children: presetLabels
|
|
52
|
+
children: props.presetLabels.weekdays
|
|
73
53
|
}),
|
|
74
54
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PresetButton, {
|
|
75
55
|
active: matches(WEEKEND_ONLY),
|
|
76
56
|
disabled,
|
|
77
57
|
onClick: () => setPreset(WEEKEND_ONLY),
|
|
78
|
-
children: presetLabels
|
|
58
|
+
children: props.presetLabels.weekend
|
|
79
59
|
}),
|
|
80
60
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(PresetButton, {
|
|
81
61
|
active: matches(ALL_DAYS),
|
|
82
62
|
disabled,
|
|
83
63
|
onClick: () => setPreset(ALL_DAYS),
|
|
84
|
-
children: presetLabels
|
|
64
|
+
children: props.presetLabels.everyDay
|
|
85
65
|
})
|
|
86
66
|
]
|
|
87
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
67
|
+
}) : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
88
68
|
role: "group",
|
|
89
69
|
"aria-label": daysAriaLabel,
|
|
90
70
|
className: "flex gap-1",
|
|
91
71
|
children: WEEK_DAYS.map((day) => {
|
|
92
|
-
const checked = selected.has(day
|
|
93
|
-
const label = dayLabels
|
|
72
|
+
const checked = selected.has(day);
|
|
73
|
+
const label = dayLabels[day];
|
|
94
74
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
95
75
|
type: "button",
|
|
96
76
|
role: "checkbox",
|
|
97
77
|
"aria-checked": checked,
|
|
98
|
-
"aria-label": dayAriaLabels?.[day
|
|
78
|
+
"aria-label": dayAriaLabels?.[day] ?? label,
|
|
99
79
|
disabled,
|
|
100
|
-
onClick: () => toggle(day
|
|
80
|
+
onClick: () => toggle(day),
|
|
101
81
|
className: (0, cnfast.cn)("touch-target inline-flex h-9 flex-1 items-center justify-center rounded-full text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 motion-reduce:transition-none", checked ? "bg-base-accent-solid text-accent-contrast hover:bg-spark-9" : "bg-base-gray-soft text-gray-light hover:bg-gray-a4"),
|
|
102
82
|
children: label
|
|
103
|
-
}, day
|
|
83
|
+
}, day);
|
|
104
84
|
})
|
|
105
85
|
})]
|
|
106
86
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"day-of-week-picker.cjs","names":["React"],"sources":["../../src/components/day-of-week-picker.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../utils/cn'\n\nexport type WeekDay =\n | 'monday'\n | 'tuesday'\n | 'wednesday'\n | 'thursday'\n | 'friday'\n | 'saturday'\n | 'sunday'\n\nexport const WEEK_DAYS:
|
|
1
|
+
{"version":3,"file":"day-of-week-picker.cjs","names":["React"],"sources":["../../src/components/day-of-week-picker.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../utils/cn'\n\nexport type WeekDay =\n | 'monday'\n | 'tuesday'\n | 'wednesday'\n | 'thursday'\n | 'friday'\n | 'saturday'\n | 'sunday'\n\nexport const WEEK_DAYS: readonly WeekDay[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n] as const\n\nconst WEEKDAYS_ONLY: WeekDay[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n]\nconst WEEKEND_ONLY: WeekDay[] = ['saturday', 'sunday']\nconst ALL_DAYS: WeekDay[] = [...WEEK_DAYS]\n\ntype DayOfWeekPickerBaseProps = {\n value: WeekDay[]\n onValueChange: (next: WeekDay[]) => void\n disabled?: boolean\n className?: string\n dayLabels: Record<WeekDay, string>\n dayAriaLabels?: Partial<Record<WeekDay, string>>\n daysAriaLabel: string\n}\n\ntype DayOfWeekPickerWithPresets = DayOfWeekPickerBaseProps & {\n showPresets: true\n presetLabels: {\n weekdays: React.ReactNode\n weekend: React.ReactNode\n everyDay: React.ReactNode\n }\n presetsAriaLabel: string\n}\n\ntype DayOfWeekPickerWithoutPresets = DayOfWeekPickerBaseProps & {\n showPresets?: false\n presetLabels?: never\n presetsAriaLabel?: never\n}\n\ntype DayOfWeekPickerProps =\n | DayOfWeekPickerWithPresets\n | DayOfWeekPickerWithoutPresets\n\nconst DayOfWeekPicker = React.forwardRef<HTMLDivElement, DayOfWeekPickerProps>(\n function DayOfWeekPicker(props, ref) {\n const {\n className,\n disabled,\n onValueChange,\n showPresets = false,\n value,\n dayLabels,\n dayAriaLabels,\n daysAriaLabel,\n } = props\n\n const selected = React.useMemo(() => new Set(value), [value])\n\n const toggle = (day: WeekDay) => {\n const next = new Set(selected)\n if (next.has(day)) {\n next.delete(day)\n } else {\n next.add(day)\n }\n onValueChange(ALL_DAYS.filter((d) => next.has(d)))\n }\n\n const matches = (preset: WeekDay[]) =>\n selected.size === preset.length && preset.every((d) => selected.has(d))\n\n const setPreset = (preset: WeekDay[]) => {\n onValueChange(preset)\n }\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-2', className)}>\n {showPresets && props.showPresets ? (\n <div\n role=\"group\"\n aria-label={props.presetsAriaLabel}\n className=\"flex flex-wrap gap-1.5\"\n >\n <PresetButton\n active={matches(WEEKDAYS_ONLY)}\n disabled={disabled}\n onClick={() => setPreset(WEEKDAYS_ONLY)}\n >\n {props.presetLabels.weekdays}\n </PresetButton>\n <PresetButton\n active={matches(WEEKEND_ONLY)}\n disabled={disabled}\n onClick={() => setPreset(WEEKEND_ONLY)}\n >\n {props.presetLabels.weekend}\n </PresetButton>\n <PresetButton\n active={matches(ALL_DAYS)}\n disabled={disabled}\n onClick={() => setPreset(ALL_DAYS)}\n >\n {props.presetLabels.everyDay}\n </PresetButton>\n </div>\n ) : null}\n <div role=\"group\" aria-label={daysAriaLabel} className=\"flex gap-1\">\n {WEEK_DAYS.map((day) => {\n const checked = selected.has(day)\n const label = dayLabels[day]\n const ariaLabel = dayAriaLabels?.[day] ?? label\n return (\n <button\n key={day}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={() => toggle(day)}\n className={cn(\n 'touch-target inline-flex h-9 flex-1 items-center justify-center rounded-full text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 motion-reduce:transition-none',\n checked\n ? 'bg-base-accent-solid text-accent-contrast hover:bg-spark-9'\n : 'bg-base-gray-soft text-gray-light hover:bg-gray-a4',\n )}\n >\n {label}\n </button>\n )\n })}\n </div>\n </div>\n )\n },\n)\n\nDayOfWeekPicker.displayName = 'DayOfWeekPicker'\n\ninterface PresetButtonProps {\n active: boolean\n disabled?: boolean\n onClick: () => void\n children: React.ReactNode\n}\n\nfunction PresetButton({\n active,\n children,\n disabled,\n onClick,\n}: PresetButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n aria-pressed={active}\n className={cn(\n 'touch-target inline-flex h-7 items-center justify-center rounded-full px-3 text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 motion-reduce:transition-none',\n active\n ? 'bg-base-accent-soft text-accent'\n : 'bg-transparent text-gray-light hover:bg-gray-a3',\n )}\n >\n {children}\n </button>\n )\n}\n\nexport { DayOfWeekPicker }\n"],"mappings":";;;;;;;;AAYA,MAAa,YAAgC;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,gBAA2B;CAC/B;CACA;CACA;CACA;CACA;AACF;AACA,MAAM,eAA0B,CAAC,YAAY,QAAQ;AACrD,MAAM,WAAsB,CAAC,GAAG,SAAS;AAgCzC,MAAM,kBAAkBA,MAAM,WAC5B,SAAS,gBAAgB,OAAO,KAAK;CACnC,MAAM,EACJ,WACA,UACA,eACA,cAAc,OACd,OACA,WACA,eACA,kBACE;CAEJ,MAAM,WAAWA,MAAM,cAAc,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC;CAE5D,MAAM,UAAU,QAAiB;EAC/B,MAAM,OAAO,IAAI,IAAI,QAAQ;EAC7B,IAAI,KAAK,IAAI,GAAG,GACd,KAAK,OAAO,GAAG;OAEf,KAAK,IAAI,GAAG;EAEd,cAAc,SAAS,QAAQ,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC;CACnD;CAEA,MAAM,WAAW,WACf,SAAS,SAAS,OAAO,UAAU,OAAO,OAAO,MAAM,SAAS,IAAI,CAAC,CAAC;CAExE,MAAM,aAAa,WAAsB;EACvC,cAAc,MAAM;CACtB;CAEA,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAU;EAAK,YAAA,GAAA,OAAA,IAAc,uBAAuB,SAAS;YAA7D,CACG,eAAe,MAAM,cACpB,iBAAA,GAAA,kBAAA,MAAC,OAAD;GACE,MAAK;GACL,cAAY,MAAM;GAClB,WAAU;aAHZ;IAKE,iBAAA,GAAA,kBAAA,KAAC,cAAD;KACE,QAAQ,QAAQ,aAAa;KACnB;KACV,eAAe,UAAU,aAAa;eAErC,MAAM,aAAa;IACR,CAAA;IACd,iBAAA,GAAA,kBAAA,KAAC,cAAD;KACE,QAAQ,QAAQ,YAAY;KAClB;KACV,eAAe,UAAU,YAAY;eAEpC,MAAM,aAAa;IACR,CAAA;IACd,iBAAA,GAAA,kBAAA,KAAC,cAAD;KACE,QAAQ,QAAQ,QAAQ;KACd;KACV,eAAe,UAAU,QAAQ;eAEhC,MAAM,aAAa;IACR,CAAA;GACX;OACH,MACJ,iBAAA,GAAA,kBAAA,KAAC,OAAD;GAAK,MAAK;GAAQ,cAAY;GAAe,WAAU;aACpD,UAAU,KAAK,QAAQ;IACtB,MAAM,UAAU,SAAS,IAAI,GAAG;IAChC,MAAM,QAAQ,UAAU;IAExB,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;KAEE,MAAK;KACL,MAAK;KACL,gBAAc;KACd,cAPc,gBAAgB,QAAQ;KAQ5B;KACV,eAAe,OAAO,GAAG;KACzB,YAAA,GAAA,OAAA,IACE,kRACA,UACI,+DACA,oDACN;eAEC;IACK,GAfD,GAeC;GAEZ,CAAC;EACE,CAAA,CACF;;AAET,CACF;AAEA,gBAAgB,cAAc;AAS9B,SAAS,aAAa,EACpB,QACA,UACA,UACA,WACoB;CACpB,OACE,iBAAA,GAAA,kBAAA,KAAC,UAAD;EACE,MAAK;EACI;EACC;EACV,gBAAc;EACd,YAAA,GAAA,OAAA,IACE,gRACA,SACI,oCACA,iDACN;EAEC;CACK,CAAA;AAEZ"}
|
|
@@ -4,35 +4,31 @@ import * as React$1 from "react";
|
|
|
4
4
|
|
|
5
5
|
//#region src/components/day-of-week-picker.d.ts
|
|
6
6
|
type WeekDay = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
|
|
7
|
-
declare const WEEK_DAYS:
|
|
8
|
-
|
|
9
|
-
short: string;
|
|
10
|
-
}>;
|
|
11
|
-
interface DayOfWeekPickerProps {
|
|
7
|
+
declare const WEEK_DAYS: readonly WeekDay[];
|
|
8
|
+
type DayOfWeekPickerBaseProps = {
|
|
12
9
|
value: WeekDay[];
|
|
13
10
|
onValueChange: (next: WeekDay[]) => void;
|
|
14
11
|
disabled?: boolean;
|
|
15
|
-
/** Show "Weekdays / Weekend / Every day" preset shortcuts above the chips. */
|
|
16
|
-
showPresets?: boolean;
|
|
17
12
|
className?: string;
|
|
18
|
-
|
|
19
|
-
dayLabels?: Partial<Record<WeekDay, string>>;
|
|
20
|
-
/**
|
|
21
|
-
* Full accessible names per day (e.g. "Monday"). Used as each chip's
|
|
22
|
-
* `aria-label`. Falls back to the visible short label when omitted.
|
|
23
|
-
*/
|
|
13
|
+
dayLabels: Record<WeekDay, string>;
|
|
24
14
|
dayAriaLabels?: Partial<Record<WeekDay, string>>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
daysAriaLabel: string;
|
|
16
|
+
};
|
|
17
|
+
type DayOfWeekPickerWithPresets = DayOfWeekPickerBaseProps & {
|
|
18
|
+
showPresets: true;
|
|
19
|
+
presetLabels: {
|
|
20
|
+
weekdays: React$1.ReactNode;
|
|
21
|
+
weekend: React$1.ReactNode;
|
|
22
|
+
everyDay: React$1.ReactNode;
|
|
30
23
|
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
presetsAriaLabel: string;
|
|
25
|
+
};
|
|
26
|
+
type DayOfWeekPickerWithoutPresets = DayOfWeekPickerBaseProps & {
|
|
27
|
+
showPresets?: false;
|
|
28
|
+
presetLabels?: never;
|
|
29
|
+
presetsAriaLabel?: never;
|
|
30
|
+
};
|
|
31
|
+
type DayOfWeekPickerProps = DayOfWeekPickerWithPresets | DayOfWeekPickerWithoutPresets;
|
|
36
32
|
declare const DayOfWeekPicker: React$1.ForwardRefExoticComponent<DayOfWeekPickerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
37
33
|
//#endregion
|
|
38
34
|
export { DayOfWeekPicker, WEEK_DAYS, WeekDay };
|
|
@@ -4,35 +4,31 @@ import * as React$1 from "react";
|
|
|
4
4
|
|
|
5
5
|
//#region src/components/day-of-week-picker.d.ts
|
|
6
6
|
type WeekDay = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
|
|
7
|
-
declare const WEEK_DAYS:
|
|
8
|
-
|
|
9
|
-
short: string;
|
|
10
|
-
}>;
|
|
11
|
-
interface DayOfWeekPickerProps {
|
|
7
|
+
declare const WEEK_DAYS: readonly WeekDay[];
|
|
8
|
+
type DayOfWeekPickerBaseProps = {
|
|
12
9
|
value: WeekDay[];
|
|
13
10
|
onValueChange: (next: WeekDay[]) => void;
|
|
14
11
|
disabled?: boolean;
|
|
15
|
-
/** Show "Weekdays / Weekend / Every day" preset shortcuts above the chips. */
|
|
16
|
-
showPresets?: boolean;
|
|
17
12
|
className?: string;
|
|
18
|
-
|
|
19
|
-
dayLabels?: Partial<Record<WeekDay, string>>;
|
|
20
|
-
/**
|
|
21
|
-
* Full accessible names per day (e.g. "Monday"). Used as each chip's
|
|
22
|
-
* `aria-label`. Falls back to the visible short label when omitted.
|
|
23
|
-
*/
|
|
13
|
+
dayLabels: Record<WeekDay, string>;
|
|
24
14
|
dayAriaLabels?: Partial<Record<WeekDay, string>>;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
daysAriaLabel: string;
|
|
16
|
+
};
|
|
17
|
+
type DayOfWeekPickerWithPresets = DayOfWeekPickerBaseProps & {
|
|
18
|
+
showPresets: true;
|
|
19
|
+
presetLabels: {
|
|
20
|
+
weekdays: React$1.ReactNode;
|
|
21
|
+
weekend: React$1.ReactNode;
|
|
22
|
+
everyDay: React$1.ReactNode;
|
|
30
23
|
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
presetsAriaLabel: string;
|
|
25
|
+
};
|
|
26
|
+
type DayOfWeekPickerWithoutPresets = DayOfWeekPickerBaseProps & {
|
|
27
|
+
showPresets?: false;
|
|
28
|
+
presetLabels?: never;
|
|
29
|
+
presetsAriaLabel?: never;
|
|
30
|
+
};
|
|
31
|
+
type DayOfWeekPickerProps = DayOfWeekPickerWithPresets | DayOfWeekPickerWithoutPresets;
|
|
36
32
|
declare const DayOfWeekPicker: React$1.ForwardRefExoticComponent<DayOfWeekPickerProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
37
33
|
//#endregion
|
|
38
34
|
export { DayOfWeekPicker, WEEK_DAYS, WeekDay };
|
|
@@ -4,34 +4,13 @@ import * as React$1 from "react";
|
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/components/day-of-week-picker.tsx
|
|
6
6
|
const WEEK_DAYS = [
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
value: "wednesday",
|
|
17
|
-
short: "Wed"
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
value: "thursday",
|
|
21
|
-
short: "Thu"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
value: "friday",
|
|
25
|
-
short: "Fri"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
value: "saturday",
|
|
29
|
-
short: "Sat"
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
value: "sunday",
|
|
33
|
-
short: "Sun"
|
|
34
|
-
}
|
|
7
|
+
"monday",
|
|
8
|
+
"tuesday",
|
|
9
|
+
"wednesday",
|
|
10
|
+
"thursday",
|
|
11
|
+
"friday",
|
|
12
|
+
"saturday",
|
|
13
|
+
"sunday"
|
|
35
14
|
];
|
|
36
15
|
const WEEKDAYS_ONLY = [
|
|
37
16
|
"monday",
|
|
@@ -41,8 +20,9 @@ const WEEKDAYS_ONLY = [
|
|
|
41
20
|
"friday"
|
|
42
21
|
];
|
|
43
22
|
const WEEKEND_ONLY = ["saturday", "sunday"];
|
|
44
|
-
const ALL_DAYS = WEEK_DAYS
|
|
45
|
-
const DayOfWeekPicker = React$1.forwardRef((
|
|
23
|
+
const ALL_DAYS = [...WEEK_DAYS];
|
|
24
|
+
const DayOfWeekPicker = React$1.forwardRef(function DayOfWeekPicker(props, ref) {
|
|
25
|
+
const { className, disabled, onValueChange, showPresets = false, value, dayLabels, dayAriaLabels, daysAriaLabel } = props;
|
|
46
26
|
const selected = React$1.useMemo(() => new Set(value), [value]);
|
|
47
27
|
const toggle = (day) => {
|
|
48
28
|
const next = new Set(selected);
|
|
@@ -57,47 +37,47 @@ const DayOfWeekPicker = React$1.forwardRef(({ className, disabled, onValueChange
|
|
|
57
37
|
return /* @__PURE__ */ jsxs("div", {
|
|
58
38
|
ref,
|
|
59
39
|
className: cn("flex flex-col gap-2", className),
|
|
60
|
-
children: [showPresets && /* @__PURE__ */ jsxs("div", {
|
|
40
|
+
children: [showPresets && props.showPresets ? /* @__PURE__ */ jsxs("div", {
|
|
61
41
|
role: "group",
|
|
62
|
-
"aria-label": presetsAriaLabel,
|
|
42
|
+
"aria-label": props.presetsAriaLabel,
|
|
63
43
|
className: "flex flex-wrap gap-1.5",
|
|
64
44
|
children: [
|
|
65
45
|
/* @__PURE__ */ jsx(PresetButton, {
|
|
66
46
|
active: matches(WEEKDAYS_ONLY),
|
|
67
47
|
disabled,
|
|
68
48
|
onClick: () => setPreset(WEEKDAYS_ONLY),
|
|
69
|
-
children: presetLabels
|
|
49
|
+
children: props.presetLabels.weekdays
|
|
70
50
|
}),
|
|
71
51
|
/* @__PURE__ */ jsx(PresetButton, {
|
|
72
52
|
active: matches(WEEKEND_ONLY),
|
|
73
53
|
disabled,
|
|
74
54
|
onClick: () => setPreset(WEEKEND_ONLY),
|
|
75
|
-
children: presetLabels
|
|
55
|
+
children: props.presetLabels.weekend
|
|
76
56
|
}),
|
|
77
57
|
/* @__PURE__ */ jsx(PresetButton, {
|
|
78
58
|
active: matches(ALL_DAYS),
|
|
79
59
|
disabled,
|
|
80
60
|
onClick: () => setPreset(ALL_DAYS),
|
|
81
|
-
children: presetLabels
|
|
61
|
+
children: props.presetLabels.everyDay
|
|
82
62
|
})
|
|
83
63
|
]
|
|
84
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
64
|
+
}) : null, /* @__PURE__ */ jsx("div", {
|
|
85
65
|
role: "group",
|
|
86
66
|
"aria-label": daysAriaLabel,
|
|
87
67
|
className: "flex gap-1",
|
|
88
68
|
children: WEEK_DAYS.map((day) => {
|
|
89
|
-
const checked = selected.has(day
|
|
90
|
-
const label = dayLabels
|
|
69
|
+
const checked = selected.has(day);
|
|
70
|
+
const label = dayLabels[day];
|
|
91
71
|
return /* @__PURE__ */ jsx("button", {
|
|
92
72
|
type: "button",
|
|
93
73
|
role: "checkbox",
|
|
94
74
|
"aria-checked": checked,
|
|
95
|
-
"aria-label": dayAriaLabels?.[day
|
|
75
|
+
"aria-label": dayAriaLabels?.[day] ?? label,
|
|
96
76
|
disabled,
|
|
97
|
-
onClick: () => toggle(day
|
|
77
|
+
onClick: () => toggle(day),
|
|
98
78
|
className: cn("touch-target inline-flex h-9 flex-1 items-center justify-center rounded-full text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 motion-reduce:transition-none", checked ? "bg-base-accent-solid text-accent-contrast hover:bg-spark-9" : "bg-base-gray-soft text-gray-light hover:bg-gray-a4"),
|
|
99
79
|
children: label
|
|
100
|
-
}, day
|
|
80
|
+
}, day);
|
|
101
81
|
})
|
|
102
82
|
})]
|
|
103
83
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"day-of-week-picker.js","names":["React"],"sources":["../../src/components/day-of-week-picker.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../utils/cn'\n\nexport type WeekDay =\n | 'monday'\n | 'tuesday'\n | 'wednesday'\n | 'thursday'\n | 'friday'\n | 'saturday'\n | 'sunday'\n\nexport const WEEK_DAYS:
|
|
1
|
+
{"version":3,"file":"day-of-week-picker.js","names":["React"],"sources":["../../src/components/day-of-week-picker.tsx"],"sourcesContent":["import * as React from 'react'\nimport { cn } from '../utils/cn'\n\nexport type WeekDay =\n | 'monday'\n | 'tuesday'\n | 'wednesday'\n | 'thursday'\n | 'friday'\n | 'saturday'\n | 'sunday'\n\nexport const WEEK_DAYS: readonly WeekDay[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n 'sunday',\n] as const\n\nconst WEEKDAYS_ONLY: WeekDay[] = [\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n]\nconst WEEKEND_ONLY: WeekDay[] = ['saturday', 'sunday']\nconst ALL_DAYS: WeekDay[] = [...WEEK_DAYS]\n\ntype DayOfWeekPickerBaseProps = {\n value: WeekDay[]\n onValueChange: (next: WeekDay[]) => void\n disabled?: boolean\n className?: string\n dayLabels: Record<WeekDay, string>\n dayAriaLabels?: Partial<Record<WeekDay, string>>\n daysAriaLabel: string\n}\n\ntype DayOfWeekPickerWithPresets = DayOfWeekPickerBaseProps & {\n showPresets: true\n presetLabels: {\n weekdays: React.ReactNode\n weekend: React.ReactNode\n everyDay: React.ReactNode\n }\n presetsAriaLabel: string\n}\n\ntype DayOfWeekPickerWithoutPresets = DayOfWeekPickerBaseProps & {\n showPresets?: false\n presetLabels?: never\n presetsAriaLabel?: never\n}\n\ntype DayOfWeekPickerProps =\n | DayOfWeekPickerWithPresets\n | DayOfWeekPickerWithoutPresets\n\nconst DayOfWeekPicker = React.forwardRef<HTMLDivElement, DayOfWeekPickerProps>(\n function DayOfWeekPicker(props, ref) {\n const {\n className,\n disabled,\n onValueChange,\n showPresets = false,\n value,\n dayLabels,\n dayAriaLabels,\n daysAriaLabel,\n } = props\n\n const selected = React.useMemo(() => new Set(value), [value])\n\n const toggle = (day: WeekDay) => {\n const next = new Set(selected)\n if (next.has(day)) {\n next.delete(day)\n } else {\n next.add(day)\n }\n onValueChange(ALL_DAYS.filter((d) => next.has(d)))\n }\n\n const matches = (preset: WeekDay[]) =>\n selected.size === preset.length && preset.every((d) => selected.has(d))\n\n const setPreset = (preset: WeekDay[]) => {\n onValueChange(preset)\n }\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-2', className)}>\n {showPresets && props.showPresets ? (\n <div\n role=\"group\"\n aria-label={props.presetsAriaLabel}\n className=\"flex flex-wrap gap-1.5\"\n >\n <PresetButton\n active={matches(WEEKDAYS_ONLY)}\n disabled={disabled}\n onClick={() => setPreset(WEEKDAYS_ONLY)}\n >\n {props.presetLabels.weekdays}\n </PresetButton>\n <PresetButton\n active={matches(WEEKEND_ONLY)}\n disabled={disabled}\n onClick={() => setPreset(WEEKEND_ONLY)}\n >\n {props.presetLabels.weekend}\n </PresetButton>\n <PresetButton\n active={matches(ALL_DAYS)}\n disabled={disabled}\n onClick={() => setPreset(ALL_DAYS)}\n >\n {props.presetLabels.everyDay}\n </PresetButton>\n </div>\n ) : null}\n <div role=\"group\" aria-label={daysAriaLabel} className=\"flex gap-1\">\n {WEEK_DAYS.map((day) => {\n const checked = selected.has(day)\n const label = dayLabels[day]\n const ariaLabel = dayAriaLabels?.[day] ?? label\n return (\n <button\n key={day}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={checked}\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={() => toggle(day)}\n className={cn(\n 'touch-target inline-flex h-9 flex-1 items-center justify-center rounded-full text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 motion-reduce:transition-none',\n checked\n ? 'bg-base-accent-solid text-accent-contrast hover:bg-spark-9'\n : 'bg-base-gray-soft text-gray-light hover:bg-gray-a4',\n )}\n >\n {label}\n </button>\n )\n })}\n </div>\n </div>\n )\n },\n)\n\nDayOfWeekPicker.displayName = 'DayOfWeekPicker'\n\ninterface PresetButtonProps {\n active: boolean\n disabled?: boolean\n onClick: () => void\n children: React.ReactNode\n}\n\nfunction PresetButton({\n active,\n children,\n disabled,\n onClick,\n}: PresetButtonProps) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n aria-pressed={active}\n className={cn(\n 'touch-target inline-flex h-7 items-center justify-center rounded-full px-3 text-xs font-medium transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 motion-reduce:transition-none',\n active\n ? 'bg-base-accent-soft text-accent'\n : 'bg-transparent text-gray-light hover:bg-gray-a3',\n )}\n >\n {children}\n </button>\n )\n}\n\nexport { DayOfWeekPicker }\n"],"mappings":";;;;;AAYA,MAAa,YAAgC;CAC3C;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,gBAA2B;CAC/B;CACA;CACA;CACA;CACA;AACF;AACA,MAAM,eAA0B,CAAC,YAAY,QAAQ;AACrD,MAAM,WAAsB,CAAC,GAAG,SAAS;AAgCzC,MAAM,kBAAkBA,QAAM,WAC5B,SAAS,gBAAgB,OAAO,KAAK;CACnC,MAAM,EACJ,WACA,UACA,eACA,cAAc,OACd,OACA,WACA,eACA,kBACE;CAEJ,MAAM,WAAWA,QAAM,cAAc,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC;CAE5D,MAAM,UAAU,QAAiB;EAC/B,MAAM,OAAO,IAAI,IAAI,QAAQ;EAC7B,IAAI,KAAK,IAAI,GAAG,GACd,KAAK,OAAO,GAAG;OAEf,KAAK,IAAI,GAAG;EAEd,cAAc,SAAS,QAAQ,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC;CACnD;CAEA,MAAM,WAAW,WACf,SAAS,SAAS,OAAO,UAAU,OAAO,OAAO,MAAM,SAAS,IAAI,CAAC,CAAC;CAExE,MAAM,aAAa,WAAsB;EACvC,cAAc,MAAM;CACtB;CAEA,OACE,qBAAC,OAAD;EAAU;EAAK,WAAW,GAAG,uBAAuB,SAAS;YAA7D,CACG,eAAe,MAAM,cACpB,qBAAC,OAAD;GACE,MAAK;GACL,cAAY,MAAM;GAClB,WAAU;aAHZ;IAKE,oBAAC,cAAD;KACE,QAAQ,QAAQ,aAAa;KACnB;KACV,eAAe,UAAU,aAAa;eAErC,MAAM,aAAa;IACR,CAAA;IACd,oBAAC,cAAD;KACE,QAAQ,QAAQ,YAAY;KAClB;KACV,eAAe,UAAU,YAAY;eAEpC,MAAM,aAAa;IACR,CAAA;IACd,oBAAC,cAAD;KACE,QAAQ,QAAQ,QAAQ;KACd;KACV,eAAe,UAAU,QAAQ;eAEhC,MAAM,aAAa;IACR,CAAA;GACX;OACH,MACJ,oBAAC,OAAD;GAAK,MAAK;GAAQ,cAAY;GAAe,WAAU;aACpD,UAAU,KAAK,QAAQ;IACtB,MAAM,UAAU,SAAS,IAAI,GAAG;IAChC,MAAM,QAAQ,UAAU;IAExB,OACE,oBAAC,UAAD;KAEE,MAAK;KACL,MAAK;KACL,gBAAc;KACd,cAPc,gBAAgB,QAAQ;KAQ5B;KACV,eAAe,OAAO,GAAG;KACzB,WAAW,GACT,kRACA,UACI,+DACA,oDACN;eAEC;IACK,GAfD,GAeC;GAEZ,CAAC;EACE,CAAA,CACF;;AAET,CACF;AAEA,gBAAgB,cAAc;AAS9B,SAAS,aAAa,EACpB,QACA,UACA,UACA,WACoB;CACpB,OACE,oBAAC,UAAD;EACE,MAAK;EACI;EACC;EACV,gBAAc;EACd,WAAW,GACT,gRACA,SACI,oCACA,iDACN;EAEC;CACK,CAAA;AAEZ"}
|
|
@@ -6,35 +6,35 @@ react = require_chunk.__toESM(react);
|
|
|
6
6
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
7
7
|
let class_variance_authority = require("class-variance-authority");
|
|
8
8
|
let cnfast = require("cnfast");
|
|
9
|
-
//#region src/components/
|
|
10
|
-
const
|
|
9
|
+
//#region src/components/entity-card.tsx
|
|
10
|
+
const EntityCard = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
11
11
|
className: (0, cnfast.cn)("flex flex-col overflow-hidden rounded-lg border border-gray bg-(--spark-background)", className),
|
|
12
12
|
...rest
|
|
13
13
|
});
|
|
14
|
-
const
|
|
14
|
+
const EntityCardBody = ({ className, active, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
15
15
|
type: "button",
|
|
16
16
|
className: (0, cnfast.cn)("flex w-full cursor-pointer flex-col gap-3 p-4 text-left transition-colors hover:bg-gray-a2 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus", active && "bg-linear-to-br from-spark-9/10 to-spark-1/5 to-20%", className),
|
|
17
17
|
...rest
|
|
18
18
|
});
|
|
19
|
-
const
|
|
19
|
+
const EntityCardHeader = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
20
20
|
className: (0, cnfast.cn)("flex w-full items-center gap-3", className),
|
|
21
21
|
...rest
|
|
22
22
|
});
|
|
23
|
-
const
|
|
23
|
+
const EntityCardMeters = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
24
24
|
className: (0, cnfast.cn)("flex flex-col gap-2 border-t border-gray pt-3", className),
|
|
25
25
|
...rest
|
|
26
26
|
});
|
|
27
27
|
const iconToneVariants = (0, class_variance_authority.cva)("flex size-11 shrink-0 items-center justify-center rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))]", {
|
|
28
28
|
variants: { tone: {
|
|
29
|
-
success: "bg-
|
|
30
|
-
warning: "bg-
|
|
31
|
-
error: "bg-
|
|
32
|
-
accent: "bg-
|
|
29
|
+
success: "bg-success-soft text-success-soft-foreground",
|
|
30
|
+
warning: "bg-warning-soft text-warning-soft-foreground",
|
|
31
|
+
error: "bg-error-soft text-error-soft-foreground",
|
|
32
|
+
accent: "bg-primary-soft text-primary-soft-foreground",
|
|
33
33
|
neutral: "bg-base-gray-soft text-gray"
|
|
34
34
|
} },
|
|
35
35
|
defaultVariants: { tone: "neutral" }
|
|
36
36
|
});
|
|
37
|
-
const
|
|
37
|
+
const EntityCardIcon = ({ className, icon: Glyph, tone, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
38
38
|
className: iconToneVariants({
|
|
39
39
|
tone,
|
|
40
40
|
className
|
|
@@ -42,11 +42,11 @@ const DeviceCardIcon = ({ className, icon: Glyph, tone, ...rest }) => /* @__PURE
|
|
|
42
42
|
...rest,
|
|
43
43
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Glyph, { className: "[--spark-icon-size:18px]" })
|
|
44
44
|
});
|
|
45
|
-
const
|
|
45
|
+
const EntityCardTitleColumn = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
46
46
|
className: (0, cnfast.cn)("flex min-w-0 flex-1 flex-col gap-0.5", className),
|
|
47
47
|
...rest
|
|
48
48
|
});
|
|
49
|
-
const
|
|
49
|
+
const EntityCardTitle = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
50
50
|
className: (0, cnfast.cn)("truncate text-sm font-bold text-gray", className),
|
|
51
51
|
...rest
|
|
52
52
|
});
|
|
@@ -65,12 +65,12 @@ const dotToneVariants = (0, class_variance_authority.cva)("size-1.5 shrink-0 rou
|
|
|
65
65
|
success: "bg-base-success-solid",
|
|
66
66
|
warning: "bg-base-warning-solid",
|
|
67
67
|
error: "bg-base-error-solid",
|
|
68
|
-
accent: "bg-
|
|
68
|
+
accent: "bg-primary",
|
|
69
69
|
neutral: "bg-base-gray-solid"
|
|
70
70
|
} },
|
|
71
71
|
defaultVariants: { tone: "neutral" }
|
|
72
72
|
});
|
|
73
|
-
const
|
|
73
|
+
const EntityCardState = ({ className, tone, children, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
74
74
|
className: stateToneVariants({
|
|
75
75
|
tone,
|
|
76
76
|
className
|
|
@@ -81,34 +81,34 @@ const DeviceCardState = ({ className, tone, children, ...rest }) => /* @__PURE__
|
|
|
81
81
|
children
|
|
82
82
|
})]
|
|
83
83
|
});
|
|
84
|
-
const
|
|
84
|
+
const EntityCardDetail = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
85
85
|
className: (0, cnfast.cn)("truncate text-xs text-gray-light tabular-nums", className),
|
|
86
86
|
...rest
|
|
87
87
|
});
|
|
88
|
-
const
|
|
88
|
+
const EntityCardValue = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
89
89
|
className: (0, cnfast.cn)("ms-2 shrink-0 self-center text-lg leading-tight font-bold text-gray tabular-nums", className),
|
|
90
90
|
...rest
|
|
91
91
|
});
|
|
92
|
-
const
|
|
92
|
+
const EntityCardControls = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
93
93
|
className: (0, cnfast.cn)("flex items-center gap-3 border-t border-gray bg-base-gray-surface px-4 py-3", className),
|
|
94
94
|
...rest
|
|
95
95
|
});
|
|
96
|
-
const
|
|
96
|
+
const EntityCardFooter = ({ className, ...rest }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
97
97
|
className: (0, cnfast.cn)("flex items-center justify-center gap-1.5 border-t border-gray bg-base-gray-surface px-4 py-2 text-xs text-gray-light", className),
|
|
98
98
|
...rest
|
|
99
99
|
});
|
|
100
100
|
//#endregion
|
|
101
|
-
exports.
|
|
102
|
-
exports.
|
|
103
|
-
exports.
|
|
104
|
-
exports.
|
|
105
|
-
exports.
|
|
106
|
-
exports.
|
|
107
|
-
exports.
|
|
108
|
-
exports.
|
|
109
|
-
exports.
|
|
110
|
-
exports.
|
|
111
|
-
exports.
|
|
112
|
-
exports.
|
|
101
|
+
exports.EntityCard = EntityCard;
|
|
102
|
+
exports.EntityCardBody = EntityCardBody;
|
|
103
|
+
exports.EntityCardControls = EntityCardControls;
|
|
104
|
+
exports.EntityCardDetail = EntityCardDetail;
|
|
105
|
+
exports.EntityCardFooter = EntityCardFooter;
|
|
106
|
+
exports.EntityCardHeader = EntityCardHeader;
|
|
107
|
+
exports.EntityCardIcon = EntityCardIcon;
|
|
108
|
+
exports.EntityCardMeters = EntityCardMeters;
|
|
109
|
+
exports.EntityCardState = EntityCardState;
|
|
110
|
+
exports.EntityCardTitle = EntityCardTitle;
|
|
111
|
+
exports.EntityCardTitleColumn = EntityCardTitleColumn;
|
|
112
|
+
exports.EntityCardValue = EntityCardValue;
|
|
113
113
|
|
|
114
|
-
//# sourceMappingURL=
|
|
114
|
+
//# sourceMappingURL=entity-card.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-card.cjs","names":[],"sources":["../../src/components/entity-card.tsx"],"sourcesContent":["import type { SparkIcon } from '@epilot/spark-icons'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport type { Tone } from '../lib/tones'\nimport { cn } from '../utils/cn'\n\nconst EntityCard = ({ className, ...rest }: React.ComponentProps<'div'>) => (\n <div\n className={cn(\n 'flex flex-col overflow-hidden rounded-lg border border-gray bg-(--spark-background)',\n className,\n )}\n {...rest}\n />\n)\n\nconst EntityCardBody = ({\n className,\n active,\n ...rest\n}: React.ComponentProps<'button'> & { active?: boolean }) => (\n <button\n type=\"button\"\n className={cn(\n 'flex w-full cursor-pointer flex-col gap-3 p-4 text-left transition-colors hover:bg-gray-a2 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-accent-focus',\n active && 'bg-linear-to-br from-spark-9/10 to-spark-1/5 to-20%',\n className,\n )}\n {...rest}\n />\n)\n\nconst EntityCardHeader = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => (\n <div className={cn('flex w-full items-center gap-3', className)} {...rest} />\n)\n\nconst EntityCardMeters = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => (\n <div\n className={cn('flex flex-col gap-2 border-t border-gray pt-3', className)}\n {...rest}\n />\n)\n\nconst iconToneVariants = cva(\n // max() pill escape (matches Icon): a tile stays rounded-md at low Roundness but\n // becomes a circle at large/full, same as it did pre-harmonization via clamping.\n 'flex size-11 shrink-0 items-center justify-center rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))]',\n {\n variants: {\n tone: {\n success: 'bg-success-soft text-success-soft-foreground',\n warning: 'bg-warning-soft text-warning-soft-foreground',\n error: 'bg-error-soft text-error-soft-foreground',\n accent: 'bg-primary-soft text-primary-soft-foreground',\n neutral: 'bg-base-gray-soft text-gray',\n },\n },\n defaultVariants: { tone: 'neutral' },\n },\n)\n\nconst EntityCardIcon = ({\n className,\n icon: Glyph,\n tone,\n ...rest\n}: React.ComponentProps<'span'> & {\n icon: SparkIcon\n tone?: Tone\n}) => (\n <span className={iconToneVariants({ tone, className })} {...rest}>\n <Glyph className=\"[--spark-icon-size:18px]\" />\n </span>\n)\n\nconst EntityCardTitleColumn = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => (\n <div\n className={cn('flex min-w-0 flex-1 flex-col gap-0.5', className)}\n {...rest}\n />\n)\n\nconst EntityCardTitle = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => (\n <span\n className={cn('truncate text-sm font-bold text-gray', className)}\n {...rest}\n />\n)\n\nconst stateToneVariants = cva(\n 'inline-flex items-center gap-1.5 text-xs font-medium',\n {\n variants: {\n tone: {\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n accent: 'text-accent',\n neutral: 'text-gray-light',\n },\n },\n defaultVariants: { tone: 'neutral' },\n },\n)\n\nconst dotToneVariants = cva('size-1.5 shrink-0 rounded-full', {\n variants: {\n tone: {\n success: 'bg-base-success-solid',\n warning: 'bg-base-warning-solid',\n error: 'bg-base-error-solid',\n accent: 'bg-primary',\n neutral: 'bg-base-gray-solid',\n },\n },\n defaultVariants: { tone: 'neutral' },\n})\n\nconst EntityCardState = ({\n className,\n tone,\n children,\n ...rest\n}: React.ComponentProps<'span'> & { tone?: Tone }) => (\n <span className={stateToneVariants({ tone, className })} {...rest}>\n <span className={dotToneVariants({ tone })} />\n <span className=\"truncate\">{children}</span>\n </span>\n)\n\nconst EntityCardDetail = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => (\n <span\n className={cn('truncate text-xs text-gray-light tabular-nums', className)}\n {...rest}\n />\n)\n\nconst EntityCardValue = ({\n className,\n ...rest\n}: React.ComponentProps<'span'>) => (\n <span\n className={cn(\n 'ms-2 shrink-0 self-center text-lg leading-tight font-bold text-gray tabular-nums',\n className,\n )}\n {...rest}\n />\n)\n\nconst EntityCardControls = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => (\n <div\n className={cn(\n 'flex items-center gap-3 border-t border-gray bg-base-gray-surface px-4 py-3',\n className,\n )}\n {...rest}\n />\n)\n\nconst EntityCardFooter = ({\n className,\n ...rest\n}: React.ComponentProps<'div'>) => (\n <div\n className={cn(\n 'flex items-center justify-center gap-1.5 border-t border-gray bg-base-gray-surface px-4 py-2 text-xs text-gray-light',\n className,\n )}\n {...rest}\n />\n)\n\nexport {\n EntityCard,\n EntityCardBody,\n EntityCardControls,\n EntityCardDetail,\n EntityCardFooter,\n EntityCardHeader,\n EntityCardIcon,\n EntityCardMeters,\n EntityCardState,\n EntityCardTitle,\n EntityCardTitleColumn,\n EntityCardValue,\n}\n"],"mappings":";;;;;;;;;AAMA,MAAM,cAAc,EAAE,WAAW,GAAG,WAClC,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,uFACA,SACF;CACA,GAAI;AACL,CAAA;AAGH,MAAM,kBAAkB,EACtB,WACA,QACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,UAAD;CACE,MAAK;CACL,YAAA,GAAA,OAAA,IACE,yLACA,UAAU,uDACV,SACF;CACA,GAAI;AACL,CAAA;AAGH,MAAM,oBAAoB,EACxB,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,OAAD;CAAK,YAAA,GAAA,OAAA,IAAc,kCAAkC,SAAS;CAAG,GAAI;AAAO,CAAA;AAG9E,MAAM,oBAAoB,EACxB,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IAAc,iDAAiD,SAAS;CACxE,GAAI;AACL,CAAA;AAGH,MAAM,oBAAA,GAAA,yBAAA,KAGJ,sHACA;CACE,UAAU,EACR,MAAM;EACJ,SAAS;EACT,SAAS;EACT,OAAO;EACP,QAAQ;EACR,SAAS;CACX,EACF;CACA,iBAAiB,EAAE,MAAM,UAAU;AACrC,CACF;AAEA,MAAM,kBAAkB,EACtB,WACA,MAAM,OACN,MACA,GAAG,WAKH,iBAAA,GAAA,kBAAA,KAAC,QAAD;CAAM,WAAW,iBAAiB;EAAE;EAAM;CAAU,CAAC;CAAG,GAAI;WAC1D,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAO,WAAU,2BAA4B,CAAA;AACzC,CAAA;AAGR,MAAM,yBAAyB,EAC7B,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IAAc,wCAAwC,SAAS;CAC/D,GAAI;AACL,CAAA;AAGH,MAAM,mBAAmB,EACvB,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,QAAD;CACE,YAAA,GAAA,OAAA,IAAc,wCAAwC,SAAS;CAC/D,GAAI;AACL,CAAA;AAGH,MAAM,qBAAA,GAAA,yBAAA,KACJ,wDACA;CACE,UAAU,EACR,MAAM;EACJ,SAAS;EACT,SAAS;EACT,OAAO;EACP,QAAQ;EACR,SAAS;CACX,EACF;CACA,iBAAiB,EAAE,MAAM,UAAU;AACrC,CACF;AAEA,MAAM,mBAAA,GAAA,yBAAA,KAAsB,kCAAkC;CAC5D,UAAU,EACR,MAAM;EACJ,SAAS;EACT,SAAS;EACT,OAAO;EACP,QAAQ;EACR,SAAS;CACX,EACF;CACA,iBAAiB,EAAE,MAAM,UAAU;AACrC,CAAC;AAED,MAAM,mBAAmB,EACvB,WACA,MACA,UACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,MAAC,QAAD;CAAM,WAAW,kBAAkB;EAAE;EAAM;CAAU,CAAC;CAAG,GAAI;WAA7D,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAM,WAAW,gBAAgB,EAAE,KAAK,CAAC,EAAI,CAAA,GAC7C,iBAAA,GAAA,kBAAA,KAAC,QAAD;EAAM,WAAU;EAAY;CAAe,CAAA,CACvC;;AAGR,MAAM,oBAAoB,EACxB,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,QAAD;CACE,YAAA,GAAA,OAAA,IAAc,iDAAiD,SAAS;CACxE,GAAI;AACL,CAAA;AAGH,MAAM,mBAAmB,EACvB,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,QAAD;CACE,YAAA,GAAA,OAAA,IACE,oFACA,SACF;CACA,GAAI;AACL,CAAA;AAGH,MAAM,sBAAsB,EAC1B,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,+EACA,SACF;CACA,GAAI;AACL,CAAA;AAGH,MAAM,oBAAoB,EACxB,WACA,GAAG,WAEH,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,OAAA,IACE,wHACA,SACF;CACA,GAAI;AACL,CAAA"}
|