@deenruv/admin-dashboard 1.0.16 → 1.0.17-dev.5

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.
Files changed (48) hide show
  1. package/dist/DeenruvAdminPanel.js +4 -4
  2. package/dist/components/GlobalSearch.js +5 -5
  3. package/dist/components/Menu/ActiveAdmins.js +1 -1
  4. package/dist/components/Menu/ChannelSwitcher.js +1 -1
  5. package/dist/components/Menu/LanguagesDropdown.js +1 -1
  6. package/dist/components/Menu/Navigation.js +4 -4
  7. package/dist/components/Menu/NavigationFooter.js +2 -2
  8. package/dist/components/Menu/Notifications.js +1 -1
  9. package/dist/components/Menu/index.js +12 -14
  10. package/dist/index.css +54 -44
  11. package/dist/locales/en/collections.json +7 -0
  12. package/dist/locales/en/common.json +1 -0
  13. package/dist/locales/en/orders.json +8 -0
  14. package/dist/locales/en/products.json +14 -2
  15. package/dist/locales/en/promotions.json +4 -0
  16. package/dist/locales/pl/collections.json +7 -0
  17. package/dist/locales/pl/common.json +1 -0
  18. package/dist/locales/pl/orders.json +8 -0
  19. package/dist/locales/pl/products.json +14 -2
  20. package/dist/locales/pl/promotions.json +4 -0
  21. package/dist/pages/Root.js +1 -1
  22. package/dist/pages/collections/Detail.js +20 -5
  23. package/dist/pages/collections/_components/CollectionDetailView.js +15 -2
  24. package/dist/pages/collections/_components/FiltersCard.js +51 -11
  25. package/dist/pages/customers/_components/PersonalDataCard.js +2 -1
  26. package/dist/pages/extensions/Extensions.js +3 -7
  27. package/dist/pages/orders/Detail.js +38 -5
  28. package/dist/pages/orders/List.js +1 -16
  29. package/dist/pages/orders/_components/CancelAndRefundDialog.js +1 -2
  30. package/dist/pages/orders/_components/OrderLineCustomFields.js +1 -1
  31. package/dist/pages/orders/_components/ProductsTable.js +1 -2
  32. package/dist/pages/orders/_components/RefundPaymentCard.js +1 -2
  33. package/dist/pages/products/Detail.js +58 -4
  34. package/dist/pages/products/_components/AssetsCard.js +15 -2
  35. package/dist/pages/products/_components/OptionsCard.js +7 -5
  36. package/dist/pages/products/_components/PriceCard.js +21 -8
  37. package/dist/pages/products/_components/ProductDetailView.js +7 -3
  38. package/dist/pages/products/_components/Variant.js +40 -19
  39. package/dist/pages/products/_components/VariantsTab.js +1 -1
  40. package/dist/pages/promotions/Detail.js +34 -3
  41. package/dist/pages/promotions/_components/EnabledCard.js +2 -2
  42. package/dist/pages/promotions/_components/PromotionDetailSidebar.js +2 -1
  43. package/dist/pages/roles/_components/PermissionsTable.js +0 -1
  44. package/dist/pages/shipping-methods/Detail.js +9 -5
  45. package/dist/pages/shipping-methods/_components/CalculatorCard.js +27 -11
  46. package/dist/pages/shipping-methods/_components/CheckerCard.js +28 -12
  47. package/dist/version.js +1 -1
  48. package/package.json +68 -68
@@ -103,12 +103,12 @@ export const DeenruvAdminPanel = ({ plugins, settings }) => {
103
103
  }, [theme]);
104
104
  return (_jsx(GlobalStoreProvider, { ...settings, children: _jsxs(I18nextProvider, { i18n: i18n, defaultNS: 'common', children: [_jsx(AnimatePresence, { children: isLoggedIn ? (_jsx(PluginProvider, { plugins: pluginsStore, context: context, children: _jsx(NotificationProvider, { notifications: [ORDER_STATUS_NOTIFICATION, SYSTEM_STATUS_NOTIFICATION].concat(pluginsStore.notifications), children: _jsx(RouterProvider, { router: router }) }) })) : (_jsx(LoginScreen, {})) }), _jsx(Toaster, { theme: theme, className: "toaster group", richColors: true, expand: true, position: "bottom-right", toastOptions: {
105
105
  classNames: {
106
- toast: 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg group-[.toaster]:rounded-lg group-[.toaster]:p-4',
106
+ toast: 'group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg group-[.toaster]:p-4',
107
107
  title: 'group-[.toast]:font-semibold group-[.toast]:text-foreground',
108
108
  description: 'group-[.toast]:text-muted-foreground group-[.toast]:text-sm',
109
- actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground group-[.toast]:rounded-md group-[.toast]:px-3 group-[.toast]:text-xs group-[.toast]:h-8 group-[.toast]:font-medium',
110
- cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground group-[.toast]:rounded-md group-[.toast]:px-3 group-[.toast]:text-xs group-[.toast]:h-8 group-[.toast]:font-medium',
111
- closeButton: 'group-[.toast]:text-foreground/50 group-[.toast]:hover:text-foreground group-[.toast]:rounded-md',
109
+ actionButton: 'group-[.toast]:bg-primary group-[.toast]:text-primary-foreground group-[.toast]:px-3 group-[.toast]:text-xs group-[.toast]:h-8 group-[.toast]:font-medium',
110
+ cancelButton: 'group-[.toast]:bg-muted group-[.toast]:text-muted-foreground group-[.toast]:px-3 group-[.toast]:text-xs group-[.toast]:h-8 group-[.toast]:font-medium',
111
+ closeButton: 'group-[.toast]:text-foreground/50 group-[.toast]:hover:text-foreground',
112
112
  success: 'group-[.toast]:border-l-4 group-[.toast]:border-l-green-500',
113
113
  error: 'group-[.toast]:border-l-4 group-[.toast]:border-l-red-500',
114
114
  warning: 'group-[.toast]:border-l-4 group-[.toast]:border-l-yellow-500',
@@ -110,25 +110,25 @@ export const GlobalSearch = () => {
110
110
  return _jsx(LayoutDashboard, { className: "mr-2 h-4 w-4 text-gray-500" });
111
111
  }
112
112
  };
113
- return (_jsxs(CommandDialog, { open: isOpen, onOpenChange: toggle, modal: true, children: [_jsx(CommandInput, { placeholder: t('globalSearch.placeholder'), className: "flex-1 bg-transparent text-base outline-none placeholder:text-muted-foreground" }), _jsxs(CommandList, { className: "max-h-[300px] overflow-y-auto py-2", children: [_jsx(CommandEmpty, { className: "py-6 text-center text-sm", children: t('globalSearch.emptyState') }), groupedRoutes.core.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.navigation'), className: "px-2", children: groupedRoutes.core.map((route) => (_jsxs(CommandItem, { onSelect: () => {
113
+ return (_jsxs(CommandDialog, { open: isOpen, onOpenChange: toggle, modal: true, children: [_jsx(CommandInput, { placeholder: t('globalSearch.placeholder'), className: "flex-1 bg-transparent text-sm outline-none placeholder:text-muted-foreground" }), _jsxs(CommandList, { className: "max-h-[320px] overflow-y-auto py-2", children: [_jsx(CommandEmpty, { className: "py-6 text-center text-sm", children: t('globalSearch.emptyState') }), groupedRoutes.core.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.navigation'), className: "px-2", children: groupedRoutes.core.map((route) => (_jsxs(CommandItem, { onSelect: () => {
114
114
  if (route.path) {
115
115
  navigate(route.path);
116
116
  }
117
117
  close();
118
- }, className: "group flex cursor-pointer items-center rounded-md px-2 py-2 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `core-${route.name}-${route.path}`))) })), groupedRoutes.newItems.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.createNew'), className: "px-2", children: groupedRoutes.newItems.map((route) => (_jsxs(CommandItem, { onSelect: () => {
118
+ }, className: "group flex cursor-pointer items-center px-3 py-2.5 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `core-${route.name}-${route.path}`))) })), groupedRoutes.newItems.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.createNew'), className: "px-2", children: groupedRoutes.newItems.map((route) => (_jsxs(CommandItem, { onSelect: () => {
119
119
  if (route.path) {
120
120
  navigate(route.path);
121
121
  }
122
122
  close();
123
- }, className: "group flex cursor-pointer items-center rounded-md px-2 py-2 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `new-${route.name}-${route.path}`))) })), groupedRoutes.lists.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.viewLists'), className: "px-2", children: groupedRoutes.lists.map((route) => (_jsxs(CommandItem, { onSelect: () => {
123
+ }, className: "group flex cursor-pointer items-center px-3 py-2.5 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `new-${route.name}-${route.path}`))) })), groupedRoutes.lists.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.viewLists'), className: "px-2", children: groupedRoutes.lists.map((route) => (_jsxs(CommandItem, { onSelect: () => {
124
124
  if (route.path) {
125
125
  navigate(route.path);
126
126
  }
127
127
  close();
128
- }, className: "group flex cursor-pointer items-center rounded-md px-2 py-2 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `list-${route.name}-${route.path}`))) })), groupedRoutes.pluginRoutes.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.plugins'), className: "px-2", children: groupedRoutes.pluginRoutes.map((route) => (_jsxs(CommandItem, { onSelect: () => {
128
+ }, className: "group flex cursor-pointer items-center px-3 py-2.5 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `list-${route.name}-${route.path}`))) })), groupedRoutes.pluginRoutes.length > 0 && (_jsx(CommandGroup, { heading: t('globalSearch.plugins'), className: "px-2", children: groupedRoutes.pluginRoutes.map((route) => (_jsxs(CommandItem, { onSelect: () => {
129
129
  if (route.path) {
130
130
  navigate(route.path);
131
131
  }
132
132
  close();
133
- }, className: "group flex cursor-pointer items-center rounded-md px-2 py-2 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `plugin-${route.name}-${route.path}`))) }))] }), _jsx("div", { className: "border-t bg-muted/50 p-2", children: _jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [_jsxs("div", { className: "flex gap-2", children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "rounded border bg-muted px-1.5 py-0.5 text-[10px]", children: "\u2191" }), _jsx("kbd", { className: "rounded border bg-muted px-1.5 py-0.5 text-[10px]", children: "\u2193" }), _jsx("span", { children: t('globalSearch.navigate') })] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "rounded border bg-muted px-1.5 py-0.5 text-[10px]", children: "Enter" }), _jsx("span", { children: t('globalSearch.select') })] })] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "rounded border bg-muted px-1.5 py-0.5 text-[10px]", children: "Esc" }), _jsx("span", { children: t('globalSearch.close') })] })] }) })] }));
133
+ }, className: "group flex cursor-pointer items-center px-3 py-2.5 transition-colors hover:bg-accent", children: [getRouteIcon(route.type), _jsxs("div", { className: "flex flex-col", children: [_jsx("span", { className: "font-medium", children: route.name }), route.description && _jsx("span", { className: "text-xs text-muted-foreground", children: route.description })] }), _jsx(ArrowRight, { className: "ml-auto h-4 w-4 opacity-0 transition-opacity group-hover:opacity-70" })] }, route.id || `plugin-${route.name}-${route.path}`))) }))] }), _jsx("div", { className: "border-t bg-card p-2", children: _jsxs("div", { className: "flex items-center justify-between text-xs text-muted-foreground", children: [_jsxs("div", { className: "flex gap-2", children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "border bg-muted px-1.5 py-0.5 text-[10px]", children: "\u2191" }), _jsx("kbd", { className: "border bg-muted px-1.5 py-0.5 text-[10px]", children: "\u2193" }), _jsx("span", { children: t('globalSearch.navigate') })] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "border bg-muted px-1.5 py-0.5 text-[10px]", children: "Enter" }), _jsx("span", { children: t('globalSearch.select') })] })] }), _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("kbd", { className: "border bg-muted px-1.5 py-0.5 text-[10px]", children: "Esc" }), _jsx("span", { children: t('globalSearch.close') })] })] }) })] }));
134
134
  };
