PageSourceSearch

https://ru-digital.de/build/root-WHTWSDWP.js

js ru-digital.de collected 2026-10-06 05:22:58 UTC 49,933 bytes, 1,225 lines download raw bytes

1import {
2  og_image_default
3} from "/build/_shared/chunk-6WU5M7Q7.js";
4import {
5  useMatchesData
6} from "/build/_shared/chunk-UHQDUM2S.js";
7import {
8  require_config
9} from "/build/_shared/chunk-AROMJ2TK.js";
10import {
11  CookiesBanner,
12  ExposeAppConfig,
13  NavigationFlyoutMenu,
14  NavigationFlyoutMobileMenu,
15  Rt,
16  ThemenBox_default,
17  bg_dot_pattern_lightgray_default,
18  icon_event_default,
19  icon_fachbeitraege_default,
20  icon_media_default,
21  slide_over_dialog_default,
22  themenCards
23} from "/build/_shared/chunk-LTL4HYOU.js";
24import {
25  Ke
26} from "/build/_shared/chunk-EY65NO2V.js";
27import {
28  Ie,
29  _t
30} from "/build/_shared/chunk-C3KA4SO6.js";
31import {
32  logomain_default
33} from "/build/_shared/chunk-XYPXCSVK.js";
34import {
35  ArrowUpOnSquareIcon_default,
36  ErrorBoundary,
37  FavoriteListCard,
38  ListItem,
39  MagnifyingGlassIcon_default,
40  StarIcon_default,
41  XMarkIcon_default,
42  default_default,
43  es_default,
44  hero_dot_bg_default,
45  search_box_default,
46  search_box_header_default
47} from "/build/_shared/chunk-Y6OIBGDA.js";
48import {
49  Bars3Icon_default,
50  GetScreenSize,
51  class_names_default,
52  copy_to_clipboard_default,
53  get_client_side_config_default,
54  to_safe_path_segment_default
55} from "/build/_shared/chunk-P4WFY3UR.js";
56import "/build/_shared/chunk-VIU3M2OR.js";
57import {
58  Link,
59  Links,
60  LiveReload,
61  Meta,
62  Outlet,
63  Scripts,
64  init_esm,
65  useBeforeUnload,
66  useCatch,
67  useFetcher,
68  useLoaderData,
69  useLocation,
70  useMatches,
71  useNavigate,
72  useParams,
73  useTransition
74} from "/build/_shared/chunk-46RNFGVL.js";
75import {
76  React,
77  __toESM,
78  init_react,
79  require_react
80} from "/build/_shared/chunk-BNRLY3XL.js";
81
82// browser-route-module:root.tsx?browser
83init_react();
84
85// app/root.tsx
86init_react();
87init_esm();
88var import_react16 = __toESM(require_react());
89
90// app/hooks/use_scroll_restration.tsx
91init_react();
92var React2 = __toESM(require_react());
93init_esm();
94var STORAGE_KEY = "positions";
95var positions = {};
96if (typeof document !== "undefined") {
97  let sessionPositions = sessionStorage.getItem(STORAGE_KEY);
98  if (sessionPositions) {
99    positions = JSON.parse(sessionPositions);
100  }
101}
102function ScrollRestoration({ nonce = void 0 }) {
103  useScrollRestoration();
104  React2.useEffect(() => {
105    window.history.scrollRestoration = "manual";
106  }, []);
107  useBeforeUnload(React2.useCallback(() => {
108    window.history.scrollRestoration = "auto";
109  }, []));
110  let restoreScroll = ((STORAGE_KEY2) => {
111    if (!window.history.state || !window.history.state.key) {
112      let key = Math.random().toString(32).slice(2);
113      window.history.replaceState({ key }, "");
114    }
115    try {
116      let positions2 = JSON.parse(sessionStorage.getItem(STORAGE_KEY2) || "{}");
117      let storedY = positions2[window.history.state.key];
118      if (typeof storedY === "number") {
119        window.scrollTo(0, storedY);
120      }
121    } catch (error) {
122      console.error(error);
123      sessionStorage.removeItem(STORAGE_KEY2);
124    }
125  }).toString();
126  return /* @__PURE__ */ React2.createElement("script", {
127    nonce,
128    suppressHydrationWarning: true,
129    dangerouslySetInnerHTML: {
130      __html: `(${restoreScroll})(${JSON.stringify(STORAGE_KEY)})`
131    }
132  });
133}
134var hydrated = false;
135function useScrollRestoration() {
136  let location = useLocation();
137  let transition = useTransition();
138  let wasSubmissionRef = React2.useRef(false);
139  React2.useEffect(() => {
140    if (transition.submission) {
141      wasSubmissionRef.current = true;
142    }
143  }, [transition]);
144  React2.useEffect(() => {
145    if (transition.location) {
146      positions[location.key] = window.scrollY;
147    }
148  }, [transition, location]);
149  useBeforeUnload(React2.useCallback(() => {
150    sessionStorage.setItem(STORAGE_KEY, JSON.stringify(positions));
151  }, []));
152  if (typeof document !== "undefined") {
153    React2.useLayoutEffect(() => {
154      if (!hydrated) {
155        hydrated = true;
156        return;
157      }
158      let y = positions[location.key];
159      if (y != void 0) {
160        window.scrollTo({
161          top: y,
162          left: 0,
163          behavior: "smooth"
164        });
165        return;
166      }
167      if (location.hash) {
168        let el = document.getElementById(location.hash.slice(1));
169        if (el) {
170          el.scrollIntoView();
171          return;
172        }
173      }
174      if (wasSubmissionRef.current === true) {
175        wasSubmissionRef.current = false;
176        return;
177      }
178      if (location.state && typeof location.state === "object" && location.state.scroll === false) {
179        return;
180      }
181      window.scrollTo(0, 0);
182    }, [location]);
183  }
184  React2.useEffect(() => {
185    if (transition.submission) {
186      wasSubmissionRef.current = true;
187    }
188  }, [transition]);
189}
190
191// app/layout/index.tsx
192init_react();
193var import_react11 = __toESM(require_react());
194init_esm();
195
196// app/layout/header.tsx
197init_react();
198var import_react4 = __toESM(require_react());
199init_esm();
200
201// app/assets/images/img-hero-start.png
202var img_hero_start_default = "/build/_assets/img-hero-start-NYOZF2K4.png";
203
204// app/layout/favorite_list.tsx
205init_react();
206var import_react2 = __toESM(require_react());
207init_esm();
208var FavoriteList = ({
209  setFavOpen
210}) => {
211  const [favoriteList, setFavoriteList] = es_default("favoriteList", {
212    defaultValue: []
213  });
214  const navigate = useNavigate();
215  const onOpen = (text) => {
216    return _t.success(text);
217  };
218  const removeFromFavorit = (id) => {
219    const newItems = favoriteList.filter((item) => item.id !== id);
220    if (newItems) {
221      setFavoriteList(newItems);
222    }
223  };
224  const handleCopyArticleToClipboard = (id, name, slug) => {
225    const isCopied = copy_to_clipboard_default(`${get_client_side_config_default.SHARELINKURL}/search/main/${id}/${to_safe_path_segment_default(slug || name)}`);
226    if (isCopied) {
227      onOpen("Der Link zu diesem Eintrag befindet sich nun in Deiner Zwischenablage. Du kannst ihn nun \xFCberall \xFCber Rechtsklick+Einf\xFCgen oder strg+v/cmd+v  einf\xFCgen.");
228    }
229    setTimeout(() => {
230      setFavOpen(false);
231    }, 9e3);
232  };
233  const handleOpenFavoriteListItem = (id, name, slug) => {
234    if (id && name) {
235      navigate(`/search/main/${id}/${to_safe_path_segment_default(slug || name)}`);
236      setTimeout(() => {
237        setFavOpen(false);
238      }, 1e3);
239    }
240  };
241  return /* @__PURE__ */ import_react2.default.createElement("div", {
242    className: "border-t border-gray-200 px-2"
243  }, /* @__PURE__ */ import_react2.default.createElement("div", {
244    className: "scrollbar-styled"
245  }, favoriteList.length === 0 && /* @__PURE__ */ import_react2.default.createElement("div", null, /* @__PURE__ */ import_react2.default.createElement("p", {
246    style: { lineHeight: "30px", fontWeight: "bold" }
247  }, "Du hast noch keine Medien ausgew\xE4hlt. Klicke auf das Sternsymbol, um sie auf Deine Merkliste zu setzen")), /* @__P
247URE__ */ import_react2.default.createElement("div", null, /* @__PURE__ */ import_react2.default.createElement("ul", null, favoriteList && favoriteList.length ? favoriteList.map((media) => {
248    return /* @__PURE__ */ import_react2.default.createElement(ListItem, {
249      className: "mb-3",
250      key: media.id
251    }, /* @__PURE__ */ import_react2.default.createElement(FavoriteListCard, {
252      ...media,
253      handleCopyFavoritItem: handleCopyArticleToClipboard,
254      handleRemoveFavoriteItem: removeFromFavorit,
255      handleOpenFavoriteListItem
256    }));
257  }) : null))), /* @__PURE__ */ import_react2.default.createElement(Ie, {
258    position: "top-right",
259    reverseOrder: false,
260    toastOptions: { className: "text-sm", duration: 9e3 }
261  }));
262};
263var favorite_list_default = FavoriteList;
264
265// app/layout/header.tsx
266var Header = ({ links: links2 }) => {
267  const { button } = default_default;
268  const { base, navBar } = button;
269  const [favoriteListOpen, setFavoriteList] = (0, import_react4.useState)(false);
270  const [favoriteList] = es_default("favoriteList", {
271    defaultValue: []
272  });
273  const shareFetcher = useFetcher();
274  const isSharing = shareFetcher.state !== "idle";
275  const [query, setSearchQuery] = (0, import_react4.useState)("");
276  const [pendingShareLink, setPendingShareLink] = (0, import_react4.useState)(null);
277  const manualShareLinkInputRef = (0, import_react4.useRef)(null);
278  const copyShareLinkToClipboard = (0, import_react4.useCallback)(async (shareLink) => {
279    var _a;
280    if (typeof navigator !== "undefined" && ((_a = navigator.clipboard) == null ? void 0 : _a.writeText)) {
281      try {
282        await navigator.clipboard.writeText(shareLink);
283        return true;
284      } catch {
285      }
286    }
287    return copy_to_clipboard_default(shareLink);
288  }, []);
289  const handleManualCopyShareLink = (0, import_react4.useCallback)(async () => {
290    if (!pendingShareLink) {
291      return;
292    }
293    const isCopied = await copyShareLinkToClipboard(pendingShareLink);
294    if (isCopied) {
295      _t.success("Die Merkliste wurde in die Zwischenablage kopiert. Sie koennen den Link nun teilen.");
296      setPendingShareLink(null);
297      return;
298    }
299    if (manualShareLinkInputRef.current) {
300      manualShareLinkInputRef.current.focus();
301      manualShareLinkInputRef.current.select();
302    }
303    _t.error("Bitte druecke Cmd+C, um den Link manuell zu kopieren.");
304  }, [pendingShareLink, copyShareLinkToClipboard]);
305  const handleShareFavoriteList = () => {
306    if (isSharing) {
307      return;
308    }
309    const listIDs = favoriteList.map((listitem) => listitem.id);
310    if (!listIDs.length) {
311      _t.error("Deine Merkliste ist leer und kann nicht geteilt werden.");
312      return;
313    }
314    let formData = new FormData();
315    formData.set("favArticleIds", listIDs.join(","));
316    setPendingShareLink(null);
317    shareFetcher.submit(formData, { method: "post", action: "/" });
318  };
319  (0, import_react4.useEffect)(() => {
320    var _a;
321    if (shareFetcher.state !== "idle" || !shareFetcher.data) {
322      return;
323    }
324    const { success, data, error } = shareFetcher.data;
325    if (!success || !data) {
326      _t.error(error || "Beim Teilen der Merkliste ist ein Fehler aufgetreten. Bitte versuche es erneut.");
327      return;
328    }
329    const shareLinkBaseUrl = (_a = get_client_side_config_default) == null ? void 0 : _a.SHARELINKURL;
330    if (!shareLinkBaseUrl) {
331      _t.error("Der Teilen-Link ist aktuell nicht verfuegbar.");
332      return;
333    }
334    const shareLink = `${shareLinkBaseUrl}/media/favorites_article/${data}`;
335    void (async () => {
336      const isCopied = await copyShareLinkToClipboard(shareLink);
337      if (isCopied) {
338        setPendingShareLink(null);
339        _t.success("Die Merkliste wurde in die Zwischenablage kopiert. Sie koennen den Link nun teilen.");
340        return;
341      }
342      setPendingShareLink(shareLink);
343      _t.error("Automatisches Kopieren wurde vom Browser blockiert. Nutze den Button Link kopieren.");
344    })();
345  }, [shareFetcher.state, shareFetcher.data, copyShareLinkToClipboard]);
346  return /* @__PURE__ */ React.createElement(Rt, {
347    id: "header_wrapper",
348    className: "fixed top-0 left-0 z-50 w-full bg-white shadow-[0_1px_2px_rgba(0,0,0,0.2)]"
349  }, /* @__PURE__ */ React.createElement("div", {
350    className: "relative"
351  }, /* @__PURE__ */ React.createElement("div", {
352    className: "section-wrapper flex items-center justify-between py-4  sm:px-6 md:py-2 md:px-0"
353  }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(Link, {
354    to: "/media/home"
355  }, /* @__PURE__ */ React.createElement("span", {
356    className: "sr-only"
357  }, "RU-digital"), /* @__PURE__ */ React.createElement("img", {
358    className: "h-8 w-auto sm:h-12",
359    src: logomain_default,
360    alt: "RU-digital-logo"
361  }))), /* @__PURE__ */ React.createElement("div", {
362    className: "-my-2  md:hidden"
363  }, /* @__PURE__ */ React.createElement(Rt.Button, {
364    className: "inline-flex items-center justify-center rounded-md bg-white p-2 text-gray-400 hover:bg-gray-100 hover:text-gray-500  focus:ring-inset focus:ring-orange-500"
365  }
365, /* @__PURE__ */ React.createElement("span", {
366    className: "sr-only"
367  }, "Open menu"), /* @__PURE__ */ React.createElement(Bars3Icon_default, {
368    className: "h-6 w-6",
369    "aria-hidden": "true"
370  }))), /* @__PURE__ */ React.createElement("div", {
371    className: "hidden md:flex md:flex-1 md:items-center md:justify-end"
372  }, /* @__PURE__ */ React.createElement(Rt.Group, {
373    as: "nav",
374    className: "flex space-x-4"
375  }, /* @__PURE__ */ React.createElement(Rt, null, ({ open, close }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Rt.Button, {
376    className: class_names_default(open ? "text-gray-900" : "text-gray-500", "group rounded-full px-2.5 text-xs font-normal", base, navBar)
377  }, " ", /* @__PURE__ */ React.createElement(MagnifyingGlassIcon_default, {
378    className: class_names_default(open ? "text-gray-600" : "text-textColor-light", "h-5 w-5  group-hover:text-blue-900"),
379    "aria-hidden": "true"
380  })), /* @__PURE__ */ React.createElement(Ke, {
381    as: import_react4.Fragment,
382    enter: "transition ease-out duration-200",
383    enterFrom: "opacity-0 -translate-y-1",
384    enterTo: "opacity-100 translate-y-0",
385    leave: "transition ease-in duration-150",
386    leaveFrom: "opacity-100 translate-y-0",
387    leaveTo: "opacity-0 -translate-y-1"
388  }, /* @__PURE__ */ React.createElement(Rt.Panel, {
389    className: "absolute inset-x-0 top-full z-10 hidden transform bg-white shadow-lg md:block"
390  }, /* @__PURE__ */ React.createElement("div", {
391    className: "section-wrapper py-8"
392  }, /* @__PURE__ */ React.createElement(search_box_header_default, {
393    onSubmit: close,
394    query,
395    setSearchQuery
396  })))))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("button", {
397    type: "button",
398    onClick: () => {
399      setFavoriteList(!favoriteListOpen);
400    },
401    className: class_names_default(favoriteListOpen ? "text-primary" : "text-textColor-light", "group px-5 text-xs font-normal hover:text-primary", base, navBar)
402  }, " ", /* @__PURE__ */ React.createElement(StarIcon_default, {
403    className: class_names_default(favoriteListOpen ? "text-primary" : "text-textColor-light", "-ml-0.5 mr-2 h-6 w-6 group-hover:text-primary"),
404    "aria-hidden": "true"
405  }), /* @__PURE__ */ React.createElement("span", null, "Merkliste"), /* @__PURE__ */ React.createElement("span", {
406    className: "ml-2 -mr-1 h-4 w-6 rounded-xl bg-btnColor-secondary text-white"
407  }, favoriteList ? favoriteList.length : "")), /* @__PURE__ */ React.createElement(slide_over_dialog_default, {
408    width: "max-w-lg",
409    dir: "right",
410    open: favoriteListOpen,
411    toggle: setFavoriteList,
412    size: "small",
413    parentSelector: "#header_wrapper"
414  }, /* @__PURE__ */ React.createElement("div", {
415    className: "opacity-1 flex h-full w-full flex-col rounded-l-3xl bg-white pt-2 shadow-xl blur-none"
416  }, /* @__PURE__ */ React.createElement("div", {
417    className: "flex min-h-0 flex-1 flex-col  py-6"
418  }, /* @__PURE__ */ React.createElement("div", {
419    className: "px-4 sm:px-6"
420  }, /* @__PURE__ */ React.createElement("div", {
421    className: "flex items-start justify-between"
422  }, /* @__PURE__ */ React.createElement("div", {
423    className: "ml-3 flex h-7 items-center"
424  }, /* @__PURE__ */ React.createElement("button", {
425    type: "button",
426    className: "rounded-full bg-primary text-white focus:outline-none focus:ring-2 focus:ring-btnColor-secondary",
427    onClick: () => setFavoriteList(false)
428  }, /* @__PURE__ */ React.createElement("span", {
429    className: "sr-only"
430  }, "Close panel"), /* @__PURE__ */ React.createElement(XMarkIcon_default, {
431    className: "h-6 w-6",
432    "aria-hidden": "true"
433  }))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("button", {
434    onClick: handleShareFavoriteList,
435    type: "button",
436    disabled: isSharing,
437    "aria-busy": isSharing,
438    className: "ml-1 inline-flex items-center border-none pr-2 text-sm font-medium leading-4 text-primary hover:text-btnColor-secondary focus:outline-none focus:ring-2 focus:ring-btnColor-secondary focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-70"
439  }
439, isSharing ? /* @__PURE__ */ React.createElement("svg", {
440    className: "-ml-0.5 mr-2 h-5 w-5 animate-spin",
441    viewBox: "0 0 24 24",
442    "aria-hidden": "true"
443  }, /* @__PURE__ */ React.createElement("circle", {
444    className: "opacity-25",
445    cx: "12",
446    cy: "12",
447    r: "10",
448    stroke: "currentColor",
449    strokeWidth: "4",
450    fill: "none"
451  }), /* @__PURE__ */ React.createElement("path", {
452    className: "opacity-75",
453    fill: "currentColor",
454    d: "M4 12a8 8 0 0 1 8-8V0C5.37258 0 0 5.37258 0 12h4z"
455  })) : /* @__PURE__ */ React.createElement(ArrowUpOnSquareIcon_default, {
456    className: "-ml-0.5 mr-2 h-6 w-6",
457    "aria-hidden": "true"
458  }), isSharing ? "Teilen..." : "Teilen"))), pendingShareLink && /* @__PURE__ */ React.createElement("div", {
459    className: "mt-4 rounded-lg border border-blue-200 bg-blue-50 p-3"
460  }, /* @__PURE__ */ React.createElement("p", {
461    className: "text-xs font-semibold text-blue-900"
462  }, "Teilen-Link erstellt"), /* @__PURE__ */ React.createElement("p", {
463    className: "mt-1 text-xs text-blue-800"
464  }, "Automatisches Kopieren ist blockiert. Bitte hier kopieren."), /* @__PURE__ */ React.createElement("div", {
465    className: "mt-2 flex items-center gap-2"
466  }, /* @__PURE__ */ React.createElement("input", {
467    ref: manualShareLinkInputRef,
468    readOnly: true,
469    value: pendingShareLink,
470    onFocus: (event) => event.currentTarget.select(),
471    className: "flex-1 rounded-md border border-blue-300 bg-white px-2 py-1 text-xs text-blue-900"
472  }), /* @__PURE__ */ React.createElement("button", {
473    type: "button",
474    onClick: handleManualCopyShareLink,
475    className: "rounded-md bg-blue-700 px-3 py-1 text-xs font-semibold text-white hover:bg-blue-800"
476  }, "Link kopieren")))), /* @__PURE__ */ React.createElement("div", {
477    className: "relative mt-6 flex-1 overflow-y-scroll px-4 sm:px-6"
478  }, /* @__PURE__ */ React.createElement(favorite_list_default, {
479    setFavOpen: setFavoriteList
480  })))))), /* @__PURE__ */ React.createElement(Rt, null, ({ open }) => /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Rt.Button, {
481    className: class_names_default(!open ? "bg-btnColor-navBar" : "bg-btnColor-secondary", base, "rounded-full px-2.5")
482  }, /* @__PURE__ */ React.createElement(Bars3Icon_default, {
483    className: class_names_default(!open ? "text-gray-900" : " text-white", "h-6 w-6 rounded-full"),
484    "aria-hidden": "true"
485  })), /* @__PURE__ */ React.createElement(Ke, {
486    as: import_react4.Fragment,
487    enter: "transition ease-out duration-200",
488    enterFrom: "opacity-0 -translate-y-1",
489    enterTo: "opacity-100 translate-y-0",
490    leave: "transition ease-in duration-150",
491    leaveFrom: "opacity-100 translate-y-0",
492    leaveTo: "opacity-0 -translate-y-1"
493  }, /* @__PURE__ */ React.createElement(Rt.Panel, {
494    className: "absolute inset-x-0 top-full z-50 hidden transform border-t bg-white shadow-lg md:block"
495  }, /* @__PURE__ */ React.createElement(NavigationFlyoutMenu, {
496    links: links2
497  }))))))))), /* @__PURE__ */ React.createElement(Ke, {
498    as: import_react4.Fragment,
499    enter: "duration-200 ease-out",
500    enterFrom: "opacity-0 scale-95",
501    enterTo: "opacity-100 scale-100",
502    leave: "duration-100 ease-in",
503    leaveFrom: "opacity-100 scale-100",
504    leaveTo: "opacity-0 scale-95"
505  }, /* @__PURE__ */ React.createElement(Rt.Panel, {
506    focus: false,
507    className: "absolute inset-x-0 top-0 z-30 origin-top-right transform p-2 transition md:hidden"
508  }, ({ close }) => {
509    return /* @__PURE__ */ React.createElement(NavigationFlyoutMobileMenu, {
510      links: links2,
511      close
512    });
513  })));
514};
515var header_default = Header;
516
517// app/layout/page-intro-wrapper.tsx
518init_react();
519var import_react7 = __toESM(require_react());
520init_esm();
521
522// app/assets/images/start-page-wave.svg
523var start_page_wave_default = "/build/_assets/start-page-wave-RIJJU6PJ.svg";
524
525// app/layout/landing_page_tabs.tsx
526init_react();
527var LandingPageTabs = ({
528  activeTab,
529  setActiveTab,
530  isMobile = false
531}) => {
532  const buttonBaseClass = isMobile ? "inline-flex flex-1 items-center justify-center px-2 py-2 text-xs font-medium" : "inline-flex items-center px-6 py-3 text-sm font-medium ";
533  const iconSizeClass = isMobile ? "mr-1 h-3 w-3" : "mr-2 h-5 w-5";
534  const getIconClass = (tab) => class_names_default(iconSizeClass, activeTab === tab ? "" : "brightness-0 invert");
535  return /* @__PURE__ */ React.createElement("div", {
536    className: "flex gap-0"
537  }, /* @__PURE__ */ React.createElement("button", {
538    onClick: () => setActiveTab("medien"),
539    style: { borderTopLeftRadius: "20px" },
540    className: class_names_default(buttonBaseClass, "border-b-0", activeTab === "medien" ? "bg-white text-primary" : "bg-primary text-white hover:bg-primary")
541  }, /* @__PURE__ */ React.createElement("img", {
542    src: icon_media_default,
543    alt: "",
544    "aria-hidden": "true",
545    className: getIconClass("medien")
546  }), "Medien"), /* @__PURE__ */ React.createElement("button", {
547    onClick: () => setActiveTab("fachartikel"),
548    className: class_names_default(buttonBaseClass, "border-b-0", activeTab === "fachartikel" ? "bg-white text-primary" : "bg-primary text-white hover:bg-primary")
549  }, /* @__PURE__ */ React.createElement("img", {
550    src: icon_fachbeitraege_default,
551    alt: "",
552    "aria-hidden": "true",
553    className: getIconClass("fachartikel")
554  }), "Fachbeitr\xE4ge"), /* @__PURE__ */ React.createElement("button", {
555    onClick: () => {
556      window.open("https://veranstaltungen.ru-digital.de", "_blank");
557    },
558    style: { borderTopRightRadius: "20px" },
559    className: class_names_default(buttonBaseClass, "border-b-0", "bg-primary text-white hover:bg-primary")
560  }, /* @__PURE__ */ React.createElement("img", {
561    src: icon_event_default,
562    alt: "",
563    "aria-hidden": "true",
564    className: getIconClass("veranstaltungen")
565  }), "Veranstaltungen"));
566};
567
568// app/layout/page-intro-wrapper.tsx
569var PageIntro = ({
570  logo,
571  title,
572  subtitle,
573  searchBox,
574  mainImage,
575  size,
576  isLandingPage = false,
577  activeTab = "medien",
578  setActiveTab
579}) => {
580  const location = useLocation();
581  const getHeightBasedOnScreenType = () => {
582    if (isLandingPage) {
583      return "";
584    }
585    if (location.pathname.includes("/method_glossar") || location.pathname.includes("/impressum") || location.pathname.includes("/datenschutz") || location.pathname.includes("/partners")) {
586      return "h-hero-sm";
587    }
588    return "h-hero-xs";
589  };
590  return /* @__PURE__ */ import_react7.default.createElement("div", {
591    className: class_names_default("relative flex w-full bg-cover bg-bottom pt-0", getHeightBasedOnScreenType(), isLandingPage ? "min-h-[815px] md:min-h-[875px] lg:min-h-[890px] xl:min-h-[930px] 2xl:min-h-[1040px]" : ""),
592    style: {
593      backgroundImage: `linear-gradient(to right, #153d71, #005283, #006792, #007c9e, #1f91a7)`
594    }
595  }, /* @__PURE__ */ import_react7.default.createElement("div", {
596    className: "flex w-full",
597    style: isLandingPage ? {
598      backgroundImage: `url(${bg_dot_pattern_lightgray_default})`,
599      backgroundSize: "43%",
600      backgroundPosition: "right",
601      backgroundRepeat: "no-repeat"
602    } : void 0
603  }, /* @__PURE__ */ import_react7.default.createElement("div", {
604    className: "z-10 flex w-full flex-col items-center",
605    style: {
606      backgroundImage: `url(${start_page_wave_default})`,
607      backgroundSize: "100%",
608      backgroundPosition: "100% 100%",
609      backgroundRepeat: "no-repeat",
610      zIndex: 10
611    }
612  }, /* @__PURE__ */ import_react7.default.createElement("div", {
613    className: "intro-page-wrapper mx-2 flex w-full flex-col md:flex-row"
614  }, /* @__PURE__ */ import_react7.default.createElement("div", {
615    className: class_names_default(!subtitle && !searchBox || location.pathname.includes("/help_center") ? "justify-center " : "justify-start", "md:1/2 flex w-full flex-col items-center md:items-start")
616  }, /* @__PURE__ */ import_react7.default.createElement("div", {
617    className: class_names_default(isLandingPage ? "mt-6 md:mt-20 lg:mt-24" : "mt-8", "pt-4 md:pt-8 md:pb-3")
618  }, /* @__PURE__ */ import_react7.default.createElement("h1", {
619    className: class_names_default("text-left text-2xl font-bold leading-8 text-white md:text-3xl lg:text-[42px]")
620  }, title)), subtitle && /* @__PURE__ */ import_react7.default.createElement("div", null, /* @__PURE__ */ import_react7.default.createElement("p", {
621    className: "max-w-full py-1 pt-2 text-left text-base text-white md:max-w-lg md:pb-5 md:text-lg"
622  }, subtitle))), /* @__PURE__ */ import_react7.default.createElement("div", {
623    className: "mt-5 flex w-full flex-col md:hidden"
624  }, searchBox && /* @__PURE__ */ import_react7.default.createElement("div", {
625    className: "z-50 flex w-full flex-col"
626  }, isLandingPage && setActiveTab && /* @__PURE__ */ import_react7.default.createElement(LandingPageTabs, {
627    activeTab,
628    setActiveTab,
629    isMobile: true
630  }), /* @__PURE__ */ import_react7.default.createElement("div", {
631    style: {
632      borderBottomRightRadius: "20px",
633      borderBottomLeftRadius: "20px"
634    },
635    className: "flex w-full items-center bg-white px-2 shadow-card"
636  }, searchBox), isLandingPage && /* @__PURE__ */ import_react7.default.createElement("div", {
637    className: "mt-4 flex flex-col gap-3 sm:flex-row sm:gap-4"
638  }, themenCards.map((card, index) => /* @__PURE__ */ import_react7.default.createElement("div", {
639    key: `${card.title}-${index}`,
640    className: "flex-1"
641  }, /* @__PURE__ */ import_react7.default.createElement(ThemenBox_default, {
642    title: card.title,
643    to: card.to,
644    description: card.description
645  }))))), /* @__PURE__ */ import_react7.default.createElement("div", {
646    className: "flex"
647  }, /* @__PURE__ */ import_react7.default.createElement("img", {
648    className: class_names_default("h-[20rem] w-full object-contain md:object-scale-down", isLandingPage ? "-mt-10" : ""),
649    src: mainImage || img_hero_start_default
650  }))), /* @__PURE__ */ import_react7.default.createElement("div", {
651    className: "relative  hidden w-full md:flex md:flex-col"
652  }
652, /* @__PURE__ */ import_react7.default.createElement("img", {
653    className: class_names_default(isLandingPage ? "h-76 md:h-auto lg:h-[490px] xl:h-[500px]" : "h-64 md:h-full", "w-full object-contain md:object-scale-down"),
654    src: mainImage || img_hero_start_default
655  }))), /* @__PURE__ */ import_react7.default.createElement("div", {
656    className: "md:-mt-18 z-10 hidden w-full md:block lg:-mt-20 xl:-mt-20"
657  }, searchBox && /* @__PURE__ */ import_react7.default.createElement("div", {
658    className: "intro-page-wrapper"
659  }, isLandingPage && setActiveTab && /* @__PURE__ */ import_react7.default.createElement(LandingPageTabs, {
660    activeTab,
661    setActiveTab,
662    isMobile: false
663  }), /* @__PURE__ */ import_react7.default.createElement("div", {
664    style: {
665      borderTopRightRadius: "20px",
666      borderBottomRightRadius: "20px",
667      borderBottomLeftRadius: "20px"
668    },
669    className: "bg-white px-5 py-2 shadow-card"
670  }, searchBox), isLandingPage && /* @__PURE__ */ import_react7.default.createElement("div", {
671    className: "mx-auto mt-8 mb-4 flex w-full  flex-col gap-3 md:flex-row md:gap-4"
672  }, themenCards.map((card, index) => /* @__PURE__ */ import_react7.default.createElement("div", {
673    key: `${card.title}-${index}`,
674    className: "flex-1"
675  }, /* @__PURE__ */ import_react7.default.createElement(ThemenBox_default, {
676    title: card.title,
677    to: card.to,
678    description: card.description
679  })))))))));
680};
681var page_intro_wrapper_default = PageIntro;
682
683// app/layout/footer.tsx
684init_react();
685init_esm();
686
687// app/assets/icons/IcRoundFacebook.svg
688var IcRoundFacebook_default = "/build/_assets/IcRoundFacebook-AC7BEAQO.svg";
689
690// app/assets/icons/CarbonLogoInstagram.svg
691var CarbonLogoInstagram_default = "/build/_assets/CarbonLogoInstagram-Q7TRDB2S.svg";
692
693// app/assets/icons/CarbonLogoYoutube.svg
694var CarbonLogoYoutube_default = "/build/_assets/CarbonLogoYoutube-EFH6ZKIP.svg";
695
696// app/layout/footer.tsx
697var FooterMain = ({ links: links2, isLandingPage }) => {
698  const navigate = useNavigate();
699  const footerLabelsColor = isLandingPage ? "#040404" : "#040404";
700  const navigation = {
701    solutions: [{ name: "Medien", href: "/media/home", isExternal: false }],
702    support: [
703      { name: "Inklusion", href: "/inklusion", isExternal: false },
704      {
705        name: "Themenschwerpunkte",
706        href: "/themenschwerpunkte",
707        isExternal: false
708      },
709      {
710        name: "Methodenglossar",
711        href: "https://methoden.ru-digital.de",
712        isExternal: true
713      }
714    ],
715    company: [
716      { name: "Blog", href: "https://blog.ru-digital.de/", isExternal: true },
717      {
718        name: "Hilfecenter",
719        href: "https://docs.ru-digital.de/",
720        isExternal: true
721      },
722      {
723        name: "Unterst\xFCtzen & Mitmachen",
724        href: "https://join.ru-digital.de",
725        isExternal: true
726      }
727    ],
728    legal: [
729      {
730        name: "\xDCber ru-digital",
731        href: "https://ueber.ru-digital.de/",
732        isExternal: true
733      },
734      {
735        name: "Partner & Unterst\xFCtzer",
736        href: "https://explore.ru-digital.de/partner-unterstuetzer/",
737        isExternal: true
738      },
739      { name: "Kontakt", href: "/contact" }
740    ],
741    social: [
742      {
743        name: "Facebook",
744        icon: () => /* @__PURE__ */ React.createElement("img", {
745          src: IcRoundFacebook_default,
746          alt: "Facebook",
747          className: "h-6 w-6"
748        }),
749        href: "https://www.facebook.com/religionsunterrichtdigital/"
750      },
751      {
752        name: "Youtube",
753        icon: () => /* @__PURE__ */ React.createElement("img", {
754          src: CarbonLogoYoutube_default,
755          alt: "Youtube",
756          className: "h-6 w-6"
757        }),
758        href: "https://www.youtube.com/user/EulenfischMagazin"
759      },
760      {
761        name: "Instagram",
762        icon: () => /* @__PURE__ */ React.createElement("img", {
763          src: CarbonLogoInstagram_default,
764          alt: "Instagram",
765          className: "h-6 w-6"
766        }),
767        href: "https://www.instagram.com/ru.digital/"
768      }
769    ]
770  };
771  return /* @__PURE__ */ React.createElement("footer", {
772    className: "bg-white",
773    "aria-labelledby": "footer-heading"
774  }, /* @__PURE__ */ React.createElement("h2", {
775    id: "footer-heading",
776    className: "sr-only"
777  }, "Footer"), /* @__PURE__ */ React.createElement("div", {
778    className: "section-wrapper lg:py-16"
779  }, /* @__PURE__ */ React.createElement("div", {
780    className: "xl:grid xl:grid-cols-3 xl:gap-8"
781  }, /* @__PURE__ */ React.createElement("div", {
782    className: "space-y-8 xl:col-span-1"
783  }, /* @__PURE__ */ React.createElement("img", {
784    className: "h-10",
785    src: logomain_default,
786    alt: "Company name"
787  }), /* @__PURE__ */ React.createElement("p", {
788    className: "text-base text-gray-500"
789  }, "Der Guide f\xFCr deinen Religionsunterricht."), /* @__PURE__ */ React.createElement("div", {
790    className: "flex space-x-6"
791  }, navigation.social.map((item) => /* @__PURE__ */ React.createElement("a", {
792    key: item.name,
793    href: item.href,
794    target: "_blank",
795    className: "text-sm text-gray-400",
796    rel: "noreferrer"
797  }, /* @__PURE__ */ React.createElement("span", {
798    className: "sr-only"
799  }, item.name), /* @__PURE__ */ React.createElement(item.icon, {
800    "aria-hidden": "true"
801  }))))), /* @__PURE__ */ React.createElement("div", {
802    className: "mt-12 grid grid-cols-2 gap-8 xl:col-span-2 xl:mt-0"
803  }, /* @__PURE__ */ React.createElement("div", {
804    className: "md:grid md:grid-cols-2 md:gap-8"
805  }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("ul", {
806    className: "mt-4 space-y-4"
807  }, navigation.solutions.map((item) => /* @__PURE__ */ React.createElement("li", {
808    key: item.name
809  }, item.isExternal ? /* @__PURE__ */ React.createElement("a", {
810    href: item.href,
811    target: "_blank",
812    rel: "noreferrer",
813    className: "text-sm text-gray-500 hover:text-gray-900"
814  }, item.name) : /* @__PURE__ */ React.createElement("button", {
815    onClick: () => {
816      navigate(item.href);
817    },
818    key: item.name,
819    className: "text-sm text-gray-500 hover:text-gray-900"
820  }
820, item.name))))), /* @__PURE__ */ React.createElement("div", {
821    className: "mt-12 md:mt-0"
822  }, /* @__PURE__ */ React.createElement("ul", {
823    className: "mt-4 space-y-4"
824  }, navigation.support.map((item) => /* @__PURE__ */ React.createElement("li", {
825    key: item.name
826  }, item.isExternal ? /* @__PURE__ */ React.createElement("a", {
827    href: item.href,
828    target: "_blank",
829    rel: "noreferrer",
830    className: "text-sm text-gray-500 hover:text-gray-900"
831  }, item.name) : /* @__PURE__ */ React.createElement("button", {
832    onClick: () => {
833      navigate(item.href);
834    },
835    key: item.name,
836    className: "text-sm text-gray-500 hover:text-gray-900"
837  }, item.name)))))), /* @__PURE__ */ React.createElement("div", {
838    className: "md:grid md:grid-cols-2 md:gap-8"
839  }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("ul", {
840    className: "mt-4 space-y-4"
841  }, navigation.company.map((item) => /* @__PURE__ */ React.createElement("li", {
842    key: item.name
843  }, item.isExternal ? /* @__PURE__ */ React.createElement("a", {
844    href: item.href,
845    target: "_blank",
846    rel: "noreferrer",
847    className: "text-sm text-gray-500 hover:text-gray-900"
848  }, item.name) : /* @__PURE__ */ React.createElement("button", {
849    onClick: () => {
850      navigate(item.href);
851    },
852    key: item.name,
853    className: "text-sm text-gray-500 hover:text-gray-900"
854  }, item.name))))), /* @__PURE__ */ React.createElement("div", {
855    className: "mt-12 md:mt-0"
856  }, /* @__PURE__ */ React.createElement("ul", {
857    className: "mt-4 space-y-4"
858  }, navigation.legal.map((item) => /* @__PURE__ */ React.createElement("li", {
859    key: item.name
860  }, item.isExternal ? /* @__PURE__ */ React.createElement("a", {
861    href: item.href,
862    target: "_blank",
863    rel: "noreferrer",
864    className: "text-sm text-gray-500 hover:text-gray-900"
865  }, item.name) : /* @__PURE__ */ React.createElement("button", {
866    onClick: () => {
867      navigate(item.href);
868    },
869    key: item.name,
870    className: "text-sm text-gray-500 hover:text-gray-900"
871  }, item.name)))))))), /* @__PURE__ */ React.createElement("div", {
872    className: "mt-12 flex justify-center border-t border-gray-200 pt-8"
873  }, /* @__PURE__ */ React.createElement("p", {
874    className: "mr-1 text-base text-gray-400 xl:text-center"
875  }, "\xA9 2026 ru-digital | Eulenfisch |"), /* @__PURE__ */ React.createElement(Link, {
876    to: "/datenschutz"
877  }, /* @__PURE__ */ React.createElement("span", {
878    className: "mr-1 text-base text-gray-400 hover:text-gray-900 xl:text-center"
879  }, "Datenschutz |")), /* @__PURE__ */ React.createElement(Link, {
880    to: "/impressum"
881  }, /* @__PURE__ */ React.createElement("span", {
882    className: "text-base text-gray-400 hover:text-gray-900 xl:text-center"
883  }, "Impressum")))));
884};
885var footer_default = FooterMain;
886
887// app/layout/inklusion_background_image.tsx
888init_react();
889var import_react10 = __toESM(require_react());
890
891// app/assets/images/inkusion/hero-inklusion.svg
892var hero_inklusion_default = "/build/_assets/hero-inklusion-7MB4VKZ3.svg";
893
894// app/assets/images/inkusion/wave-bg-top-gray.svg
895var wave_bg_top_gray_default = "/build/_assets/wave-bg-top-gray-TQAGIMO6.svg";
896
897// app/layout/inklusion_background_image.tsx
898var InklusionIntroImage = ({
899  title,
900  subtitle,
901  size
902}) => {
903  return /* @__PURE__ */ import_react10.default.createElement("div", {
904    className: "relative mt-6 flex h-full w-full flex-col pt-0",
905    style: {
906      backgroundImage: `linear-gradient(90deg,#FFAB00 0, #FFC500 100%)`
907    }
908  }, /* @__PURE__ */ import_react10.default.createElement("div", {
909    className: "3xl:mx-auto\n      3xl:max-w-8xl",
910    style: {
911      backgroundImage: `url(${hero_dot_bg_default})`,
912      backgroundPosition: "100% 100%",
913      backgroundRepeat: "repeat"
914    }
915  }, /* @__PURE__ */ import_react10.default.createElement("div", {
916    className: "mx-auto flex w-full flex-col px-3\n        text-center\n        md:flex-row\n        md:px-0\n         3xl:mx-auto\n         3xl:max-w-8xl"
917  }, /* @__PURE__ */ import_react10.default.createElement("div", {
918    className: "w-full  md:w-1/2"
919  }, /* @__PURE__ */ import_react10.default.createElement("div", {
920    className: "ml-auto w-full\n                   md:max-w-[calc(100%_-_60px)]\n                xl:max-w-[calc(100%_-_160px)]\n              3xl:max-w-full\n              "
921  }, /* @__PURE__ */ import_react10.default.createElement("div", {
922    className: "w-full pt-3 xl:pt-5 2xl:mt-12 2xl:pt-0"
923  }, /* @__PURE__ */ import_react10.default.createElement("h1", {
924    className: "max-w-sm text-center font-sans text-2xl font-bold\n                   leading-[1] text-primary md:text-left  md:text-3xl lg:text-5xl\n              xl:text-[74px]"
925  }, title)), subtitle && /* @__PURE__ */ import_react10.default.createElement("div", null, /* @__PURE__ */ import_react10.default.createElement("p", {
926    className: "max-w-full pt-1 text-center text-primary\n                  sm:text-base md:pt-5 md:text-left\n                  md:text-lg xl:text-2xl"
927  }, subtitle)))), /* @__PURE__ */ import_react10.default.createElement("div", {
928    className: "z-0 w-full md:w-1/2"
929  }, /* @__PURE__ */ import_react10.default.createElement("img", {
930    className: class_names_default("z-0 h-full w-full object-fill"),
931    src: hero_inklusion_default
932  })))), /* @__PURE__ */ import_react10.default.createElement("div", {
933    className: "absolute bottom-0 z-40 w-full 3xl:bottom-[-100px] 3xl:z-0 3xl:h-24"
934  }, /* @__PURE__ */ import_react10.default.createElement("div", {
935    className: "md:-mt-20"
936  }, /* @__PURE__ */ import_react10.default.createElement("img", {
937    className: class_names_default("z-50 w-full object-bottom"),
938    src: wave_bg_top_gray_default
939  }))));
940};
941var inklusion_background_image_default = InklusionIntroImage;
942
943// app/assets/images/search/search-bg.svg
944var search_bg_default = "/build/_assets/search-bg-ZTV2SFRF.svg";
945
946// app/layout/index.tsx
947function Layout({
948  children,
949  title,
950  subtitle,
951  links: links2,
952  isLandingPage,
953  hasPageIntro = true,
954  hasLogo
955}) {
956  const size = GetScreenSize();
957  const { pathname } = useLocation();
958  const { articleId, methodId } = useParams();
959  const [query, setSearchQuery] = (0, import_react11.useState)("");
960  const [activeTab, setActiveTab] = (0, import_react11.useState)("medien");
961  const isDetailsPpage = articleId || methodId;
962  const getFormAction = () => {
963    if (activeTab === "fachartikel") {
964      return query ? `/professional_article/main?q=${query}` : `/professional_article/main`;
965    }
966    return query ? `/search/main?q=${query}` : `/search/main`;
967  };
968  const formAction = getFormAction();
969  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(header_default, {
970    links: links2
971  }), /* @__PURE__ */ React.createElement("main", {
972    id: "scrollArea",
973    className: "mt-[40px] mb-20 flex-grow"
974  }, hasPageIntro && /* @__PURE__ */ React.createElement(page_intro_wrapper_default, {
975    size,
976    isLandingPage,
977    title,
978    subtitle,
979    logo: hasLogo,
980    activeTab,
981    setActiveTab,
982    searchBox: isLandingPage && pathname !== "/inklusion" ? /* @__P
982URE__ */ React.createElement(search_box_default, {
983      formAction,
984      query,
985      setSearchQuery,
986      isLandingPage: true,
987      activeTab
988    }) : void 0
989  }), pathname === "/inklusion" && /* @__PURE__ */ React.createElement(inklusion_background_image_default, {
990    size,
991    title,
992    subtitle
993  }), (pathname.includes("/search/main") || pathname.includes("/professional_article/main")) && /* @__PURE__ */ React.createElement("div", {
994    className: "relative -z-10 hidden h-full w-full flex-col pt-0 md:flex"
995  }, /* @__PURE__ */ React.createElement("div", {
996    className: class_names_default("absolute  w-full", isDetailsPpage ? "top-5" : "top-24")
997  }, /* @__PURE__ */ React.createElement("div", {
998    className: ""
999  }, /* @__PURE__ */ React.createElement("img", {
1000    alt: "",
1001    className: "w-full object-bottom",
1002    src: search_bg_default
1003  })))), pathname.includes("/themenschwerpunkte") && /* @__PURE__ */ React.createElement("div", {
1004    className: "relative -z-10 hidden h-full w-full flex-col pt-16 md:flex"
1005  }, /* @__PURE__ */ React.createElement("div", {
1006    className: class_names_default("absolute top-6 w-full")
1007  }, /* @__PURE__ */ React.createElement("div", {
1008    className: ""
1009  }, /* @__PURE__ */ React.createElement("img", {
1010    alt: "",
1011    className: "w-full object-bottom",
1012    src: search_bg_default
1013  })))), children), /* @__PURE__ */ React.createElement(footer_default, {
1014    isLandingPage,
1015    links: links2
1016  }));
1017}
1018
1019// app/styles/main.css
1020var main_default = "/build/_assets/main-75ELVFQO.css";
1021
1022// app/root.tsx
1023var import_config = __toESM(require_config());
1024
1025// app/hooks/use_matomo.tsx
1026init_react();
1027var import_react13 = __toESM(require_react());
1028init_esm();
1029function useMatomo(gtaConsent, isProduction) {
1030  const location = useLocation();
1031  (0, import_react13.useEffect)(() => {
1032    if (gtaConsent === "all" && isProduction) {
1033      if (!window._matomoInitialized) {
1034        const script = document.createElement("script");
1035        script.async = true;
1036        script.src = "https://statistik.ru-digital.de/matomo.js";
1037        const trackerScript = document.createElement("script");
1038        trackerScript.innerHTML = `
1039          var _paq = window._paq = window._paq || [];
1040          _paq.push(['enableLinkTracking']);
1041          (function() {
1042            var u="https://statistik.ru-digital.de/";
1043            _paq.push(['setTrackerUrl', u+'matomo.php']);
1044            _paq.push(['setSiteId', '3']);
1045          })();
1046        `;
1047        document.head.appendChild(script);
1048        document.head.appendChild(trackerScript);
1049        window._matomoInitialized = true;
1050      }
1051    }
1052  }, [gtaConsent, isProduction]);
1053  (0, import_react13.useEffect)(() => {
1054    if (gtaConsent === "all" && window._paq) {
1055      window._paq.push(["setCustomUrl", window.location.href]);
1056      window._paq.push(["setDocumentTitle", document.title]);
1057      window._paq.push(["trackPageView"]);
1058    }
1059  }, [location, gtaConsent]);
1060}
1061
1062// app/root.tsx
1063var unstable_shouldReload = ({ submission }) => {
1064  var _a;
1065  if (!submission) {
1066    return true;
1067  }
1068  const method = typeof submission.formMethod === "string" ? submission.formMethod : typeof submission.method === "string" ? submission.method : "";
1069  const isShareFavoritesPost = method.toLowerCase() === "post" && ((_a = submission.formData) == null ? void 0 : _a.has("favArticleIds"));
1070  if (isShareFavoritesPost) {
1071    return false;
1072  }
1073  return true;
1074};
1075var links = () => {
1076  return [{ rel: "stylesheet", href: main_default }];
1077};
1078var meta = () => {
1079  return [
1080    {
1081      property: "og:title",
1082      content: "ru-digital - Der Guide f\xFCr deinen Religionsunterricht"
1083    },
1084    {
1085      name: "description",
1086      content: "ru-digital ist dein digitaler Begleiter und Resource f\xFCr die Planung und Durchf\xFChrung von Religionsunterricht."
1087    },
1088    { property: "og:image", content: og_image_default },
1089    {
1090      property: "name",
1091      content: "ru-digital ist dein digitaler Begleiter und Resource f\xFCr die Planung und Durchf\xFChrung von Religionsunterricht."
1092    }
1093  ];
1094};
1095function Document({
1096  children,
1097  title,
1098  theme,
1099  bgColor
1100}) {
1101  return /* @__PURE__ */ React.createElement("html", {
1102    lang: "de",
1103    "data-theme": theme
1104  }, /* @__PURE__ */ React.createElement("head", null, /* @__PURE__ */ React.createElement("meta", {
1105    charSet: "utf-8"
1106  }), /* @__PURE__ */ React.createElement("meta", {
1107    name: "viewport",
1108    content: "width=device-width,initial-scale=1"
1109  }
1109), title ? /* @__PURE__ */ React.createElement("title", null, title) : null, /* @__PURE__ */ React.createElement(Meta, null), /* @__PURE__ */ React.createElement(Links, null)), /* @__PURE__ */ React.createElement("body", {
1110    className: `flex min-h-screen flex-col ${bgColor ? bgColor : "bg-white"}`
1111  }, children, /* @__PURE__ */ React.createElement(ScrollRestoration, null), /* @__PURE__ */ React.createElement(Scripts, null), /* @__PURE__ */ React.createElement(LiveReload, null)));
1112}
1113function AppWithProviders() {
1114  return /* @__PURE__ */ React.createElement(App, null);
1115}
1116function App() {
1117  const hasWindow = typeof window !== "undefined";
1118  const matches = useMatches();
1119  const [showPendingSpinner, setShowPendingSpinner] = (0, import_react16.useState)(false);
1120  const location = useLocation();
1121  const data = useMatchesData("/", location.pathname);
1122  const { inklusionData, ENV } = useLoaderData();
1123  let transition = useTransition();
1124  const { isLandingPage, title, subtitle, id, hasPageIntro, hasLogo } = data == null ? void 0 : data.item;
1125  const gtaConsent = data == null ? void 0 : data.gdprConsent;
1126  const isWidgetFrame = matches.some((match) => match.pathname === "/widget/frame");
1127  useMatomo(gtaConsent, ENV.ISPRODUCTION);
1128  (0, import_react16.useEffect)(() => {
1129    let timer = setTimeout(() => {
1130      if (hasWindow) {
1131        setShowPendingSpinner(transition.state !== "idle");
1132      }
1133    }, 100);
1134    return () => {
1135      clearTimeout(timer);
1136    };
1137  }, [transition.state, hasWindow]);
1138  if (isWidgetFrame) {
1139    return /* @__PURE__ */ React.createElement(Document, {
1140      bgColor: "bg-transparent"
1141    }, /* @__PURE__ */ React.createElement(Outlet, {
1142      context: { showPendingSpinner }
1143    }), ";");
1144  }
1145  return /* @__PURE__ */ React.createElement(Document, null, /* @__PURE__ */ React.createElement(Layout, {
1146    links: data == null ? void 0 : data.links,
1147    hasPageIntro,
1148    isLandingPage,
1149    title: location.pathname === "/inklusion" ? inklusionData.title : title,
1150    hasLogo,
1151    subtitle: location.pathname === "/inklusion" ? inklusionData.subtitle : subtitle,
1152    id
1153  }, showPendingSpinner && /* @__PURE__ */ React.createElement("div", {
1154    className: "fixed top-1/2 left-1/2 z-20  -translate-x-1/2 -translate-y-1/2 transform-gpu  rounded-md bg-black p-14 text-center opacity-60"
1155  }, /* @__PURE__ */ React.createElement("div", {
1156    "aria-label": "Loading...",
1157    role: "status",
1158    className: "flex justify-center"
1159  }, /* @__PURE__ */ React.createElement("svg", {
1160    className: "h-8 w-8 animate-spin",
1161    viewBox: "3 3 18 18"
1162  }, /* @__PURE__ */ React.createElement("path", {
1163    className: "fill-yellow-400",
1164    d: "M12 5C8.13401 5 5 8.13401 5 12C5 15.866 8.13401 19 12 19C15.866 19 19 15.866 19 12C19 8.13401 15.866 5 12 5ZM3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12Z"
1165  }), /* @__PURE__ */ React.createElement("path", {
1166    className: "fill-gray-800",
1167    d: "M16.9497 7.05015C14.2161 4.31648 9.78392 4.31648 7.05025 7.05015C6.65973 7.44067 6.02656 7.44067 5.63604 7.05015C5.24551 6.65962 5.24551 6.02646 5.63604 5.63593C9.15076 2.12121 14.8492 2.12121 18.364 5.63593C18.7545 6.02646 18.7545 6.65962 18.364 7.05015C17.9734 7.44067 17.3403 7.44067 16.9497 7.05015Z"
1168  }))), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("p", {
1169    className: "mt-2 text-center font-bold text-white"
1170  }, "Daten werden geladen..."))), /* @__PURE__ */ React.createElement(Outlet, {
1171    context: { showPendingSpinner }
1172  }), gtaConsent || gtaConsent === false ? null : /* @__PURE__ */ React.createElement(CookiesBanner, null)), /* @__P
1172URE__ */ React.createElement(ExposeAppConfig, {
1173    appConfig: ENV,
1174    nonce: ""
1175  }));
1176}
1177function CatchBoundary() {
1178  const { button } = default_default;
1179  const { base, color } = button;
1180  const caught = useCatch();
1181  return /* @__PURE__ */ React.createElement("html", {
1182    className: "h-full",
1183    lang: "de"
1184  }, /* @__PURE__ */ React.createElement("head", null, /* @__PURE__ */ React.createElement("meta", {
1185    charSet: "utf-8"
1186  }), /* @__PURE__ */ React.createElement("title", null, "404 Seite nicht gefunden"), /* @__PURE__ */ React.createElement(Links, null)), /* @__PURE__ */ React.createElement("body", {
1187    className: "h-full"
1188  }, /* @__PURE__ */ React.createElement("div", {
1189    className: "flex min-h-full flex-col bg-white pt-16 pb-12"
1190  }, /* @__PURE__ */ React.createElement("main", {
1191    className: "mx-auto flex w-full max-w-7xl flex-grow flex-col justify-center px-4 sm:px-6 lg:px-8"
1192  }, /* @__PURE__ */ React.createElement("div", {
1193    className: "py-16"
1194  }, /* @__PURE__ */ React.createElement("div", {
1195    className: "text-center"
1196  }, /* @__PURE__ */ React.createElement("p", {
1197    className: "text-base font-bold uppercase tracking-wide text-btnColor-secondary"
1198  }, caught.status, " error"), /* @__PURE__ */ React.createElement("h1", {
1199    className: "mt-2 text-4xl font-bold tracking-tight text-gray-900 sm:text-5xl"
1200  }, caught.statusText === "Not Found" ? "Seite nicht gefunden" : caught.statusText), /* @__PURE__ */ React.createElement("p", {
1201    className: "mt-2 text-base text-gray-500"
1202  }, caught.data ? caught.data : "Es tut uns leid. Die Seite, die du suchst, gibt es nicht."), /* @__PURE__ */ React.createElement("div", {
1203    className: "mt-6"
1204  }, /* @__PURE__ */ React.createElement(Link, {
1205    type: "button",
1206    to: "/media/home",
1207    className: class_names_default(base, color.primary, "px-9")
1208  }, "Zur\xFCck zur Startseite"))))))));
1209}
1210var ErrorBoundary2 = ({ error }) => {
1211  return /* @__PURE__ */ React.createElement(Document, {
1212    title: "Error!"
1213  }, /* @__PURE__ */ React.createElement(ErrorBoundary, {
1214    error
1215  }));
1216};
1217export {
1218  CatchBoundary,
1219  ErrorBoundary2 as ErrorBoundary,
1220  AppWithProviders as default,
1221  links,
1222  meta,
1223  unstable_shouldReload
1224};
1225//# sourceMappingURL=/build/root-WHTWSDWP.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.