@q2devel/q2-storybook 1.0.174 → 1.0.177

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.
@@ -83,5 +83,41 @@ export type ProductCardProps = {
83
83
  discountPriceClassName?: string;
84
84
  mainQuantUnitClassName?: string;
85
85
  discountQuantUnitClassName?: string;
86
+ classNames?: {
87
+ container?: string;
88
+ imageLayout?: string;
89
+ badges?: {
90
+ container?: string;
91
+ badge?: string;
92
+ };
93
+ deleteButton?: string;
94
+ wishlistButton?: string;
95
+ image?: string;
96
+ button?: string;
97
+ content?: string;
98
+ title?: string;
99
+ variationName?: string;
100
+ label?: {
101
+ country?: string;
102
+ volume?: string;
103
+ };
104
+ description?: string;
105
+ price?: {
106
+ container?: string;
107
+ mainPrice?: string;
108
+ mainQuantUnit?: string;
109
+ discountPrice?: string;
110
+ discountQuantUnit?: string;
111
+ control?: {
112
+ container?: string;
113
+ quantity?: string;
114
+ decrementButton?: string;
115
+ incrementButton?: string;
116
+ addButton?: string;
117
+ };
118
+ };
119
+ actionButton?: string;
120
+ footer?: string;
121
+ };
86
122
  };
87
- export declare const ProductCard: ({ product, href, className, imageClassName, contentClassName, titleClassName, priceClassName, priceDiscountClassName, descriptionClassName, labelClassName, aspectRatio, imagePosition, imageObjectFit, layout, hoverEffect, renderBadges, renderColor, renderDescription, elevationLevel, rounded, titleLines, onCardClick, onImageClick, renderFooter, renderHeader, renderVariationName, variationNameClassName, actionButton, linkToCatalog, showCountry, showVolume, showAddButton, showAddButtonOnHover, addButtonPosition, addButtonAlignment, addButtonText, addButtonBottomClassName, borderOnHoverClassName, currentQuantity, onQuantityChange, addButtonIcon, maxQuantity, controlsClassName, buttonClassName, quantityClassName, customAddButton, disabled, locale, cartMode, showSpinnerInAdd, addToCartButtonCustomAction, showWishlistButton, isInWishlist, onWishlistToggle, wishlistButtonClassName, isWishlistPending, enableMultipleWishlists, wishlists, onAddToWishlist, onRemoveFromWishlist, onCreateWishlist, wishlistDropdownClassName, productWishlistIds, showDeleteButton, onDelete, deleteButtonClassName, isDeletePending, deleteButtonSize, deleteButtonPosition, mainPriceFormatOptions, discountPriceFormatOptions, mainPriceClassName, discountPriceClassName, mainQuantUnitClassName, discountQuantUnitClassName, quantUnit, }: ProductCardProps) => import("react/jsx-runtime").JSX.Element;
123
+ export declare const ProductCard: ({ product, href, className, imageClassName, contentClassName, titleClassName, priceClassName, priceDiscountClassName, descriptionClassName, labelClassName, aspectRatio, imagePosition, imageObjectFit, layout, hoverEffect, renderBadges, renderColor, renderDescription, elevationLevel, rounded, titleLines, onCardClick, onImageClick, renderFooter, renderHeader, renderVariationName, variationNameClassName, actionButton, linkToCatalog, showCountry, showVolume, showAddButton, showAddButtonOnHover, addButtonPosition, addButtonAlignment, addButtonText, addButtonBottomClassName, borderOnHoverClassName, currentQuantity, onQuantityChange, addButtonIcon, maxQuantity, controlsClassName, buttonClassName, quantityClassName, customAddButton, disabled, locale, cartMode, showSpinnerInAdd, addToCartButtonCustomAction, showWishlistButton, isInWishlist, onWishlistToggle, wishlistButtonClassName, isWishlistPending, enableMultipleWishlists, wishlists, onAddToWishlist, onRemoveFromWishlist, onCreateWishlist, wishlistDropdownClassName, productWishlistIds, showDeleteButton, onDelete, deleteButtonClassName, isDeletePending, deleteButtonSize, deleteButtonPosition, classNames, mainPriceFormatOptions, discountPriceFormatOptions, mainPriceClassName, discountPriceClassName, mainQuantUnitClassName, discountQuantUnitClassName, quantUnit, }: ProductCardProps) => import("react/jsx-runtime").JSX.Element;
@@ -21,6 +21,43 @@ showWishlistButton = false, isInWishlist = false, onWishlistToggle, wishlistButt
21
21
  enableMultipleWishlists = false, wishlists = [], onAddToWishlist, onRemoveFromWishlist, onCreateWishlist, wishlistDropdownClassName = '', productWishlistIds = [],
22
22
  // Delete functionality
23
23
  showDeleteButton = false, onDelete, deleteButtonClassName = '', isDeletePending = false, deleteButtonSize = 'md', deleteButtonPosition = 'top-right',
24
+ // classnames
25
+ classNames = {
26
+ container: '',
27
+ imageLayout: '',
28
+ badges: {
29
+ container: '',
30
+ badge: '',
31
+ },
32
+ deleteButton: '',
33
+ wishlistButton: '',
34
+ image: '',
35
+ button: '',
36
+ content: '',
37
+ title: '',
38
+ variationName: '',
39
+ label: {
40
+ country: '',
41
+ volume: '',
42
+ },
43
+ description: '',
44
+ price: {
45
+ container: '',
46
+ mainPrice: '',
47
+ mainQuantUnit: '',
48
+ discountPrice: '',
49
+ discountQuantUnit: '',
50
+ control: {
51
+ container: '',
52
+ quantity: '',
53
+ decrementButton: '',
54
+ incrementButton: '',
55
+ addButton: '',
56
+ },
57
+ },
58
+ actionButton: '',
59
+ footer: '',
60
+ },
24
61
  // Price formatting - NOVÉ JEDNODUCHÉ API