@@ -20,5 +20,5 @@ export const ActiveAdmins = () => {
20
20
  else
21
21
  return t('awesomeMenu.above5MinAgo');
22
22
  };
23
- return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "sm", className: "h-10", children: t('awesomeMenu.activeAdministratorsValue', { value: activeClients.length }) }) }), _jsx(PopoverContent, { className: "mr-4", children: _jsxs("div", { className: "flex flex-col gap-4 rounded-md", children: [_jsx(Label, { className: "select-none", children: t('awesomeMenu.activeAdministrators') }), activeClients.length ? (activeClients.map((client) => (_jsx("div", { className: "flex items-center justify-between", children: _jsxs("div", { className: "flex w-full flex-col", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("span", { className: "text-sm font-bold", children: [client.firstName, " ", client.lastName, " ", client.me && '(me)'] }), _jsx(motion.div, { animate: { scale: [1, 1.2, 1] }, transition: { duration: 1.5, repeat: Infinity }, className: "size-2 rounded-full bg-green-500" })] }), _jsx("span", { className: "text-sm text-muted-foreground", children: formatTimeAgo(client.lastActive) }), !client.me && (_jsx(NavLink, { to: client.location, className: "text-sm text-muted-foreground", viewTransition: true, children: client.location.replace(window.location.origin, '') }))] }) }, client.id)))) : (_jsx("div", { children: _jsx("span", { className: "text-sm text-muted-foreground", children: t('awesomeMenu.noActiveAdministrators') }) }))] }) })] }));
23
+ return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "sm", className: "h-10", children: t('awesomeMenu.activeAdministratorsValue', { value: activeClients.length }) }) }), _jsx(PopoverContent, { className: "mr-4", children: _jsxs("div", { className: "flex flex-col gap-4", children: [_jsx(Label, { className: "select-none", children: t('awesomeMenu.activeAdministrators') }), activeClients.length ? (activeClients.map((client) => (_jsx("div", { className: "flex items-center justify-between", children: _jsxs("div", { className: "flex w-full flex-col", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("span", { className: "text-sm font-bold", children: [client.firstName, " ", client.lastName, " ", client.me && '(me)'] }), _jsx(motion.div, { animate: { scale: [1, 1.2, 1] }, transition: { duration: 1.5, repeat: Infinity }, className: "size-2 rounded-full bg-green-500" })] }), _jsx("span", { className: "text-sm text-muted-foreground", children: formatTimeAgo(client.lastActive) }), !client.me && (_jsx(NavLink, { to: client.location, className: "text-sm text-muted-foreground", viewTransition: true, children: client.location.replace(window.location.origin, '') }))] }) }, client.id)))) : (_jsx("div", { children: _jsx("span", { className: "text-sm text-muted-foreground", children: t('awesomeMenu.noActiveAdministrators') }) }))] }) })] }));
24
24
  };
@@ -16,5 +16,5 @@ export function ChannelSwitcher({ className }) {
16
16
  if (!channels || channels.length === 0) {
17
17
  return null;
18
18
  }
19
- return (_jsx("div", { className: className, children: _jsxs(Select, { defaultValue: selectedChannel?.id, onValueChange: onChannelChange, value: selectedChannel?.id, children: [_jsx(SelectTrigger, { className: cn('flex items-center gap-2 [&_svg]:h-4 [&_svg]:w-4 [&_svg]:shrink-0 [&>span]:line-clamp-1 [&>span]:flex [&>span]:w-full [&>span]:items-center [&>span]:gap-1 [&>span]:truncate'), "aria-label": "Select an channel", children: _jsx(SelectValue, { children: _jsx("span", { className: "ml-2", children: getChannelLabel(channels.find((account) => account.id === selectedChannel?.id)?.code) }) }) }), _jsx(SelectContent, { children: channels.map((channel) => (_jsx(SelectItem, { value: channel.id, children: _jsx("div", { className: "flex items-center gap-3 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-foreground", children: getChannelLabel(channel.code) }) }, channel.code))) })] }) }));
19
+ return (_jsx("div", { className: className, children: _jsxs(Select, { defaultValue: selectedChannel?.id, onValueChange: onChannelChange, value: selectedChannel?.id, children: [_jsx(SelectTrigger, { className: cn('flex h-9 items-center gap-2 border-border/80 bg-card px-3 text-xs font-medium [&_svg]:h-4 [&_svg]:w-4 [&_svg]:shrink-0 [&>span]:line-clamp-1 [&>span]:flex [&>span]:w-full [&>span]:items-center [&>span]:gap-1 [&>span]:truncate'), "aria-label": "Select a channel", children: _jsx(SelectValue, { children: _jsx("span", { className: "ml-1", children: getChannelLabel(channels.find((account) => account.id === selectedChannel?.id)?.code) }) }) }), _jsx(SelectContent, { children: channels.map((channel) => (_jsx(SelectItem, { value: channel.id, children: _jsx("div", { className: "flex items-center gap-3 [&_svg]:size-4 [&_svg]:shrink-0 [&_svg]:text-foreground", children: getChannelLabel(channel.code) }) }, channel.code))) })] }) }));
20
20
  }
@@ -23,5 +23,5 @@ export const LanguagesDropdown = () => {
23
23
  })));
24
24
  const Flag = langFlagDict[contentLng] || EU;
25
25
  const contentLanguages = selectedChannel?.availableLanguageCodes || [];
