@q2devel/q2-storybook 1.0.143 → 1.0.145
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/MIKS/ScheduleDetail/ScheduleDetail.d.ts +28 -0
- package/dist/components/MIKS/ScheduleDetail/ScheduleDetail.js +18 -0
- package/dist/components/MIKS/date-carousel/DateCarousel.d.ts +19 -0
- package/dist/components/MIKS/date-carousel/DateCarousel.js +264 -0
- package/dist/components/MIKS/event-card/EventCard.d.ts +32 -0
- package/dist/components/MIKS/event-card/EventCard.js +18 -0
- package/dist/components/MIKS/filters/FilterContainer.d.ts +12 -0
- package/dist/components/MIKS/filters/FilterContainer.js +9 -0
- package/dist/components/MIKS/filters/FilterGrid.d.ts +14 -0
- package/dist/components/MIKS/filters/FilterGrid.js +16 -0
- package/dist/components/MIKS/filters/FilterType.d.ts +19 -0
- package/dist/components/MIKS/filters/FilterType.js +42 -0
- package/dist/components/MIKS/filters/FilterWhen.d.ts +23 -0
- package/dist/components/MIKS/filters/FilterWhen.js +94 -0
- package/dist/components/MIKS/filters/FilterWhere.d.ts +19 -0
- package/dist/components/MIKS/filters/FilterWhere.js +39 -0
- package/dist/components/MIKS/filters/index.d.ts +7 -0
- package/dist/components/MIKS/filters/index.js +6 -0
- package/dist/components/MIKS/filters/types.d.ts +35 -0
- package/dist/components/MIKS/filters/types.js +4 -0
- package/dist/components/MIKS/filters/useFilters.d.ts +15 -0
- package/dist/components/MIKS/filters/useFilters.js +38 -0
- package/dist/components/MIKS/footer/Footer.d.ts +39 -0
- package/dist/components/MIKS/footer/Footer.js +18 -0
- package/dist/components/MIKS/index.d.ts +21 -0
- package/dist/components/MIKS/index.js +18 -0
- package/dist/components/MIKS/movie-detail/MovieDetail.d.ts +61 -0
- package/dist/components/MIKS/movie-detail/MovieDetail.js +38 -0
- package/dist/components/MIKS/navbar/NavBar.d.ts +40 -0
- package/dist/components/MIKS/navbar/NavBar.js +12 -0
- package/dist/components/MIKS/theatre-event/TheatreEvent.d.ts +33 -0
- package/dist/components/MIKS/theatre-event/TheatreEvent.js +20 -0
- package/dist/components/Web/ScheduleDetail/ScheduleDetail.d.ts +28 -0
- package/dist/components/Web/ScheduleDetail/ScheduleDetail.js +18 -0
- package/dist/components/Web/dynamic-grid/DynamicLayout.js +4 -4
- package/dist/components/Web/event-card/EventCard.d.ts +30 -0
- package/dist/components/Web/event-card/EventCard.js +18 -0
- package/dist/components/Web/event-card-horizontal/EventCardHorizontal.d.ts +30 -0
- package/dist/components/Web/event-card-horizontal/EventCardHorizontal.js +24 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +8 -0
- package/dist/style.css +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type ScheduleDetailProps = {
|
|
2
|
+
/** Main title */
|
|
3
|
+
title: string;
|
|
4
|
+
/** Short description under the title */
|
|
5
|
+
description?: string;
|
|
6
|
+
/** Formatted weekday+date, e.g. "pá 16/5" */
|
|
7
|
+
weekdayDate?: string;
|
|
8
|
+
/** Time string */
|
|
9
|
+
time?: string;
|
|
10
|
+
/** Location string */
|
|
11
|
+
location?: string;
|
|
12
|
+
/** Optional header image URL */
|
|
13
|
+
imageUrl?: string;
|
|
14
|
+
/** Alt text for the image */
|
|
15
|
+
imageAlt?: string;
|
|
16
|
+
/** Additional CSS classes */
|
|
17
|
+
className?: string;
|
|
18
|
+
/** Optional tags like "české titulky", "2D" */
|
|
19
|
+
tags?: string[];
|
|
20
|
+
/** Primary action button text (e.g., VSTUPENKY) */
|
|
21
|
+
buttonText?: string;
|
|
22
|
+
/** Primary action handler */
|
|
23
|
+
onButtonClick?: () => void;
|
|
24
|
+
/** Primary action button classes */
|
|
25
|
+
buttonClassName?: string;
|
|
26
|
+
};
|
|
27
|
+
export declare const ScheduleDetail: ({ title, description, weekdayDate, time, location, imageUrl, imageAlt, className, tags, buttonText, onButtonClick, buttonClassName, }: ScheduleDetailProps) => import("react/jsx-runtime").JSX.Element;
|
|
28
|
+
export default ScheduleDetail;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from '../../../index';
|
|
4
|
+
import { buildClassesByJoining } from '../../../utils/StyleHelper';
|
|
5
|
+
export const ScheduleDetail = ({ title, description, weekdayDate, time, location, imageUrl, imageAlt = 'Schedule image', className, tags, buttonText, onButtonClick, buttonClassName, }) => {
|
|
6
|
+
return (_jsxs("section", { className: buildClassesByJoining('w-full flex flex-col md:flex-row md:flex-wrap xl:flex-nowrap md:items-center md:justify-between',
|
|
7
|
+
// spacing tuned to Figma feel
|
|
8
|
+
'px-5.5 py-2.5 xl:px-6.25 md:py-10 gap-2.5 xl:gap-16.25 lg:border-b lg:border-primary-black', className), children: [_jsxs("div", { className: 'flex flex-col md:flex-row gap-2.5 md:gap-8 xl:gap-16.25 md:items-center', children: [_jsxs("div", { className: "flex flex-col gap-2.5 md:gap-6 md:min-w-[140px] xl:min-w-56", children: [weekdayDate && (_jsx("div", { className: "text-primary-black text-lg md:text-2xl font-semibold leading-none", children: weekdayDate })), time && (_jsx("div", { className: "text-primary-black text-lg md:text-2xl font-semibold leading-none", children: time })), location && (_jsx("div", { className: "text-primary-black text-lg md:text-2xl font-semibold leading-none", children: location }))] }), imageUrl && (_jsx("div", { className: "w-full md:w-auto flex justify-center md:justify-end xl:justify-center", children: _jsx("img", { src: imageUrl, alt: imageAlt, className: "h-44 w-full max-w-[560px] object-cover md:h-39.5 md:w-65.25 rounded" }) })), _jsxs("div", { className: "flex-1 w-full lg:w-66 xl:w-75 md:max-w-[520px]", children: [_jsx("h2", { className: "text-primary-black text-lg md:text-2xl font-semibold leading-tight", children: title }), tags && tags.length > 0 && (_jsx("div", { className: "mt-2.5 md:mt-6 flex flex-wrap gap-8 text-primary-grey", children: tags.map((t) => (_jsx("span", { className: "pb-1 border-b-2 border-primary-grey/40 leading-none text-sm md:text-base", children: t }, t))) })), description && (_jsx("p", { className: "mt-1.25 md:mt-6 text-primary-grey text-sm md:text-base leading-7 md:leading-8 max-w-[50ch]", children: description }))] })] }), buttonText && (_jsx("div", { className: "order-last md:order-none shrink-0 w-full lg:w-auto", children: _jsx(Button, { onClick: () => onButtonClick?.(), rounded: "none", className: buttonClassName, children: buttonText }) }))] }));
|
|
9
|
+
};
|
|
10
|
+
export default ScheduleDetail;
|
|
11
|
+
// Local SVG icons for metadata display
|
|
12
|
+
const CalendarIcon = () => (_jsx("svg", { width: "20", height: "20", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M20.8333 3.125H18.75V1.04167C18.75 0.466667 18.2833 0 17.7083 0H16.6667C16.0917 0 15.625 0.466667 15.625 1.04167V3.125H9.375V1.04167C9.375 0.466667 8.90833 0 8.33333 0H7.29167C6.71667 0 6.25 0.466667 6.25 1.04167V3.125H4.16667C2.325 3.125 0.833333 4.61667 0.833333 6.45833V20.8333C0.833333 22.675 2.325 24.1667 4.16667 24.1667H20.8333C22.675 24.1667 24.1667 22.675 24.1667 20.8333V6.45833C24.1667 4.61667 22.675 3.125 20.8333 3.125ZM22.9167 20.8333C22.9167 21.6917 22.1917 22.4167 21.3333 22.4167H4.16667C3.30833 22.4167 2.58333 21.6917 2.58333 20.8333V10.4167H22.9167V20.8333ZM22.9167 8.33333H2.58333V6.45833C2.58333 5.6 3.30833 4.875 4.16667 4.875H6.25V6.45833C6.25 7.03333 6.71667 7.5 7.29167 7.5H8.33333C8.90833 7.5 9.375 7.03333 9.375 6.45833V4.875H15.625V6.45833C15.625 7.03333 16.0917 7.5 16.6667 7.5H17.7083C18.2833 7.5 18.75 7.03333 18.75 6.45833V4.875H20.8333C21.6917 4.875 22.4167 5.6 22.4167 6.45833V8.33333H22.9167Z", fill: "white" }) }));
|
|
13
|
+
const ClockIcon = () => (_jsx("svg", { width: "20", height: "20", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.5 0C5.6 0 0 5.6 0 12.5C0 19.4 5.6 25 12.5 25C19.4 25 25 19.4 25 12.5C25 5.6 19.4 0 12.5 0ZM12.5 22.9167C6.975 22.9167 2.08333 18.025 2.08333 12.5C2.08333 6.975 6.975 2.08333 12.5 2.08333C18.025 2.08333 22.9167 6.975 22.9167 12.5C22.9167 18.025 18.025 22.9167 12.5 22.9167ZM13.5417 6.25H11.4583V13.5417L17.7083 16.6667L18.75 14.7917L13.5417 12.5V6.25Z", fill: "white" }) }));
|
|
14
|
+
const LocationIcon = () => (_jsx("svg", { width: "20", height: "20", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.5 0C7.80833 0 4.16667 3.64167 4.16667 8.33333C4.16667 14.5833 12.5 25 12.5 25S20.8333 14.5833 20.8333 8.33333C20.8333 3.64167 17.1917 0 12.5 0ZM12.5 11.4583C11.1417 11.4583 10.0417 10.3583 10.0417 8.33333C10.0417 6.30833 11.1417 5.20833 12.5 5.20833C13.8583 5.20833 14.9583 6.30833 14.9583 8.33333C14.9583 10.3583 13.8583 11.4583 12.5 11.4583Z", fill: "white" }) }));
|
|
15
|
+
// Local button to mirror "VSTUPENKY" style
|
|
16
|
+
const ActionButton = ({ label, onClick }) => (_jsx("button", { type: "button", onClick: onClick, className: buildClassesByJoining(
|
|
17
|
+
// mobile: full-width, desktop: auto width; flat corners to match visual
|
|
18
|
+
'w-full md:w-auto px-8 py-3 md:px-10 md:py-3.5', 'bg-[#E9A8A8] text-white font-semibold tracking-wide hover:opacity-90 transition', 'rounded-none md:rounded'), children: label }));
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type DateCarouselProps = {
|
|
2
|
+
/** Array of dates to display */
|
|
3
|
+
dates: Date[];
|
|
4
|
+
/** Currently selected date */
|
|
5
|
+
selectedDate?: Date | null;
|
|
6
|
+
/** Callback when date selection changes */
|
|
7
|
+
onChange?: (date: Date) => void;
|
|
8
|
+
/** Additional CSS classes */
|
|
9
|
+
className?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Formatters allow full control over displayed labels.
|
|
12
|
+
* Defaults follow the Czech format: day abbreviation and D/M.
|
|
13
|
+
*/
|
|
14
|
+
formatDayLabel?: (date: Date) => string;
|
|
15
|
+
formatDateLabel?: (date: Date) => string;
|
|
16
|
+
/** Amount of items to advance on prev/next. Defaults to 1. */
|
|
17
|
+
pageSize?: number;
|
|
18
|
+
};
|
|
19
|
+
export default function DateCarousel(props: DateCarouselProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState, } from "react";
|
|
4
|
+
function defaultFormatDayLabel(date) {
|
|
5
|
+
// Czech abbreviations: po, út, st, čt, pá, so, ne
|
|
6
|
+
const map = ["ne", "po", "út", "st", "čt", "pá", "so"]; // JS: 0=Sun
|
|
7
|
+
return map[date.getDay()];
|
|
8
|
+
}
|
|
9
|
+
function defaultFormatDateLabel(date) {
|
|
10
|
+
return `${date.getDate()}/${date.getMonth() + 1}`;
|
|
11
|
+
}
|
|
12
|
+
function isSameDay(a, b) {
|
|
13
|
+
if (!a || !b)
|
|
14
|
+
return false;
|
|
15
|
+
return (a.getFullYear() === b.getFullYear() &&
|
|
16
|
+
a.getMonth() === b.getMonth() &&
|
|
17
|
+
a.getDate() === b.getDate());
|
|
18
|
+
}
|
|
19
|
+
export default function DateCarousel(props) {
|
|
20
|
+
const { dates, selectedDate: selectedDateProp = null, onChange, className, formatDayLabel = defaultFormatDayLabel, formatDateLabel = defaultFormatDateLabel, pageSize = 1, } = props;
|
|
21
|
+
const [selectedDate, setSelectedDate] = useState(selectedDateProp);
|
|
22
|
+
const [visibleItems, setVisibleItems] = useState(new Set());
|
|
23
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
24
|
+
// Initialize all items as visible when dates change
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
setVisibleItems(new Set(dates.map((_, index) => index)));
|
|
27
|
+
}, [dates]);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
setSelectedDate(selectedDateProp ?? null);
|
|
30
|
+
}, [selectedDateProp]);
|
|
31
|
+
const containerRef = useRef(null);
|
|
32
|
+
const itemRefs = useRef([]);
|
|
33
|
+
// Intersection Observer to track which items are fully visible
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const container = containerRef.current;
|
|
36
|
+
if (!container)
|
|
37
|
+
return;
|
|
38
|
+
const observer = new IntersectionObserver((entries) => {
|
|
39
|
+
setVisibleItems((prev) => {
|
|
40
|
+
const newSet = new Set(prev);
|
|
41
|
+
entries.forEach((entry) => {
|
|
42
|
+
const index = parseInt(entry.target.getAttribute("data-index") || "0");
|
|
43
|
+
if (entry.intersectionRatio === 1) {
|
|
44
|
+
newSet.add(index);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
newSet.delete(index);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
return newSet;
|
|
51
|
+
});
|
|
52
|
+
}, {
|
|
53
|
+
root: container,
|
|
54
|
+
threshold: [0, 0.1, 0.5, 0.9, 1.0],
|
|
55
|
+
rootMargin: "0px",
|
|
56
|
+
});
|
|
57
|
+
const observeItems = () => {
|
|
58
|
+
itemRefs.current.forEach((item, index) => {
|
|
59
|
+
if (item) {
|
|
60
|
+
item.setAttribute("data-index", index.toString());
|
|
61
|
+
observer.observe(item);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
const timeoutId = setTimeout(observeItems, 100);
|
|
66
|
+
return () => {
|
|
67
|
+
clearTimeout(timeoutId);
|
|
68
|
+
observer.disconnect();
|
|
69
|
+
};
|
|
70
|
+
}, [dates]);
|
|
71
|
+
const isPointerDownRef = useRef(false);
|
|
72
|
+
const pointerStartXRef = useRef(0);
|
|
73
|
+
const scrollStartLeftRef = useRef(0);
|
|
74
|
+
const didDragRef = useRef(false);
|
|
75
|
+
const handleSelect = useCallback((date, index) => {
|
|
76
|
+
setSelectedDate(date);
|
|
77
|
+
onChange?.(date);
|
|
78
|
+
setIsDragging(true);
|
|
79
|
+
setVisibleItems(new Set(dates.map((_, index) => index)));
|
|
80
|
+
itemRefs.current[index]?.scrollIntoView({
|
|
81
|
+
inline: "center",
|
|
82
|
+
block: "nearest",
|
|
83
|
+
behavior: "smooth",
|
|
84
|
+
});
|
|
85
|
+
setTimeout(() => {
|
|
86
|
+
setIsDragging(false);
|
|
87
|
+
setTimeout(() => {
|
|
88
|
+
if (containerRef.current) {
|
|
89
|
+
const container = containerRef.current;
|
|
90
|
+
const observer = new IntersectionObserver((entries) => {
|
|
91
|
+
setVisibleItems((prev) => {
|
|
92
|
+
const newSet = new Set(prev);
|
|
93
|
+
entries.forEach((entry) => {
|
|
94
|
+
const index = parseInt(entry.target.getAttribute("data-index") || "0");
|
|
95
|
+
if (entry.intersectionRatio === 1) {
|
|
96
|
+
newSet.add(index);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
newSet.delete(index);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return newSet;
|
|
103
|
+
});
|
|
104
|
+
}, {
|
|
105
|
+
root: container,
|
|
106
|
+
threshold: [0, 0.1, 0.5, 0.9, 1.0],
|
|
107
|
+
rootMargin: "0px",
|
|
108
|
+
});
|
|
109
|
+
itemRefs.current.forEach((item, index) => {
|
|
110
|
+
if (item) {
|
|
111
|
+
item.setAttribute("data-index", index.toString());
|
|
112
|
+
observer.observe(item);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
setTimeout(() => observer.disconnect(), 1000);
|
|
116
|
+
}
|
|
117
|
+
}, 300);
|
|
118
|
+
}, 100);
|
|
119
|
+
}, [onChange, dates]);
|
|
120
|
+
const selectedIndex = useMemo(() => {
|
|
121
|
+
if (!selectedDate)
|
|
122
|
+
return -1;
|
|
123
|
+
return dates.findIndex((d) => isSameDay(d, selectedDate));
|
|
124
|
+
}, [dates, selectedDate]);
|
|
125
|
+
const pageBy = useCallback((direction) => {
|
|
126
|
+
const base = selectedIndex >= 0 ? selectedIndex : 0;
|
|
127
|
+
const nextIndex = Math.min(Math.max(base + direction * pageSize, 0), dates.length - 1);
|
|
128
|
+
const next = dates[nextIndex];
|
|
129
|
+
if (next) {
|
|
130
|
+
handleSelect(next, nextIndex);
|
|
131
|
+
}
|
|
132
|
+
}, [dates, selectedIndex, pageSize, handleSelect]);
|
|
133
|
+
const onKeyDown = useCallback((e) => {
|
|
134
|
+
if (dates.length === 0)
|
|
135
|
+
return;
|
|
136
|
+
const current = selectedIndex >= 0 ? selectedIndex : 0;
|
|
137
|
+
if (e.key === "ArrowRight") {
|
|
138
|
+
e.preventDefault();
|
|
139
|
+
const nextIndex = Math.min(current + 1, dates.length - 1);
|
|
140
|
+
handleSelect(dates[nextIndex], nextIndex);
|
|
141
|
+
}
|
|
142
|
+
else if (e.key === "ArrowLeft") {
|
|
143
|
+
e.preventDefault();
|
|
144
|
+
const nextIndex = Math.max(current - 1, 0);
|
|
145
|
+
handleSelect(dates[nextIndex], nextIndex);
|
|
146
|
+
}
|
|
147
|
+
else if (e.key === "Home") {
|
|
148
|
+
e.preventDefault();
|
|
149
|
+
handleSelect(dates[0], 0);
|
|
150
|
+
}
|
|
151
|
+
else if (e.key === "End") {
|
|
152
|
+
e.preventDefault();
|
|
153
|
+
handleSelect(dates[dates.length - 1], dates.length - 1);
|
|
154
|
+
}
|
|
155
|
+
else if (e.key === "PageUp") {
|
|
156
|
+
e.preventDefault();
|
|
157
|
+
pageBy(-1);
|
|
158
|
+
}
|
|
159
|
+
else if (e.key === "PageDown") {
|
|
160
|
+
e.preventDefault();
|
|
161
|
+
pageBy(1);
|
|
162
|
+
}
|
|
163
|
+
}, [dates, selectedIndex, handleSelect, pageBy]);
|
|
164
|
+
const onPointerDown = useCallback((e) => {
|
|
165
|
+
const el = containerRef.current;
|
|
166
|
+
if (!el)
|
|
167
|
+
return;
|
|
168
|
+
isPointerDownRef.current = true;
|
|
169
|
+
pointerStartXRef.current = e.clientX;
|
|
170
|
+
scrollStartLeftRef.current = el.scrollLeft;
|
|
171
|
+
didDragRef.current = false;
|
|
172
|
+
setIsDragging(true);
|
|
173
|
+
setVisibleItems(new Set(dates.map((_, index) => index)));
|
|
174
|
+
}, [dates]);
|
|
175
|
+
const onPointerMove = useCallback((e) => {
|
|
176
|
+
if (!isPointerDownRef.current)
|
|
177
|
+
return;
|
|
178
|
+
const el = containerRef.current;
|
|
179
|
+
if (!el)
|
|
180
|
+
return;
|
|
181
|
+
const dx = e.clientX - pointerStartXRef.current;
|
|
182
|
+
if (Math.abs(dx) > 3 && !didDragRef.current) {
|
|
183
|
+
didDragRef.current = true;
|
|
184
|
+
el.style.scrollBehavior = "auto";
|
|
185
|
+
el.setPointerCapture?.(e.pointerId);
|
|
186
|
+
}
|
|
187
|
+
if (didDragRef.current) {
|
|
188
|
+
el.scrollLeft = scrollStartLeftRef.current - dx;
|
|
189
|
+
e.preventDefault();
|
|
190
|
+
}
|
|
191
|
+
}, []);
|
|
192
|
+
const endDrag = useCallback((e) => {
|
|
193
|
+
if (!isPointerDownRef.current)
|
|
194
|
+
return;
|
|
195
|
+
isPointerDownRef.current = false;
|
|
196
|
+
const el = containerRef.current;
|
|
197
|
+
if (!el)
|
|
198
|
+
return;
|
|
199
|
+
if (didDragRef.current) {
|
|
200
|
+
el.releasePointerCapture?.(e.pointerId);
|
|
201
|
+
}
|
|
202
|
+
el.style.scrollBehavior = "";
|
|
203
|
+
setIsDragging(false);
|
|
204
|
+
setTimeout(() => {
|
|
205
|
+
if (containerRef.current) {
|
|
206
|
+
const container = containerRef.current;
|
|
207
|
+
const observer = new IntersectionObserver((entries) => {
|
|
208
|
+
setVisibleItems((prev) => {
|
|
209
|
+
const newSet = new Set(prev);
|
|
210
|
+
entries.forEach((entry) => {
|
|
211
|
+
const index = parseInt(entry.target.getAttribute("data-index") || "0");
|
|
212
|
+
if (entry.intersectionRatio === 1) {
|
|
213
|
+
newSet.add(index);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
newSet.delete(index);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
return newSet;
|
|
220
|
+
});
|
|
221
|
+
}, {
|
|
222
|
+
root: container,
|
|
223
|
+
threshold: [0, 0.1, 0.5, 0.9, 1.0],
|
|
224
|
+
rootMargin: "0px",
|
|
225
|
+
});
|
|
226
|
+
itemRefs.current.forEach((item, index) => {
|
|
227
|
+
if (item) {
|
|
228
|
+
item.setAttribute("data-index", index.toString());
|
|
229
|
+
observer.observe(item);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
setTimeout(() => observer.disconnect(), 1000);
|
|
233
|
+
}
|
|
234
|
+
}, 100);
|
|
235
|
+
}, []);
|
|
236
|
+
return (_jsxs("div", { className: `bg-[var(--color-secondary-grey-300)] flex items-center justify-between px-4 lg:px-18.75 py-2.5 ${className ?? ""}`, role: "group", "aria-label": "Date carousel", children: [_jsx("button", { type: "button", onClick: () => pageBy(-1), "aria-label": "Previous dates", className: "select-none text-2xl font-semibold leading-7.5 text-[var(--color-primary-black)] mr-3 md:mr-6.25 cursor-pointer", children: "<" }), _jsx("div", { ref: containerRef, className: "flex gap-0 md:gap-4 items-center overflow-x-auto scroll-px-4 snap-x snap-mandatory no-scrollbar select-none cursor-grab active:cursor-grabbing min-w-0", style: {
|
|
237
|
+
scrollbarWidth: "none",
|
|
238
|
+
msOverflowStyle: "none",
|
|
239
|
+
WebkitOverflowScrolling: "touch",
|
|
240
|
+
}, onKeyDown: onKeyDown, onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: endDrag, onPointerCancel: endDrag, onPointerLeave: endDrag, role: "listbox", "aria-orientation": "horizontal", tabIndex: 0, children: dates.map((date, index) => {
|
|
241
|
+
const isSelected = isSameDay(date, selectedDate);
|
|
242
|
+
const dayOfWeek = date.getDay();
|
|
243
|
+
const isSunday = dayOfWeek === 0;
|
|
244
|
+
return (_jsxs(React.Fragment, { children: [isSunday &&
|
|
245
|
+
index < dates.length - 1 &&
|
|
246
|
+
typeof window !== "undefined" &&
|
|
247
|
+
window.innerWidth >= 768 && (_jsx("div", { className: "w-4.5 flex-shrink-0" })), _jsxs("button", { ref: (el) => {
|
|
248
|
+
itemRefs.current[index] = el;
|
|
249
|
+
}, type: "button", role: "option", "aria-selected": isSelected, onClick: () => {
|
|
250
|
+
if (didDragRef.current)
|
|
251
|
+
return;
|
|
252
|
+
handleSelect(date, index);
|
|
253
|
+
}, className: `snap-center px-[5px] py-0 lg:p-[10px] text-center flex flex-col items-center justify-center transition-colors duration-150 min-w-[44px] lg:min-w-[52px] flex-shrink-0 ` +
|
|
254
|
+
(isSelected
|
|
255
|
+
? "bg-primary-grey shadow-sm text-primary-black"
|
|
256
|
+
: "bg-transparent hover:bg-primary-grey group cursor-pointer"), "data-index": index, children: [_jsx("span", { className: `text-[14px] leading-[26px] lg:text-[18px] lg:leading-[28px] transition-colors duration-150 font-semibold ` +
|
|
257
|
+
(isSelected
|
|
258
|
+
? "text-white"
|
|
259
|
+
: "text-primary-grey group-hover:text-white"), children: formatDayLabel(date) }), _jsx("span", { className: `text-[16px] leading-[28px] lg:text-[24px] lg:leading-[30px] transition-colors duration-150 font-semibold ` +
|
|
260
|
+
(isSelected
|
|
261
|
+
? "text-white"
|
|
262
|
+
: "text-primary-black group-hover:text-white"), children: formatDateLabel(date) })] })] }, date.toISOString()));
|
|
263
|
+
}) }), _jsx("button", { type: "button", onClick: () => pageBy(1), "aria-label": "Next dates", className: "select-none text-2xl font-semibold leading-7.5 text-[var(--color-primary-black)] ml-3 md:ml-6.25 cursor-pointer", children: ">" })] }));
|
|
264
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface EventCardProps {
|
|
2
|
+
/** Event image URL */
|
|
3
|
+
imageUrl?: string;
|
|
4
|
+
/** Event image alt text */
|
|
5
|
+
imageAlt?: string;
|
|
6
|
+
/** Event category/type (e.g., "Výstava", "Kino", "Divadlo") */
|
|
7
|
+
category?: string;
|
|
8
|
+
/** Event category icon */
|
|
9
|
+
icon?: string;
|
|
10
|
+
/** Event title */
|
|
11
|
+
title: string;
|
|
12
|
+
/** Event description */
|
|
13
|
+
description: string;
|
|
14
|
+
/** Event date */
|
|
15
|
+
date?: string;
|
|
16
|
+
/** Event time */
|
|
17
|
+
time?: string;
|
|
18
|
+
/** Event location */
|
|
19
|
+
location?: string;
|
|
20
|
+
/** Additional CSS classes */
|
|
21
|
+
className?: string;
|
|
22
|
+
/** Click handler for the card */
|
|
23
|
+
onClick?: () => void;
|
|
24
|
+
/** Button text */
|
|
25
|
+
buttonText?: string;
|
|
26
|
+
/** Button click handler */
|
|
27
|
+
onButtonClick?: () => void;
|
|
28
|
+
/** Button classes */
|
|
29
|
+
buttonClassName?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare const EventCard: ({ imageUrl, imageAlt, category, title, description, date, time, location, className, onClick, buttonText, onButtonClick, buttonClassName, icon, }: EventCardProps) => import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export default EventCard;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import Image from "next/image";
|
|
4
|
+
import { buildClassesByJoining } from "../../../utils/StyleHelper";
|
|
5
|
+
import { Button } from "../../../index";
|
|
6
|
+
// Icons as SVG components for better performance and customization
|
|
7
|
+
const CalendarIcon = () => (_jsx("svg", { width: "25", height: "25", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M20.8333 3.125H18.75V1.04167C18.75 0.466667 18.2833 0 17.7083 0H16.6667C16.0917 0 15.625 0.466667 15.625 1.04167V3.125H9.375V1.04167C9.375 0.466667 8.90833 0 8.33333 0H7.29167C6.71667 0 6.25 0.466667 6.25 1.04167V3.125H4.16667C2.325 3.125 0.833333 4.61667 0.833333 6.45833V20.8333C0.833333 22.675 2.325 24.1667 4.16667 24.1667H20.8333C22.675 24.1667 24.1667 22.675 24.1667 20.8333V6.45833C24.1667 4.61667 22.675 3.125 20.8333 3.125ZM22.9167 20.8333C22.9167 21.6917 22.1917 22.4167 21.3333 22.4167H4.16667C3.30833 22.4167 2.58333 21.6917 2.58333 20.8333V10.4167H22.9167V20.8333ZM22.9167 8.33333H2.58333V6.45833C2.58333 5.6 3.30833 4.875 4.16667 4.875H6.25V6.45833C6.25 7.03333 6.71667 7.5 7.29167 7.5H8.33333C8.90833 7.5 9.375 7.03333 9.375 6.45833V4.875H15.625V6.45833C15.625 7.03333 16.0917 7.5 16.6667 7.5H17.7083C18.2833 7.5 18.75 7.03333 18.75 6.45833V4.875H20.8333C21.6917 4.875 22.4167 5.6 22.4167 6.45833V8.33333H22.9167Z", fill: "white" }) }));
|
|
8
|
+
const ClockIcon = () => (_jsx("svg", { width: "25", height: "25", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.5 0C5.6 0 0 5.6 0 12.5C0 19.4 5.6 25 12.5 25C19.4 25 25 19.4 25 12.5C25 5.6 19.4 0 12.5 0ZM12.5 22.9167C6.975 22.9167 2.08333 18.025 2.08333 12.5C2.08333 6.975 6.975 2.08333 12.5 2.08333C18.025 2.08333 22.9167 6.975 22.9167 12.5C22.9167 18.025 18.025 22.9167 12.5 22.9167ZM13.5417 6.25H11.4583V13.5417L17.7083 16.6667L18.75 14.7917L13.5417 12.5V6.25Z", fill: "white" }) }));
|
|
9
|
+
const LocationIcon = () => (_jsx("svg", { width: "25", height: "25", viewBox: "0 0 25 25", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M12.5 0C7.80833 0 4.16667 3.64167 4.16667 8.33333C4.16667 14.5833 12.5 25 12.5 25S20.8333 14.5833 20.8333 8.33333C20.8333 3.64167 17.1917 0 12.5 0ZM12.5 11.4583C11.1417 11.4583 10.0417 10.3583 10.0417 8.33333C10.0417 6.30833 11.1417 5.20833 12.5 5.20833C13.8583 5.20833 14.9583 6.30833 14.9583 8.33333C14.9583 10.3583 13.8583 11.4583 12.5 11.4583Z", fill: "white" }) }));
|
|
10
|
+
const CategoryBadge = ({ category, icon, }) => (_jsx("div", { className: "flex bg-primary-grey h-10.5 min-h-10.5 overflow-hidden w-77.5 group-hover:-mt-0.25 group-hover:w-77.75 transition-all duration-300", children: _jsxs("div", { className: "w-full relative px-5.75 py-1.75", children: [_jsx("div", { className: "flex flex-col font-semibold justify-center leading-0 not-italic text-lg text-white", children: _jsx("p", { className: "leading-7", children: category }) }), icon && (_jsx(Image, { src: icon, alt: "", width: 69, height: 42, className: "absolute bottom-0 -right-0.25 w-17.25 h-10.5" }))] }) }));
|
|
11
|
+
export const EventCard = ({ imageUrl = "http://localhost:3845/assets/f60ef9ffaad11fe658d28ae57cd6e9548d7462de.png", imageAlt = "Event image", category, title, description, date, time, location, className, onClick, buttonText, onButtonClick, buttonClassName, icon, }) => {
|
|
12
|
+
const containerClasses = buildClassesByJoining([
|
|
13
|
+
"content-stretch flex flex-col items-start relative size-full cursor-pointer transition-all duration-300 hover:transform hover:scale-[1.03] hover:shadow-lg w-77.5 group",
|
|
14
|
+
className,
|
|
15
|
+
]);
|
|
16
|
+
return (_jsx("div", { className: containerClasses, onClick: onClick, "data-name": "Event Card", children: _jsxs("div", { className: "flex flex-col relative shrink-0 w-77.5", children: [_jsx(Image, { src: imageUrl, alt: imageAlt, className: `object-cover max-h-43 ${category ? "md:h-58.5 md:max-h-58.5" : "md:h-77.5 md:max-h-77.5"}`, width: 310, height: category ? 234 : 310 }), category && _jsx(CategoryBadge, { category: category, icon: icon }), _jsxs("div", { className: "bg-white box-border content-stretch flex flex-col gap-4.5 items-start px-5.5 py-4.5 w-77.5", children: [_jsx("div", { className: "flex flex-col font-semibold justify-center min-w-full max-w-full not-italic text-primary-black text-6 md:h-15", children: _jsx("p", { className: "text-lg md:text-2xl overflow-hidden line-clamp-1 md:line-clamp-2 leading-tight", children: title }) }), _jsx("div", { className: "flex flex-col font-normal justify-center leading-0 min-w-full max-w-full not-italic relative shrink-0 text-primary-grey text-4", children: _jsx("p", { className: "text-sm md:text-base leading-7 truncate", children: description }) }), _jsxs("div", { className: "content-stretch flex flex-col gap-2.5 items-start relative shrink-0", children: [date && (_jsxs("div", { className: "content-stretch flex gap-4 items-center relative shrink-0 w-full", children: [_jsx("div", { className: "bg-primary-grey box-border content-stretch flex gap-2.5 items-center p-1.25 relative rounded-[39px] shrink-0", children: _jsx("div", { className: "relative shrink-0 size-6.25 flex items-center justify-center", children: _jsx(CalendarIcon, {}) }) }), _jsx("div", { className: "flex flex-col font-semibold justify-center leading-0 not-italic relative shrink-0 text-primary-black text-1.75", children: _jsx("p", { className: "text-sm leading-6.5 whitespace-pre truncate", children: date }) })] })), time && (_jsxs("div", { className: "content-stretch flex gap-4 items-center relative shrink-0 w-full", children: [_jsx("div", { className: "bg-primary-grey content-stretch flex gap-2.5 items-center justify-center relative rounded-[39px] shrink-0 size-8.75", children: _jsx("div", { className: "overflow-hidden relative shrink-0 size-6.25 flex items-center justify-center", children: _jsx(ClockIcon, {}) }) }), _jsx("div", { className: "flex flex-col font-semibold justify-center leading-0 not-italic relative shrink-0 text-primary-black text-1.75", children: _jsx("p", { className: "text-sm leading-6.5 whitespace-pre truncate", children: time }) })] })), location && (_jsxs("div", { className: "content-stretch flex gap-4 items-center relative shrink-0 w-full", children: [_jsx("div", { className: "bg-primary-grey content-stretch flex gap-2.5 items-center justify-center relative rounded-[39px] shrink-0 size-8.75", children: _jsx("div", { className: "overflow-hidden relative shrink-0 size-6.25 flex items-center justify-center", children: _jsx(LocationIcon, {}) }) }), _jsx("div", { className: "flex flex-col font-semibold justify-center leading-0 not-italic relative shrink-0 text-primary-black text-1.75", children: _jsx("p", { className: "text-sm leading-6.5 whitespace-pre truncate", children: location }) })] }))] })] }), buttonText && (_jsx(Button, { onClick: () => onButtonClick?.(), rounded: "none", className: buttonClassName, children: buttonText }))] }) }));
|
|
17
|
+
};
|
|
18
|
+
export default EventCard;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type FilterContainerProps = {
|
|
3
|
+
/** Child components */
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
/** Additional CSS classes */
|
|
6
|
+
className?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Container component that ensures filters maintain consistent layout
|
|
10
|
+
* and don't affect each other when expanding/collapsing
|
|
11
|
+
*/
|
|
12
|
+
export default function FilterContainer({ children, className }: FilterContainerProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
/**
|
|
4
|
+
* Container component that ensures filters maintain consistent layout
|
|
5
|
+
* and don't affect each other when expanding/collapsing
|
|
6
|
+
*/
|
|
7
|
+
export default function FilterContainer({ children, className = "" }) {
|
|
8
|
+
return (_jsx("div", { className: `filter-container relative ${className}`, children: children }));
|
|
9
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export type FilterGridProps = {
|
|
3
|
+
/** Child components */
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
/** Additional CSS classes */
|
|
6
|
+
className?: string;
|
|
7
|
+
/** Number of columns on desktop */
|
|
8
|
+
columns?: 1 | 2 | 3 | 4;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Grid container for filters that ensures each filter maintains
|
|
12
|
+
* its own space and doesn't affect others when expanding/collapsing
|
|
13
|
+
*/
|
|
14
|
+
export default function FilterGrid({ children, className, columns }: FilterGridProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
/**
|
|
5
|
+
* Grid container for filters that ensures each filter maintains
|
|
6
|
+
* its own space and doesn't affect others when expanding/collapsing
|
|
7
|
+
*/
|
|
8
|
+
export default function FilterGrid({ children, className = "", columns = 3 }) {
|
|
9
|
+
const gridColsClass = {
|
|
10
|
+
1: 'md:grid-cols-1',
|
|
11
|
+
2: 'md:grid-cols-2',
|
|
12
|
+
3: 'md:grid-cols-3',
|
|
13
|
+
4: 'md:grid-cols-4',
|
|
14
|
+
}[columns];
|
|
15
|
+
return (_jsx("div", { className: `filter-grid grid grid-cols-1 ${gridColsClass} gap-4 items-start ${className}`, children: React.Children.map(children, (child, index) => (_jsx("div", { className: "filter-grid-item", children: child }, index))) }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type FilterTypeProps = {
|
|
2
|
+
/** Initial expanded state */
|
|
3
|
+
isExpanded?: boolean;
|
|
4
|
+
/** Mobile variant */
|
|
5
|
+
isMobile?: boolean;
|
|
6
|
+
/** Selected options */
|
|
7
|
+
selectedOptions?: string[];
|
|
8
|
+
/** Callback when options change */
|
|
9
|
+
onChange?: (options: string[]) => void;
|
|
10
|
+
/** Custom CSS classes */
|
|
11
|
+
className?: string;
|
|
12
|
+
/** Custom type options */
|
|
13
|
+
options?: string[];
|
|
14
|
+
/** Filter title */
|
|
15
|
+
title?: string;
|
|
16
|
+
/** Border color */
|
|
17
|
+
borderColor?: string;
|
|
18
|
+
};
|
|
19
|
+
export default function FilterType({ isExpanded: initialExpanded, isMobile, selectedOptions, onChange, className, options, title, borderColor, }: FilterTypeProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
const DEFAULT_TYPE_OPTIONS = [
|
|
5
|
+
"Vše",
|
|
6
|
+
"Promítání",
|
|
7
|
+
"Výstava",
|
|
8
|
+
"Koncert",
|
|
9
|
+
"Přednáška",
|
|
10
|
+
"Prohlídka",
|
|
11
|
+
"Pro děti",
|
|
12
|
+
"Expozice",
|
|
13
|
+
"Ostatní akce",
|
|
14
|
+
];
|
|
15
|
+
export default function FilterType({ isExpanded: initialExpanded = false, isMobile = false, selectedOptions = [], onChange, className = "", options = DEFAULT_TYPE_OPTIONS, title = "Typ?", borderColor = "#eda1a2", }) {
|
|
16
|
+
const [isExpanded, setIsExpanded] = useState(initialExpanded);
|
|
17
|
+
const [selected, setSelected] = useState(new Set(selectedOptions));
|
|
18
|
+
const handleToggle = () => {
|
|
19
|
+
setIsExpanded(!isExpanded);
|
|
20
|
+
};
|
|
21
|
+
const handleOptionToggle = (option) => {
|
|
22
|
+
const newSelected = new Set(selected);
|
|
23
|
+
if (newSelected.has(option)) {
|
|
24
|
+
newSelected.delete(option);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
newSelected.add(option);
|
|
28
|
+
}
|
|
29
|
+
setSelected(newSelected);
|
|
30
|
+
onChange?.(Array.from(newSelected));
|
|
31
|
+
};
|
|
32
|
+
// Responsive classes
|
|
33
|
+
const headerClass = isMobile
|
|
34
|
+
? "text-[26px] leading-[40px] px-[5px] py-[10px]"
|
|
35
|
+
: "text-[36px] leading-[54px] px-[10px] py-[20px]";
|
|
36
|
+
if (!isExpanded) {
|
|
37
|
+
// Collapsed state
|
|
38
|
+
return (_jsx("div", { className: `border-[0px_0px_5px] border-solid box-border relative w-full ${className}`, style: { borderColor }, children: _jsxs("button", { className: `content-stretch cursor-pointer flex font-bold items-center justify-between not-italic relative w-full text-[#3f4a4d] text-center text-nowrap ${headerClass}`, onClick: handleToggle, children: [_jsx("div", { className: "flex flex-col justify-center relative shrink-0", children: _jsx("p", { className: isMobile ? "leading-[40px]" : "leading-[54px]", children: title }) }), _jsx("div", { className: "flex flex-col justify-center relative shrink-0", children: _jsx("p", { className: isMobile ? "leading-[40px]" : "leading-[54px]", children: "+" }) })] }) }));
|
|
39
|
+
}
|
|
40
|
+
// Expanded state
|
|
41
|
+
return (_jsxs("div", { className: `border-[0px_0px_5px] border-solid box-border flex flex-col w-full ${className}`, style: { borderColor }, children: [_jsxs("button", { className: `content-stretch flex font-bold items-center justify-between not-italic text-[#3f4a4d] text-center text-nowrap w-full ${headerClass}`, onClick: handleToggle, children: [_jsx("div", { className: "flex flex-col justify-center relative shrink-0", children: _jsx("p", { className: isMobile ? "leading-[40px]" : "leading-[54px]", children: title }) }), _jsx("div", { className: "flex flex-col justify-center relative shrink-0", children: _jsx("p", { className: isMobile ? "leading-[40px]" : "leading-[54px]", children: "-" }) })] }), _jsx("div", { className: `box-border flex flex-col gap-[20px] items-start ${isMobile ? "px-[5px] py-[10px]" : "px-[10px] py-[20px]"}`, children: options.map((option) => (_jsxs("div", { className: "flex gap-[13px] items-center cursor-pointer", onClick: () => handleOptionToggle(option), children: [_jsx("div", { className: "border border-[#3f4a4d] border-solid shrink-0 size-[20px] flex items-center justify-center", children: selected.has(option) && (_jsx("div", { className: "bg-[#3f4a4d] size-[12px]" })) }), _jsx("div", { className: "flex flex-col justify-center text-[#3f4a4d] text-[16px] leading-[28px]", children: _jsx("p", { children: option }) })] }, option))) })] }));
|
|
42
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type FilterWhenProps = {
|
|
2
|
+
/** Initial expanded state */
|
|
3
|
+
isExpanded?: boolean;
|
|
4
|
+
/** Mobile variant */
|
|
5
|
+
isMobile?: boolean;
|
|
6
|
+
/** Selected options */
|
|
7
|
+
selectedOptions?: string[];
|
|
8
|
+
/** Callback when options change */
|
|
9
|
+
onChange?: (options: string[]) => void;
|
|
10
|
+
/** Custom CSS classes */
|
|
11
|
+
className?: string;
|
|
12
|
+
/** Quick filter options */
|
|
13
|
+
quickOptions?: string[];
|
|
14
|
+
/** Filter title */
|
|
15
|
+
title?: string;
|
|
16
|
+
/** Border color */
|
|
17
|
+
borderColor?: string;
|
|
18
|
+
/** Month names (localization) */
|
|
19
|
+
monthNames?: string[];
|
|
20
|
+
/** Day names (localization) */
|
|
21
|
+
dayNames?: string[];
|
|
22
|
+
};
|
|
23
|
+
export default function FilterWhen({ isExpanded: initialExpanded, isMobile, selectedOptions, onChange, className, quickOptions, title, borderColor, monthNames, dayNames, }: FilterWhenProps): import("react/jsx-runtime").JSX.Element;
|