@brilo/base-blocks 0.1.57 → 0.1.58

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 (60) hide show
  1. package/build/.tsbuildinfo +1 -1
  2. package/build/blocks/column/column-item/factory.d.ts.map +1 -1
  3. package/build/blocks/column/column-item/factory.js +2 -1
  4. package/build/blocks/column/column-item/icon.d.ts +2 -0
  5. package/build/blocks/column/column-item/icon.d.ts.map +1 -0
  6. package/build/blocks/column/column-item/icon.js +2 -0
  7. package/build/blocks/column/column-item/index.d.ts.map +1 -1
  8. package/build/blocks/column/column-item/index.js +2 -0
  9. package/build/blocks/food-menu/food-menu-group/FoodMenuPreview.d.ts +6 -0
  10. package/build/blocks/food-menu/food-menu-group/FoodMenuPreview.d.ts.map +1 -0
  11. package/build/blocks/food-menu/food-menu-group/FoodMenuPreview.js +167 -0
  12. package/build/blocks/food-menu/food-menu-group/FoodMenuSelectModal.d.ts +7 -0
  13. package/build/blocks/food-menu/food-menu-group/FoodMenuSelectModal.d.ts.map +1 -0
  14. package/build/blocks/food-menu/food-menu-group/FoodMenuSelectModal.js +56 -0
  15. package/build/blocks/food-menu/food-menu-group/constants.d.ts +8 -0
  16. package/build/blocks/food-menu/food-menu-group/constants.d.ts.map +1 -0
  17. package/build/blocks/food-menu/food-menu-group/constants.js +7 -0
  18. package/build/blocks/food-menu/food-menu-group/edit.d.ts +7 -0
  19. package/build/blocks/food-menu/food-menu-group/edit.d.ts.map +1 -0
  20. package/build/blocks/food-menu/food-menu-group/edit.js +36 -0
  21. package/build/blocks/food-menu/food-menu-group/factory.d.ts +4 -0
  22. package/build/blocks/food-menu/food-menu-group/factory.d.ts.map +1 -0
  23. package/build/blocks/food-menu/food-menu-group/factory.js +57 -0
  24. package/build/blocks/food-menu/food-menu-group/icon.d.ts +2 -0
  25. package/build/blocks/food-menu/food-menu-group/icon.d.ts.map +1 -0
  26. package/build/blocks/food-menu/food-menu-group/icon.js +2 -0
  27. package/build/blocks/food-menu/food-menu-group/index.d.ts +6 -0
  28. package/build/blocks/food-menu/food-menu-group/index.d.ts.map +1 -0
  29. package/build/blocks/food-menu/food-menu-group/index.js +7 -0
  30. package/build/blocks/food-menu/food-menu-group/types.d.ts +19 -0
  31. package/build/blocks/food-menu/food-menu-group/types.d.ts.map +1 -0
  32. package/build/blocks/food-menu/food-menu-group/types.js +1 -0
  33. package/build/blocks/gallery/gallery-group/index.js +1 -1
  34. package/build/components/EntitySelectModal/EntitySelectModal.d.ts +6 -0
  35. package/build/components/EntitySelectModal/EntitySelectModal.d.ts.map +1 -1
  36. package/build/components/EntitySelectModal/EntitySelectModal.js +3 -2
  37. package/build/index.d.ts +2 -0
  38. package/build/index.d.ts.map +1 -1
  39. package/build/index.js +1 -0
  40. package/build/utils/plural.d.ts +3 -0
  41. package/build/utils/plural.d.ts.map +1 -0
  42. package/build/utils/plural.js +7 -0
  43. package/package.json +1 -1
  44. package/src/blocks/column/column-item/factory.tsx +2 -1
  45. package/src/blocks/column/column-item/icon.tsx +10 -0
  46. package/src/blocks/column/column-item/index.ts +2 -0
  47. package/src/blocks/food-menu/food-menu-group/FoodMenuPreview.tsx +380 -0
  48. package/src/blocks/food-menu/food-menu-group/FoodMenuSelectModal.tsx +69 -0
  49. package/src/blocks/food-menu/food-menu-group/constants.ts +9 -0
  50. package/src/blocks/food-menu/food-menu-group/edit.tsx +153 -0
  51. package/src/blocks/food-menu/food-menu-group/editor.scss +269 -0
  52. package/src/blocks/food-menu/food-menu-group/factory.tsx +66 -0
  53. package/src/blocks/food-menu/food-menu-group/icon.tsx +8 -0
  54. package/src/blocks/food-menu/food-menu-group/index.ts +17 -0
  55. package/src/blocks/food-menu/food-menu-group/types.ts +21 -0
  56. package/src/blocks/gallery/gallery-group/index.ts +1 -1
  57. package/src/components/EntitySelectModal/EntitySelectModal.tsx +19 -7
  58. package/src/editor.scss +1 -0
  59. package/src/index.ts +7 -0
  60. package/src/utils/plural.ts +13 -0
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/blocks/column/column-item/factory.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAA;AAGzD,OAAO,KAAK,EAAC,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAGpE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,CA0B1G"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/blocks/column/column-item/factory.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAA;AAIzD,OAAO,KAAK,EAAC,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAGpE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,CA0B1G"}
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { InnerBlocks } from '@wordpress/block-editor';
3
3
  import { __ } from '@wordpress/i18n';
4
4
  import { createColumnItemEdit } from './edit';
5
+ import { icon as defaultIcon } from './icon';
5
6
  import { ALIGN } from './constants';
