@forgebuild/hotal-ui 0.23.205 → 0.24.1

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 (45) hide show
  1. package/README.md +18 -1
  2. package/dist/components/ai-chat-widget.js +4 -4
  3. package/dist/components/availability-calendar.js +2 -2
  4. package/dist/components/booking-card.js +2 -2
  5. package/dist/components/booking-checkout.js +2 -2
  6. package/dist/components/booking-confirmed.js +1 -1
  7. package/dist/components/booking-flow.js +2 -2
  8. package/dist/components/booking-progress-bar.js +1 -1
  9. package/dist/components/booking-summary.js +2 -2
  10. package/dist/components/chunks/client-DNa0V682.js +3 -0
  11. package/dist/components/confirmation-card.js +2 -2
  12. package/dist/components/dining-teaser.js +2 -2
  13. package/dist/components/event-contact-form.js +2 -2
  14. package/dist/components/event-inquiries-feed.js +2 -2
  15. package/dist/components/extras-catalogue.js +2 -2
  16. package/dist/components/floor-plan-hero.js +2 -2
  17. package/dist/components/google-reviews.js +2 -2
  18. package/dist/components/instagram-feed.js +2 -2
  19. package/dist/components/island-map.js +1 -1
  20. package/dist/components/live-dining-orders-feed.js +2 -2
  21. package/dist/components/live-golf-bookings-feed.js +2 -2
  22. package/dist/components/live-reservations-feed.js +2 -2
  23. package/dist/components/live-room-bookings-feed.js +2 -2
  24. package/dist/components/live-shop-orders-feed.js +2 -2
  25. package/dist/components/live-spa-bookings-feed.js +2 -2
  26. package/dist/components/menu-section.js +13 -7
  27. package/dist/components/proshop-catalogue.js +2 -2
  28. package/dist/components/reservation-bar.js +2 -2
  29. package/dist/components/reservation-cancel.js +2 -2
  30. package/dist/components/restaurant-order-form.js +2 -2
  31. package/dist/components/room-grid.js +2 -2
  32. package/dist/components/searchable-select.js +2 -2
  33. package/dist/components/service-booking-bar.js +2 -2
  34. package/dist/components/spa-booking-widget.js +3 -3
  35. package/dist/components/stay-search.js +2 -2
  36. package/dist/components/tripadvisor-reviews.js +2 -2
  37. package/dist/components/venue-carousel.js +2 -2
  38. package/dist/hotal-ui.js +11297 -11106
  39. package/dist/index.d.ts +44 -0
  40. package/dist/server/index.d.ts +11 -0
  41. package/dist/server/index.js +34 -0
  42. package/dist/server/menu-section.js +944 -0
  43. package/dist/server/menu-section.meta.js +2 -0
  44. package/package.json +8 -2
  45. package/dist/components/chunks/client-BDk8LqGN.js +0 -3