26
- return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", className: "h-9", children: [t('language'), _jsx(Badge, { variant: "outline", className: "ml-2", children: _jsx(Flag, { className: "size-4" }) })] }) }), _jsxs(DropdownMenuContent, { align: "end", className: "z-[150]", children: [_jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: _jsx("span", { children: t('content') }) }), _jsx(DropdownMenuPortal, { children: _jsx(DropdownMenuSubContent, { className: "z-[150]", children: contentLanguages.map((lng) => (_jsxs(DropdownMenuItem, { onClick: () => lng !== contentLng && setContentLng(lng), children: [_jsx("span", { children: getLanguageName(lng, uiLng) }), lng === contentLng && _jsx(Check, { className: "ml-auto size-4" })] }, lng))) }) })] }), _jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: _jsx("span", { children: "UI" }) }), _jsx(DropdownMenuPortal, { children: _jsx(DropdownMenuSubContent, { className: "z-[150]", children: uiLanguages.map((lng) => (_jsxs(DropdownMenuItem, { onClick: () => lng !== uiLng && setUiLng(lng), children: [_jsx("span", { children: getLanguageName(lng) }), lng === uiLng && _jsx(Check, { className: "ml-auto size-4" })] }, lng))) }) })] })] })] }));
26
+ return (_jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", className: "h-9 px-3 text-xs", children: [t('language'), _jsx(Badge, { variant: "outline", className: "ml-2 h-5 px-1.5", children: _jsx(Flag, { className: "size-4" }) })] }) }), _jsxs(DropdownMenuContent, { align: "end", className: "z-[150]", children: [_jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: _jsx("span", { children: t('content') }) }), _jsx(DropdownMenuPortal, { children: _jsx(DropdownMenuSubContent, { className: "z-[150]", children: contentLanguages.map((lng) => (_jsxs(DropdownMenuItem, { onClick: () => lng !== contentLng && setContentLng(lng), children: [_jsx("span", { children: getLanguageName(lng, uiLng) }), lng === contentLng && _jsx(Check, { className: "ml-auto size-4" })] }, lng))) }) })] }), _jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: _jsx("span", { children: "UI" }) }), _jsx(DropdownMenuPortal, { children: _jsx(DropdownMenuSubContent, { className: "z-[150]", children: uiLanguages.map((lng) => (_jsxs(DropdownMenuItem, { onClick: () => lng !== uiLng && setUiLng(lng), children: [_jsx("span", { children: getLanguageName(lng) }), lng === uiLng && _jsx(Check, { className: "ml-auto size-4" })] }, lng))) }) })] })] })] }));
27
27
  };
@@ -260,12 +260,12 @@ export function Navigation({ isCollapsed }) {
260
260
  // );
261
261
  const defaultAccordionOpenValue = ['shop-group', 'assortment-group'];
262
262
  if (!loaded) {
263
- return (_jsx("div", { className: "relative overflow-y-auto", children: _jsx("div", { className: "flex h-[calc(100%-70px)] flex-col gap-4 pb-2 lg:h-[calc(100%-80px)]", children: Array.from({ length: 3 }).map((_, groupIdx) => (_jsxs("div", { className: "flex flex-col gap-1 px-2", children: [!isCollapsed && (_jsx("div", { className: "px-4 py-2", children: _jsx(Skeleton, { className: "h-3 w-20" }) })), Array.from({ length: groupIdx === 0 ? 4 : groupIdx === 1 ? 5 : 3 }).map((_, linkIdx) => (_jsxs("div", { className: cn('flex items-center rounded-md px-4 py-2', isCollapsed && 'justify-center px-0'), children: [_jsx(Skeleton, { className: cn('size-4 shrink-0', isCollapsed && 'size-6') }), !isCollapsed && _jsx(Skeleton, { className: "ml-2 h-4 w-24" })] }, linkIdx)))] }, groupIdx))) }) }));
263
+ return (_jsx("div", { className: "relative overflow-y-auto", children: _jsx("div", { className: "flex h-[calc(100%-64px)] flex-col gap-3 pb-2 lg:h-[calc(100%-72px)]", children: Array.from({ length: 3 }).map((_, groupIdx) => (_jsxs("div", { className: "flex flex-col gap-1 px-2.5", children: [!isCollapsed && (_jsx("div", { className: "px-3 py-2", children: _jsx(Skeleton, { className: "h-3 w-20" }) })), Array.from({ length: groupIdx === 0 ? 4 : groupIdx === 1 ? 5 : 3 }).map((_, linkIdx) => (_jsxs("div", { className: cn('flex items-center px-3 py-2', isCollapsed && 'justify-center px-0'), children: [_jsx(Skeleton, { className: cn('size-4 shrink-0', isCollapsed && 'size-6') }), !isCollapsed && _jsx(Skeleton, { className: "ml-2 h-4 w-24" })] }, linkIdx)))] }, groupIdx))) }) }));
264
264
  }
265
- return (_jsx("div", { className: "relative overflow-y-auto", children: _jsx("div", { "data-collapsed": isCollapsed, className: "group flex h-[calc(100%-70px)] flex-col gap-4 pb-2 data-[collapsed=true]:py-2 lg:h-[calc(100%-80px)]", children: _jsx(Accordion, { type: "multiple", className: "w-full", defaultValue: defaultAccordionOpenValue, value: isCollapsed ? permittedNavigationGroups.map((g) => g.id) : undefined, children: permittedNavigationGroups.map((group) => (_jsxs(AccordionItem, { value: group.id, children: [!isCollapsed && (_jsx(AccordionTrigger, { className: cn('flex items-center justify-between pr-3 hover:no-underline'), children: _jsxs("div", { className: "flex items-center gap-2 px-6", children: [_jsx("h4", { className: "text-xs font-bold uppercase hover:underline", children: group.label }), getNavigationNotification(group.id), viewMarkers ? (_jsx("p", { className: "text-xs font-semibold text-muted-foreground lowercase dark:text-muted-foreground", children: group.id })) : null] }) })), _jsx(AccordionContent, { className: cn(isCollapsed ? 'py-2' : 'pb-4'), children: _jsx("nav", { id: group.id, className: "grid gap-1 px-2 text-muted-foreground group-[[data-collapsed=true]]:justify-center group-[[data-collapsed=true]]:px-2", children: group.links.map((link, index) => {
265
+ return (_jsx("div", { className: "relative overflow-y-auto", children: _jsx("div", { "data-collapsed": isCollapsed, className: "group flex h-[calc(100%-64px)] flex-col gap-2 py-2 data-[collapsed=true]:py-2 lg:h-[calc(100%-72px)]", children: _jsx(Accordion, { type: "multiple", className: "w-full", defaultValue: defaultAccordionOpenValue, value: isCollapsed ? permittedNavigationGroups.map((g) => g.id) : undefined, children: permittedNavigationGroups.map((group) => (_jsxs(AccordionItem, { value: group.id, className: "border-none", children: [!isCollapsed && (_jsx(AccordionTrigger, { className: cn('flex items-center justify-between px-3 py-2 hover:no-underline'), children: _jsxs("div", { className: "flex items-center gap-2 px-1", children: [_jsx("h4", { className: "text-[11px] font-semibold tracking-[0.08em] text-muted-foreground uppercase", children: group.label }), getNavigationNotification(group.id), viewMarkers ? (_jsx("p", { className: "text-xs font-semibold text-muted-foreground lowercase dark:text-muted-foreground", children: group.id })) : null] }) })), _jsx(AccordionContent, { className: cn(isCollapsed ? 'py-1' : 'pb-2'), children: _jsx("nav", { id: group.id, className: "grid gap-1 px-2.5 text-muted-foreground group-[[data-collapsed=true]]:justify-center group-[[data-collapsed=true]]:px-2", children: group.links.map((link, index) => {
266
266
  const notifications = getNavigationNotification(link.id);
267
267
  return (_jsx(React.Fragment, { children: isCollapsed ? (_jsxs(Tooltip, { delayDuration: 0, children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("div", { children: _jsx(NavLink, { to: link.href, viewTransition: true, children: _jsxs("div", { className: cn(buttonVariants({ variant: 'navigation-link', size: 'icon' }), 'h-9 w-9', location.pathname === link.href &&
268
- 'bg-muted opacity-100 hover:bg-muted hover:text-muted-foreground dark:bg-muted dark:hover:bg-muted'), children: [_jsx(link.icon, { className: "size-6" }), _jsx("span", { className: "sr-only", children: link.title })] }) }) }) }), _jsxs(TooltipContent, { side: "right", className: "relative flex items-center gap-4", children: [viewMarkers ? (_jsx("div", { className: "text-xs font-semibold text-muted-foreground lowercase dark:text-muted-foreground", children: link.id })) : null, capitalizeFirstLetter(link.title), notifications] })] }, index)) : (_jsx(NavLink, { to: link.href, viewTransition: true, children: _jsxs("div", { id: link.id, className: cn('relative flex items-center justify-start rounded-md px-4 py-2 capitalize', location.pathname === link.href &&
269
- 'bg-muted font-semibold opacity-100 hover:bg-muted hover:text-muted-foreground dark:bg-muted dark:hover:bg-muted'), children: [viewMarkers ? (_jsx("div", { className: "absolute top-1/2 right-2 -translate-y-1/2 text-xs font-semibold text-muted-foreground lowercase dark:text-muted-foreground", children: link.id })) : null, _jsx(link.icon, { className: "mr-2 size-4" }), capitalizeFirstLetter(link.title), notifications] }) })) }, link.id));
268
+ 'bg-primary/10 text-primary opacity-100 hover:bg-primary/10 hover:text-primary'), children: [_jsx(link.icon, { className: "size-5" }), _jsx("span", { className: "sr-only", children: link.title })] }) }) }) }), _jsxs(TooltipContent, { side: "right", className: "relative flex items-center gap-4", children: [viewMarkers ? (_jsx("div", { className: "text-xs font-semibold text-muted-foreground lowercase dark:text-muted-foreground", children: link.id })) : null, capitalizeFirstLetter(link.title), notifications] })] }, index)) : (_jsx(NavLink, { to: link.href, viewTransition: true, children: _jsxs("div", { id: link.id, className: cn('relative flex h-9 items-center justify-start px-3 text-sm font-medium capitalize transition-colors hover:bg-muted/70 hover:text-foreground', location.pathname === link.href &&
269
+ 'bg-primary/10 text-primary opacity-100 hover:bg-primary/10 hover:text-primary'), children: [viewMarkers ? (_jsx("div", { className: "absolute top-1/2 right-2 -translate-y-1/2 text-xs font-semibold text-muted-foreground lowercase dark:text-muted-foreground", children: link.id })) : null, _jsx(link.icon, { className: "mr-2 size-4 shrink-0" }), capitalizeFirstLetter(link.title), notifications] }) })) }, link.id));
270
270
  }) }) })] }, group.id))) }) }) }));