25
62
  mainPriceFormatOptions, discountPriceFormatOptions, mainPriceClassName, discountPriceClassName, mainQuantUnitClassName, discountQuantUnitClassName, quantUnit = '', }) => {
26
63
  const [showWishlistDropdown, setShowWishlistDropdown] = useState(false);
@@ -171,19 +208,19 @@ mainPriceFormatOptions, discountPriceFormatOptions, mainPriceClassName, discount
171
208
  onDelete(product);
172
209
  }
173
210
  }, [onDelete, product]);
174
- return (_jsxs("div", { className: buildClassesByJoining('group relative h-full', layoutClass, elevationClass, onCardClick ? 'cursor-pointer' : '', borderOnHoverClassName, className), onClick: handleCardClick, children: [renderHeader && renderHeader(product), _jsxs("div", { className: buildClassesByJoining(imageLayoutClass, 'relative'), children: [product.badges && renderBadges && (_jsx("div", { className: "absolute top-2 left-2 z-10 flex flex-wrap gap-1", children: product.badges.map((badge, index) => (_jsx(Badge, { color: badge.color, children: badge.text }, index))) })), showDeleteButton ? (_jsx(DeleteButton, { show: showDeleteButton, onDelete: handleDelete, deleteButtonClassName: deleteButtonClassName, isDeletePending: isDeletePending, size: deleteButtonSize, position: deleteButtonPosition })) : (_jsx(LikeButton, { show: showWishlistButton, enableMultiple: enableMultipleWishlists, isInWishlist: isInWishlist, wishlists: wishlists, productWishlistIds: productWishlistIds, wishlistButtonClassName: wishlistButtonClassName, wishlistDropdownClassName: wishlistDropdownClassName, isWishlistPending: isWishlistPending, handleAddToWishlist: handleAddToWishlist, handleRemoveFromWishlist: handleRemoveFromWishlist, handleCreateNewWishlist: handleCreateNewWishlist, handleWishlistToggle: handleWishlistToggle })), _jsx("img", { alt: product.all_images[0]?.alt, src: product.all_images[0]?.href, className: buildClassesByJoining(aspectRatioClass, objectFitClass, objectPositionClass, hoverEffect !== 'none' ? hoverClass : '', roundedClass, 'bg-gray-200', onImageClick ? 'cursor-pointer' : '', imageClassName), onClick: handleImageClick }), addButtonPosition === 'overlay' && (_jsx(AddToCart, { buttonClassName: buttonClassName, addButtonIcon: getButtonIcon(), handleAddToCart: handleAddToCart, showAddButton: shouldShowAddButton(), disabled: disabled, customAddButton: customAddButton }))] }), _jsxs("div", { className: buildClassesByJoining('mt-4 h-full flex flex-col justify-between grow', contentLayoutClass, compactClass, contentClassName), children: [_jsxs("div", { className: "flex flex-col h-full justify-between", children: [_jsxs("div", { children: [_jsx(Heading, { level: 3, className: buildClassesByJoining('text-lg text-gray-700', titleLineClampClass, titleClassName), children: _jsxs(Button, { asLink: true, unstyled: true, href: href, children: [!onCardClick && (_jsx("span", { "aria-hidden": "true", className: "absolute inset-0" })), product.product_name] }) }), renderVariationName && product.variation_name && (_jsx("span", { className: buildClassesByJoining('text-md', variationNameClassName), children: product.variation_name })), (product.country || product.field_volume) && (_jsxs("p", { children: [showCountry && product.country && (_jsxs("span", { className: buildClassesByJoining('text-sm', labelClassName), children: [product.country, showVolume &&
211
+ return (_jsxs("div", { className: buildClassesByJoining('group relative h-full', layoutClass, elevationClass, onCardClick ? 'cursor-pointer' : '', borderOnHoverClassName, className, classNames?.container), onClick: handleCardClick, children: [renderHeader && renderHeader(product), _jsxs("div", { className: buildClassesByJoining(imageLayoutClass, 'relative', classNames?.imageLayout), children: [product.badges && renderBadges && (_jsx("div", { className: buildClassesByJoining("absolute top-2 left-2 z-10 flex flex-wrap gap-1", classNames?.badges?.container), children: product.badges.map((badge, index) => (_jsx(Badge, { color: badge.color, className: classNames?.badges?.badge, children: badge.text }, index))) })), showDeleteButton ? (_jsx(DeleteButton, { show: showDeleteButton, onDelete: handleDelete, deleteButtonClassName: buildClassesByJoining(deleteButtonClassName, classNames?.deleteButton), isDeletePending: isDeletePending, size: deleteButtonSize, position: deleteButtonPosition })) : (_jsx(LikeButton, { show: showWishlistButton, enableMultiple: enableMultipleWishlists, isInWishlist: isInWishlist, wishlists: wishlists, productWishlistIds: productWishlistIds, wishlistButtonClassName: buildClassesByJoining(wishlistButtonClassName, classNames?.wishlistButton), wishlistDropdownClassName: wishlistDropdownClassName, isWishlistPending: isWishlistPending, handleAddToWishlist: handleAddToWishlist, handleRemoveFromWishlist: handleRemoveFromWishlist, handleCreateNewWishlist: handleCreateNewWishlist, handleWishlistToggle: handleWishlistToggle })), _jsx("img", { alt: product.all_images[0]?.alt, src: product.all_images[0]?.href, className: buildClassesByJoining(aspectRatioClass, objectFitClass, objectPositionClass, hoverEffect !== 'none' ? hoverClass : '', roundedClass, 'bg-gray-200', onImageClick ? 'cursor-pointer' : '', imageClassName, classNames?.image), onClick: handleImageClick }), addButtonPosition === 'overlay' && (_jsx(AddToCart, { buttonClassName: buildClassesByJoining(buttonClassName, classNames?.button), addButtonIcon: getButtonIcon(), handleAddToCart: handleAddToCart, showAddButton: shouldShowAddButton(), disabled: disabled, customAddButton: customAddButton }))] }), _jsxs("div", { className: buildClassesByJoining('mt-4 h-full flex flex-col justify-between grow', contentLayoutClass, compactClass, contentClassName, classNames?.content), children: [_jsxs("div", { className: "flex flex-col h-full justify-between", children: [_jsxs("div", { children: [_jsx(Heading, { level: 3, className: buildClassesByJoining('text-lg text-gray-700', classNames?.title, titleLineClampClass, titleClassName), children: _jsxs(Button, { asLink: true, unstyled: true, href: href, children: [!onCardClick && (_jsx("span", { "aria-hidden": "true", className: buildClassesByJoining("absolute inset-0", classNames?.button?.link) })), product.product_name] }) }), renderVariationName && product.variation_name && (_jsx("span", { className: buildClassesByJoining('text-md', variationNameClassName, classNames?.variationName), children: product.variation_name })), (product.country || product.field_volume) && (_jsxs("p", { className: buildClassesByJoining(classNames?.label), children: [showCountry && product.country && (_jsxs("span", { className: buildClassesByJoining('text-sm', labelClassName, classNames?.label?.country), children: [product.country, showVolume &&
175
212
  product.field_volume &&
176
- ', '] })), showVolume && product.field_volume && (_jsx("span", { className: buildClassesByJoining('text-sm', labelClassName), children: product.field_volume }))] })), renderDescription && product.description && (_jsx("span", { className: buildClassesByJoining('mt-1 text-sm text-gray-500 line-clamp-2', descriptionClassName), children: parseHTML(product.description) }))] }), _jsx("div", { className: "flex flex-col justify-between", children: _jsxs("div", { className: "flex flex-col justify-between", children: [_jsx(Price, { value: product.price, locale: locale, options: mainPriceFormatOptions, className: buildClassesByJoining('text-md font-bold text-gray-900', mainPriceClassName), quantUnit: quantUnit, quantUnitClassName: buildClassesByJoining('text-md font-bold text-black', mainQuantUnitClassName) }), product?.discountPercent != null &&
213
+ ', '] })), showVolume && product.field_volume && (_jsx("span", { className: buildClassesByJoining('text-sm', labelClassName, classNames?.label?.volume), children: product.field_volume }))] })), renderDescription && product.description && (_jsx("span", { className: buildClassesByJoining('mt-1 text-sm text-gray-500 line-clamp-2', descriptionClassName, classNames?.description), children: parseHTML(product.description) }))] }), _jsx("div", { className: "flex flex-col justify-between", children: _jsxs("div", { className: buildClassesByJoining("flex flex-col justify-between", classNames?.price?.container), children: [_jsx(Price, { value: product.price, locale: locale, options: mainPriceFormatOptions, className: buildClassesByJoining('text-md font-bold text-gray-900', mainPriceClassName, classNames?.price?.mainPrice), quantUnit: quantUnit, quantUnitClassName: buildClassesByJoining('text-md font-bold text-black', mainQuantUnitClassName, classNames?.price?.mainQuantUnit) }), product?.discountPercent != null &&
177
214
  product.discountPercent > 0 && (_jsx(Price, { value: product.price /
178
215
  (1 - product.discountPercent / 100), locale: locale, options: discountPriceFormatOptions ||
179
- mainPriceFormatOptions, className: buildClassesByJoining('text-sm font-normal text-gray-900 line-through', discountPriceClassName), quantUnit: quantUnit, quantUnitClassName: buildClassesByJoining('text-sm font-normal text-black line-through', discountQuantUnitClassName) })), addButtonPosition === 'bottom' && (_jsx("div", { className: buildClassesByJoining('mt-3 flex w-full relative z-10', getBottomButtonAlignment()), onClick: (e) => e.stopPropagation(), children: shouldShowQuantityControls() ? (
216
+ mainPriceFormatOptions, className: buildClassesByJoining('text-sm font-normal text-gray-900 line-through', discountPriceClassName, classNames?.price?.discountPrice), quantUnit: quantUnit, quantUnitClassName: buildClassesByJoining('text-sm font-normal text-black line-through', discountQuantUnitClassName, classNames?.price?.discountQuantUnit) })), addButtonPosition === 'bottom' && (_jsx("div", { className: buildClassesByJoining('mt-3 flex w-full relative z-10', getBottomButtonAlignment(), classNames?.price?.control), onClick: (e) => e.stopPropagation(), children: shouldShowQuantityControls() ? (
180
217
  // Quantity controls
181
- _jsxs("div", { className: buildClassesByJoining('flex items-center gap-2', controlsClassName), children: [_jsx(Button, { onClick: handleDecrement, className: buildClassesByJoining('w-8 h-8 flex items-center justify-center rounded border', addButtonBottomClassName), disabled: disabled ||
182
- currentQuantity <= 0, children: "\u2212" }), _jsx("span", { className: buildClassesByJoining('mx-2 font-medium', quantityClassName), children: currentQuantity }), _jsx(Button, { onClick: handleIncrement, className: buildClassesByJoining('w-8 h-8 flex items-center justify-center rounded border', addButtonBottomClassName), disabled: disabled ||
218
+ _jsxs("div", { className: buildClassesByJoining('flex items-center gap-2', controlsClassName, classNames?.price?.control?.quantity), children: [_jsx(Button, { onClick: handleDecrement, className: buildClassesByJoining('w-8 h-8 flex items-center justify-center rounded border', addButtonBottomClassName, classNames?.price?.control?.decrementButton), disabled: disabled ||
219
+ currentQuantity <= 0, children: "\u2212" }), _jsx("span", { className: buildClassesByJoining('mx-2 font-medium', quantityClassName, classNames?.price?.control?.quantity), children: currentQuantity }), _jsx(Button, { onClick: handleIncrement, className: buildClassesByJoining('w-8 h-8 flex items-center justify-center rounded border', addButtonBottomClassName, classNames?.price?.control?.incrementButton), disabled: disabled ||
183
220
  currentQuantity >=
184
221
  maxQuantity, children: "+" })] })) : shouldShowAddButton() ? (
185
222
  // Add button
186
223
  customAddButton || (_jsxs(Button, { onClick: handleAddToCart, className: buildClassesByJoining('flex items-center gap-2 px-4 py-2 rounded-md transition-colors', disabled
187
224
  ? 'opacity-50 cursor-not-allowed'
188
- : '', addButtonBottomClassName), disabled: disabled, children: [getButtonIcon(), _jsx("span", { children: addButtonText })] }))) : null }))] }) })] }), actionButton && _jsx("div", { className: "mt-2", children: actionButton }), renderFooter && renderFooter(product)] })] }));
225
+ : '', addButtonBottomClassName, classNames?.price?.control?.addButton), disabled: disabled, children: [getButtonIcon(), _jsx("span", { children: addButtonText })] }))) : null }))] }) })] }), actionButton && _jsx("div", { className: buildClassesByJoining("mt-2", classNames?.actionButton), children: actionButton }), renderFooter && _jsx("div", { className: buildClassesByJoining("mt-2", classNames?.footer), children: renderFooter(product) })] })] }));
189
226
  };