6
7
  export function createColumnItemBlock(options) {
7
8
  var _a, _b, _c;
@@ -11,7 +12,7 @@ export function createColumnItemBlock(options) {
11
12
  description: options.description,
12
13
  category: (_b = options.category) !== null && _b !== void 0 ? _b : 'layout',
13
14
  ...(options.parent && { parent: options.parent }),
14
- icon: (_c = options.icon) !== null && _c !== void 0 ? _c : 'column',
15
+ icon: (_c = options.icon) !== null && _c !== void 0 ? _c : { src: defaultIcon },
15
16
  supports: { html: false, customClassName: false },
16
17
  attributes: {
17
18
  size: {
@@ -0,0 +1,2 @@
1
+ export declare const icon: import("react").JSX.Element;
2
+ //# sourceMappingURL=icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../../src/blocks/column/column-item/icon.tsx"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,6BAShB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const icon = (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("title", { children: "Column Item" }), _jsx("rect", { x: "1.5", y: "2.5", width: "7", height: "15", rx: "1", stroke: "black", fill: "none" }), _jsx("rect", { x: "11.5", y: "2.5", width: "7", height: "15", rx: "1", stroke: "black", fill: "none", strokeDasharray: "2 1.5" }), _jsx("rect", { x: "3", y: "5", width: "4", height: "1", fill: "#357AB5" }), _jsx("rect", { x: "3", y: "8", width: "4", height: "1", fill: "#357AB5" }), _jsx("rect", { x: "3", y: "11", width: "3", height: "1", fill: "#357AB5" })] }));
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/blocks/column/column-item/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,SAAS,CAAA;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,WAAW,CAAA;AAE/C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,kBAAkB,EAAE,iBAgBhC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/blocks/column/column-item/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAC,oBAAoB,EAAE,iBAAiB,EAAC,MAAM,SAAS,CAAA;AACpE,OAAO,EAAC,qBAAqB,EAAC,MAAM,WAAW,CAAA;AAE/C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,SAAS,CAAA;AAE9C,eAAO,MAAM,kBAAkB,EAAE,iBAkBhC,CAAA"}
@@ -14,5 +14,7 @@ export const columnItemDefaults = {
14
14
  'core/gallery',
15
15
  'brilo/link-item',
16
16
  'brilo/button-group',
17
+ 'brilo/gallery-group',
18
+ 'brilo/food-menu-group',
17
19
  ],
18
20
  };
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ import type { FoodMenuGroupAttributes } from './types';
3
+ export declare function FoodMenuPreview({ attributes }: {
4
+ attributes: FoodMenuGroupAttributes;
5
+ }): React.JSX.Element;
6
+ //# sourceMappingURL=FoodMenuPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoodMenuPreview.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/FoodMenuPreview.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAwD,MAAM,OAAO,CAAA;AAG5E,OAAO,KAAK,EAAC,uBAAuB,EAAiD,MAAM,SAAS,CAAA;AA2UpG,wBAAgB,eAAe,CAAC,EAAC,UAAU,EAAC,EAAE;IAAC,UAAU,EAAE,uBAAuB,CAAA;CAAC,qBAyClF"}
@@ -0,0 +1,167 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import apiFetch from '@wordpress/api-fetch';
3
+ import { Button, Spinner } from '@wordpress/components';
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import clsx from 'clsx';
6
+ import { useEffect, useRef, useState } from 'react';
7
+ import { plural } from '../../../utils/plural';
8
+ import { icon as menuIcon } from './icon';
9
+ const BASE = 'brilo-food-menu-preview';
10
+ /**
11
+ * The menu is assembled on the server — the week in the site's time zone,
12
+ * which days have a menu, whether ordering is open — so the preview asks the
13
+ * block's own endpoint instead of rebuilding that from post records. It shows
14
+ * structure and state, not the front-end markup: the theme renders blocks
15
+ * through its own renderer, which `ServerSideRender` cannot reach.
16
+ */
17
+ function useMenuPreview(mode, menuIds, showPrices, showAllergens) {
18
+ const [data, setData] = useState(null);
19
+ const [isLoading, setIsLoading] = useState(true);
20
+ const [hasError, setHasError] = useState(false);
21
+ const [attempt, setAttempt] = useState(0);
22
+ const params = new URLSearchParams({
23
+ mode,
24
+ show_prices: showPrices ? '1' : '0',
25
+ show_allergens: showAllergens ? '1' : '0',
26
+ });
27
+ if ('manual' === mode && 0 < menuIds.length) {
28
+ params.set('ids', menuIds.join(','));
29
+ }
30
+ const key = params.toString();
31
+ // `attempt` is what "Zkusit znovu" bumps: same request, run again.
32
+ // biome-ignore lint/correctness/useExhaustiveDependencies: attempt re-runs the effect on retry
33
+ useEffect(() => {
34
+ let cancelled = false;
35
+ setIsLoading(true);
36
+ setHasError(false);
37
+ apiFetch({ path: `/brilo/v1/food-menu/preview?${key}` })
38
+ .then((result) => {
39
+ if (!cancelled) {
40
+ setData(result);
41
+ }
42
+ })
43
+ .catch(() => {
44
+ if (!cancelled) {
45
+ setData(null);
46
+ setHasError(true);
47
+ }
48
+ })
49
+ .finally(() => {
50
+ if (!cancelled) {
51
+ setIsLoading(false);
52
+ }
53
+ });
54
+ return () => {
55
+ cancelled = true;
56
+ };
57
+ }, [key, attempt]);
58
+ return { data, isLoading, hasError, retry: () => setAttempt((value) => value + 1) };
59
+ }
60
+ const WarnIcon = () => (_jsxs("svg", { className: `${BASE}__empty-icon`, viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: [_jsx("path", { d: "M10 3 2 17h16L10 3Z" }), _jsx("path", { d: "M10 8v4M10 14.5v.5" })] }));
61
+ function PreviewEmpty({ title, text, children }) {
62
+ return (_jsxs("div", { className: `${BASE}__empty`, children: [_jsx(WarnIcon, {}), _jsxs("div", { children: [_jsx("b", { children: title }), text, children] })] }));
63
+ }
64
+ /**
65
+ * Says what the page does instead, in the editor's own setting, so a missing
66
+ * day is not a surprise on the live site. Derived from attributes only, so
67
+ * changing the setting updates it without a new request.
68
+ */
69
+ function emptySentence(behaviour, emptyText, mode, data) {
70
+ const hint = __('Změnit lze v panelu „Když není co zobrazit“.', 'brilo-blocks');
71
+ if ('hide' === behaviour) {
72
+ return `${__('Blok se na webu nevykreslí.', 'brilo-blocks')} ${hint}`;
73
+ }
74
+ if ('permanent' === behaviour) {
75
+ const sentence = __('Na webu se místo něj nabídne stálá nabídka s poznámkou nad ní.', 'brilo-blocks');
76
+ const fallback = data.hasPermanent ? '' : ` ${__('Žádná stálá nabídka ale není, ukáže se věta.', 'brilo-blocks')}`;
77
+ return `${sentence}${fallback} ${hint}`;
78
+ }
79
+ const text = emptyText.trim() || data.emptyMessage[mode];
80
+ return `${sprintf(__('Na webu se místo něj ukáže věta „%s“', 'brilo-blocks'), text)} ${hint}`;
81
+ }
82
+ function NoMenuNotice({ attributes, data }) {
83
+ return (_jsx(PreviewEmpty, { title: __('Na tento den není lístek', 'brilo-blocks'), text: emptySentence(attributes.emptyBehaviour, attributes.emptyText, attributes.mode, data) }));
84
+ }
85
+ function sourceLabel(mode, day, data) {
86
+ var _a;
87
+ if ('today' === mode) {
88
+ return __('Dnešní lístek', 'brilo-blocks');
89
+ }
90
+ if ('week' === mode) {
91
+ return sprintf(__('Týden %d', 'brilo-blocks'), (_a = data.week) !== null && _a !== void 0 ? _a : 0);
92
+ }
93
+ if (!day.menu) {
94
+ return '';
95
+ }
96
+ return 'daily' === day.menu.kind && day.date ? sprintf(__('Denní · %s', 'brilo-blocks'), day.date) : __('Trvalý', 'brilo-blocks');
97
+ }
98
+ function PreviewRows({ menu, showPrices, showAllergens }) {
99
+ return (_jsx(_Fragment, { children: menu.courses.map((course, courseIndex) => (_jsxs("div", { className: `${BASE}__section`, children: [course.title && _jsx("div", { className: `${BASE}__section-title`, children: course.title }), course.items.map((item) => (_jsxs("div", { className: clsx(`${BASE}__row`, !showPrices && `${BASE}__row--no-price`), children: [_jsx("span", { className: `${BASE}__unit`, children: item.unit }), item.missing ? (_jsx("span", { className: clsx(`${BASE}__name`, `${BASE}__name--missing`), children: sprintf(__('Jídlo #%d (smazáno)', 'brilo-blocks'), item.food_id) })) : (_jsxs("span", { className: `${BASE}__name`, children: [item.title, showAllergens && 0 < item.allergens.length && _jsx("span", { className: `${BASE}__chip`, children: item.allergens.join(', ') }), item.note && _jsx("small", { className: `${BASE}__note`, children: item.note })] })), showPrices && _jsx("span", { className: `${BASE}__price`, children: item.price })] }, item.id || `food-${item.food_id}`)))] }, `${menu.id}-${courseIndex}`))) }));
100
+ }
101
+ function PreviewDayTabs({ days, selected, onSelect }) {
102
+ const tabs = useRef([]);
103
+ const onKeyDown = (event) => {
104
+ var _a;
105
+ const step = { ArrowRight: 1, ArrowLeft: -1 }[event.key];
106
+ if (!step) {
107
+ return;
108
+ }
109
+ event.preventDefault();
110
+ const next = (selected + step + days.length) % days.length;
111
+ onSelect(next);
112
+ (_a = tabs.current[next]) === null || _a === void 0 ? void 0 : _a.focus();
113
+ };
114
+ return (_jsx("div", { className: `${BASE}__days`, role: "tablist", "aria-label": __('Dny týdne', 'brilo-blocks'), onKeyDown: onKeyDown, children: days.map((day, index) => {
115
+ var _a;
116
+ const [weekday, ...date] = day.label.split(' ');
117
+ return (_jsxs("button", { ref: (element) => {
118
+ tabs.current[index] = element;
119
+ }, type: "button", role: "tab", "aria-selected": index === selected, tabIndex: index === selected ? 0 : -1, className: `${BASE}__day`, onClick: () => onSelect(index), children: [_jsx("i", { className: clsx(`${BASE}__dot`, !day.menu && `${BASE}__dot--off`), "aria-hidden": "true" }), `${weekday.slice(0, 2)} ${date.join(' ')}`, !day.menu && _jsx("span", { className: "screen-reader-text", children: __('(bez lístku)', 'brilo-blocks') })] }, (_a = day.date) !== null && _a !== void 0 ? _a : index));
120
+ }) }));
121
+ }
122
+ function PreviewCard({ attributes, data, day, tabs }) {
123
+ var _a;
124
+ const { mode, showPrices, showAllergens, showReservation } = attributes;
125
+ const { menu } = day;
126
+ const source = sourceLabel(mode, day, data);
127
+ const reservation = showReservation ? menu === null || menu === void 0 ? void 0 : menu.reservation : null;
128
+ return (_jsxs("div", { className: `${BASE}__card`, children: [_jsxs("div", { className: `${BASE}__head`, children: [_jsxs("div", { className: `${BASE}__title`, children: [menuIcon, _jsx("span", { children: day.label }), day.date === data.today && _jsx("span", { className: `${BASE}__pill`, children: __('dnes', 'brilo-blocks') })] }), _jsxs("div", { className: `${BASE}__meta`, children: [source && _jsx("span", { className: clsx(`${BASE}__pill`, `${BASE}__pill--muted`), children: source }), 'open' === (reservation === null || reservation === void 0 ? void 0 : reservation.state) && (_jsx("span", { className: clsx(`${BASE}__pill`, `${BASE}__pill--ok`), children: __('Objednávky otevřené', 'brilo-blocks') })), 'closed' === (reservation === null || reservation === void 0 ? void 0 : reservation.state) && (_jsx("span", { className: clsx(`${BASE}__pill`, `${BASE}__pill--muted`), children: __('Objednávky uzavřené', 'brilo-blocks') }))] })] }), _jsxs("div", { className: `${BASE}__body`, children: [tabs, _jsx("div", { role: tabs ? 'tabpanel' : undefined, children: menu ? (_jsx(PreviewRows, { menu: menu, showPrices: showPrices, showAllergens: showAllergens })) : (_jsx(NoMenuNotice, { attributes: attributes, data: data })) }), menu && (_jsxs("div", { className: `${BASE}__foot`, children: [_jsx("span", { children: [
129
+ `${menu.dishCount} ${plural(menu.dishCount, __('jídlo', 'brilo-blocks'), __('jídla', 'brilo-blocks'), __('jídel', 'brilo-blocks'))}`,
130
+ showAllergens ? __('alergeny v závorce', 'brilo-blocks') : __('alergeny skryté', 'brilo-blocks'),
131
+ showPrices ? __('ceny zobrazeny', 'brilo-blocks') : __('ceny skryté', 'brilo-blocks'),
132
+ ].join(' · ') }), showReservation && _jsx("span", { children: sprintf(__('Uzávěrka objednávek: %s', 'brilo-blocks'), ((_a = menu.reservation) === null || _a === void 0 ? void 0 : _a.deadline) || '—') })] }))] })] }));
133
+ }
134
+ function WeekPreview({ attributes, data }) {
135
+ const [selectedDate, setSelectedDate] = useState(null);
136
+ if (0 === data.days.length) {
137
+ return null;
138
+ }
139
+ // Today when it falls in the week, Monday otherwise; the choice is UI state
140
+ // only and is not saved with the block.
141
+ const pick = [selectedDate, data.today].map((date) => data.days.findIndex((day) => day.date === date)).find((index) => 0 <= index);
142
+ const selected = pick !== null && pick !== void 0 ? pick : 0;
143
+ return (_jsx(PreviewCard, { attributes: attributes, data: data, day: data.days[selected], tabs: _jsx(PreviewDayTabs, { days: data.days, selected: selected, onSelect: (index) => setSelectedDate(data.days[index].date) }) }));
144
+ }
145
+ export function FoodMenuPreview({ attributes }) {
146
+ const { mode, menuIds, showPrices, showAllergens } = attributes;
147
+ const { data, isLoading, hasError, retry } = useMenuPreview(mode, menuIds, showPrices, showAllergens);
148
+ if (hasError) {
149
+ return (_jsx("div", { className: BASE, children: _jsx(PreviewEmpty, { title: __('Náhled se nepodařilo načíst.', 'brilo-blocks'), children: _jsx(Button, { variant: "secondary", size: "small", className: `${BASE}__retry`, onClick: retry, children: __('Zkusit znovu', 'brilo-blocks') }) }) }));
150
+ }
151
+ // The first load only: a reload keeps the previous card, so toggling a
152
+ // setting does not collapse the block and make it jump.
153
+ if (!data) {
154
+ return (_jsx("div", { className: BASE, children: _jsx("div", { className: clsx(`${BASE}__card`, `${BASE}__card--loading`), children: _jsx("div", { className: `${BASE}__head`, children: _jsx(Spinner, {}) }) }) }));
155
+ }
156
+ let content;
157
+ if ('week' === mode) {
158
+ content = _jsx(WeekPreview, { attributes: attributes, data: data });
159
+ }
160
+ else if (0 === data.days.length) {
161
+ content = _jsx(NoMenuNotice, { attributes: attributes, data: data });
162
+ }
163
+ else {
164
+ content = data.days.map((day) => { var _a; var _b; return _jsx(PreviewCard, { attributes: attributes, data: data, day: day }, (_b = (_a = day.menu) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : day.label); });
165
+ }
166
+ return _jsx("div", { className: clsx(BASE, isLoading && `${BASE}--loading`), children: content });
167
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Manual brilo_food_menu picker (table view, search, sort, checkbox selection,
3
+ * reorderable selection list) with title/kind columns. See `EntitySelectModal`
4
+ * for the shared DataViews wiring.
5
+ */
6
+ export declare const FoodMenuSelectModal: ({ selectedItems, onChange }: import("../../../types").SelectControlProps) => import("react").JSX.Element;
7
+ //# sourceMappingURL=FoodMenuSelectModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FoodMenuSelectModal.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/FoodMenuSelectModal.tsx"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,2GA0B9B,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { __, sprintf } from '@wordpress/i18n';
2
+ import { createEntitySelectModal } from '../../../components/EntitySelectModal/EntitySelectModal';
3
+ const DEFAULT_VIEW = {
4
+ type: 'table',
5
+ search: '',
6
+ filters: [],
7
+ page: 1,
8
+ perPage: 20,
9
+ sort: { field: 'title', direction: 'asc' },
10
+ fields: ['kind'],
11
+ titleField: 'title',
12
+ };
13
+ /**
14
+ * A permanent menu has no date, so the kind column carries the day: the
15
+ * titles of a week of daily menus look alike and the date is what the editor
16
+ * actually picks by.
17
+ */
18
+ function describe(menu) {
19
+ var _a, _b;
20
+ const date = (_a = menu.meta) === null || _a === void 0 ? void 0 : _a.brilo_food_menu_date;
21
+ return 'daily' === ((_b = menu.meta) === null || _b === void 0 ? void 0 : _b.brilo_food_menu_kind) && date
22
+ ? sprintf(__('Denní · %s', 'brilo-blocks'), date)
23
+ : __('Trvalý', 'brilo-blocks');
24
+ }
25
+ /**
26
+ * Manual brilo_food_menu picker (table view, search, sort, checkbox selection,
27
+ * reorderable selection list) with title/kind columns. See `EntitySelectModal`
28
+ * for the shared DataViews wiring.
29
+ */
30
+ export const FoodMenuSelectModal = createEntitySelectModal({
31
+ endpoint: '/wp/v2/brilo_food_menu?per_page=100&orderby=title&order=asc&_fields=id,title,meta',
32
+ defaultView: DEFAULT_VIEW,
33
+ buttonLabel: __('Vybrat lístky', 'brilo-blocks'),
34
+ modalTitle: __('Výběr lístků', 'brilo-blocks'),
35
+ emptyLabel: __('Zatím nevybrán žádný lístek.', 'brilo-blocks'),
36
+ // The block previews the picked menus in order right under the button.
37
+ listInModal: true,
38
+ getItemLabel: (item) => item.title.rendered,
39
+ matchesSearch: (item, needle) => item.title.rendered.toLowerCase().includes(needle),
40
+ sortValue: (item, field) => ('kind' === field ? describe(item) : item.title.rendered),
41
+ fields: [
42
+ {
43
+ id: 'title',
44
+ label: __('Název', 'brilo-blocks'),
45
+ enableHiding: false,
46
+ enableSorting: true,
47
+ render: ({ item }) => item.title.rendered || __('(bez názvu)', 'brilo-blocks'),
48
+ },
49
+ {
50
+ id: 'kind',
51
+ label: __('Typ', 'brilo-blocks'),
52
+ enableSorting: true,
53
+ render: ({ item }) => describe(item),
54
+ },
55
+ ],
56
+ });
@@ -0,0 +1,8 @@
1
+ export declare const FOOD_MENU_GROUP_MODES: readonly ['manual', 'today', 'week'];
2
+ export declare const FOOD_MENU_GROUP_LAYOUTS: readonly ['slider', 'list'];
3
+ /** What the block does on a day with no menu to show. */
4
+ export declare const FOOD_MENU_GROUP_EMPTY_BEHAVIOURS: readonly ['message', 'permanent', 'hide'];
5
+ export declare const FOOD_MENU_GROUP_MODE: "manual";
6
+ export declare const FOOD_MENU_GROUP_LAYOUT: "slider";
7
+ export declare const FOOD_MENU_GROUP_EMPTY_BEHAVIOUR: "message";
8
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,YAAI,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAU,CAAA;AACzE,eAAO,MAAM,uBAAuB,YAAI,QAAQ,EAAE,MAAM,CAAU,CAAA;AAElE,yDAAyD;AACzD,eAAO,MAAM,gCAAgC,YAAI,SAAS,EAAE,WAAW,EAAE,MAAM,CAAU,CAAA;AAEzF,eAAO,MAAM,oBAAoB,UAA2B,CAAA;AAC5D,eAAO,MAAM,sBAAsB,UAA6B,CAAA;AAChE,eAAO,MAAM,+BAA+B,WAAsC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export const FOOD_MENU_GROUP_MODES = ['manual', 'today', 'week'];
2
+ export const FOOD_MENU_GROUP_LAYOUTS = ['slider', 'list'];
3
+ /** What the block does on a day with no menu to show. */
4
+ export const FOOD_MENU_GROUP_EMPTY_BEHAVIOURS = ['message', 'permanent', 'hide'];
5
+ export const FOOD_MENU_GROUP_MODE = FOOD_MENU_GROUP_MODES[0];
6
+ export const FOOD_MENU_GROUP_LAYOUT = FOOD_MENU_GROUP_LAYOUTS[0];
7
+ export const FOOD_MENU_GROUP_EMPTY_BEHAVIOUR = FOOD_MENU_GROUP_EMPTY_BEHAVIOURS[0];
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { FoodMenuGroupAttributes, FoodMenuGroupOptions } from './types';
3
+ export declare function createFoodMenuGroupEdit(options: FoodMenuGroupOptions): ({ attributes, setAttributes, }: {
4
+ attributes: FoodMenuGroupAttributes;
5
+ setAttributes: (a: Partial<FoodMenuGroupAttributes>) => void;
6
+ }) => React.JSX.Element;
7
+ //# sourceMappingURL=edit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edit.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/edit.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAC,uBAAuB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAA;AA6B1E,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,oBAAoB,oCAIhE;IACD,UAAU,EAAE,uBAAuB,CAAA;IACnC,aAAa,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,KAAK,IAAI,CAAA;CAC7D,uBAqGF"}
@@ -0,0 +1,36 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { InspectorControls, useBlockProps } from '@wordpress/block-editor';
3
+ import { PanelBody, __experimentalText as Text, TextareaControl, ToggleControl, __experimentalToggleGroupControl as ToggleGroupControl, __experimentalToggleGroupControlOption as ToggleGroupControlOption, } from '@wordpress/components';
4
+ import { __, sprintf } from '@wordpress/i18n';
5
+ import clsx from 'clsx';
6
+ import { plural } from '../../../utils/plural';
7
+ import { FoodMenuPreview } from './FoodMenuPreview';
8
+ const MODE_HINTS = {
9
+ manual: __('Zobrazí se ručně vybrané lístky.', 'brilo-blocks'),
10
+ today: __('Zobrazí se denní lístek s dnešním datem.', 'brilo-blocks'),
11
+ week: __('Zobrazí se denní lístky aktuálního pracovního týdne (pondělí až pátek).', 'brilo-blocks'),
12
+ };
13
+ const EMPTY_HINTS = {
14
+ message: __('Návštěvník uvidí krátkou větu, že lístek zatím není vypsaný.', 'brilo-blocks'),
15
+ permanent: __('Místo chybějícího denního lístku se nabídne stálá nabídka. Když žádná není, ukáže se věta.', 'brilo-blocks'),
16
+ hide: __('Blok ze stránky zmizí. Stránka pak může zůstat prázdná.', 'brilo-blocks'),
17
+ };
18
+ function pickedNote(count) {
19
+ if (0 === count) {
20
+ return __('Zatím nevybrán žádný lístek.', 'brilo-blocks');
21
+ }
22
+ const picked = plural(count, __('Vybrán %d lístek', 'brilo-blocks'), __('Vybrány %d lístky', 'brilo-blocks'), __('Vybráno %d lístků', 'brilo-blocks'));
23
+ return `${sprintf(picked, count)} · ${__('pořadí změníte ve výběru lístků', 'brilo-blocks')}`;
24
+ }
25
+ export function createFoodMenuGroupEdit(options) {
26
+ return function Edit({ attributes, setAttributes, }) {
27
+ var _a;
28
+ var _b;
29
+ const { mode, layout, menuIds, showPrices, showAllergens, showReservation, emptyBehaviour, emptyText } = attributes;
30
+ const blockProps = useBlockProps({ className: clsx((_b = options.blockClassName) !== null && _b !== void 0 ? _b : 'g-food-menu', `--${layout}`) });
31
+ return (_jsxs(_Fragment, { children: [_jsxs(InspectorControls, { children: [_jsxs(PanelBody, { title: __('Nastavení lístku', 'brilo-blocks'), initialOpen: true, children: [_jsxs(ToggleGroupControl, { label: __('Zdroj lístků', 'brilo-blocks'), help: MODE_HINTS[mode], value: mode, onChange: (value) => setAttributes({ mode: value }), isBlock: true, children: [_jsx(ToggleGroupControlOption, { value: "manual", label: __('Ruční výběr', 'brilo-blocks') }), _jsx(ToggleGroupControlOption, { value: "today", label: __('Dnešní', 'brilo-blocks') }), _jsx(ToggleGroupControlOption, { value: "week", label: __('Týden', 'brilo-blocks') })] }), _jsxs(ToggleGroupControl, { label: __('Rozvržení', 'brilo-blocks'), help: __('Slider se použije jen tehdy, když je lístků víc než jeden.', 'brilo-blocks'), value: layout, onChange: (value) => setAttributes({ layout: value }), isBlock: true, children: [_jsx(ToggleGroupControlOption, { value: "slider", label: __('Slider', 'brilo-blocks') }), _jsx(ToggleGroupControlOption, { value: "list", label: __('Seznam', 'brilo-blocks') })] }), _jsx(ToggleControl, { __nextHasNoMarginBottom: true, label: __('Zobrazit ceny', 'brilo-blocks'), checked: showPrices, onChange: (value) => setAttributes({ showPrices: value }) }), _jsx(ToggleControl, { __nextHasNoMarginBottom: true, label: __('Zobrazit alergeny a legendu', 'brilo-blocks'), checked: showAllergens, onChange: (value) => setAttributes({ showAllergens: value }) }), _jsx(ToggleControl, { __nextHasNoMarginBottom: true, label: __('Umožnit objednání obědu', 'brilo-blocks'), help: __('Objednávkové tlačítko se ukáže jen u denních lístků a jen když jsou rezervace zapnuté v nastavení modulu.', 'brilo-blocks'), checked: showReservation, onChange: (value) => setAttributes({ showReservation: value }) })] }), _jsxs(PanelBody, { title: __('Když není co zobrazit', 'brilo-blocks'), initialOpen: false, children: [_jsxs(ToggleGroupControl, { label: __('Chování', 'brilo-blocks'), help: EMPTY_HINTS[emptyBehaviour], value: emptyBehaviour, onChange: (value) => setAttributes({ emptyBehaviour: value }), isBlock: true, children: [_jsx(ToggleGroupControlOption, { value: "message", label: __('Zpráva', 'brilo-blocks') }), _jsx(ToggleGroupControlOption, { value: "permanent", label: __('Stálá nabídka', 'brilo-blocks') }), _jsx(ToggleGroupControlOption, { value: "hide", label: __('Skrýt', 'brilo-blocks') })] }), 'hide' !== emptyBehaviour && (_jsx(TextareaControl, { __nextHasNoMarginBottom: true, label: __('Vlastní text zprávy', 'brilo-blocks'), help: __('Když zůstane prázdné, použije se věta podle zvoleného zdroje lístků.', 'brilo-blocks'), rows: 2, value: emptyText, onChange: (value) => setAttributes({ emptyText: value }) }))] })] }), _jsxs("div", { ...blockProps, children: ['manual' === mode && (_jsxs("div", { className: "brilo-food-menu-preview__pick", children: [(_a = options.renderMenusControl) === null || _a === void 0 ? void 0 : _a.call(options, {
32
+ selectedItems: menuIds,
33
+ onChange: (ids) => setAttributes({ menuIds: ids }),
34
+ }), _jsx(Text, { variant: "muted", children: pickedNote(menuIds.length) })] })), _jsx(FoodMenuPreview, { attributes: attributes })] })] }));
35
+ };
36
+ }
@@ -0,0 +1,4 @@
1
+ import type { BlockConfiguration } from '@wordpress/blocks';
2
+ import type { FoodMenuGroupAttributes, FoodMenuGroupOptions } from './types';
3
+ export declare function createFoodMenuGroupBlock(options: FoodMenuGroupOptions): BlockConfiguration<FoodMenuGroupAttributes>;
4
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/factory.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,mBAAmB,CAAA;AAYzD,OAAO,KAAK,EAAC,uBAAuB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAA;AAE1E,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,oBAAoB,GAAG,kBAAkB,CAAC,uBAAuB,CAAC,CAmDnH"}
@@ -0,0 +1,57 @@
1
+ import { __ } from '@wordpress/i18n';
2
+ import { FOOD_MENU_GROUP_EMPTY_BEHAVIOUR, FOOD_MENU_GROUP_EMPTY_BEHAVIOURS, FOOD_MENU_GROUP_LAYOUT, FOOD_MENU_GROUP_LAYOUTS, FOOD_MENU_GROUP_MODE, FOOD_MENU_GROUP_MODES, } from './constants';
3
+ import { createFoodMenuGroupEdit } from './edit';
4
+ import { icon as defaultIcon } from './icon';
5
+ export function createFoodMenuGroupBlock(options) {
6
+ var _a, _b, _c, _d;
7
+ return {
8
+ name: options.name,
9
+ title: (_a = options.title) !== null && _a !== void 0 ? _a : __('Jídelní lístek', 'brilo-blocks'),
10
+ description: (_b = options.description) !== null && _b !== void 0 ? _b : __('Zobrazí vybraný lístek, dnešní denní lístek nebo celý týden.', 'brilo-blocks'),
11
+ category: (_c = options.category) !== null && _c !== void 0 ? _c : 'widgets',
12
+ ...(options.parent && { parent: options.parent }),
13
+ icon: (_d = options.icon) !== null && _d !== void 0 ? _d : { src: defaultIcon },
14
+ supports: { html: false, customClassName: false },
15
+ attributes: {
16
+ mode: {
17
+ type: 'string',
18
+ default: FOOD_MENU_GROUP_MODE,
19
+ enum: [...FOOD_MENU_GROUP_MODES],
20
+ },
21
+ layout: {
22
+ type: 'string',
23
+ default: FOOD_MENU_GROUP_LAYOUT,
24
+ enum: [...FOOD_MENU_GROUP_LAYOUTS],
25
+ },
26
+ menuIds: {
27
+ type: 'array',
28
+ default: [],
29
+ items: { type: 'number' },
30
+ },
31
+ showPrices: {
32
+ type: 'boolean',
33
+ default: true,
34
+ },
35
+ showAllergens: {
36
+ type: 'boolean',
37
+ default: true,
38
+ },
39
+ showReservation: {
40
+ type: 'boolean',
41
+ default: true,
42
+ },
43
+ emptyBehaviour: {
44
+ type: 'string',
45
+ default: FOOD_MENU_GROUP_EMPTY_BEHAVIOUR,
46
+ enum: [...FOOD_MENU_GROUP_EMPTY_BEHAVIOURS],
47
+ },
48
+ // Empty means "use the wording the server picks for this mode".
49
+ emptyText: {
50
+ type: 'string',
51
+ default: '',
52
+ },
53
+ },
54
+ edit: createFoodMenuGroupEdit(options),
55
+ save: () => null,
56
+ };
57
+ }
@@ -0,0 +1,2 @@
1
+ export declare const icon: import("react").JSX.Element;
2
+ //# sourceMappingURL=icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/icon.tsx"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,6BAOhB,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ export const icon = (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", role: "img", "aria-label": "J\u00EDdeln\u00ED l\u00EDstek", children: [_jsx("rect", { x: "3", y: "2", width: "14", height: "16", stroke: "currentColor", fill: "none" }), _jsx("line", { x1: "6", y1: "6", x2: "14", y2: "6", stroke: "currentColor" }), _jsx("line", { x1: "6", y1: "10", x2: "14", y2: "10", stroke: "currentColor" }), _jsx("line", { x1: "6", y1: "14", x2: "11", y2: "14", stroke: "currentColor" })] }));
@@ -0,0 +1,6 @@
1
+ export type { FoodMenuGroupAttributes, FoodMenuGroupEmptyBehaviour, FoodMenuGroupLayout, FoodMenuGroupMode, FoodMenuGroupOptions, } from './types';
2
+ export { createFoodMenuGroupBlock } from './factory';
3
+ export { FoodMenuSelectModal } from './FoodMenuSelectModal';
4
+ import type { FoodMenuGroupOptions } from './types';
5
+ export declare const foodMenuGroupDefaults: FoodMenuGroupOptions;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAC,wBAAwB,EAAC,MAAM,WAAW,CAAA;AAClD,OAAO,EAAC,mBAAmB,EAAC,MAAM,uBAAuB,CAAA;AAEzD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,SAAS,CAAA;AAEjD,eAAO,MAAM,qBAAqB,EAAE,oBAInC,CAAA"}
@@ -0,0 +1,7 @@
1
+ export { createFoodMenuGroupBlock } from './factory';
2
+ export { FoodMenuSelectModal } from './FoodMenuSelectModal';
3
+ export const foodMenuGroupDefaults = {
4
+ name: 'brilo/food-menu-group',
5
+ // Also allowed inside a content column, so a menu can sit next to a gallery.
6
+ parent: ['brilo/base-section', 'brilo/column-item'],
7
+ };
@@ -0,0 +1,19 @@
1
+ import type { BriloBlockType, SelectControlProps } from '../../../types';
2
+ import type { FOOD_MENU_GROUP_EMPTY_BEHAVIOURS, FOOD_MENU_GROUP_LAYOUTS, FOOD_MENU_GROUP_MODES } from './constants';
3
+ export type FoodMenuGroupMode = (typeof FOOD_MENU_GROUP_MODES)[number];
4
+ export type FoodMenuGroupLayout = (typeof FOOD_MENU_GROUP_LAYOUTS)[number];
5
+ export type FoodMenuGroupEmptyBehaviour = (typeof FOOD_MENU_GROUP_EMPTY_BEHAVIOURS)[number];
6
+ export interface FoodMenuGroupAttributes extends Record<string, unknown> {
7
+ mode: FoodMenuGroupMode;
8
+ layout: FoodMenuGroupLayout;
9
+ menuIds: number[];
10
+ showPrices: boolean;
11
+ showAllergens: boolean;
12
+ showReservation: boolean;
13
+ emptyBehaviour: FoodMenuGroupEmptyBehaviour;
14
+ emptyText: string;
15
+ }
16
+ export interface FoodMenuGroupOptions extends BriloBlockType {
17
+ renderMenusControl?: (props: SelectControlProps) => JSX.Element;
18
+ }
19
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/blocks/food-menu/food-menu-group/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAE,kBAAkB,EAAC,MAAM,SAAS,CAAA;AAC/D,OAAO,KAAK,EAAC,gCAAgC,EAAE,uBAAuB,EAAE,qBAAqB,EAAC,MAAM,aAAa,CAAA;AAEjH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAA;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAC1E,MAAM,MAAM,2BAA2B,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,CAAC,CAAA;AAE3F,MAAM,WAAW,uBAAwB,SAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACtE,IAAI,EAAE,iBAAiB,CAAA;IACvB,MAAM,EAAE,mBAAmB,CAAA;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,aAAa,EAAE,OAAO,CAAA;IACtB,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,2BAA2B,CAAA;IAC3C,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IAC1D,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,GAAG,CAAC,OAAO,CAAA;CAChE"}
@@ -0,0 +1 @@
1
+ export {};
@@ -1,7 +1,7 @@
1
1
  export { createGalleryGroupBlock } from './factory';
2
2
  export const galleryGroupDefaults = {
3
3
  name: 'brilo/gallery-group',
4
- parent: ['brilo/base-section'],
4
+ parent: ['brilo/base-section', 'brilo/column-item'],
5
5
  allowedBlocks: ['brilo/gallery-item'],
6
6
  template: [],
7
7
  };
@@ -15,6 +15,12 @@ export type EntitySelectModalConfig<T extends EntityRecord> = {
15
15
  modalTitle: string;
16
16
  emptyLabel: string;
17
17
  className?: string;
18
+ /**
19
+ * Keep the reorderable selection inside the modal instead of under the
20
+ * button — for blocks whose canvas already previews the picked items in
21
+ * order, where a second list would only repeat them.
22
+ */
23
+ listInModal?: boolean;
18
24
  };
19
25
  /**
20
26
  * Generic table-view entity picker built on @wordpress/dataviews (search, sort,
@@ -1 +1 @@
1
- {"version":3,"file":"EntitySelectModal.d.ts","sourceRoot":"","sources":["../../../src/components/EntitySelectModal/EntitySelectModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,KAAK,EAAE,IAAI,EAAC,MAAM,yBAAyB,CAAA;AAKxD,OAAO,KAAqC,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAA;AAE/C,KAAK,YAAY,GAAG;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAAA;AA0BhC,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC5D,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAClB,WAAW,EAAE,IAAI,CAAA;IACjB,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IACjC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IACnD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAA;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AA2FD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,YAAY,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,iCACnC,kBAAkB,uBAwGhF"}
1
+ {"version":3,"file":"EntitySelectModal.d.ts","sourceRoot":"","sources":["../../../src/components/EntitySelectModal/EntitySelectModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,KAAK,EAAE,IAAI,EAAC,MAAM,yBAAyB,CAAA;AAKxD,OAAO,KAAqC,MAAM,OAAO,CAAA;AACzD,OAAO,KAAK,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAA;AAE/C,KAAK,YAAY,GAAG;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAAA;AA0BhC,MAAM,MAAM,uBAAuB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC5D,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAA;IAClB,WAAW,EAAE,IAAI,CAAA;IACjB,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAA;IACjC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IACnD,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAA;IACtD,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AA2FD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,YAAY,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,iCACnC,kBAAkB,uBA8GhF"}
@@ -84,7 +84,8 @@ export function createEntitySelectModal(config) {
84
84
  const toggleSelected = (id) => {
85
85
  onChange(selectedItems.includes(id) ? selectedItems.filter((itemId) => itemId !== id) : [...selectedItems, id]);
86
86
  };
87
- return (_jsxs(VStack, { spacing: 3, className: (_a = config.className) !== null && _a !== void 0 ? _a : 'i-event-select-modal', children: [_jsx(Button, { variant: "secondary", icon: plusCircle, onClick: () => setIsOpen(true), children: config.buttonLabel }), _jsx(SelectedOrderList, { items: selectedEntities, getItemLabel: config.getItemLabel, emptyLabel: config.emptyLabel, onChange: onChange, onRemove: (id) => onChange(selectedItems.filter((itemId) => itemId !== id)) }), isOpen && (_jsx(Modal, { title: config.modalTitle, onRequestClose: () => setIsOpen(false), size: "fill", children: _jsxs(VStack, { spacing: 4, style: { height: '100%' }, children: [_jsx("div", { style: { flexGrow: 1, minHeight: 0 }, children: _jsx(TypedDataViews, { data: data, fields: config.fields, view: view, onChangeView: setView, paginationInfo: paginationInfo, isLoading: isLoading, defaultLayouts: { table: {} }, getItemId: (item) => String(item.id), selection: selectedItems.map(String), onChangeSelection: (ids) => onChange(ids.map(Number)), actions: [
87
+ const selectedList = (_jsx(SelectedOrderList, { items: selectedEntities, getItemLabel: config.getItemLabel, emptyLabel: config.emptyLabel, onChange: onChange, onRemove: (id) => onChange(selectedItems.filter((itemId) => itemId !== id)) }));
88
+ return (_jsxs(VStack, { spacing: 3, className: (_a = config.className) !== null && _a !== void 0 ? _a : 'i-event-select-modal', children: [_jsx(Button, { variant: "secondary", icon: plusCircle, onClick: () => setIsOpen(true), children: config.buttonLabel }), !config.listInModal && selectedList, isOpen && (_jsx(Modal, { title: config.modalTitle, onRequestClose: () => setIsOpen(false), size: "fill", children: _jsxs(VStack, { spacing: 4, style: { height: '100%' }, children: [_jsx("div", { style: { flexGrow: 1, minHeight: 0 }, children: _jsx(TypedDataViews, { data: data, fields: config.fields, view: view, onChangeView: setView, paginationInfo: paginationInfo, isLoading: isLoading, defaultLayouts: { table: {} }, getItemId: (item) => String(item.id), selection: selectedItems.map(String), onChangeSelection: (ids) => onChange(ids.map(Number)), actions: [
88
89
  {
89
90
  id: 'toggle',
90
91
  label: (items) => items.length && selectedItems.includes(items[0].id) ? __('Odebrat', 'brilo-blocks') : __('Přidat', 'brilo-blocks'),
@@ -95,6 +96,6 @@ export function createEntitySelectModal(config) {
95
96
  });
96
97
  },
97
98
  },
98
- ] }) }), _jsx(HStack, { justify: "flex-end", children: _jsx(Button, { variant: "primary", onClick: () => setIsOpen(false), children: __('Hotovo', 'brilo-blocks') }) })] }) }))] }));
99
+ ] }) }), config.listInModal && selectedList, _jsx(HStack, { justify: "flex-end", children: _jsx(Button, { variant: "primary", onClick: () => setIsOpen(false), children: __('Hotovo', 'brilo-blocks') }) })] }) }))] }));
99
100
  };
100
101
  }
package/build/index.d.ts CHANGED
@@ -115,6 +115,8 @@ export { PostSelectModal } from './components/Post/PostSelectModal';
115
115
  export { PostTermSelectModal } from './components/Post/PostTermSelectModal';
116
116
  export type { DocumentsGridAttributes, DocumentsGridOptions, DocumentsGridListingStyle, DocumentsGridMode, DocumentsGridSortBy, } from './blocks/document/documents-grid';
117
117
  export { createDocumentsGridBlock, documentsGridDefaults, DocumentsSelectModal, DocumentTermSelectModal, } from './blocks/document/documents-grid';
118
+ export type { FoodMenuGroupAttributes, FoodMenuGroupLayout, FoodMenuGroupMode, FoodMenuGroupOptions, } from './blocks/food-menu/food-menu-group';
119
+ export { createFoodMenuGroupBlock, foodMenuGroupDefaults, FoodMenuSelectModal } from './blocks/food-menu/food-menu-group';
118
120
  export type { LinkItemAttributes, LinkItemIcon, LinkItemOptions } from './blocks/link/link-item';
119
121
  export { createLinkItemBlock, linkItemDefaults } from './blocks/link/link-item';
120
122
  export type { ContentWithAsideAttributes, ContentWithAsideOptions } from './blocks/layout/layout-content-w-aside';