271
271
  }
@@ -7,6 +7,6 @@ export const NavigationFooter = ({ isCollapsed }) => {
7
7
  const { t } = useTranslation('common');
8
8
  const userPermissions = useServer((p) => p.userPermissions);
9
9
  const isPermittedToExtensions = userPermissions.includes(Permission.ReadSettings);
10
- return (_jsxs("div", { className: "flex w-full flex-col gap-2 bg-secondary py-2 text-xs shadow-2xl select-none", children: [isPermittedToExtensions && !isCollapsed && (_jsxs(_Fragment, { children: [_jsx("div", { children: _jsx(NavLink, { to: Routes.extensions, viewTransition: true, children: _jsxs("div", { className: cn('relative flex items-center justify-center rounded-md px-4 capitalize', location.pathname === Routes.extensions &&
11
- 'bg-muted font-semibold opacity-100 hover:bg-muted hover:text-muted-foreground dark:bg-muted dark:hover:bg-muted'), children: [_jsx(Puzzle, { className: "mr-2 size-4" }), capitalizeFirstLetter(t('menu.extensions'))] }) }) }), _jsx(Separator, {})] })), _jsxs("div", { className: "flex items-center justify-center gap-1", children: [!isCollapsed && _jsx("p", { className: "uppercase", children: "Deenruv" }), _jsxs("span", { children: [!isCollapsed ? 'ver. ' : 'v. ', window.__DEENRUV_SETTINGS__.appVersion] })] })] }));
10
+ return (_jsxs("div", { className: "flex w-full flex-col gap-2 border-t bg-card/80 py-2 text-xs text-muted-foreground select-none", children: [isPermittedToExtensions && !isCollapsed && (_jsxs(_Fragment, { children: [_jsx("div", { children: _jsx(NavLink, { to: Routes.extensions, viewTransition: true, children: _jsxs("div", { className: cn('relative mx-2 flex h-8 items-center justify-center px-3 text-sm font-medium capitalize transition-colors hover:bg-muted/70 hover:text-foreground', location.pathname === Routes.extensions &&
11
+ 'bg-primary/10 text-primary opacity-100 hover:bg-primary/10 hover:text-primary'), children: [_jsx(Puzzle, { className: "mr-2 size-4" }), capitalizeFirstLetter(t('menu.extensions'))] }) }) }), _jsx(Separator, {})] })), _jsxs("div", { className: "flex items-center justify-center gap-1 px-2", children: [!isCollapsed && _jsx("p", { className: "uppercase", children: "Deenruv" }), _jsxs("span", { children: [!isCollapsed ? 'ver. ' : 'v. ', window.__DEENRUV_SETTINGS__.appVersion] })] })] }));
12
12
  };
@@ -87,5 +87,5 @@ export const Notifications = () => {
87
87
  prevJobQueuesRef.current = [...jobQueues];
88
88
  }
89
89
  }, [jobQueues, status]);