@@ -0,0 +1,944 @@
1
+ import * as $ from 'svelte/internal/server';
2
+ import { onMount } from 'svelte';
3
+ import gsap from 'gsap';
4
+
5
+ export default function MenuSection($$renderer, $$props) {
6
+ $$renderer.component(($$renderer) => {
7
+ /** 'accent': drawn in the rule colour, e.g. a time window. */
8
+ /** Needed to add this item to a cart (see cartEnabled below) -- an item
9
+ * missing this never gets a quantity stepper, regardless of cartEnabled. */
10
+ /** Numeric price for cart math, independent of `price` above (which may
11
+ * be an arbitrary display override a cart can't add up) -- like `id`,
12
+ * required for this item to get a stepper. */
13
+ /** Small chips after the name ("Vegetarian", "Thu–Sun after 5pm"). */
14
+ /** Small secondary lines under the description ("+$3 premium cut"). */
15
+ /** Short text shown at the top of the category's panel ("Made here"). */
16
+ /** A paragraph at the top of the category's panel, true of every item in it. */
17
+ /** Color/background values the host page can set without writing any CSS.
18
+ * Applied internally as custom properties on the component's own root —
19
+ * consumers never need to know the --ms-* variable names. */
20
+ /** Item description color (below each item's name). Defaults to
21
+ * textColor dimmed to 70% -- set this instead when a host's dark
22
+ * background needs the description at full strength rather than
23
+ * dimmed (client-reported, 2026-09-12: the dimmed default read as
24
+ * low-contrast grey against a near-black panel). */
25
+ const THEME_KEY_TO_VAR = {
26
+ textColor: '--ms-text-color',
27
+ headingColor: '--ms-heading-color',
28
+ accentBg: '--ms-accent-bg',
29
+ accentText: '--ms-accent-text',
30
+ priceColor: '--ms-price-color',
31
+ ruleColor: '--ms-rule-color',
32
+ panelBg: '--ms-panel-bg',
33
+ borderColor: '--ms-border-color',
34
+ groupBg: '--ms-group-bg',
35
+ panelGapBg: '--ms-panel-gap-bg',
36
+ infoGapBg: '--ms-info-gap-bg',
37
+ bg: '--ms-bg',
38
+ padding: '--ms-padding',
39
+ mutedTextColor: '--ms-muted-text-color'
40
+ };
41
+
42
+ /** 'stacked' (default): heading centered above tabs/info, single column at every width.
43
+ * 'split': at desktop widths (>=1024px), heading sits beside the tabs/info column instead of above it. */
44
+ /** 'default': the classic centered menu design. 'panel': eyebrow-above-heading header row with
45
+ * tabs on the right, full-width boxed info grid, bordered item-card grid, no entrance
46
+ * animations and instant category switching. */
47
+ /** Skips this component's own built-in slide-in for the heading column
48
+ * (title/eyebrow/rule) on mount -- for a host that already animates the
49
+ * `heading-title` slot's content itself (e.g. a sitewide scroll-reveal
50
+ * system keyed off its own class), so the two don't run at once and
51
+ * visibly fight each other. `variant: 'panel'` already skips *every*
52
+ * entrance animation for a different reason (that variant's own static
53
+ * design); this is the finer-grained version for hosts that still want
54
+ * this component's other entrance motion (tabs, item-card stagger) and
55
+ * only need the heading itself left alone. Off (component still
56
+ * animates the heading) by default. */
57
+ /** Item-card grid columns at desktop widths (>=1024px). Default variant only -- 'panel' sizes its
58
+ * own grid independently. Narrower hosts (e.g. a menu column beside a photo) read better at 2. */
59
+ /** Show a pill row filtering the active category by item `group` (e.g. country on a wine list). */
60
+ /** Show a pill row filtering by item `country` (e.g. region on a wine list). With groupFilter on, it appears once a group is chosen and lists that group's values only. */
61
+ /** Adds a +/- quantity stepper next to each priced item (that has both
62
+ * `id` and `priceValue`) and emits `cart-change` on every change --
63
+ * same event shape as <proshop-catalogue>. Off by default: most hosts
64
+ * use this purely as a read-only menu display. */
65
+ /** Restore cart quantities, e.g. from localStorage: [{ id, quantity }].
66
+ * Reactive, not mount-only -- reassign it (a new array) to re-sync
67
+ * quantities a host changed elsewhere (mirrors <proshop-catalogue>'s
68
+ * own `initial`). */
69
+ /** Set by the server renderer (@forgebuild/hotal-ui/server): the element
70
+ * arrived with its content already in a declarative shadow root, so the
71
+ * entrance tweens would only fade out and back in what is already on
72
+ * screen. Skips them; tab-switch motion is unchanged. */
73
+ /** Small print under the panels (e.g. a consumer advisory). */
74
+ /** The heading's level. Default: h1 in the classic variant, h2 in 'panel',
75
+ * as before -- a host page that already has its own h1 sets 2. */
76
+ let {
77
+ title = 'MENU',
78
+ eyebrow = '',
79
+ categories = [],
80
+ info = [],
81
+ allergens = [],
82
+ pdfUrl,
83
+ pdfLabel = 'View PDF Menu',
84
+ topFlourishSrc,
85
+ tailFlourishSrc,
86
+ headingCircleColor,
87
+ headingAlign = 'center',
88
+ layout = 'stacked',
89
+ variant = 'default',
90
+ disableHeadingMotion = false,
91
+ itemColumns = 3,
92
+ theme = {},
93
+ openInNewTabLabel = 'Open in New Tab',
94
+ closeAriaLabel = 'Close',
95
+ groupFilter = false,
96
+ countryFilter = false,
97
+ groupFilterAllLabel = 'All',
98
+ countryFilterAllLabel = 'All',
99
+ cartEnabled = false,
100
+ initial = [],
101
+ prerendered = false,
102
+ footnote = '',
103
+ headingLevel
104
+ } = $$props;
105
+
106
+ const headingTag = $.derived(() => `h${headingLevel === 1 || headingLevel === 2 || headingLevel === 3 ? headingLevel : variant === 'panel' ? 2 : 1}`);
107
+
108
+ // heading-title/eyebrow are rendered as real native <slot> elements (via
109
+ // {@html} below, alongside intro's own) rather than Svelte's own <slot>:
110
+ // Svelte's client-side custom-element wrapper only creates a real <slot>
111
+ // at connect time if it already sees matching light-DOM content, so a
112
+ // prerendered shadow root -- rendered before any host page's light DOM is
113
+ // even parsed -- always got Svelte's *fallback* markup baked in, and a
114
+ // host that does slot its own heading never saw it swapped in natively.
115
+ // A literal <slot> with the same fallback nested inside is correct on
116
+ // both sides: the browser shows the fallback until/unless something is
117
+ // slotted, natively, no JS required either way.
118
+ function escapeHtml(value) {
119
+ return value.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
120
+ }
121
+
122
+ function emit(name, detail) {
123
+ (void 0)?.dispatchEvent(new CustomEvent(name, { detail, bubbles: true, composed: true }));
124
+ }
125
+
126
+ // Reactive to `initial` (not a one-time initializer), same reasoning as
127
+ // <proshop-catalogue>'s own `initial`: a host can push an externally-
128
+ // changed cart back in after mount (e.g. a checkout sidebar elsewhere on
129
+ // the page). setQty below only ever writes `qty` directly, never
130
+ // `initial`, so this doesn't fight it or loop -- it re-syncs exactly
131
+ // when the host reassigns the `initial` prop to a new array.
132
+ let qty = {};
133
+
134
+ function setQty(id, q) {
135
+ qty[id] = Math.max(0, Math.min(q, 99));
136
+ }
137
+
138
+ // Same press-bounce + value-pop feedback as <proshop-catalogue>'s own
139
+ // qty stepper (ProshopCatalogue.svelte) -- ported rather than shared
140
+ // since the two components don't share a base, but the interaction
141
+ // should feel identical wherever a guest is adding something to a cart.
142
+ function animateBtn(el) {
143
+ el.animate(
144
+ [
145
+ { transform: 'scale(1)', offset: 0 },
146
+ { transform: 'scale(0.82)', offset: 0.15 },
147
+ { transform: 'scale(1.1)', offset: 0.55 },
148
+ { transform: 'scale(1)', offset: 1 }
149
+ ],
150
+ { duration: 420, easing: 'ease' }
151
+ );
152
+ }
153
+
154
+ let poppedId = null;
155
+
156
+ function pulse(id) {
157
+ poppedId = null;
158
+ queueMicrotask(() => poppedId = id);
159
+ }
160
+
161
+ const cartItems = $.derived(() => categories.flatMap((cat) => cat.items).filter((i) => i.id != null && i.priceValue != null && (qty[i.id] ?? 0) > 0).map((i) => ({
162
+ id: i.id,
163
+ name: i.name,
164
+ price: i.priceValue,
165
+ quantity: qty[i.id]
166
+ })));
167
+
168
+ const cartTotal = $.derived(() => cartItems().reduce((sum, i) => sum + i.price * i.quantity, 0));
169
+ let activeCat = 0;
170
+
171
+ // Optional in-category filters (wine lists: group = country, country = region).
172
+ // Kept PER CATEGORY: leaving a tab must not regrow its (or the next tab's) list while
173
+ // the switch animation runs -- that concurrency corrupted the keyed each blocks.
174
+ // One state object per category. Panels wrap their rows in a key block on filtersByCat[i] so a
175
+ // filter change recreates that panel's rows outright: in-place reconciliation of a
176
+ // shrunk-then-regrown keyed list duplicated trailing rows (Svelte 5.56).
177
+ let filtersByCat = {};
178
+
179
+ const activeGroup = $.derived(() => filtersByCat[activeCat]?.g ?? null);
180
+ const activeCountry = $.derived(() => filtersByCat[activeCat]?.c ?? null);
181
+
182
+ function setGroup(g) {
183
+ filtersByCat = { ...filtersByCat, [activeCat]: { g, c: null } };
184
+ }
185
+
186
+ function setCountry(c) {
187
+ filtersByCat = { ...filtersByCat, [activeCat]: { g: activeGroup(), c } };
188
+ }
189
+
190
+ // The panel element is keyed on this string, so a filter change recreates the whole
191
+ // panel: in-place reconciliation of a shrunk-then-regrown list left an orphaned trailing
192
+ // row inside the panel (Svelte 5.56), and block-level {#key} did not remove it either.
193
+ function filterKeyOf(ci) {
194
+ const f = filtersByCat[ci];
195
+
196
+ return `${f?.g ?? ''}|${f?.c ?? ''}`;
197
+ }
198
+
199
+ function uniq(values) {
200
+ return [...new Set(values.filter((v) => Boolean(v)))];
201
+ }
202
+
203
+ function groupsOf(cat) {
204
+ return uniq(cat.items.map((i) => i.group));
205
+ }
206
+
207
+ function countriesOf(cat) {
208
+ return uniq(cat.items.filter((i) => !activeGroup() || i.group === activeGroup()).map((i) => i.country));
209
+ }
210
+
211
+ const visibleByCat = $.derived(() => categories.map((cat, ci) => {
212
+ const g = filtersByCat[ci]?.g ?? null;
213
+ const c = filtersByCat[ci]?.c ?? null;
214
+
215
+ return cat.items.filter((i) => (!g || i.group === g) && (!c || i.country === c));
216
+ }));
217
+
218
+ // Flatten each category into single-root rows (group heading rows + item rows) with
219
+ // stable keys. Interleaving {#if} headings inside a keyed each broke reconciliation
220
+ // when filters shrank and regrew the list (hidden panels were left half-rendered).
221
+ const rowsByCat = $.derived(() => visibleByCat().map((items) => {
222
+ const rows = [];
223
+ let last;
224
+
225
+ items.forEach((item, j) => {
226
+ if (item.group && item.group !== last) rows.push({ key: `g:${item.group}`, group: item.group });
227
+
228
+ last = item.group;
229
+
230
+ // Index + name: a regrown list never reuses a stale node for a different item.
231
+ rows.push({ key: `i:${j}:${item.name}`, item });
232
+ });
233
+
234
+ return rows;
235
+ }));
236
+
237
+ let pdfOpen = false;
238
+ let pdfDialog = void 0;
239
+
240
+ function findAllergen(id) {
241
+ return allergens.find((a) => a.id === id);
242
+ }
243
+
244
+ // --- Sliding tab indicator ---
245
+ // Updates immediately on click, independent of activeCat (which only flips once the
246
+ // outgoing panel's fade-out finishes) so the indicator and tab highlight react instantly.
247
+ let activeTabVisual = 0;
248
+
249
+ let tabsWrap = void 0;
250
+ let tabRefs = [];
251
+ let indicatorStyle = '';
252
+
253
+ // Until the indicator has been placed the active tab paints its own fill
254
+ // (see .ms-tabs:not([data-indicator-ready])): a prerendered element, or
255
+ // one with JS off, never places it, and the accent-text label would sit
256
+ // on the strip's own background.
257
+ let indicatorReady = false;
258
+
259
+ function syncIndicator() {
260
+ const btn = tabRefs[activeTabVisual];
261
+
262
+ if (!btn || !tabsWrap) return;
263
+
264
+ indicatorStyle = `left: ${btn.offsetLeft}px; width: ${btn.offsetWidth}px;`;
265
+ indicatorReady = btn.offsetWidth > 0;
266
+ }
267
+
268
+ // Re-sync when the tabs first gain layout — covers hosts that mount the
269
+ // element inside a display:none wrapper and reveal it later (offsetWidth
270
+ // is 0 until then, so the mount-time sync lands on a zero-width tab).
271
+ // --- Panel switch animation ---
272
+ let panelRefs = [];
273
+
274
+ let headingColEl = void 0;
275
+ let infoBarEl = void 0;
276
+
277
+ onMount(() => {
278
+ if (typeof window === 'undefined') return;
279
+ if (variant === 'panel') return; // panel variant renders statically, no entrance motion
280
+ if (prerendered) return; // already on screen (see the prop): don't fade it out and back in
281
+ if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;
282
+
283
+ // headingCircleColor gates this too, not just disableHeadingMotion: the
284
+ // slide only reads as meaningful when a contained shape (the circle) is
285
+ // visibly entering the frame from off-page -- bare text sliding in with
286
+ // no frame just looks like it jumped sideways (design call, 2026-09-12).
287
+ // A host with no circle gets the right default with no flag needed;
288
+ // disableHeadingMotion stays as an explicit override for the rarer case
289
+ // of a host with a circle that still doesn't want this motion.
290
+ if (headingColEl && !disableHeadingMotion && headingCircleColor) {
291
+ gsap.from(headingColEl.children, {
292
+ opacity: 0,
293
+ x: -200,
294
+ duration: 0.7,
295
+ ease: 'power2.out',
296
+ stagger: 0.22
297
+ });
298
+ }
299
+
300
+ if (tabsWrap) {
301
+ gsap.from(tabsWrap, {
302
+ opacity: 0,
303
+ y: -30,
304
+ duration: 0.6,
305
+ ease: 'power2.out',
306
+ delay: 0.2
307
+ });
308
+ }
309
+
310
+ if (infoBarEl) {
311
+ gsap.from(infoBarEl.children, {
312
+ opacity: 0,
313
+ y: 20,
314
+ duration: 0.6,
315
+ ease: 'power2.out',
316
+ stagger: 0.1,
317
+ delay: 0.4
318
+ });
319
+ }
320
+
321
+ const initialPanel = panelRefs[activeCat];
322
+
323
+ if (initialPanel) {
324
+ gsap.from(initialPanel.children, {
325
+ opacity: 0,
326
+ y: 24,
327
+ duration: 0.5,
328
+ ease: 'power2.out',
329
+ stagger: 0.04,
330
+ delay: 0.6
331
+ });
332
+ }
333
+ });
334
+
335
+ function revealPanel(panel, reduced) {
336
+ if (reduced) return;
337
+
338
+ gsap.fromTo(
339
+ panel.children,
340
+ { opacity: 0, y: 16 },
341
+ // Per-item stagger, capped so long lists (hundreds of wines) still reveal in ~0.5s.
342
+ {
343
+ opacity: 1,
344
+ y: 0,
345
+ duration: 0.4,
346
+ ease: 'power2.out',
347
+ stagger: Math.min(0.03, 0.45 / Math.max(panel.children.length, 1))
348
+ }
349
+ );
350
+ }
351
+
352
+ function switchTab(index) {
353
+ if (index === activeCat) return;
354
+
355
+ const reduced = variant === 'panel' || typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
356
+ const currentPanel = panelRefs[activeCat];
357
+ const nextIndex = index;
358
+
359
+ activeTabVisual = nextIndex;
360
+
361
+ if (reduced || !currentPanel) {
362
+ activeCat = nextIndex;
363
+
364
+ return;
365
+ }
366
+
367
+ gsap.killTweensOf(currentPanel.children);
368
+
369
+ gsap.to(currentPanel.children, {
370
+ opacity: 0,
371
+ y: -12,
372
+ duration: 0.2,
373
+ ease: 'power1.in',
374
+ stagger: Math.min(0.015, 0.25 / Math.max(currentPanel.children.length, 1)),
375
+ onComplete: () => {
376
+ activeCat = nextIndex;
377
+
378
+ const nextPanel = panelRefs[nextIndex];
379
+
380
+ if (nextPanel) revealPanel(nextPanel, false);
381
+ }
382
+ });
383
+ }
384
+
385
+ // Left/Right move between tabs (wrapping), Home/End jump to the ends:
386
+ // the WAI-ARIA tabs pattern, with automatic activation.
387
+ function onTabKeydown(event, index) {
388
+ const last = categories.length - 1;
389
+
390
+ const next = event.key === 'ArrowRight'
391
+ ? index === last ? 0 : index + 1
392
+ : event.key === 'ArrowLeft'
393
+ ? index === 0 ? last : index - 1
394
+ : event.key === 'Home' ? 0 : event.key === 'End' ? last : null;
395
+
396
+ if (next === null) return;
397
+
398
+ event.preventDefault();
399
+ switchTab(next);
400
+ tabRefs[next]?.focus();
401
+ }
402
+
403
+ if (variant === 'panel') {
404
+ $$renderer.push('<!--[0-->');
405
+ $$renderer.push(`<section class="msp-root svelte-ssr-menu-section"><div class="msp-header svelte-ssr-menu-section"><div class="svelte-ssr-menu-section">`);
406
+
407
+ if (eyebrow) {
408
+ $$renderer.push('<!--[0-->');
409
+ $$renderer.push(`<div class="msp-eyebrow svelte-ssr-menu-section"><span class="msp-eyebrow-line svelte-ssr-menu-section"></span> <span class="msp-eyebrow-text svelte-ssr-menu-section">${$.escape(eyebrow)}</span></div>`);
410
+ } else {
411
+ $$renderer.push('<!--[-1-->');
412
+ }
413
+
414
+ $$renderer.push(`<!--]--> `);
415
+
416
+ $.element(
417
+ $$renderer,
418
+ headingTag(),
419
+ () => {
420
+ $$renderer.push(` class="msp-heading svelte-ssr-menu-section" id="menu-heading"`);
421
+ },
422
+ () => {
423
+ $$renderer.push(`${$.escape(title)}`);
424
+ }
425
+ );
426
+
427
+ $$renderer.push(` ${$.html('<slot name="intro"></slot>')}</div> `);
428
+
429
+ if (categories.length > 1) {
430
+ $$renderer.push('<!--[0-->');
431
+ $$renderer.push(`<div class="msp-tabs svelte-ssr-menu-section" role="tablist" aria-labelledby="menu-heading"${$.attr('data-indicator-ready', indicatorReady ? '' : undefined)}><span class="msp-tab-indicator svelte-ssr-menu-section"${$.attr_style(indicatorStyle)} aria-hidden="true"></span> <!--[-->`);
432
+
433
+ const each_array = $.ensure_array_like(categories);
434
+
435
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
436
+ let cat = each_array[i];
437
+
438
+ $$renderer.push(`<button type="button"${$.attr_class('msp-tab svelte-ssr-menu-section', void 0, { 'msp-tab-active': i === activeTabVisual })}${$.attr('part', i === activeTabVisual ? 'tab tab-active' : 'tab')} role="tab"${$.attr('id', `tab-${i}`)}${$.attr('aria-selected', i === activeTabVisual)}${$.attr('aria-controls', `panel-${i}`)}${$.attr('tabindex', i === activeTabVisual ? 0 : -1)}>${$.escape(cat.label)}</button>`);
439
+ }
440
+
441
+ $$renderer.push(`<!--]--></div>`);
442
+ } else {
443
+ $$renderer.push('<!--[-1-->');
444
+ }
445
+
446
+ $$renderer.push(`<!--]--></div> `);
447
+
448
+ if (info.length) {
449
+ $$renderer.push('<!--[0-->');
450
+ $$renderer.push(`<div class="msp-info svelte-ssr-menu-section"><!--[-->`);
451
+
452
+ $.slot($$renderer, $$props, 'info', {}, () => {
453
+ $$renderer.push(`<!--[-->`);
454
+
455
+ const each_array_1 = $.ensure_array_like(info);
456
+
457
+ for (let k = 0, $$length = each_array_1.length; k < $$length; k++) {
458
+ let item = each_array_1[k];
459
+
460
+ $$renderer.push(`<div class="msp-info-item svelte-ssr-menu-section"><span class="msp-info-label svelte-ssr-menu-section">${$.escape(item.label)}</span> <span class="msp-info-value svelte-ssr-menu-section">${$.escape(item.value)}</span></div>`);
461
+ }
462
+
463
+ $$renderer.push(`<!--]-->`);
464
+ });
465
+
466
+ $$renderer.push(`<!--]--></div>`);
467
+ } else {
468
+ $$renderer.push('<!--[-1-->');
469
+ }
470
+
471
+ $$renderer.push(`<!--]--> <!--[-->`);
472
+
473
+ const each_array_2 = $.ensure_array_like(categories);
474
+
475
+ for (let i = 0, $$length = each_array_2.length; i < $$length; i++) {
476
+ let cat = each_array_2[i];
477
+
478
+ $$renderer.push(`<div${$.attr_class('msp-grid svelte-ssr-menu-section', void 0, { 'msp-hidden': i !== activeCat })}${$.attr('role', categories.length > 1 ? 'tabpanel' : undefined)}${$.attr('id', `panel-${i}`)}${$.attr('aria-labelledby', categories.length > 1 ? `tab-${i}` : undefined)}>`);
479
+
480
+ if (cat.aside || cat.note) {
481
+ $$renderer.push('<!--[0-->');
482
+ $$renderer.push(`<div class="ms-cat-intro svelte-ssr-menu-section">`);
483
+
484
+ if (cat.aside) {
485
+ $$renderer.push('<!--[0-->');
486
+ $$renderer.push(`<p class="ms-cat-aside svelte-ssr-menu-section">${$.escape(cat.aside)}</p>`);
487
+ } else {
488
+ $$renderer.push('<!--[-1-->');
489
+ }
490
+
491
+ $$renderer.push(`<!--]--> `);
492
+
493
+ if (cat.note) {
494
+ $$renderer.push('<!--[0-->');
495
+ $$renderer.push(`<p class="ms-cat-note svelte-ssr-menu-section">${$.escape(cat.note)}</p>`);
496
+ } else {
497
+ $$renderer.push('<!--[-1-->');
498
+ }
499
+
500
+ $$renderer.push(`<!--]--></div>`);
501
+ } else {
502
+ $$renderer.push('<!--[-1-->');
503
+ }
504
+
505
+ $$renderer.push(`<!--]--> <!--[-->`);
506
+
507
+ const each_array_3 = $.ensure_array_like(rowsByCat()[i]);
508
+
509
+ for (let $$index_5 = 0, $$length = each_array_3.length; $$index_5 < $$length; $$index_5++) {
510
+ let row = each_array_3[$$index_5];
511
+
512
+ if (row.item) {
513
+ $$renderer.push('<!--[0-->');
514
+ $$renderer.push(`<div class="msp-item svelte-ssr-menu-section" part="item"><div class="msp-item-name svelte-ssr-menu-section">${$.escape(row.item.name)}</div> `);
515
+
516
+ if (row.item.badges?.length) {
517
+ $$renderer.push('<!--[0-->');
518
+ $$renderer.push(`<div class="ms-badges svelte-ssr-menu-section"><!--[-->`);
519
+
520
+ const each_array_4 = $.ensure_array_like(row.item.badges);
521
+
522
+ for (let bi = 0, $$length = each_array_4.length; bi < $$length; bi++) {
523
+ let badge = each_array_4[bi];
524
+
525
+ $$renderer.push(`<span${$.attr_class('ms-badge svelte-ssr-menu-section', void 0, { 'ms-badge-accent': badge.tone === 'accent' })}>${$.escape(badge.label)}</span>`);
526
+ }
527
+
528
+ $$renderer.push(`<!--]--></div>`);
529
+ } else {
530
+ $$renderer.push('<!--[-1-->');
531
+ }
532
+
533
+ $$renderer.push(`<!--]--> <div class="msp-item-desc svelte-ssr-menu-section">${$.escape(row.item.description)}</div> `);
534
+
535
+ if (row.item.notes?.length) {
536
+ $$renderer.push('<!--[0-->');
537
+ $$renderer.push(`<ul class="ms-notes svelte-ssr-menu-section"><!--[-->`);
538
+
539
+ const each_array_5 = $.ensure_array_like(row.item.notes);
540
+
541
+ for (let ni = 0, $$length = each_array_5.length; ni < $$length; ni++) {
542
+ let note = each_array_5[ni];
543
+
544
+ $$renderer.push(`<li class="svelte-ssr-menu-section">${$.escape(note)}</li>`);
545
+ }
546
+
547
+ $$renderer.push(`<!--]--></ul>`);
548
+ } else {
549
+ $$renderer.push('<!--[-1-->');
550
+ }
551
+
552
+ $$renderer.push(`<!--]--> <div class="msp-item-footer svelte-ssr-menu-section"><div class="msp-item-price svelte-ssr-menu-section" part="item-price">${$.escape(row.item.price)}</div> `);
553
+
554
+ if (row.item.allergens && row.item.allergens.length) {
555
+ $$renderer.push('<!--[0-->');
556
+ $$renderer.push(`<div class="ms-allergens svelte-ssr-menu-section"><!--[-->`);
557
+
558
+ const each_array_6 = $.ensure_array_like(row.item.allergens);
559
+
560
+ for (let ai = 0, $$length = each_array_6.length; ai < $$length; ai++) {
561
+ let id = each_array_6[ai];
562
+ const allergen = findAllergen(id);
563
+
564
+ if (allergen) {
565
+ $$renderer.push('<!--[0-->');
566
+ $$renderer.push(`<button type="button" class="ms-allergen svelte-ssr-menu-section"><img${$.attr('src', allergen.icon)}${$.attr('alt', allergen.label)} class="ms-allergen-icon svelte-ssr-menu-section" loading="lazy"/> <span class="ms-allergen-tip svelte-ssr-menu-section" role="tooltip">${$.escape(allergen.label)}</span></button>`);
567
+ } else {
568
+ $$renderer.push('<!--[-1-->');
569
+ }
570
+
571
+ $$renderer.push(`<!--]-->`);
572
+ }
573
+
574
+ $$renderer.push(`<!--]--></div>`);
575
+ } else {
576
+ $$renderer.push('<!--[-1-->');
577
+ }
578
+
579
+ $$renderer.push(`<!--]--></div></div>`);
580
+ } else {
581
+ $$renderer.push('<!--[-1-->');
582
+ }
583
+
584
+ $$renderer.push(`<!--]-->`);
585
+ }
586
+
587
+ $$renderer.push(`<!--]--></div>`);
588
+ }
589
+
590
+ $$renderer.push(`<!--]--> `);
591
+
592
+ if (footnote) {
593
+ $$renderer.push('<!--[0-->');
594
+ $$renderer.push(`<p class="ms-footnote svelte-ssr-menu-section">${$.escape(footnote)}</p>`);
595
+ } else {
596
+ $$renderer.push('<!--[-1-->');
597
+ }
598
+
599
+ $$renderer.push(`<!--]--></section>`);
600
+ } else {
601
+ $$renderer.push('<!--[-1-->');
602
+
603
+ $$renderer.push(`<section${$.attr_class('ms-root svelte-ssr-menu-section', void 0, {
604
+ 'ms-align-left': headingAlign === 'left',
605
+ 'ms-layout-split': layout === 'split',
606
+ 'ms-has-circle': !!headingCircleColor,
607
+ 'ms-columns-2': itemColumns === 2
608
+ })}><div class="ms-container svelte-ssr-menu-section"><div class="ms-header svelte-ssr-menu-section"><div class="ms-heading-col svelte-ssr-menu-section"><div class="ms-heading-block svelte-ssr-menu-section">`);
609
+
610
+ if (headingCircleColor) {
611
+ $$renderer.push('<!--[0-->');
612
+ $$renderer.push(`<div class="ms-heading-circle svelte-ssr-menu-section"${$.attr_style(`background-color: ${headingCircleColor}`)}></div>`);
613
+ } else {
614
+ $$renderer.push('<!--[-1-->');
615
+ }
616
+
617
+ $$renderer.push(`<!--]--> `);
618
+
619
+ if (topFlourishSrc) {
620
+ $$renderer.push('<!--[0-->');
621
+ $$renderer.push(`<img${$.attr('src', topFlourishSrc)} alt="" class="ms-flourish svelte-ssr-menu-section"/>`);
622
+ } else {
623
+ $$renderer.push('<!--[-1-->');
624
+ }
625
+
626
+ $$renderer.push(`<!--]--> `);
627
+
628
+ $.element(
629
+ $$renderer,
630
+ headingTag(),
631
+ () => {
632
+ $$renderer.push(` class="ms-heading svelte-ssr-menu-section" id="menu-heading"`);
633
+ },
634
+ () => {
635
+ $$renderer.push(`${$.html(`<slot name="heading-title"><span class="ms-heading-title">${escapeHtml(title)}</span></slot>`)} <div class="ms-heading-rule svelte-ssr-menu-section"></div> ${$.html(`<slot name="eyebrow"><span class="ms-heading-eyebrow">${escapeHtml(eyebrow)}</span></slot>`)}`);
636
+ }
637
+ );
638
+
639
+ $$renderer.push(` `);
640
+
641
+ if (tailFlourishSrc) {
642
+ $$renderer.push('<!--[0-->');
643
+ $$renderer.push(`<img${$.attr('src', tailFlourishSrc)} alt="" class="ms-flourish ms-flourish-tail svelte-ssr-menu-section"/>`);
644
+ } else {
645
+ $$renderer.push('<!--[-1-->');
646
+ }
647
+
648
+ $$renderer.push(`<!--]--></div> ${$.html('<slot name="intro"></slot>')} `);
649
+
650
+ if (pdfUrl) {
651
+ $$renderer.push('<!--[0-->');
652
+ $$renderer.push(`<button type="button" class="ms-pdf-trigger svelte-ssr-menu-section">${$.escape(pdfLabel)} <span aria-hidden="true" class="svelte-ssr-menu-section">→</span></button>`);
653
+ } else {
654
+ $$renderer.push('<!--[-1-->');
655
+ }
656
+
657
+ $$renderer.push(`<!--]--></div> <div class="ms-controls svelte-ssr-menu-section"><div class="ms-tabs svelte-ssr-menu-section" role="tablist" aria-labelledby="menu-heading"${$.attr('data-indicator-ready', indicatorReady ? '' : undefined)}><!--[-->`);
658
+
659
+ const each_array_7 = $.ensure_array_like(categories);
660
+
661
+ for (let i = 0, $$length = each_array_7.length; i < $$length; i++) {
662
+ let cat = each_array_7[i];
663
+
664
+ $$renderer.push(`<button type="button"${$.attr_class('ms-tab svelte-ssr-menu-section', void 0, { 'ms-tab-active': i === activeTabVisual })}${$.attr('part', i === activeTabVisual ? 'tab tab-active' : 'tab')} role="tab"${$.attr('id', `tab-${i}`)}${$.attr('aria-selected', i === activeTabVisual)}${$.attr('aria-controls', `panel-${i}`)}${$.attr('tabindex', i === activeTabVisual ? 0 : -1)}>${$.escape(cat.label)}</button>`);
665
+ }
666
+
667
+ $$renderer.push(`<!--]--> <span class="ms-tab-indicator svelte-ssr-menu-section"${$.attr_style(indicatorStyle)} aria-hidden="true"></span></div> `);
668
+
669
+ if ((groupFilter || countryFilter) && categories[activeCat]) {
670
+ $$renderer.push('<!--[0-->');
671
+
672
+ const cat = categories[activeCat];
673
+
674
+ if (groupFilter && groupsOf(cat).length > 1) {
675
+ $$renderer.push('<!--[0-->');
676
+ $$renderer.push(`<div class="ms-filters svelte-ssr-menu-section" part="filters"><button type="button"${$.attr_class('ms-filter svelte-ssr-menu-section', void 0, { 'ms-filter-active': activeGroup() === null })}>${$.escape(groupFilterAllLabel)}</button> <!--[-->`);
677
+
678
+ const each_array_8 = $.ensure_array_like(groupsOf(cat));
679
+
680
+ for (let $$index_8 = 0, $$length = each_array_8.length; $$index_8 < $$length; $$index_8++) {
681
+ let g = each_array_8[$$index_8];
682
+
683
+ $$renderer.push(`<button type="button"${$.attr_class('ms-filter svelte-ssr-menu-section', void 0, { 'ms-filter-active': activeGroup() === g })}>${$.escape(g)}</button>`);
684
+ }
685
+
686
+ $$renderer.push(`<!--]--></div>`);
687
+ } else {
688
+ $$renderer.push('<!--[-1-->');
689
+ }
690
+
691
+ $$renderer.push(`<!--]--> `);
692
+
693
+ if (countryFilter) {
694
+ $$renderer.push('<!--[0-->');
695
+
696
+ $$renderer.push(`<div${$.attr_class('ms-filters ms-filters-secondary svelte-ssr-menu-section', void 0, {
697
+ 'ms-filters-hidden': groupFilter && activeGroup() === null || countriesOf(cat).length <= 1
698
+ })} part="filters"><!---->`);
699
+
700
+ {
701
+ $$renderer.push(`<button type="button"${$.attr_class('ms-filter svelte-ssr-menu-section', void 0, { 'ms-filter-active': activeCountry() === null })}>${$.escape(countryFilterAllLabel)}</button> <!--[-->`);
702
+
703
+ const each_array_9 = $.ensure_array_like(countriesOf(cat));
704
+
705
+ for (let $$index_9 = 0, $$length = each_array_9.length; $$index_9 < $$length; $$index_9++) {
706
+ let c = each_array_9[$$index_9];
707
+
708
+ $$renderer.push(`<button type="button"${$.attr_class('ms-filter svelte-ssr-menu-section', void 0, { 'ms-filter-active': activeCountry() === c })}>${$.escape(c)}</button>`);
709
+ }
710
+
711
+ $$renderer.push(`<!--]-->`);
712
+ }
713
+
714
+ $$renderer.push(`<!----></div>`);
715
+ } else {
716
+ $$renderer.push('<!--[-1-->');
717
+ }
718
+
719
+ $$renderer.push(`<!--]-->`);
720
+ } else {
721
+ $$renderer.push('<!--[-1-->');
722
+ }
723
+
724
+ $$renderer.push(`<!--]--> `);
725
+
726
+ if (info.length) {
727
+ $$renderer.push('<!--[0-->');
728
+ $$renderer.push(`<div class="ms-info-bar svelte-ssr-menu-section"><!--[-->`);
729
+
730
+ $.slot($$renderer, $$props, 'info', {}, () => {
731
+ $$renderer.push(`<!--[-->`);
732
+
733
+ const each_array_10 = $.ensure_array_like(info);
734
+
735
+ for (let k = 0, $$length = each_array_10.length; k < $$length; k++) {
736
+ let item = each_array_10[k];
737
+
738
+ $$renderer.push(`<div class="ms-info-item svelte-ssr-menu-section"><span class="ms-info-label svelte-ssr-menu-section">${$.escape(item.label)}</span> <span class="ms-info-value svelte-ssr-menu-section">${$.escape(item.value)}</span></div>`);
739
+ }
740
+
741
+ $$renderer.push(`<!--]-->`);
742
+ });
743
+
744
+ $$renderer.push(`<!--]--></div>`);
745
+ } else {
746
+ $$renderer.push('<!--[-1-->');
747
+ }
748
+
749
+ $$renderer.push(`<!--]--></div></div> <!--[-->`);
750
+
751
+ const each_array_11 = $.ensure_array_like(categories);
752
+
753
+ for (let i = 0, $$length = each_array_11.length; i < $$length; i++) {
754
+ let cat = each_array_11[i];
755
+
756
+ $$renderer.push(`<div${$.attr_class('ms-panel svelte-ssr-menu-section', void 0, { 'ms-panel-hidden': i !== activeCat })} role="tabpanel"${$.attr('id', `panel-${i}`)}${$.attr('aria-labelledby', `tab-${i}`)}>`);
757
+
758
+ if (cat.aside || cat.note) {
759
+ $$renderer.push('<!--[0-->');
760
+ $$renderer.push(`<div class="ms-cat-intro svelte-ssr-menu-section">`);
761
+
762
+ if (cat.aside) {
763
+ $$renderer.push('<!--[0-->');
764
+ $$renderer.push(`<p class="ms-cat-aside svelte-ssr-menu-section">${$.escape(cat.aside)}</p>`);
765
+ } else {
766
+ $$renderer.push('<!--[-1-->');
767
+ }
768
+
769
+ $$renderer.push(`<!--]--> `);
770
+
771
+ if (cat.note) {
772
+ $$renderer.push('<!--[0-->');
773
+ $$renderer.push(`<p class="ms-cat-note svelte-ssr-menu-section">${$.escape(cat.note)}</p>`);
774
+ } else {
775
+ $$renderer.push('<!--[-1-->');
776
+ }
777
+
778
+ $$renderer.push(`<!--]--></div>`);
779
+ } else {
780
+ $$renderer.push('<!--[-1-->');
781
+ }
782
+
783
+ $$renderer.push(`<!--]--> <!--[-->`);
784
+
785
+ const each_array_12 = $.ensure_array_like(rowsByCat()[i]);
786
+
787
+ for (let $$index_14 = 0,
788
+ $$length = each_array_12.length; $$index_14 < $$length; $$index_14++) {
789
+ let row = each_array_12[$$index_14];
790
+
791
+ if (row.group) {
792
+ $$renderer.push('<!--[0-->');
793
+ $$renderer.push(`<div class="ms-item-group svelte-ssr-menu-section">${$.escape(row.group)}</div>`);
794
+ } else if (row.item) {
795
+ $$renderer.push('<!--[1-->');
796
+ $$renderer.push(`<div class="ms-item svelte-ssr-menu-section" part="item"><div class="ms-item-name svelte-ssr-menu-section">${$.escape(row.item.name)}</div> `);
797
+
798
+ if (row.item.badges?.length) {
799
+ $$renderer.push('<!--[0-->');
800
+ $$renderer.push(`<div class="ms-badges svelte-ssr-menu-section"><!--[-->`);
801
+
802
+ const each_array_13 = $.ensure_array_like(row.item.badges);
803
+
804
+ for (let bi = 0, $$length = each_array_13.length; bi < $$length; bi++) {
805
+ let badge = each_array_13[bi];
806
+
807
+ $$renderer.push(`<span${$.attr_class('ms-badge svelte-ssr-menu-section', void 0, { 'ms-badge-accent': badge.tone === 'accent' })}>${$.escape(badge.label)}</span>`);
808
+ }
809
+
810
+ $$renderer.push(`<!--]--></div>`);
811
+ } else {
812
+ $$renderer.push('<!--[-1-->');
813
+ }
814
+
815
+ $$renderer.push(`<!--]--> `);
816
+
817
+ if (row.item.tagline) {
818
+ $$renderer.push('<!--[0-->');
819
+ $$renderer.push(`<div class="ms-item-meta svelte-ssr-menu-section">${$.escape(row.item.tagline)}</div>`);
820
+ } else {
821
+ $$renderer.push('<!--[-1-->');
822
+ }
823
+
824
+ $$renderer.push(`<!--]--> `);
825
+
826
+ if (row.item.country) {
827
+ $$renderer.push('<!--[0-->');
828
+ $$renderer.push(`<div class="ms-item-meta svelte-ssr-menu-section">${$.escape(row.item.country)}</div>`);
829
+ } else {
830
+ $$renderer.push('<!--[-1-->');
831
+ }
832
+
833
+ $$renderer.push(`<!--]--> `);
834
+
835
+ if (row.item.description) {
836
+ $$renderer.push('<!--[0-->');
837
+ $$renderer.push(`<div class="ms-item-description svelte-ssr-menu-section">${$.escape(row.item.description)}</div>`);
838
+ } else {
839
+ $$renderer.push('<!--[-1-->');
840
+ }
841
+
842
+ $$renderer.push(`<!--]--> `);
843
+
844
+ if (row.item.notes?.length) {
845
+ $$renderer.push('<!--[0-->');
846
+ $$renderer.push(`<ul class="ms-notes svelte-ssr-menu-section"><!--[-->`);
847
+
848
+ const each_array_14 = $.ensure_array_like(row.item.notes);
849
+
850
+ for (let ni = 0, $$length = each_array_14.length; ni < $$length; ni++) {
851
+ let note = each_array_14[ni];
852
+
853
+ $$renderer.push(`<li class="svelte-ssr-menu-section">${$.escape(note)}</li>`);
854
+ }
855
+
856
+ $$renderer.push(`<!--]--></ul>`);
857
+ } else {
858
+ $$renderer.push('<!--[-1-->');
859
+ }
860
+
861
+ $$renderer.push(`<!--]--> <div class="ms-item-footer svelte-ssr-menu-section">`);
862
+
863
+ if (row.item.price) {
864
+ $$renderer.push('<!--[0-->');
865
+ $$renderer.push(`<div class="ms-item-price svelte-ssr-menu-section" part="item-price">${$.escape(row.item.price)}</div>`);
866
+ } else {
867
+ $$renderer.push('<!--[-1-->');
868
+ }
869
+
870
+ $$renderer.push(`<!--]--> `);
871
+
872
+ if (cartEnabled && row.item.id != null && row.item.priceValue != null) {
873
+ $$renderer.push('<!--[0-->');
874
+
875
+ const itemId = row.item.id;
876
+ const itemName = row.item.name;
877
+
878
+ $$renderer.push(`<div class="ms-qty svelte-ssr-menu-section" part="qty"><button type="button" class="ms-qty-btn svelte-ssr-menu-section"${$.attr('aria-label', `Remove one ${itemName}`)}><span class="svelte-ssr-menu-section">−</span></button> <span${$.attr_class('ms-qty-val svelte-ssr-menu-section', void 0, { 'ms-qty-pop': poppedId === itemId })}>${$.escape(qty[itemId] ?? 0)}</span> <button type="button" class="ms-qty-btn svelte-ssr-menu-section"${$.attr('aria-label', `Add one ${itemName}`)}><span class="svelte-ssr-menu-section">+</span></button></div>`);
879
+ } else {
880
+ $$renderer.push('<!--[-1-->');
881
+ }
882
+
883
+ $$renderer.push(`<!--]--> `);
884
+
885
+ if (row.item.allergens && row.item.allergens.length) {
886
+ $$renderer.push('<!--[0-->');
887
+ $$renderer.push(`<div class="ms-allergens svelte-ssr-menu-section"><!--[-->`);
888
+
889
+ const each_array_15 = $.ensure_array_like(row.item.allergens);
890
+
891
+ for (let ai = 0, $$length = each_array_15.length; ai < $$length; ai++) {
892
+ let id = each_array_15[ai];
893
+ const allergen = findAllergen(id);
894
+
895
+ if (allergen) {
896
+ $$renderer.push('<!--[0-->');
897
+ $$renderer.push(`<button type="button" class="ms-allergen svelte-ssr-menu-section"><img${$.attr('src', allergen.icon)}${$.attr('alt', allergen.label)} class="ms-allergen-icon svelte-ssr-menu-section" loading="lazy"/> <span class="ms-allergen-tip svelte-ssr-menu-section" role="tooltip">${$.escape(allergen.label)}</span></button>`);
898
+ } else {
899
+ $$renderer.push('<!--[-1-->');
900
+ }
901
+
902
+ $$renderer.push(`<!--]-->`);
903
+ }
904
+
905
+ $$renderer.push(`<!--]--></div>`);
906
+ } else {
907
+ $$renderer.push('<!--[-1-->');
908
+ }
909
+
910
+ $$renderer.push(`<!--]--></div></div>`);
911
+ } else {
912
+ $$renderer.push('<!--[-1-->');
913
+ }
914
+
915
+ $$renderer.push(`<!--]-->`);
916
+ }
917
+
918
+ $$renderer.push(`<!--]--></div>`);
919
+ }
920
+
921
+ $$renderer.push(`<!--]--> `);
922
+
923
+ if (footnote) {
924
+ $$renderer.push('<!--[0-->');
925
+ $$renderer.push(`<p class="ms-footnote svelte-ssr-menu-section">${$.escape(footnote)}</p>`);
926
+ } else {
927
+ $$renderer.push('<!--[-1-->');
928
+ }
929
+
930
+ $$renderer.push(`<!--]--></div></section>`);
931
+ }
932
+
933
+ $$renderer.push(`<!--]--> `);
934
+
935
+ if (pdfUrl) {
936
+ $$renderer.push('<!--[0-->');
937
+ $$renderer.push(`<dialog class="ms-pdf-dialog svelte-ssr-menu-section"><div class="ms-pdf-dialog-header svelte-ssr-menu-section"><span class="ms-pdf-dialog-title svelte-ssr-menu-section">${$.escape(pdfLabel)}</span> <div class="ms-pdf-dialog-actions svelte-ssr-menu-section"><a${$.attr('href', pdfUrl)} target="_blank" rel="noreferrer noopener" class="ms-pdf-open-link svelte-ssr-menu-section">${$.escape(openInNewTabLabel)}</a> <button type="button" class="ms-pdf-close svelte-ssr-menu-section"${$.attr('aria-label', closeAriaLabel)}><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" class="svelte-ssr-menu-section"><path d="M6 6l12 12M18 6L6 18" stroke-linecap="round" class="svelte-ssr-menu-section"></path></svg></button></div></div> <iframe${$.attr('src', pdfUrl)}${$.attr('title', pdfLabel)} class="ms-pdf-frame svelte-ssr-menu-section"></iframe></dialog>`);
938
+ } else {
939
+ $$renderer.push('<!--[-1-->');
940
+ }
941
+
942
+ $$renderer.push(`<!--]-->`);
943
+ });
944
+ }