@@ -141,6 +141,29 @@ export type ProductProps = {
141
141
  onAddToSpecificWishlist?: (wishlistId: string) => void;
142
142
  onRemoveFromSpecificWishlist?: (wishlistId: string) => void;
143
143
  onCreateNewWishlistFromDropdown?: (name: string) => void;
144
+ translationsWishlistDropdown?: {
145
+ wishlistLists?: string;
146
+ createNewWishlist?: string;
147
+ createNewWishlistCancel?: string;
148
+ wishlistOptions?: string;
149
+ close?: string;
150
+ createNewWishlistInputPlaceholder?: string;
151
+ };
152
+ classNamesWishlistDropdown?: {
153
+ wishlistLists?: string;
154
+ wishlistItem?: string;
155
+ icon?: {
156
+ remove?: string;
157
+ add?: string;
158
+ check?: string;
159
+ };
160
+ button?: {
161
+ createNewWishlist?: string;
162
+ createNewWishlistCancel?: string;
163
+ };
164
+ form?: string;
165
+ input?: string;
166
+ };
144
167
  onShippingOptionsClick?: () => void;
145
168
  isWatchdogEnabled?: boolean;
146
169
  onWatchdogClick?: () => void;
@@ -180,4 +203,4 @@ export type ProductProps = {
180
203
  volumeQuantUnitClassName?: string;
181
204
  breakpointForFreeShipping?: number;
182
205
  };
183
- export declare const ProductDetail: ({ name, price, discountPercent, description, detail, buttonText, className, specification, conversionToOtherUnit, hiddenStock, classNames, buttonClassName, descriptionClassName, product, currentQuantity, onQuantityChange, maxQuantity, disabled, badges, showVariations, variations, currentVariationId, cartMode, onOpenBasket, addToCartButtonCustomAction, selectedVariationGradient, showWishlistButton, isInWishlist, onWishlistToggle, enableMultipleWishlists, wishlists, onAddToWishlist, onRemoveFromWishlist, onCreateWishlist, productWishlistIds, isWishlistPending, isLogged, onWishlistTextClick, showWishlistDropdown, onCloseWishlistDropdown, onAddToSpecificWishlist, onRemoveFromSpecificWishlist, onCreateNewWishlistFromDropdown, onShippingOptionsClick, isWatchdogEnabled, onWatchdogClick, onDemandClick, translations, locale, quantUnit, mainPriceFormatOptions, discountPriceFormatOptions, variationPriceFormatOptions, volumePriceFormatOptions, mainPriceClassName, discountPriceClassName, variationPriceClassName, mainQuantUnitClassName, discountQuantUnitClassName, volumePriceClassName, volumeQuantUnitClassName, breakpointForFreeShipping, }: ProductProps) => import("react/jsx-runtime").JSX.Element | null;
206
+ export declare const ProductDetail: ({ name, price, discountPercent, description, detail, buttonText, className, specification, conversionToOtherUnit, hiddenStock, classNames, buttonClassName, descriptionClassName, product, currentQuantity, onQuantityChange, maxQuantity, disabled, badges, showVariations, variations, currentVariationId, cartMode, onOpenBasket, addToCartButtonCustomAction, selectedVariationGradient, showWishlistButton, isInWishlist, onWishlistToggle, enableMultipleWishlists, wishlists, onAddToWishlist, onRemoveFromWishlist, onCreateWishlist, productWishlistIds, isWishlistPending, isLogged, onWishlistTextClick, showWishlistDropdown, onCloseWishlistDropdown, onAddToSpecificWishlist, onRemoveFromSpecificWishlist, onCreateNewWishlistFromDropdown, translationsWishlistDropdown, classNamesWishlistDropdown, onShippingOptionsClick, isWatchdogEnabled, onWatchdogClick, onDemandClick, translations, locale, quantUnit, mainPriceFormatOptions, discountPriceFormatOptions, variationPriceFormatOptions, volumePriceFormatOptions, mainPriceClassName, discountPriceClassName, variationPriceClassName, mainQuantUnitClassName, discountQuantUnitClassName, volumePriceClassName, volumeQuantUnitClassName, breakpointForFreeShipping, }: ProductProps) => import("react/jsx-runtime").JSX.Element | null;
@@ -81,7 +81,7 @@ product, currentQuantity = 0, onQuantityChange, maxQuantity = 99, disabled = fal
81
81
  // Wishlist props
82
82
  showWishlistButton = false, isInWishlist = false, onWishlistToggle, enableMultipleWishlists = false, wishlists = [], onAddToWishlist, onRemoveFromWishlist, onCreateWishlist, productWishlistIds = [], isWishlistPending = false, isLogged = false, onWishlistTextClick,
83
83
  // Wishlist dropdown props
84
- showWishlistDropdown = false, onCloseWishlistDropdown, onAddToSpecificWishlist, onRemoveFromSpecificWishlist, onCreateNewWishlistFromDropdown,
84
+ showWishlistDropdown = false, onCloseWishlistDropdown, onAddToSpecificWishlist, onRemoveFromSpecificWishlist, onCreateNewWishlistFromDropdown, translationsWishlistDropdown, classNamesWishlistDropdown,
85
85
  //modals
86
86
  onShippingOptionsClick, isWatchdogEnabled = false, onWatchdogClick, onDemandClick, translations = {
87
87
  recommendedPrice: 'Doporučená cena',
@@ -184,11 +184,11 @@ mainPriceFormatOptions, discountPriceFormatOptions, variationPriceFormatOptions,
184
184
  variation.id && (_jsx("div", { className: buildClassesByJoining('absolute inset-0 pointer-events-none', classNames
185
185
  ?.variations
186
186
  ?.variationActiveButton), style: {
187
- background: `
188
- radial-gradient(circle at top left, var(--primary) 0%, transparent 20%),
189
- radial-gradient(circle at top right, var(--primary) 0%, transparent 20%),
190
- radial-gradient(circle at bottom left, var(--primary) 0%, transparent 20%),
191
- radial-gradient(circle at bottom right, var(--primary) 0%, transparent 20%)
187
+ background: `
188
+ radial-gradient(circle at top left, var(--primary) 0%, transparent 20%),
189
+ radial-gradient(circle at top right, var(--primary) 0%, transparent 20%),
190
+ radial-gradient(circle at bottom left, var(--primary) 0%, transparent 20%),
191
+ radial-gradient(circle at bottom right, var(--primary) 0%, transparent 20%)
192
192
  `,
193
193
  opacity: 0.2,
194
194
  } })), _jsxs("div", { className: buildClassesByJoining('flex flex-col justify-between gap-1 relative z-10 flex-1 min-w-0 pr-2', classNames?.variations
@@ -260,7 +260,7 @@ mainPriceFormatOptions, discountPriceFormatOptions, variationPriceFormatOptions,
260
260
  [], isWishlistPending: isWishlistPending, onAddToWishlist: onAddToSpecificWishlist ||
261
261
  (() => { }), onRemoveFromWishlist: onRemoveFromSpecificWishlist ||
262
262
  (() => { }), onCreateNewWishlist: onCreateNewWishlistFromDropdown ||
263
- (() => { }), onClose: onCloseWishlistDropdown, isModal: false }) })] }))] }))] }) })] }), specification && specification.length > 0 && (_jsxs("section", { className: "mt-10", children: [_jsx(Heading, { level: 3, className: classNames?.specification?.heading, children: translations.specification }), specification.map((item, index) => {
263
+ (() => { }), onClose: onCloseWishlistDropdown, isModal: false, translationsWishlistDropdown: translationsWishlistDropdown, classNamesWishlistDropdown: classNamesWishlistDropdown }) })] }))] }))] }) })] }), specification && specification.length > 0 && (_jsxs("section", { className: "mt-10", children: [_jsx(Heading, { level: 3, className: classNames?.specification?.heading, children: translations.specification }), specification.map((item, index) => {
264
264
  if ('separator' in item) {
265
265
  return (_jsx("div", { className: "h-4" }, index));
266
266
  }
@@ -13,6 +13,29 @@ export interface WishlistDropdownProps {
13
13
  onClose?: () => void;
14
14
  className?: string;
15
15
  isModal?: boolean;
16
+ translationsWishlistDropdown?: {
17
+ wishlistLists?: string;
18
+ createNewWishlist?: string;
19
+ createNewWishlistCancel?: string;
20
+ wishlistOptions?: string;
21
+ close?: string;
22
+ createNewWishlistInputPlaceholder?: string;
23
+ };
24
+ classNamesWishlistDropdown?: {
25
+ wishlistLists?: string;
26
+ wishlistItem?: string;
27
+ icon?: {
28
+ remove?: string;
29
+ add?: string;
30
+ check?: string;
31
+ };
32
+ button?: {
33
+ createNewWishlist?: string;
34
+ createNewWishlistCancel?: string;
35
+ };
36
+ form?: string;
37
+ input?: string;
38
+ };
16
39
  }
17
- export declare const WishlistDropdown: ({ show, wishlists, productWishlistIds, isWishlistPending, onAddToWishlist, onRemoveFromWishlist, onCreateNewWishlist, onClose, className, isModal, }: WishlistDropdownProps) => import("react/jsx-runtime").JSX.Element | null;
40
+ export declare const WishlistDropdown: ({ show, wishlists, productWishlistIds, isWishlistPending, onAddToWishlist, onRemoveFromWishlist, onCreateNewWishlist, onClose, className, isModal, translationsWishlistDropdown, classNamesWishlistDropdown, }: WishlistDropdownProps) => import("react/jsx-runtime").JSX.Element | null;
18
41
  export default WishlistDropdown;
@@ -1,10 +1,10 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import buildClassesByJoining from '../../../utils/StyleHelper';
4
3
  import { CheckIcon, PlusCircleIcon, TrashIcon, } from '@heroicons/react/24/outline';
5
4
  import { useRef, useState } from 'react';
5
+ import buildClassesByJoining from '../../../utils/StyleHelper';
6
6
  import TextField from '../../Forms/text-field/TextField';
7
- export const WishlistDropdown = ({ show, wishlists, productWishlistIds, isWishlistPending, onAddToWishlist, onRemoveFromWishlist, onCreateNewWishlist, onClose, className, isModal = false, }) => {
7
+ export const WishlistDropdown = ({ show, wishlists, productWishlistIds, isWishlistPending, onAddToWishlist, onRemoveFromWishlist, onCreateNewWishlist, onClose, className, isModal = false, translationsWishlistDropdown, classNamesWishlistDropdown, }) => {
8
8
  const [showNewWishlistInput, setShowNewWishlistInput] = useState(false);
9
9
  const [newWishlistName, setNewWishlistName] = useState('');
10
10
  const inputRef = useRef(null);
@@ -33,16 +33,27 @@ export const WishlistDropdown = ({ show, wishlists, productWishlistIds, isWishli
33
33
  };
34
34
  if (!show)
35
35
  return null;
36
- const dropdownContent = (_jsxs("div", { className: "py-1", children: [wishlists.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: "px-3 py-1.5 text-xs font-semibold text-gray-500 uppercase tracking-wider", children: "Wishlist Lists" }), wishlists.map((wishlist) => {
36
+ const dropdownContent = (_jsxs("div", { className: "py-1", children: [wishlists.length > 0 && (_jsxs(_Fragment, { children: [_jsx("div", { className: buildClassesByJoining('px-3 py-1.5 text-xs font-semibold text-gray-500 uppercase tracking-wider', classNamesWishlistDropdown?.wishlistLists), children: translationsWishlistDropdown?.wishlistLists ||
37
+ 'Seznamy' }), wishlists.map((wishlist) => {
37
38
  const isInWishlist = productWishlistIds.includes(wishlist.id);
38
- return (_jsxs("button", { onClick: () => handleWishlistClick(wishlist.id, isInWishlist), className: "w-full text-left px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 flex items-center justify-between", disabled: isWishlistPending, children: [_jsxs("div", { className: "flex items-center", children: [isInWishlist ? (_jsx(TrashIcon, { className: "h-3.5 w-3.5 mr-2 text-red-600" })) : (_jsx(PlusCircleIcon, { className: "h-3.5 w-3.5 mr-2 text-green-600" })), _jsx("span", { className: "truncate", children: wishlist.name })] }), isInWishlist && (_jsx(CheckIcon, { className: "h-4 w-4 text-green-600 flex-shrink-0" }))] }, wishlist.id));
39
- })] })), showNewWishlistInput ? (_jsx("form", { onSubmit: handleCreateNewWishlist, className: "px-3 py-2 border-t", children: _jsxs("div", { className: "space-y-2", children: [_jsx(TextField, { ref: inputRef, value: newWishlistName, onChange: (e) => setNewWishlistName(e.target.value), placeholder: "New wishlist name", size: "sm", className: "text-xs", onClick: (e) => e.stopPropagation(), disabled: isWishlistPending }), _jsxs("div", { className: "flex gap-1.5", children: [_jsx("button", { type: "submit", disabled: !newWishlistName.trim() || isWishlistPending, className: "flex-1 px-2 py-1 text-xs text-white bg-green-600 rounded hover:bg-green-700 disabled:opacity-50", children: "Create" }), _jsx("button", { type: "button", onClick: (e) => {
39
+ return (_jsxs("button", { onClick: () => handleWishlistClick(wishlist.id, isInWishlist), className: buildClassesByJoining('w-full text-left px-3 py-1.5 text-sm text-gray-700 hover:bg-gray-100 flex items-center justify-between', classNamesWishlistDropdown?.wishlistItem), disabled: isWishlistPending, children: [_jsxs("div", { className: "flex items-center", children: [isInWishlist ? (_jsx(TrashIcon, { className: buildClassesByJoining('h-3.5 w-3.5 mr-2 text-red-600', classNamesWishlistDropdown?.icon
40
+ ?.remove) })) : (_jsx(PlusCircleIcon, { className: buildClassesByJoining('h-3.5 w-3.5 mr-2 text-green-600', classNamesWishlistDropdown?.icon
41
+ ?.add) })), _jsx("span", { className: "truncate", children: wishlist.name })] }), isInWishlist && (_jsx(CheckIcon, { className: buildClassesByJoining('h-4 w-4 text-green-600 flex-shrink-0', classNamesWishlistDropdown?.icon
42
+ ?.check) }))] }, wishlist.id));
43
+ })] })), showNewWishlistInput ? (_jsx("form", { onSubmit: handleCreateNewWishlist, className: buildClassesByJoining('px-3 py-2 border-t', classNamesWishlistDropdown?.form), children: _jsxs("div", { className: "space-y-2", children: [_jsx(TextField, { ref: inputRef, value: newWishlistName, onChange: (e) => setNewWishlistName(e.target.value), placeholder: translationsWishlistDropdown?.createNewWishlistInputPlaceholder ||
44
+ 'Název nového seznamu', size: "sm", className: buildClassesByJoining('text-xs', classNamesWishlistDropdown?.input), onClick: (e) => e.stopPropagation(), disabled: isWishlistPending }), _jsxs("div", { className: "flex gap-1.5", children: [_jsx("button", { type: "submit", disabled: !newWishlistName.trim() || isWishlistPending, className: buildClassesByJoining('flex-1 px-2 py-1 text-xs text-white bg-green-600 rounded hover:bg-green-700 disabled:opacity-50', classNamesWishlistDropdown?.button
45
+ ?.createNewWishlist), children: translationsWishlistDropdown?.createNewWishlist ||
46
+ 'Vytvořit' }), _jsx("button", { type: "button", onClick: (e) => {
40
47
  e.stopPropagation();
41
48
  setShowNewWishlistInput(false);
42
49
  setNewWishlistName('');
43
- }, className: "flex-1 px-2 py-1 text-xs text-gray-600 bg-gray-200 rounded hover:bg-gray-300", children: "Cancel" })] })] }) })) : (_jsxs("button", { onClick: handleShowNewWishlistInput, className: "w-full text-left px-3 py-1.5 text-sm text-green-600 hover:bg-gray-100 flex items-center border-t", disabled: isWishlistPending, children: [_jsx(PlusCircleIcon, { className: "h-3.5 w-3.5 mr-2" }), _jsx("span", { className: "truncate", children: "Create New Wishlist" })] }))] }));
50
+ }, className: buildClassesByJoining('flex-1 px-2 py-1 text-xs text-gray-600 bg-gray-200 rounded hover:bg-gray-300', classNamesWishlistDropdown?.button
51
+ ?.createNewWishlistCancel), children: translationsWishlistDropdown?.createNewWishlistCancel ||
52
+ 'Zrušit' })] })] }) })) : (_jsxs("button", { onClick: handleShowNewWishlistInput, className: buildClassesByJoining('w-full text-left px-3 py-1.5 text-sm text-green-600 hover:bg-gray-100 flex items-center border-t', classNamesWishlistDropdown?.button?.createNewWishlist), disabled: isWishlistPending, children: [_jsx(PlusCircleIcon, { className: "h-3.5 w-3.5 mr-2" }), _jsx("span", { className: "truncate", children: translationsWishlistDropdown?.createNewWishlist ||
53
+ 'Vytvořit nový seznam' })] }))] }));
44
54
  if (isModal) {
45
- return (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: _jsxs("div", { className: "bg-white rounded-lg shadow-xl p-6 m-4 max-w-md w-full", onClick: (e) => e.stopPropagation(), children: [_jsx("h3", { className: "text-lg font-semibold mb-4", children: "Wishlist Options" }), _jsx("div", { className: "bg-white rounded-md shadow-xs border border-gray-200", children: dropdownContent }), onClose && (_jsx("button", { onClick: onClose, className: "mt-4 w-full px-4 py-2 border border-gray-300 rounded hover:bg-gray-50", children: "Close" }))] }) }));
55
+ return (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: _jsxs("div", { className: "bg-white rounded-lg shadow-xl p-6 m-4 max-w-md w-full", onClick: (e) => e.stopPropagation(), children: [_jsx("h3", { className: "text-lg font-semibold mb-4", children: translationsWishlistDropdown?.wishlistOptions ||
56
+ 'Možnosti seznamu' }), _jsx("div", { className: "bg-white rounded-md shadow-xs border border-gray-200", children: dropdownContent }), onClose && (_jsx("button", { onClick: onClose, className: "mt-4 w-full px-4 py-2 border border-gray-300 rounded hover:bg-gray-50", children: translationsWishlistDropdown?.close || 'Zavřít' }))] }) }));
46
57
  }
47
58
  return (_jsx("div", { className: buildClassesByJoining('absolute right-0 mt-1 w-52 bg-white rounded-md shadow-xl z-50 border border-gray-200', className), children: dropdownContent }));
48
59
  };
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { Button } from '@q2devel/q2-storybook';
3
+ import Button from '../../Base/button/Button';
4
4
  import parse from 'html-react-parser';
5
5
  import { useState } from 'react';
6
6
  /**
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { NavBar as BaseNavBar } from '@q2devel/q2-storybook';
3
+ import { NavBar as BaseNavBar } from '../../Web/nav-bar/NavBar';
4
4
  /**
5
5
  * NavBar Component
6
6
  *
@@ -1,6 +1,6 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { Button } from '@q2devel/q2-storybook';
3
+ import Button from '../../Base/button/Button';
4
4
  import parse from 'html-react-parser';
5
5
  /**
6
6
  * TheatreEvent Component
@@ -142,10 +142,10 @@ export const DynamicLayout = ({ x, y, gap = 4, }) => {
142
142
  if (isDragging && !isExistingBlock) {
143
143
  setEnd(i);
144
144
  }
145
- }, onContextMenu: (e) => handleRightClick(e, i), className: `
146
- border border-dashed rounded cursor-pointer relative
147
- transition-colors duration-300
148
- ${color ?? 'bg-gray-800 border-gray-600'}
145
+ }, onContextMenu: (e) => handleRightClick(e, i), className: `
146
+ border border-dashed rounded cursor-pointer relative
147
+ transition-colors duration-300
148
+ ${color ?? 'bg-gray-800 border-gray-600'}
149
149
  `, children: block && i === block.start && (_jsx("div", { className: "absolute top-0 left-0 px-1 py-0.5", children: editingBlockId === block.id ? (_jsx("input", { autoFocus: true, className: "text-xs font-semibold bg-white text-gray-800 px-1 py-0.5 rounded outline-none w-24", value: block.title, onChange: (e) => handleRename(block.id, e.target.value), onBlur: () => setEditingBlockId(null), onKeyDown: (e) => {
150
150
  if (e.key === 'Enter')
151
151
  setEditingBlockId(null);
package/package.json CHANGED
@@ -1,84 +1,84 @@
1
- {
2
- "name": "@q2devel/q2-storybook",
3
- "version": "1.0.174",
4
- "main": "dist/index.js",
5
- "module": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "exports": {
8
- ".": {
9
- "types": "./dist/index.d.ts",
10
- "default": "./dist/index.js"
11
- },
12
- "./styles": "./dist/style.css"
13
- },
14
- "files": [
15
- "dist"
16
- ],
17
- "scripts": {
18
- "test": "echo \"Error: no test specified\" && exit 1",
19
- "storybook": "storybook dev -p 6006",
20
- "build-storybook": "storybook build",
21
- "build": "tsc && npm run build:css",
22
- "build:css": "postcss src/global.css -o dist/style.css",
23
- "prepublishOnly": "npm version patch && npm run build",
24
- "publish:patch": "npm publish && npm run build",
25
- "publish:minor": "npm version minor && npm run build && npm publish",
26
- "publish:major": "npm version major && npm run build && npm publish",
27
- "chromatic": "chromatic --project-token=chpt_371d8e65041a19e "
28
- },
29
- "keywords": [],
30
- "author": "Q2",
31
- "license": "ISC",
32
- "description": "Komponenty nebo konfigurace pro storybook",
33
- "devDependencies": {
34
- "@storybook/addon-actions": "^8.6.14",
35
- "@storybook/addon-essentials": "^8.6.14",
36
- "@storybook/addon-interactions": "^8.6.14",
37
- "@storybook/addon-links": "^8.6.14",
38
- "@storybook/addon-onboarding": "^8.6.14",
39
- "@storybook/addon-viewport": "^8.6.14",
40
- "@storybook/blocks": "^8.6.14",
41
- "@storybook/nextjs": "^8.6.14",
42
- "@storybook/react": "^8.6.14",
43
- "@storybook/test": "^8.6.14",
44
- "@tailwindcss/postcss": "^4.1.8",
45
- "@types/body-parser": "^1.19.6",
46
- "@types/classnames": "^2.3.0",
47
- "@types/express": "^5.0.3",
48
- "@types/node": "^22.14.1",
49
- "@types/react": "^19.1.2",
50
- "@types/react-dom": "^19.1.2",
51
- "autoprefixer": "^10.4.21",
52
- "chromatic": "^12.0.0",
53
- "cssnano": "^7.0.7",
54
- "postcss": "^8.5.4",
55
- "postcss-cli": "^11.0.1",
56
- "react": "^19.0.0",
57
- "react-dom": "^19.0.0",
58
- "rollup-plugin-postcss": "^4.0.2",
59
- "storybook": "^8.6.14",
60
- "tailwindcss": "^4.1.8",
61
- "typescript": "^5.8.3"
62
- },
63
- "peerDependencies": {
64
- "react": "^19.0.0",
65
- "react-dom": "^19.0.0"
66
- },
67
- "dependencies": {
68
- "@headlessui/react": "^2.2.2",
69
- "@heroicons/react": "^2.2.0",
70
- "@q2devel/q2-core": "^1.0.69",
71
- "@tanstack/react-query": "^5.76.1",
72
- "axios": "^1.9.0",
73
- "body-parser": "^2.2.0",
74
- "classnames": "^2.5.1",
75
- "express": "^5.1.0",
76
- "html-react-parser": "^5.2.3",
77
- "react-select": "^5.10.1",
78
- "tailwind-merge": "^3.2.0",
79
- "zod": "^4.0.14"
80
- },
81
- "overrides": {
82
- "storybook": "$storybook"
83
- }
84
- }
1
+ {
2
+ "name": "@q2devel/q2-storybook",
3
+ "version": "1.0.177",
4
+ "main": "dist/index.js",
5
+ "module": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "default": "./dist/index.js"
11
+ },
12
+ "./styles": "./dist/style.css"
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "test": "echo \"Error: no test specified\" && exit 1",
19
+ "storybook": "storybook dev -p 6006",
20
+ "build-storybook": "storybook build",
21
+ "build": "tsc && npm run build:css",
22
+ "build:css": "postcss src/global.css -o dist/style.css",
23
+ "prepublishOnly": "npm version patch && npm run build",
24
+ "publish:patch": "npm publish && npm run build",
25
+ "publish:minor": "npm version minor && npm run build && npm publish",
26
+ "publish:major": "npm version major && npm run build && npm publish",
27
+ "chromatic": "chromatic --project-token=chpt_371d8e65041a19e "
28
+ },
29
+ "keywords": [],
30
+ "author": "Q2",
31
+ "license": "ISC",
32
+ "description": "Komponenty nebo konfigurace pro storybook",
33
+ "devDependencies": {
34
+ "@storybook/addon-actions": "^8.6.14",
35
+ "@storybook/addon-essentials": "^8.6.14",
36
+ "@storybook/addon-interactions": "^8.6.14",
37
+ "@storybook/addon-links": "^8.6.14",
38
+ "@storybook/addon-onboarding": "^8.6.14",
39
+ "@storybook/addon-viewport": "^8.6.14",
40
+ "@storybook/blocks": "^8.6.14",
41
+ "@storybook/nextjs": "^8.6.14",
42
+ "@storybook/react": "^8.6.14",
43
+ "@storybook/test": "^8.6.14",
44
+ "@tailwindcss/postcss": "^4.1.8",
45
+ "@types/body-parser": "^1.19.6",
46
+ "@types/classnames": "^2.3.0",
47
+ "@types/express": "^5.0.3",
48
+ "@types/node": "^22.14.1",
49
+ "@types/react": "^19.1.2",
50
+ "@types/react-dom": "^19.1.2",
51
+ "autoprefixer": "^10.4.21",
52
+ "chromatic": "^12.0.0",
53
+ "cssnano": "^7.0.7",
54
+ "postcss": "^8.5.4",
55
+ "postcss-cli": "^11.0.1",
56
+ "react": "^19.0.0",
57
+ "react-dom": "^19.0.0",
58
+ "rollup-plugin-postcss": "^4.0.2",
59
+ "storybook": "^8.6.14",
60
+ "tailwindcss": "^4.1.8",
61
+ "typescript": "^5.8.3"
62
+ },
63
+ "peerDependencies": {
64
+ "react": "^19.0.0",
65
+ "react-dom": "^19.0.0"
66
+ },
67
+ "dependencies": {
68
+ "@headlessui/react": "^2.2.2",
69
+ "@heroicons/react": "^2.2.0",
70
+ "@q2devel/q2-core": "^1.0.71",
71
+ "@tanstack/react-query": "^5.76.1",
72
+ "axios": "^1.9.0",
73
+ "body-parser": "^2.2.0",
74
+ "classnames": "^2.5.1",
75
+ "express": "^5.1.0",
76
+ "html-react-parser": "^5.2.3",
77
+ "react-select": "^5.10.1",
78
+ "tailwind-merge": "^3.2.0",
79
+ "zod": "^4.0.14"
80
+ },
81
+ "overrides": {
82
+ "storybook": "$storybook"
83
+ }
84
+ }