90
- return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "icon", className: "relative size-10", children: [_jsx(Bell, { className: "size-4" }), hasUnread && (_jsx("span", { className: "absolute top-1.5 right-1.5 size-2 rounded-full bg-red-500", children: _jsx("span", { className: "absolute inset-0 animate-ping rounded-full bg-red-400 opacity-75" }) })), _jsx("span", { className: "sr-only", children: t('notificationsBox.toggleNotifications') })] }) }), _jsx(PopoverContent, { className: "z-[2138] w-md p-0", align: "end", children: _jsx(Tabs, { defaultValue: "ALL", className: "w-full", children: _jsxs(Card, { className: "w-full border-0 shadow-none", children: [_jsxs(CardHeader, { className: cn('flex w-full flex-col items-start justify-start gap-2 bg-muted/30 p-0', components.length === 0 && 'pb-3'), children: [_jsxs("div", { className: "flex h-full w-full flex-1 items-center justify-between px-4 pt-3", children: [_jsxs("div", { className: "flex flex-col", children: [_jsx(CardTitle, { className: "text-base", children: t('notificationsBox.notifications') }), _jsx(CardDescription, { className: "mt-1 text-xs", children: t('notificationsBox.recentNotifications') })] }), notifications.length > 0 && (_jsxs(Button, { variant: "ghost", size: "sm", className: "h-8 text-xs", onClick: clearAllNotifications, children: [_jsx(Trash2, { className: "mr-1 size-3" }), t('notificationsBox.clearAll')] }))] }), components.length !== 0 && (_jsxs(TabsList, { className: "m-0 w-full rounded-none", children: [_jsx(TabsTrigger, { value: "ALL", className: "w-full rounded-none text-left", children: t('notificationsBox.all') }), cyclingNotifications.map((notification) => (_jsx(TabsTrigger, { value: notification.id, className: "w-full rounded-none text-left", children: notification.id }, notification.id)))] }))] }), _jsxs(CardContent, { className: "max-h-[400px] overflow-auto p-0", children: [_jsx(TabsContent, { value: "ALL", className: "mt-0", children: notifications.length > 0 ? (_jsx("div", { className: "divide-y", children: notifications.map((notification) => (_jsxs("div", { className: `flex items-start gap-3 p-4 transition-colors ${notification.read ? 'bg-background' : 'bg-muted/20'}`, children: [_jsx("div", { className: "mt-0.5", children: notification.icon }), _jsxs("div", { className: "flex-1 space-y-1", children: [_jsx("p", { className: "text-sm leading-none font-medium", children: notification.title }), _jsx("p", { className: "text-xs text-muted-foreground", children: notification.description }), _jsxs("div", { className: "flex items-center pt-1", children: [_jsx(Clock, { className: "mr-1 size-3 text-muted-foreground" }), _jsx("span", { className: "text-xs text-muted-foreground", children: notification.time })] })] })] }, notification.id))) })) : (_jsxs("div", { className: "flex flex-col items-center justify-center px-4 py-8 text-center", children: [_jsx("div", { className: "mb-3 rounded-full bg-muted p-3", children: _jsx(Bell, { className: "size-6 text-muted-foreground" }) }), _jsx("h3", { className: "text-sm font-medium", children: t('notificationsBox.emptyStateMessage') }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: t('notificationsBox.emptyStateDescription') })] })) }), components.map((notification) => (_jsx(TabsContent, { value: notification.id, children: notification.component }, notification.id)))] }), hasUnread && (_jsx(CardFooter, { className: "flex items-center justify-end p-4", children: _jsxs(Button, { variant: "ghost", size: "sm", className: "h-8 text-xs", onClick: markAllAsRead, children: [_jsx(Check, { className: "mr-1 size-3" }), t('notificationsBox.markAllAsRead')] }) }))] }) }) })] }));
90
+ return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "icon", className: "relative size-9", children: [_jsx(Bell, { className: "size-4" }), hasUnread && (_jsx("span", { className: "absolute top-1.5 right-1.5 size-2 rounded-full bg-red-500", children: _jsx("span", { className: "absolute inset-0 animate-ping rounded-full bg-red-400 opacity-75" }) })), _jsx("span", { className: "sr-only", children: t('notificationsBox.toggleNotifications') })] }) }), _jsx(PopoverContent, { className: "z-[2138] w-[min(28rem,calc(100vw-2rem))] p-0", align: "end", children: _jsx(Tabs, { defaultValue: "ALL", className: "w-full", children: _jsxs(Card, { className: "w-full border-0 shadow-none", children: [_jsxs(CardHeader, { className: cn('flex w-full flex-col items-start justify-start gap-2 bg-card p-0', components.length === 0 && 'pb-3'), children: [_jsxs("div", { className: "flex h-full w-full flex-1 items-center justify-between px-4 pt-3", children: [_jsxs("div", { className: "flex flex-col", children: [_jsx(CardTitle, { className: "text-base", children: t('notificationsBox.notifications') }), _jsx(CardDescription, { className: "mt-1 text-xs", children: t('notificationsBox.recentNotifications') })] }), notifications.length > 0 && (_jsxs(Button, { variant: "ghost", size: "sm", className: "h-8 text-xs", onClick: clearAllNotifications, children: [_jsx(Trash2, { className: "mr-1 size-3" }), t('notificationsBox.clearAll')] }))] }), components.length !== 0 && (_jsxs(TabsList, { className: "m-0 w-full bg-muted/50", children: [_jsx(TabsTrigger, { value: "ALL", className: "w-full text-left", children: t('notificationsBox.all') }), cyclingNotifications.map((notification) => (_jsx(TabsTrigger, { value: notification.id, className: "w-full text-left", children: notification.id }, notification.id)))] }))] }), _jsxs(CardContent, { className: "max-h-[400px] overflow-auto p-0", children: [_jsx(TabsContent, { value: "ALL", className: "mt-0", children: notifications.length > 0 ? (_jsx("div", { className: "divide-y", children: notifications.map((notification) => (_jsxs("div", { className: `flex items-start gap-3 p-4 transition-colors ${notification.read ? 'bg-card' : 'bg-accent/40'}`, children: [_jsx("div", { className: "mt-0.5", children: notification.icon }), _jsxs("div", { className: "flex-1 space-y-1", children: [_jsx("p", { className: "text-sm leading-none font-medium", children: notification.title }), _jsx("p", { className: "text-xs text-muted-foreground", children: notification.description }), _jsxs("div", { className: "flex items-center pt-1", children: [_jsx(Clock, { className: "mr-1 size-3 text-muted-foreground" }), _jsx("span", { className: "text-xs text-muted-foreground", children: notification.time })] })] })] }, notification.id))) })) : (_jsxs("div", { className: "flex flex-col items-center justify-center px-4 py-8 text-center", children: [_jsx("div", { className: "mb-3 bg-muted p-3", children: _jsx(Bell, { className: "size-6 text-muted-foreground" }) }), _jsx("h3", { className: "text-sm font-medium", children: t('notificationsBox.emptyStateMessage') }), _jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: t('notificationsBox.emptyStateDescription') })] })) }), components.map((notification) => (_jsx(TabsContent, { value: notification.id, children: notification.component }, notification.id)))] }), hasUnread && (_jsx(CardFooter, { className: "flex items-center justify-end p-4", children: _jsxs(Button, { variant: "ghost", size: "sm", className: "h-8 text-xs", onClick: markAllAsRead, children: [_jsx(Check, { className: "mr-1 size-3" }), t('notificationsBox.markAllAsRead')] }) }))] }) }) })] }));
91
91
  };
@@ -11,9 +11,9 @@ import { BrandLogo } from "../BrandLogo.js";
11
11
  import { LanguagesDropdown } from './LanguagesDropdown.js';
12
12
  import { Notifications } from './Notifications.js';
13
13
  import { NavigationFooter } from "./NavigationFooter.js";
14
- const ResizablePanelGroup = ({ className, ...props }) => (_jsx(ResizablePrimitive.PanelGroup, { className: cn('flex h-full w-full data-[panel-group-direction=vertical]:flex-col', className), ...props }));
14
+ const ResizablePanelGroup = ({ className, ...props }) => (_jsx(ResizablePrimitive.Group, { className: cn('flex h-full w-full data-[orientation=vertical]:flex-col', className), ...props }));
15
15
  const ResizablePanel = ResizablePrimitive.Panel;
16
- const ResizableHandle = ({ withHandle, className, ...props }) => (_jsx(ResizablePrimitive.PanelResizeHandle, { className: cn('relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-none data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:translate-x-0 data-[panel-group-direction=vertical]:after:-translate-y-1/2 [&[data-panel-group-direction=vertical]>div]:rotate-90', className), ...props, children: withHandle && (_jsx("div", { className: "z-10 flex h-4 w-3 items-center justify-center rounded-sm border bg-border", children: _jsx(GripVertical, { className: "size-2.5" }) })) }));
16
+ const ResizableHandle = ({ withHandle, className, ...props }) => (_jsx(ResizablePrimitive.Separator, { className: cn('relative flex w-px items-center justify-center bg-border/70 after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:outline-none data-[orientation=vertical]:h-px data-[orientation=vertical]:w-full data-[orientation=vertical]:after:left-0 data-[orientation=vertical]:after:h-1 data-[orientation=vertical]:after:w-full data-[orientation=vertical]:after:translate-x-0 data-[orientation=vertical]:after:-translate-y-1/2 [&[data-orientation=vertical]>div]:rotate-90', className), ...props, children: withHandle && (_jsx("div", { className: "z-10 flex h-4 w-3 items-center justify-center border bg-background text-muted-foreground", children: _jsx(GripVertical, { className: "size-2.5" }) })) }));
17
17
  const removableCrumbs = ['draft', 'admin-ui'];
18
18
  export const Menu = ({ children }) => {
19
19
  const openGlobalSearch = useGlobalSearch((state) => state.open);
@@ -42,18 +42,16 @@ export const Menu = ({ children }) => {
42
42
  .flatMap((p) => p.split('/'))
43
43
  .filter(Boolean)
44
44
  .filter((crumb) => !removableCrumbs.includes(crumb)), [matches]);
45
- return (_jsx("div", { className: "w-full border-r bg-muted/40", children: _jsx("div", { className: "flex h-full max-h-screen flex-col gap-2", children: _jsx("div", { className: "flex-1", children: _jsx(TooltipProvider, { delayDuration: 100, children: _jsxs(ResizablePanelGroup, { onLayout: (sizes) => {
46
- document.cookie = `react-resizable-panels:layout=${JSON.stringify(sizes)}`;
47
- }, direction: "horizontal", className: "size-full", children: [_jsxs(ResizablePanel, { defaultSize: 18, collapsedSize: 4, collapsible: true, minSize: 10, maxSize: 20, onExpand: () => {
48
- setIsCollapsed(false);
49
- document.cookie = `react-resizable-panels:collapsed=${JSON.stringify(false)}`;
50
- }, onCollapse: () => {
51
- setIsCollapsed(true);
52
- document.cookie = `react-resizable-panels:collapsed=${JSON.stringify(true)}`;
53
- }, className: cn(isCollapsed && 'min-w-[50px] transition-all duration-300 ease-in-out'), children: [_jsx("div", { className: cn('flex h-[80px] flex-col items-center justify-center gap-4 border-b'), children: _jsx("div", { className: `flex h-full items-center justify-center ${!isCollapsed && 'w-full'} cursor-pointer p-4`, onClick: () => navigate(Routes.dashboard, { viewTransition: true }), children: _jsx(BrandLogo, { isCollapsed: isCollapsed }) }) }), _jsxs("div", { className: "flex h-[calc(100vh-80px)] flex-col justify-between", children: [_jsx(Navigation, { isCollapsed: isCollapsed }), _jsx(NavigationFooter, { isCollapsed: isCollapsed })] })] }), _jsx(ResizableHandle, { withHandle: true }), _jsxs(ResizablePanel, { children: [_jsxs("div", { className: "flex h-[70px] items-center border-b p-4 lg:h-[80px] lg:px-6", children: [_jsxs("div", { className: "flex flex-col items-start justify-center", children: [_jsx(Breadcrumb, { children: _jsx(BreadcrumbList, { children: crumbs.length ? (crumbs.map((c, i) => {
45
+ return (_jsx("div", { className: "w-full bg-background", children: _jsx("div", { className: "flex h-full max-h-screen flex-col", children: _jsx("div", { className: "flex-1", children: _jsx(TooltipProvider, { delayDuration: 100, children: _jsxs(ResizablePanelGroup, { onLayoutChanged: (layout) => {
46
+ document.cookie = `react-resizable-panels:layout=${JSON.stringify(Object.values(layout))}`;
47
+ }, orientation: "horizontal", className: "size-full", children: [_jsxs(ResizablePanel, { id: "navigation", defaultSize: "16%", collapsedSize: "4%", collapsible: true, minSize: "11%", maxSize: "18%", onResize: (size) => {
48
+ const collapsed = size.asPercentage <= 4;
49
+ setIsCollapsed(collapsed);
50
+ document.cookie = `react-resizable-panels:collapsed=${JSON.stringify(collapsed)}`;
51
+ }, className: cn(isCollapsed && 'min-w-[50px] transition-all duration-300 ease-in-out'), children: [_jsx("div", { className: cn('flex h-[72px] flex-col items-center justify-center gap-4 border-b bg-card/80'), children: _jsx("div", { className: `flex h-full items-center justify-center ${!isCollapsed && 'w-full'} cursor-pointer px-4 py-3`, onClick: () => navigate(Routes.dashboard, { viewTransition: true }), children: _jsx(BrandLogo, { isCollapsed: isCollapsed }) }) }), _jsxs("div", { className: "flex h-[calc(100vh-72px)] flex-col justify-between bg-card/70", children: [_jsx(Navigation, { isCollapsed: isCollapsed }), _jsx(NavigationFooter, { isCollapsed: isCollapsed })] })] }), _jsx(ResizableHandle, { withHandle: true }), _jsxs(ResizablePanel, { id: "content", children: [_jsxs("div", { className: "flex h-[64px] items-center border-b bg-background/95 px-3 backdrop-blur lg:h-[72px] lg:px-5", children: [_jsxs("div", { className: "flex flex-col items-start justify-center", children: [_jsx(Breadcrumb, { children: _jsx(BreadcrumbList, { children: crumbs.length ? (crumbs.map((c, i) => {
54
52
  linkPath.push(c);
55
- return (_jsxs(React.Fragment, { children: [_jsx(BreadcrumbItem, { children: _jsx(NavLink, { to: buildURL(linkPath), viewTransition: true, children: _jsx("p", { className: cn('text-md font-bold text-foreground capitalize'), children: i === 0 ? t('menu.' + dashToCamelCase(c)) : c }) }) }), i !== crumbs.length - 1 && (_jsx(BreadcrumbSeparator, { children: _jsx(Slash, { className: "text-muted-foreground" }) }))] }, c));
56
- })) : (_jsx(BreadcrumbItem, { children: _jsx(NavLink, { to: Routes.dashboard, viewTransition: true, children: _jsx("p", { className: "text-2xl font-bold text-foreground", children: t('dashboard') }) }) })) }) }), _jsx("div", { className: "flex items-center gap-2" })] }), _jsxs("div", { className: "flex flex-1 items-center justify-end gap-2", children: [topNavigationComponents && topNavigationComponents.length > 0 ? (_jsx("div", { className: "flex items-center gap-2", children: topNavigationComponents.map(({ component: Component }, index) => (_jsx(Component, {}, index))) })) : null, _jsx(LanguagesDropdown, {}), _jsx(ChannelSwitcher, { className: "min-w-44" }), _jsx(Button, { onClick: openGlobalSearch, variant: "outline", size: "icon", className: "relative size-10", children: _jsx(SearchIcon, { className: "size-4" }) }), _jsx(Notifications, {}), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "icon", children: [theme === 'light' ? (_jsx(Sun, { className: "size-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" })) : theme === 'dark' ? (_jsx(Moon, { className: "absolute size-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" })) : (_jsx(SunMoon, { className: "absolute size-[1.2rem] rotate-90 transition-all" })), _jsx("span", { className: "sr-only", children: t('toggleTheme') })] }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsx(DropdownMenuItem, { onClick: () => setTheme('light'), children: t('themeLight') }), _jsx(DropdownMenuItem, { onClick: () => setTheme('dark'), children: t('themeDark') }), _jsx(DropdownMenuItem, { onClick: () => setTheme('system'), children: t('themeSystem') })] })] }), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "icon", children: _jsx(MenuIcon, { className: "size-4" }) }) }), _jsxs(DropdownMenuContent, { className: "z-[150] mr-6 min-w-40", children: [activeAdministrator?.emailAddress && (_jsxs(_Fragment, { children: [_jsxs(DropdownMenuLabel, { className: "flex items-center gap-2 px-3 py-2 font-medium", children: [_jsx("div", { className: "flex size-5 items-center justify-center rounded-full bg-gray-100 text-xs text-gray-600", children: activeAdministrator.firstName.charAt(0).toUpperCase() }), _jsxs("div", { className: "truncate text-sm", children: [activeAdministrator.firstName, " ", activeAdministrator.lastName] })] }), _jsx(DropdownMenuSeparator, { className: "my-1" })] })), _jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-nowrap", onSelect: rebuildSearchIndex, children: [_jsx(RotateCwSquare, { className: "size-4" }), t('rebuildSerachIndex')] }), _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuGroup, { children: _jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: t('fastLinks') }), _jsx(DropdownMenuPortal, { children: _jsxs(DropdownMenuSubContent, { children: [_jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-nowrap", onSelect: () => navigate(Routes.status, { viewTransition: true }), children: [_jsx(RotateCwSquare, { className: "size-4" }), t('systemStatus')] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-nowrap", onSelect: () => navigate(Routes.globalSettings, { viewTransition: true }), children: [_jsx(RotateCwSquare, { className: "size-4" }), t('globalSettings')] })] }) })] }) }), topNavigationActionsMenu?.length && topNavigationActionsMenu.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), topNavigationActionsMenu.map((action) => (_jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2", onSelect: action.onClick, children: [action.icon && _jsx(action.icon, { className: "size-4" }), action.label] }, action.label)))] })) : null, _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-red-500", onSelect: async () => {
53
+ return (_jsxs(React.Fragment, { children: [_jsx(BreadcrumbItem, { children: _jsx(NavLink, { to: buildURL(linkPath), viewTransition: true, children: _jsx("p", { className: cn('text-sm font-semibold tracking-tight text-foreground capitalize'), children: i === 0 ? t('menu.' + dashToCamelCase(c)) : c }) }) }), i !== crumbs.length - 1 && (_jsx(BreadcrumbSeparator, { children: _jsx(Slash, { className: "text-muted-foreground" }) }))] }, c));
54
+ })) : (_jsx(BreadcrumbItem, { children: _jsx(NavLink, { to: Routes.dashboard, viewTransition: true, children: _jsx("p", { className: "text-xl font-semibold tracking-tight text-foreground", children: t('dashboard') }) }) })) }) }), _jsx("div", { className: "flex items-center gap-2" })] }), _jsxs("div", { className: "flex flex-1 items-center justify-end gap-1.5", children: [topNavigationComponents && topNavigationComponents.length > 0 ? (_jsx("div", { className: "flex items-center gap-2", children: topNavigationComponents.map(({ component: Component }, index) => (_jsx(Component, {}, index))) })) : null, _jsx(LanguagesDropdown, {}), _jsx(ChannelSwitcher, { className: "min-w-44" }), _jsx(Button, { onClick: openGlobalSearch, variant: "outline", size: "icon", className: "relative size-9", children: _jsx(SearchIcon, { className: "size-4" }) }), _jsx(Notifications, {}), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", size: "icon", className: "size-9", children: [theme === 'light' ? (_jsx(Sun, { className: "size-[1.2rem] scale-100 rotate-0 transition-all dark:scale-0 dark:-rotate-90" })) : theme === 'dark' ? (_jsx(Moon, { className: "absolute size-[1.2rem] scale-0 rotate-90 transition-all dark:scale-100 dark:rotate-0" })) : (_jsx(SunMoon, { className: "absolute size-[1.2rem] rotate-90 transition-all" })), _jsx("span", { className: "sr-only", children: t('toggleTheme') })] }) }), _jsxs(DropdownMenuContent, { align: "end", children: [_jsx(DropdownMenuItem, { onClick: () => setTheme('light'), children: t('themeLight') }), _jsx(DropdownMenuItem, { onClick: () => setTheme('dark'), children: t('themeDark') }), _jsx(DropdownMenuItem, { onClick: () => setTheme('system'), children: t('themeSystem') })] })] }), _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { asChild: true, children: _jsx(Button, { variant: "outline", size: "icon", className: "size-9", children: _jsx(MenuIcon, { className: "size-4" }) }) }), _jsxs(DropdownMenuContent, { className: "z-[150] mr-6 min-w-40", children: [activeAdministrator?.emailAddress && (_jsxs(_Fragment, { children: [_jsxs(DropdownMenuLabel, { className: "flex items-center gap-2 px-3 py-2 font-medium", children: [_jsx("div", { className: "flex size-6 items-center justify-center bg-primary/10 text-xs font-semibold text-primary", children: activeAdministrator.firstName.charAt(0).toUpperCase() }), _jsxs("div", { className: "truncate text-sm", children: [activeAdministrator.firstName, " ", activeAdministrator.lastName] })] }), _jsx(DropdownMenuSeparator, { className: "my-1" })] })), _jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-nowrap", onSelect: rebuildSearchIndex, children: [_jsx(RotateCwSquare, { className: "size-4" }), t('rebuildSerachIndex')] }), _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuGroup, { children: _jsxs(DropdownMenuSub, { children: [_jsx(DropdownMenuSubTrigger, { children: t('fastLinks') }), _jsx(DropdownMenuPortal, { children: _jsxs(DropdownMenuSubContent, { children: [_jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-nowrap", onSelect: () => navigate(Routes.status, { viewTransition: true }), children: [_jsx(RotateCwSquare, { className: "size-4" }), t('systemStatus')] }), _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-nowrap", onSelect: () => navigate(Routes.globalSettings, { viewTransition: true }), children: [_jsx(RotateCwSquare, { className: "size-4" }), t('globalSettings')] })] }) })] }) }), topNavigationActionsMenu?.length && topNavigationActionsMenu.length > 0 ? (_jsxs(_Fragment, { children: [_jsx(DropdownMenuSeparator, {}), topNavigationActionsMenu.map((action) => (_jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2", onSelect: action.onClick, children: [action.icon && _jsx(action.icon, { className: "size-4" }), action.label] }, action.label)))] })) : null, _jsx(DropdownMenuSeparator, {}), _jsxs(DropdownMenuItem, { className: "flex cursor-pointer items-center gap-2 text-red-500", onSelect: async () => {
57
55
  const result = await createDialog({
58
56
  title: t('logOutConfirmation'),
59
57
  description: t('logOutConfirmationDescription'),
@@ -64,5 +62,5 @@ export const Menu = ({ children }) => {
64
62
  });
65
63
  if (result)
66
64
  logOut();
67
- }, children: [_jsx(LogOutIcon, { className: "size-4" }), t('logOut')] })] })] })] })] }), _jsx(ScrollArea, { className: "relative h-[calc(100vh-70px)] overflow-y-hidden lg:h-[calc(100vh-80px)]", children: children })] })] }) }) }) }) }));
65
+ }, children: [_jsx(LogOutIcon, { className: "size-4" }), t('logOut')] })] })] })] })] }), _jsx(ScrollArea, { className: "relative h-[calc(100vh-64px)] overflow-y-hidden lg:h-[calc(100vh-72px)]", children: children })] })] }) }) }) }) }));
68
66
  };
package/dist/index.css CHANGED
@@ -24,47 +24,47 @@
24
24
  @plugin "@tailwindcss/typography";
25
25
 
26
26
  :root {
27
- --background: hsl(0 0% 100%);
28
- --foreground: hsl(240 10% 3.9%);
27
+ --background: hsl(225 33% 97%);
28
+ --foreground: hsl(230 20% 7%);
29
29
 
30
30
  --card: hsl(0 0% 100%);
31
- --card-foreground: hsl(240 10% 3.9%);
31
+ --card-foreground: hsl(230 20% 7%);
32
32
 
33
33
  --popover: hsl(0 0% 100%);
34
- --popover-foreground: hsl(240 10% 3.9%);
34
+ --popover-foreground: hsl(230 20% 7%);
35
35
 
36
- --primary: hsl(240 5.9% 10%);
37
- --primary-foreground: hsl(0 0% 98%);
36
+ --primary: hsl(238 70% 58%);
37
+ --primary-foreground: hsl(0 0% 100%);
38
38
 
39
- --secondary: hsl(240 4.8% 95.9%);
40
- --secondary-foreground: hsl(240 5.9% 10%);
39
+ --secondary: hsl(225 28% 94%);
40
+ --secondary-foreground: hsl(230 18% 12%);
41
41
 
42
- --muted: hsl(240 4.8% 95.9%);
43
- --muted-foreground: hsl(240 3.8% 46.1%);
42
+ --muted: hsl(225 24% 95%);
43
+ --muted-foreground: hsl(228 10% 41%);
44
44
 
45
- --accent: hsl(240 4.8% 95.9%);
46
- --accent-foreground: hsl(240 5.9% 10%);
45
+ --accent: hsl(238 80% 96%);
46
+ --accent-foreground: hsl(238 70% 42%);
47
47
 
48
48
  --destructive: hsl(0 84.2% 60.2%);
49
49
  --destructive-foreground: hsl(0 0% 98%);
50
50
 
51
- --border: hsl(240 5.9% 90%);
52
- --input: hsl(240 5.9% 90%);
53
- --ring: hsl(240 10% 3.9%);
51
+ --border: hsl(225 18% 88%);
52
+ --input: hsl(225 18% 86%);
53
+ --ring: hsl(238 70% 58%);
54
54
 
55
- --radius: 0.5rem;
55
+ --radius: 0rem;
56
56
 
57
57
  --warning: hsl(38 92% 50%);
58
58
  --warning-foreground: hsl(48 96% 89%);
59
59
 
60
- --navigation-link: hsl(240 10% 3.9%);
60
+ --navigation-link: hsl(228 14% 28%);
61
61
 
62
- --topbar-height: 70px;
63
- --topbar-height-lg: 80px;
62
+ --topbar-height: 64px;
63
+ --topbar-height-lg: 72px;
64
64
 
65
- --page-padding-total-y: 2.75rem;
66
- --page-padding-total-y-md: 4.75rem;
67
- --page-padding-total-y-lg: 2rem;
65
+ --page-padding-total-y: 2rem;
66
+ --page-padding-total-y-md: 3.25rem;
67
+ --page-padding-total-y-lg: 1.5rem;
68
68
 
69
69
  --page-content-h: calc(100vh - var(--topbar-height) - var(--page-padding-total-y));
70
70
  --page-content-h-md: calc(100vh - var(--topbar-height) - var(--page-padding-total-y-md));
@@ -72,38 +72,38 @@
72
72
  }
73
73
 
74
74
  .dark {
75
- --background: hsl(240 10% 3.9%);
76
- --foreground: hsl(0 0% 98%);
75
+ --background: hsl(230 22% 5%);
76
+ --foreground: hsl(220 22% 96%);
77
77
 
78
- --card: hsl(240 10% 3.9%);
79
- --card-foreground: hsl(0 0% 98%);
78
+ --card: hsl(228 18% 8%);
79
+ --card-foreground: hsl(220 22% 96%);
80
80
 
81
- --popover: hsl(240 10% 3.9%);
82
- --popover-foreground: hsl(0 0% 98%);
81
+ --popover: hsl(228 18% 9%);
82
+ --popover-foreground: hsl(220 22% 96%);
83
83
 
84
- --primary: hsl(0 0% 98%);
85
- --primary-foreground: hsl(240 5.9% 10%);
84
+ --primary: hsl(238 80% 66%);
85
+ --primary-foreground: hsl(0 0% 100%);
86
86
 
87
- --secondary: hsl(240 3.7% 15.9%);
88
- --secondary-foreground: hsl(0 0% 98%);
87
+ --secondary: hsl(228 16% 14%);
88
+ --secondary-foreground: hsl(220 22% 96%);
89
89
 
90
- --muted: hsl(240 3.7% 15.9%);
91
- --muted-foreground: hsl(240 5% 64.9%);
90
+ --muted: hsl(228 16% 14%);
91
+ --muted-foreground: hsl(225 10% 65%);
92
92
 
93
- --accent: hsl(240 3.7% 15.9%);
94
- --accent-foreground: hsl(0 0% 98%);
93
+ --accent: hsl(238 34% 18%);
94
+ --accent-foreground: hsl(238 100% 82%);
95
95
 
96
96
  --destructive: hsl(0 62.8% 30.6%);
97
97
  --destructive-foreground: hsl(0 0% 98%);
98
98
 
99
- --border: hsl(240 3.7% 15.9%);
100
- --input: hsl(240 3.7% 15.9%);
101
- --ring: hsl(240 4.9% 83.9%);
99
+ --border: hsl(228 14% 20%);
100
+ --input: hsl(228 14% 22%);
101
+ --ring: hsl(238 80% 66%);
102
102
 
103
103
  --warning: hsl(48 96% 89%);
104
104
  --warning-foreground: hsl(38 92% 50%);
105
105
 
106
- --navigation-link: hsl(0 0% 98%);
106
+ --navigation-link: hsl(220 18% 86%);
107
107
  }
108
108
 
109
109
  @theme inline {
@@ -140,9 +140,9 @@
140
140
 
141
141
  --color-navigation-link: var(--navigation-link);
142
142
 
143
- --radius-lg: var(--radius);
144
- --radius-md: calc(var(--radius) - 2px);
145
- --radius-sm: calc(var(--radius) - 4px);
143
+ --radius-lg: 0rem;
144
+ --radius-md: 0rem;
145
+ --radius-sm: 0rem;
146
146
 
147
147
  --animate-accordion-down: accordion-down 0.2s ease-out;
148
148
  --animate-accordion-up: accordion-up 0.2s ease-out;
@@ -176,6 +176,16 @@
176
176
  background-color: var(--background);
177
177
  color: var(--foreground);
178
178
  box-sizing: border-box;
179
+ font-family:
180
+ Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
181
+ font-feature-settings:
182
+ "cv02", "cv03", "cv04", "cv11";
183
+ text-rendering: geometricPrecision;
184
+ }
185
+
186
+ ::selection {
187
+ background-color: var(--accent);
188
+ color: var(--accent-foreground);
179
189
  }
180
190
  }
181
191
 
@@ -200,7 +210,7 @@
200
210
  }
201
211
 
202
212
  *::-webkit-scrollbar-thumb {
203
- background-color: var(--border);
213
+ background-color: color-mix(in srgb, var(--foreground) 18%, transparent);
204
214
  position: relative;
205
215
  border-radius: 9999px;
206
216
  }
@@ -38,6 +38,7 @@
38
38
  "inherit": "Filter inheritance",
39
39
  "condition": "Condition",
40
40
  "addCondition": "Add condition",
41
+ "noAvailableConditions": "Filter conditions are still loading",
41
42
  "addFacets": "Adding aspect values",
42
43
  "labels": {
43
44
  "codes": {
@@ -55,6 +56,12 @@
55
56
  },
56
57
  "contents": {
57
58
  "title": "Content"
59
+ },
60
+ "channels": {
61
+ "title": "Additional channels",
62
+ "description": "Select additional channels to assign after creating the collection. The current channel is assigned automatically.",
63
+ "currentChannel": "Current channel",
64
+ "noChannels": "No channels available"
58
65
  }
59
66
  },
60
67
  "visibility": {
@@ -962,6 +962,7 @@
962
962
  "tags": "Filter by tag",
963
963
  "perPageValue": "{{value}} per page",
964
964
  "confirmButton": "Add resource",
965
+ "uploadButton": "Upload from disk",
965
966
  "cancel": "Cancel",
966
967
  "noImages": "No resources for a specific search",
967
968
  "description": "Uploading and managing resources that can be used in content"
@@ -40,6 +40,14 @@
40
40
  "confirm": "Delete draft",
41
41
  "cancel": "Cancel"
42
42
  },
43
+ "createDraftOrder": {
44
+ "title": "Create a new draft order",
45
+ "description": "A draft order will only be created after you confirm. You can then add products, a customer, and shipping details.",
46
+ "startButton": "Start draft order",
47
+ "cancelButton": "Back to orders",
48
+ "creating": "Creating draft...",
49
+ "error": "Failed to create draft order"
50
+ },
43
51
  "searchProduct": {
44
52
  "id": "ID",
45
53
  "image": "Image",
@@ -42,6 +42,14 @@
42
42
  "removeVariant": "Usuń wariant",
43
43
  "removeVariantFromChannel": "Usuń wariant z kanału"
44
44
  },
45
+ "initialVariant": {
46
+ "title": "Initial variant",
47
+ "description": "Create one default variant together with this product. If the variant name is empty, the product name will be used.",
48
+ "sku": "SKU",
49
+ "price": "Price",
50
+ "name": "Variant name",
51
+ "namePlaceholder": "Use the product name"
52
+ },
45
53
  "optionsTab": {
46
54
  "placeholder": "Wpisz, aby dodać nową wartość opcji",
47
55
  "groupName": "Nazwa grupy",
@@ -53,6 +61,7 @@
53
61
  "noOptionValues": "Dodaj opcje powyżej, aby znaleźć je tutaj"
54
62
  },
55
63
  "variantsTab": {
64
+ "unnamedVariant": "Unnamed variant",
56
65
  "emptyState": {
57
66
  "title": "Nic tutaj nie ma",
58
67
  "description": "Nie ma jeszcze żadnych wariantów. Użyj przycisku powyżej, aby je dodać, pod warunkiem, że dodałeś już jakieś opcje. Jeśli nie, utwórz je najpierw w zakładce Opcje."
@@ -128,6 +137,7 @@
128
137
  "noAssets": "Nie ma jeszcze żadnych aktywów",
129
138
  "setAsFeatured": "Ustaw jako polecane",
130
139
  "editAsset": "Edytuj zdjęcie",
140
+ "uploadAsset": "Upload image",
131
141
  "removeAsset": "Usuń zasób",
132
142
  "usedForColorsDesc": "Użyj tego atrybutu dla facetów, którzy są kolorami",
133
143
  "colorsCollectionDesc": "Użyj tego dla ścieżek produktu w KOLORZE (BLAT/CORPUS)",
@@ -186,9 +196,11 @@
186
196
  "new": "Nowy wariant",
187
197
  "selectOption": "Wybierz opcję",
188
198
  "createBasic": "Dane podstawowe",
189
- "createOptions": "Opcje"
199
+ "createOptions": "Opcje",
200
+ "createOptionsHint": "Add an option group from this panel to start choosing variant options. You can refine option values later in the Options tab."
190
201
  },
191
202
  "validation": {
192
- "nameSlugRequired": "Pola nazwy i slug są wymagane"
203
+ "nameSlugRequired": "Pola nazwy i slug są wymagane",
204
+ "initialVariantSkuRequired": "Variant SKU is required"
193
205
  }
194
206
  }
@@ -13,6 +13,10 @@
13
13
  "usageLimit": "Use limit",
14
14
  "perCustomerUsageLimit": "Usage limit per customer"
15
15
  },
16
+ "enabled": {
17
+ "header": "Status",
18
+ "label": "Promotion enabled"
19
+ },
16
20
  "conditions": {
17
21
  "header": "Conditions",
18
22
  "add": "Add a new condition",
@@ -38,6 +38,7 @@
38
38
  "inherit": "Dziedziczenie filtrów",
39
39
  "condition": "Warunek",
40
40
  "addCondition": "Dodaj warunek",
41
+ "noAvailableConditions": "Warunki filtrów nadal się ładują",
41
42
  "addFacets": "Dodawanie wartości aspektów",
42
43
  "labels": {
43
44
  "codes": {
@@ -55,6 +56,12 @@
55
56
  },
56
57
  "contents": {
57
58
  "title": "Zawartość"
59
+ },
60
+ "channels": {
61
+ "title": "Dodatkowe kanały",
62
+ "description": "Wybierz dodatkowe kanały, które mają zostać przypisane po utworzeniu kolekcji. Bieżący kanał zostanie przypisany automatycznie.",
63
+ "currentChannel": "Bieżący kanał",
64
+ "noChannels": "Brak dostępnych kanałów"
58
65
  }
59
66
  },
60
67
  "visibility": {
@@ -961,6 +961,7 @@
961
961
  "tags": "Filtruj według tagu",
962
962
  "perPageValue": "{{value}} na stronę",
963
963
  "confirmButton": "Dodaj zasób",
964
+ "uploadButton": "Prześlij z dysku",
964
965
  "cancel": "Anuluj",
965
966
  "noImages": "Brak zasobów dla określonego wyszukiwania",
966
967
  "description": "Przesyłanie i zarządzanie zasobami, które mogą być używane w treści"
@@ -40,6 +40,14 @@
40
40
  "confirm": "Usuń wersję roboczą",
41
41
  "cancel": "Anuluj"
42
42
  },
43
+ "createDraftOrder": {
44
+ "title": "Utwórz nowy projekt zamówienia",
45
+ "description": "Projekt zamówienia zostanie utworzony dopiero po potwierdzeniu. Następnie możesz dodać produkty, klienta i dane dostawy.",
46
+ "startButton": "Rozpocznij projekt zamówienia",
47
+ "cancelButton": "Wróć do zamówień",
48
+ "creating": "Tworzenie projektu...",
49
+ "error": "Nie udało się utworzyć projektu zamówienia"
50
+ },
43
51
  "searchProduct": {
44
52
  "id": "ID",
45
53
  "image": "Obraz",