{ "version": 3, "sources": ["../../entry.ts", "../../startup/init_logging.ts", "../../startup/third_parties.ts", "../../startup/startup_common.ts", "../../board/toolbar_items_website.tsx", "../../board/board_title.tsx", "../../board/toolbar_items_common.tsx"], "sourcesContent": ["import {\n init as init_logging,\n log_history,\n log_history_to_string_array,\n} from \"@cling/lib.shared.logging\"\nimport {default_logger} from \"@cling/lib.shared.logging/default_logger\"\nimport {safe_local_storage} from \"@cling/lib.web.utils/safe_storage\"\nimport {install_global_error_handler} from \"@cling/lib.shared.debug\"\n\n/** Provided by build.client.web_app.ts */\ndeclare const process: {\n env: {\n NODE_ENV: \"development\" | \"test\" | \"production\"\n VERSION: string\n F_PRINT_TO_CONSOLE: boolean\n F_PUBLIC: boolean\n }\n}\n\nexport function init() {\n install_global_error_handler()\n init_logging(\n default_logger({\n log_history,\n print_to_console:\n process.env.F_PRINT_TO_CONSOLE || safe_local_storage.getItem(\"__debug\"),\n }),\n )\n cling.debug = () => {\n // eslint-disable-next-line no-console\n log_history_to_string_array(log_history).forEach((line) => console.log(line))\n cling.print_to_console = true\n safe_local_storage.setItem(\"__debug\", \"1\")\n }\n cling.log_history = () => log_history_to_string_array(log_history)\n}\n", "import {\n Client,\n ReportLogEventRequest,\n ReportLogEventResponse,\n ReportLogEventSeverity,\n} from \"@cling/lib.shared.model\"\nimport {\n LogEventReporter,\n register_log_event_reporter,\n unregister_log_event_reporter,\n} from \"@cling/lib.shared.debug\"\nimport {log, log_history, log_history_to_string_array} from \"@cling/lib.shared.logging\"\nimport {error_to_string} from \"@cling/lib.shared.utils\"\nimport {RateLimiter} from \"@cling/lib.shared.utils/rate_limiter\"\nimport {CallFunctionFailed} from \"@cling/lib.shared.error\"\nimport {call_function} from \"@cling/lib.shared.faas\"\nimport {Buffer} from \"buffer\"\n\nclass ShowFirstErrorInBrowser implements LogEventReporter {\n pre?: HTMLPreElement\n msg?: string\n\n report(message: string, severity: \"info\" | \"warn\" | \"error\" = \"error\"): void {\n if (severity !== \"error\") {\n return\n }\n // We have to make this exception for Safari, which logs this message rather than\n // throwing an error in `index.html` while registering the ServiceWorker.\n if (\n message.includes(\"InvalidStateError: The object is in an invalid state\") &&\n message.includes(\"register@[native code]\")\n ) {\n return\n }\n // eslint-disable-next-line no-console\n console.error(message) // We want to see the message in the console, too!\n ;(window as any).cling_first_error = message\n let {pre} = this\n if (pre) {\n // <pre class=\"error\">...</pre> might already exist, if `report_error(...)` was called\n // followed by a call to `goto(...)` -- in this case we prepend the given `message`.\n pre.innerText = this.msg = message + \"\\n\\n\" + this.msg\n return\n }\n pre = this.pre = document.createElement(\"pre\")\n // Sometimes we just want to get rid of the error overlay. Let's do this with some\n // magical clicks.\n let num_clicks = 0\n pre.addEventListener(\"click\", () => {\n if (num_clicks++ >= 3) {\n pre?.remove()\n }\n })\n pre.classList.add(\"error\") // Style is defined in index.template.html.\n pre.innerText = this.msg = message\n document.body.appendChild(pre)\n // Only show the first error in the browser.\n unregister_log_event_reporter(this)\n try {\n const reversed_log_history = cling.log_history().reverse()\n if (reversed_log_history.length && reversed_log_history[0].indexOf(message) >= 0) {\n reversed_log_history.shift()\n }\n pre.innerText = this.msg + \"\\n\\n\" + reversed_log_history.join(\"\\n\")\n } catch (error) {\n pre.innerText = this.msg + \"\\n\\n\" + error_to_string(error)\n }\n }\n}\n\nexport function show_first_error_or_redirect_in_browser() {\n const _show_first_error_in_browser = new ShowFirstErrorInBrowser()\n register_log_event_reporter(_show_first_error_in_browser)\n const goto_ = window.goto\n window.goto = (url) => {\n if (\n url.startsWith(\"/\") &&\n !url.startsWith(\"/login\") &&\n !url.includes(\"login.html\") &&\n !url.startsWith(\"/c\") &&\n url !== \"/\" &&\n location.pathname !== \"/c/authorize\"\n ) {\n let message = `Redirect to ${url}`\n if (url.startsWith(\"/oops\")) {\n try {\n const x = new URL(url, location.href).searchParams.get(\"x\")\n if (x) {\n message = \"Redirect to /oops?...\\n\\n\" + Buffer.from(x, \"base64\").toString()\n }\n } catch {\n // Ignored.\n }\n }\n // Do *not* go to given url but stay on current page showing the error.\n _show_first_error_in_browser!.report(message)\n return\n }\n goto_(url)\n }\n}\n\n// Do not report more than 10 errors every 5 minutes.\nconst _report_error_rate_limiter = new RateLimiter({max_calls: 10, per: [5, \"minutes\"]})\n// Do not report more than 20 infos/warnings every 5 minutes.\nconst _report_info_warn_rate_limiter = new RateLimiter({max_calls: 20, per: [5, \"minutes\"]})\nlet _unreported_errors_counter = 0\n\nexport function init_log_event_reporting(client: Client) {\n register_log_event_reporter({\n should_report_error: (error) => {\n return !(\n error instanceof CallFunctionFailed ||\n error?.name === \"NetworkError\" ||\n (typeof error.stack === \"string\" && error.stack.includes(\"chrome-extension://\"))\n )\n },\n report: async (message, severity) => {\n if (severity === \"error\") {\n log.debug(\"`report_error` called\", {message})\n }\n try {\n const limiter =\n severity === \"error\"\n ? _report_error_rate_limiter\n : _report_info_warn_rate_limiter\n await limiter.run(async (within_limit) => {\n if (!within_limit) {\n if (severity === \"error\") {\n _unreported_errors_counter += 1\n }\n return\n }\n await call_function(\n new ReportLogEventRequest({\n message,\n client,\n client_version: process.env.VERSION!,\n user_agent: navigator.userAgent,\n log_history: log_history_to_string_array(log_history, {max_size: 6000}),\n num_unreported_errors: _unreported_errors_counter,\n severity:\n severity === \"info\"\n ? ReportLogEventSeverity.info\n : severity === \"warn\"\n ? ReportLogEventSeverity.warn\n : ReportLogEventSeverity.error,\n }),\n ReportLogEventResponse,\n )\n _unreported_errors_counter = 0\n })\n } catch (error) {\n log.error(\"Failed to report log event\", {error})\n }\n },\n })\n}\n", "import {log} from \"@cling/lib.shared.logging\"\n\n/** See https://developer.mozilla.org/en-US/docs/Web/API/FontFace */\ninterface FontFace {\n display: string\n family: string\n featureSettings: string\n readonly loaded: Promise<FontFace>\n readonly status: \"unloaded\" | \"loading\" | \"loaded\" | \"error\"\n stretch: string\n style: string\n unicodeRange: string\n variant: string\n weight: string\n}\n\n/** See https://developer.mozilla.org/en-US/docs/Web/API/FontFaceSet */\ninterface FontFaceSet {\n readonly status: \"loading\" | \"loaded\"\n readonly ready: Promise<FontFaceSet>\n check(font: string, text?: string): boolean\n load(font: string, text?: string): Promise<Array<FontFace>>\n}\n\nexport async function load_material_icons_font(): Promise<any> {\n const {fonts} = document as any as {fonts: FontFaceSet}\n if (fonts) {\n // Prevent that the `start_web_app` watchdog will reload the page,\n // if the Material Icons font takes its time to load ...\n const log_interval_id = setInterval(() => {\n log.debug(\"Waiting for Material Icons font ...\")\n }, 5000)\n try {\n await fonts.load('24px \"Material Icons\"')\n } finally {\n clearInterval(log_interval_id)\n }\n }\n}\n\nexport function wait_for_material_icons_font(): Promise<any> {\n // See https://caniuse.com/#feat=mdn-api_document_fonts ...\n if ((document as any).fonts) {\n return ((document as any).fonts as FontFaceSet).ready\n }\n return Promise.resolve()\n}\n", "import {configure as configure_mobx, runInAction} from \"mobx\"\nimport {override_default_layout} from \"@cling/lib.web.layout/default_layout\"\nimport {\n detect_scrollbar_width,\n running_on_ios,\n running_on_ios_13_and_above,\n running_on_mobile_device,\n} from \"@cling/lib.web.utils\"\nimport {safe_local_storage} from \"@cling/lib.web.utils/safe_storage\"\nimport {show_first_error_or_redirect_in_browser} from \"./init_logging\"\nimport {Page} from \"@cling/lib.web.mdc\"\nimport {load_material_icons_font, wait_for_material_icons_font} from \"./third_parties\"\nimport {report_error} from \"@cling/lib.shared.debug\"\nimport {load_perfect_scrollbar} from \"@cling/lib.web.lazy_load\"\nimport {is_cling_hp} from \"../utils\"\nimport {call_function} from \"@cling/lib.shared.faas\"\nimport {QueryUserMetaRequest, QueryUserMetaResponse} from \"@cling/lib.shared.model\"\nimport {ui_state} from \"../state\"\n\n/** Provided by build.client.web_app.ts. */\ndeclare const process: {\n env: {\n NODE_ENV: \"development\" | \"test\" | \"production\"\n VERSION: string\n WORKER_URI: string\n F_PUBLIC: string\n }\n}\n\nexport function set_global_css_classes() {\n document.body.classList.add(running_on_mobile_device() ? \"mobile\" : \"desktop\")\n document.documentElement.style.setProperty(\n \"--scrollbar-width\",\n running_on_mobile_device() ? \"0px\" : `${detect_scrollbar_width()}px`,\n )\n if (running_on_ios()) {\n document.body.classList.add(\"ios\")\n if (running_on_ios_13_and_above()) {\n document.body.classList.add(\"ios--13-and-above\")\n } else {\n document.body.classList.add(\"ios--12-and-below\")\n }\n }\n if (is_cling_hp()) {\n document.body.classList.add(\"hp\")\n if (location.pathname.match(/^\\/[^/]*\\/detail\\/.*/)) {\n // Make `detail` pages wider - they contain lots of stuff to read.\n override_default_layout({\n min_column_width: 400,\n optimum_column_width: 420,\n max_column_width: 680,\n })\n } else {\n // We can afford to go a little wider on our website pages.\n override_default_layout({\n min_column_width: 320,\n optimum_column_width: 340,\n max_column_width: 680,\n })\n }\n if (\n location.pathname.match(/^\\/[^/]*\\/index\\.html/) ||\n location.pathname.match(/^\\/[^/]*\\/teams\\.html/) ||\n location.pathname.match(/^\\/[^/]*\\/info\\/.*/)\n ) {\n // The actual start page, detail index and landing-pages under `/xx/info/`\n // receive special treatment.\n document.body.classList.add(\"hp--extra\")\n }\n }\n}\n\nexport function init_dev() {\n if (safe_local_storage.getItem(\"f_controlled_by_test\")) {\n window._under_test = true\n }\n const {dev, frontend_only} =\n process.env.NODE_ENV === \"test\" ? {dev: true, frontend_only: false} : cling\n if (dev || frontend_only) {\n show_first_error_or_redirect_in_browser()\n }\n return {dev, frontend_only}\n}\n\nexport function misc_init({dev}: {dev: boolean}) {\n // See https://mobx.js.org/refguide/api.html#configure\n configure_mobx({\n enforceActions: process.env.NODE_ENV === \"production\" ? \"never\" : \"observed\",\n computedRequiresReaction: dev,\n reactionRequiresObservable: dev,\n })\n Page.document_title_suffix = \"Cling\" + (dev ? \" (dev)\" : \"\")\n}\n\nexport function preload_assets({await_before_render}: {await_before_render: Promise<void>[]}) {\n load_material_icons_font().catch(report_error)\n wait_for_material_icons_font().catch(report_error)\n if (!running_on_mobile_device()) {\n await_before_render.push(load_perfect_scrollbar())\n }\n}\n\nexport async function set_user_currency() {\n try {\n const res = await call_function(new QueryUserMetaRequest({}), QueryUserMetaResponse)\n runInAction(() => (ui_state.preferred_currency = res.currency === \"EUR\" ? \"EUR\" : \"USD\"))\n } catch (error) {\n report_error(\"Failed to detect user's currency - using USD\", error)\n runInAction(() => (ui_state.preferred_currency = \"USD\"))\n }\n}\n", "import type {Board, BoardInfo} from \"@cling/lib.shared.model\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {Button, Icon, IconButton, Menu, MenuItem, MenuItemDivider} from \"@cling/lib.web.mdc\"\nimport {cancel_event, running_on_mobile_device} from \"@cling/lib.web.utils\"\nimport {observer} from \"mobx-react\"\nimport * as React from \"react\"\nimport {open_intercom} from \"../misc/intercom\"\nimport {ui_actions, ui_state} from \"../state/index\"\nimport {BoardTitle} from \"./board_title\"\nimport {ScrollIndicator} from \"./scroll_indicator\"\nimport {\n SignUp,\n HolyTrinityOfVeryImportantLinks,\n PublicMenuLinkItem,\n TypographyLogo,\n user_lang,\n} from \"./toolbar_items_common\"\n\nexport const TopToolbarItemsDesktopWebsite = ({board_info}: {board_info?: BoardInfo}) => {\n const in_app = !!cling.public_board_in_app\n const hide_sign_up_and_login = location.pathname.includes(\"cling-button-signed-in.html\")\n return (\n <nav\n className=\"toolbar-items toolbar-items--public toolbar-items--top\"\n onMouseEnter={ui_actions.hide_card_menus}\n data-test-id=\"TopToolbarItems\"\n >\n <TitleItem board_info={board_info} />\n {!in_app && <HowItWorksButton />}\n {!in_app && <ForTeamsButton />}\n {!in_app && <PricingButton />}\n {!in_app && !hide_sign_up_and_login && <SignUp outlined />}\n {!in_app && !hide_sign_up_and_login && <LoginButton />}\n {in_app && <CloseWindow />}\n </nav>\n )\n}\n\nexport const TopToolbarItemsMobileWebsite = ({board_info}: {board_info?: BoardInfo}) => {\n const in_app = !!cling.public_board_in_app\n return (\n <nav\n className=\"toolbar-items toolbar-items--public toolbar-items--top\"\n data-test-id=\"TopToolbarItems\"\n >\n <TitleItem board_info={board_info} />\n <PublicBoardMenuItem in_app={in_app} />\n </nav>\n )\n}\n\nexport const BottomToolbarItemsMobileWebsite = observer(({board}: {board?: Board}) => {\n const show_scroll_indicator = !ui_state.layout_state.all_columns_fully_visible\n const in_app = !!cling.public_board_in_app\n return (\n <>\n {show_scroll_indicator && <ScrollIndicator board={board} />}\n <nav\n className=\"toolbar-items toolbar-items--public toolbar-items--bottom\"\n data-test-id=\"BottomToolbarItems\"\n >\n <div className=\"toolbar-items__flex\" />\n {!in_app && <SignUp raised secondary />}\n {in_app && <CloseWindow />}\n <Chat />\n </nav>\n </>\n )\n})\n\nexport const BottomToolbarItemsDesktopWebsite = observer(() => {\n return (\n <nav\n className=\"toolbar-items-public-bottom-desktop-right\"\n data-test-id=\"BottomToolbarItems\"\n onMouseEnter={ui_actions.hide_card_menus}\n >\n <HolyTrinityOfVeryImportantLinks />\n <LanguageSwitcher />\n <Chat text />\n </nav>\n )\n})\n\nexport const TopToolbarItemsPublicPage = ({title}: {title: string}) =>\n running_on_mobile_device() ? (\n <TopToolbarItemsMobilePublicPage title={title} />\n ) : (\n <TopToolbarItemsDesktopPublicPage title={title} />\n )\n\nconst TopToolbarItemsDesktopPublicPage = ({title}: {title: string}) => {\n return (\n <nav className=\"toolbar-items toolbar-items--public toolbar-items--top\">\n <TypographyLogo in_app={false} />\n <div className=\"mdc-top-app-bar__title toolbar-items__title--left public-page__title\">\n {\"//\"} {title}\n </div>\n <HowItWorksButton />\n <ForTeamsButton />\n <PricingButton />\n </nav>\n )\n}\n\nexport const BottomToolbarItemsDesktopPublicPage = () => {\n return (\n <div\n className=\"toolbar-items-public-bottom-desktop-right\"\n data-test-id=\"BottomToolbarItems\"\n >\n <HolyTrinityOfVeryImportantLinks />\n <LanguageSwitcher />\n <Chat text />\n </div>\n )\n}\n\nconst TopToolbarItemsMobilePublicPage = ({title}: {title: string}) => {\n return (\n <div className=\"toolbar-items toolbar-items--public toolbar-items--top\">\n <div className=\"mdc-top-app-bar__title toolbar-items__title--left board-title\">\n <TypographyLogo in_app={false} />\n {\"//\"} {title}\n </div>\n <PublicBoardMenuItem in_app={false} />\n </div>\n )\n}\n\nconst LoginButton = () => (\n <a\n href={`/${user_lang()}/login.html`}\n className=\"toolbar-items__app-bar-button\"\n draggable={false}\n >\n <Button>{i18n.log_in}</Button>\n </a>\n)\n\nconst HowItWorksButton = () => (\n <a\n href={`/${user_lang()}/detail/index.html`}\n className=\"toolbar-items__app-bar-button\"\n draggable={false}\n >\n <Button>{i18n.how_it_works}</Button>\n </a>\n)\n\nconst ForTeamsButton = () => (\n <a\n href={`/${user_lang()}/teams.html`}\n className=\"toolbar-items__app-bar-button\"\n draggable={false}\n >\n <Button>{i18n.for_teams}</Button>\n </a>\n)\n\nconst CloseWindow = () => {\n const close = React.useCallback(() => window.close(), [])\n return (\n <Button\n className=\"toolbar-items__cta\"\n raised\n secondary\n onClick={close}\n data-test-id=\"CloseWindow\"\n >\n {i18n.return_to_app}\n </Button>\n )\n}\n\nconst LanguageSwitcher = () => {\n const hp_lang = user_lang()\n if (!hp_lang) {\n return null\n }\n return (\n <a\n href={toggle_hp_language()}\n className=\"toolbar-items__link mr--1\"\n data-test-id=\"LanguageSwitcher\"\n >\n {hp_lang === \"de\" ? \"English\" : \"Deutsch\"}\n </a>\n )\n}\n\nconst Chat = ({text}: {text?: boolean}) => {\n const open_help = React.useCallback((e: React.MouseEvent) => {\n cancel_event(e)\n open_intercom(\"home\")\n }, [])\n if (text) {\n return (\n <a className=\"toolbar-items__link mr--1\" onClick={open_help} data-test-id=\"Chat\">\n {i18n.chat}\n </a>\n )\n }\n return (\n <IconButton\n icon=\"chat_bubble\"\n onClick={open_help}\n data-test-id=\"Chat\"\n tooltip={i18n.get_help}\n />\n )\n}\n\nconst TitleItem = (props: {board_info?: BoardInfo}) => {\n const {board_info} = props\n const in_app = !!cling.public_board_in_app\n const is_start_page = !!location.pathname.match(/^\\/[^/]*\\/index.html/)\n return (\n <div className=\"mdc-top-app-bar__title toolbar-items__title toolbar-items__title--left flex-row\">\n <TypographyLogo in_app={in_app} />\n {!is_start_page && (\n <BoardTitle\n data-test-id=\"ToolbarItems_title\"\n board={board_info}\n title_override={`// ${board_info?.name ?? \"\"}`}\n />\n )}\n </div>\n )\n}\n\nconst PricingButton = () => (\n <a\n href={user_lang() === \"de\" ? \"/de/preise.html\" : \"/en/pricing.html\"}\n className=\"toolbar-items__app-bar-button\"\n draggable={false}\n >\n <Button>{i18n.pricing}</Button>\n </a>\n)\n\nconst PublicBoardMenuItem = observer(({in_app}: {in_app: boolean}) => {\n const open_help = React.useCallback(() => open_intercom(\"home\"), [])\n return (\n <Menu\n className=\"toolbar-items__board-menu\"\n data-test-id=\"PublicBoardMenu\"\n anchor={\n <IconButton\n icon=\"more_vert\"\n data-test-id=\"ToolbarItems_board_menu\"\n outlined\n tooltip={i18n.more}\n />\n }\n >\n <PublicMenuLinkItem\n icon=\"language\"\n data-test-id=\"ToolbarItems_switch_lang\"\n title={user_lang() === \"en\" ? \"Deutsch\" : \"English\"}\n toggle_lang\n uri={location.pathname.split(\"/\").pop() || \"index.html\"}\n />\n {!in_app && (\n <PublicMenuLinkItem icon=\"login\" title={i18n.log_in} uri=\"login.html\" button />\n )}\n <MenuItem\n onClick={open_help}\n title={i18n.get_help}\n graphic={<Icon icon=\"chat_bubble_outline\" outlined />}\n />\n {!in_app && (\n <>\n <MenuItemDivider />\n <PublicMenuLinkItem\n icon=\"collections\"\n title={i18n.how_it_works}\n uri=\"detail/index.html\"\n />\n <PublicMenuLinkItem icon=\"group\" title={i18n.for_teams} uri=\"teams.html\" />\n <PublicMenuLinkItem\n icon=\"format_list_bulleted\"\n title={i18n.pricing}\n uri=\"pricing.html\"\n />\n <MenuItemDivider />\n <PublicMenuLinkItem icon=\"subject\" title={i18n.terms_of_use} uri=\"terms.html\" />\n <PublicMenuLinkItem\n icon=\"privacy_tip\"\n title={i18n.privacy_policy}\n uri=\"privacy.html\"\n />\n <PublicMenuLinkItem icon=\"info\" title={i18n.imprint} uri=\"about.html\" />\n </>\n )}\n </Menu>\n )\n})\n\nconst toggle_hp_language = () => {\n const toggle_hp_language_href = () => {\n if (user_lang() === \"de\") {\n return location.href.replace(\"/de/\", \"/en/\")\n } else {\n return location.href.replace(\"/en/\", \"/de/\")\n }\n }\n let target_url = toggle_hp_language_href()\n if (cling.public_board_in_app) {\n target_url += `${target_url.includes(\"?\") ? \"&\" : \"?\"}in_app=1`\n }\n return target_url\n}\n", "import * as React from \"react\"\nimport {BoardInfo, Board, BoardType} from \"@cling/lib.shared.model\"\nimport {observer} from \"mobx-react\"\nimport {current_user} from \"../state/index\"\nimport {PrincipalInfo} from \"../account/principal_info\"\nimport {decorate_emojis} from \"@cling/lib.web.utils/decorate_emojis\"\nimport {escape_html} from \"@cling/lib.shared.utils\"\nimport {board_name} from \"./board_name\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {classNames} from \"@cling/lib.web.utils\"\n\nexport const BoardTitle = ({\n board,\n title_override,\n className,\n \"data-test-id\": data_test_id,\n onClick,\n}: {\n board: Board | BoardInfo | undefined\n title_override?: string\n className?: string\n \"data-test-id\"?: string\n onClick?: React.MouseEventHandler<HTMLDivElement>\n}) => {\n const archived = board\n ? current_user.account_settings.board_setting(board.uid)?.archived\n : false\n let title\n if (title_override) {\n title = <span>{title_override}</span>\n } else if (!board) {\n title = <span>...</span>\n } else {\n title = <ObservingBoardTitle board={board} />\n }\n return (\n <h1\n className={classNames(\"board-title\", className)}\n data-test-id={data_test_id}\n onClick={onClick}\n >\n <span className=\"board-title__text\">\n {archived && <span className=\"board-title__archived\">[{i18n.archived}]</span>}\n {title}\n </span>\n </h1>\n )\n}\n\nconst ObservingBoardTitle = observer(({board}: {board: BoardInfo | Board}) => {\n if (board.board_type === BoardType.dashboard) {\n return <span>Cling</span>\n } else if (board.board_type === BoardType.people) {\n const shared_with = board.people_board_shared_with(current_user.account.uid)\n return (\n <div className=\"board-title__people-board\">\n <div className=\"board-title__people-board-avatar\">\n <PrincipalInfo display=\"avatar\" uid={shared_with} />\n </div>\n <PrincipalInfo\n className=\"board-title__people-board-name\"\n display=\"full_name\"\n uid={shared_with}\n />\n </div>\n )\n } else {\n return (\n <span\n dangerouslySetInnerHTML={{\n __html: decorate_emojis(escape_html(board_name(board, {mark_archived: false}))),\n }}\n />\n )\n }\n})\n", "import {i18n} from \"@cling/lib.web.i18n\"\nimport {IconButton} from \"@cling/lib.web.mdc\"\nimport {Button} from \"@cling/lib.web.mdc/button\"\nimport {Icon} from \"@cling/lib.web.mdc/icon\"\nimport {MenuItem} from \"@cling/lib.web.mdc/menu\"\nimport {running_on_mobile_device} from \"@cling/lib.web.utils\"\nimport {classNames} from \"@cling/lib.web.utils\"\nimport {observer} from \"mobx-react\"\nimport React from \"react\"\nimport {current_user, ui_actions, ui_state} from \"../state/index\"\nimport {is_cling_hp} from \"../utils\"\n\nexport function user_lang(): \"de\" | \"en\" {\n if (current_user) {\n return current_user.account.locale.startsWith(\"de\") ? \"de\" : \"en\"\n }\n return is_cling_hp() || \"en\"\n}\n\nexport const HolyTrinityOfVeryImportantLinks = () => {\n return (\n <>\n <a href={`/${user_lang()}/terms.html`} className=\"toolbar-items__link mr--1\">\n {i18n.terms_of_use}\n </a>\n <a href={`/${user_lang()}/privacy.html`} className=\"toolbar-items__link mr--1\">\n {i18n.privacy}\n </a>\n <a href={`/${user_lang()}/about.html`} className=\"toolbar-items__link mr--1\">\n {i18n.imprint}\n </a>\n </>\n )\n}\n\nexport const CollapseItem = observer(() => {\n const toggle_collapse_expand_all = React.useCallback(() => {\n ui_actions.toggle_collapse_expand_all()\n }, [])\n const disabled = ui_state.search_state.all_boards\n return (\n <IconButton\n icon={ui_state.toggle_collapse_expand_all ? \"view_stream\" : \"view_module\"}\n data-test-id=\"ToolbarItems_collapse_expand_all\"\n disabled={disabled}\n tooltip={i18n.toggle_collapse_expand_all(ui_state.toggle_collapse_expand_all)}\n small={!running_on_mobile_device()}\n onClick={disabled ? undefined : toggle_collapse_expand_all}\n label={\n running_on_mobile_device() || process.env.F_PUBLIC\n ? undefined\n : i18n.toggle_collapse_expand_all(ui_state.toggle_collapse_expand_all)\n }\n />\n )\n})\n\nexport const SignUp = ({\n raised,\n outlined,\n secondary,\n}: {\n raised?: boolean\n outlined?: boolean\n secondary?: boolean\n}) => (\n <a href={`/${user_lang()}/signup.html`} draggable={false}>\n <Button\n className=\"toolbar-items__cta\"\n raised={raised}\n outlined={outlined}\n secondary={secondary}\n >\n {i18n.sign_up_for_free}\n </Button>\n </a>\n)\n\nexport const TypographyLogo = ({in_app, className}: {in_app: boolean; className?: string}) => {\n const logo = <div className={classNames(className, \"toolbar-items__typography-logo\")} />\n if (in_app) {\n return logo\n }\n return (\n <a href={`/${user_lang()}/index.html`} aria-label=\"cling.com\" draggable={false}>\n {logo}\n </a>\n )\n}\n\nexport const PublicMenuLinkItem = ({\n icon,\n title,\n uri,\n toggle_lang,\n \"data-test-id\": data_test_id,\n button,\n}: {\n icon: string\n title: string\n uri: string\n toggle_lang?: boolean\n button?: boolean\n \"data-test-id\"?: string\n}) => {\n let is_de = user_lang() === \"de\"\n if (toggle_lang) {\n is_de = !is_de\n }\n const lang = is_de ? \"/de/\" : \"/en/\"\n const url = `${location.protocol}//${location.host}${lang}${uri}`\n // This is weird. We have to capture the event and redirect \"by hand\" because the request\n // followed after the user clicked would get cancelled (see network tab).\n const on_click = React.useCallback(\n (e: React.MouseEvent) => {\n goto(url)\n e.stopPropagation()\n e.preventDefault()\n },\n [url],\n )\n return (\n <a\n href={url}\n className={classNames(\"no-outline\", button)}\n onClickCapture={on_click}\n draggable={false}\n data-test-id={data_test_id}\n >\n <MenuItem\n title={\n button ? (\n <Button raised className=\"toolbar-items--public-menu-button\">\n {title}\n </Button>\n ) : (\n title\n )\n }\n onClick={on_click}\n graphic={button ? <div /> : <Icon icon={icon} outlined />}\n />\n </a>\n )\n}\n"], "mappings": "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", "names": ["init", "install_global_error_handler", "default_logger", "log_history", "safe_local_storage", "log_history_to_string_array", "line", "__name", "import_buffer", "_ShowFirstErrorInBrowser", "__publicField", "message", "severity", "pre", "num_clicks", "unregister_log_event_reporter", "reversed_log_history", "error", "error_to_string", "__name", "ShowFirstErrorInBrowser", "show_first_error_or_redirect_in_browser", "_show_first_error_in_browser", "register_log_event_reporter", "goto_", "url", "x", "_report_error_rate_limiter", "RateLimiter", "_report_info_warn_rate_limiter", "_unreported_errors_counter", "init_log_event_reporting", "client", "CallFunctionFailed", "log", "within_limit", "call_function", "ReportLogEventRequest", "log_history_to_string_array", "log_history", "ReportLogEventResponse", "load_material_icons_font", "fonts", "log_interval_id", "log", "__name", "wait_for_material_icons_font", "set_global_css_classes", "running_on_mobile_device", "detect_scrollbar_width", "running_on_ios", "running_on_ios_13_and_above", "is_cling_hp", "override_default_layout", "__name", "init_dev", "safe_local_storage", "dev", "frontend_only", "show_first_error_or_redirect_in_browser", "misc_init", "configure", "Page", "preload_assets", "await_before_render", "load_material_icons_font", "report_error", "wait_for_material_icons_font", "load_perfect_scrollbar", "set_user_currency", "res", "call_function", "QueryUserMetaRequest", "QueryUserMetaResponse", "runInAction", "ui_state", "error", "init_compat_module", "init_compat_module", "BoardTitle", "__name", "board", "title_override", "className", "data_test_id", "onClick", "archived", "current_user", "title", "_", "ObservingBoardTitle", "classNames", "i18n", "observer", "shared_with", "PrincipalInfo", "decorate_emojis", "escape_html", "board_name", "init_compat_module", "user_lang", "current_user", "is_cling_hp", "__name", "HolyTrinityOfVeryImportantLinks", "Rn", "i18n", "CollapseItem", "observer", "toggle_collapse_expand_all", "ui_actions", "disabled", "ui_state", "IconButton", "running_on_mobile_device", "SignUp", "raised", "outlined", "secondary", "Button", "TypographyLogo", "in_app", "className", "logo", "classNames", "PublicMenuLinkItem", "icon", "title", "uri", "toggle_lang", "data_test_id", "button", "is_de", "lang", "url", "on_click", "e", "MenuItem", "Icon", "TopToolbarItemsDesktopWebsite", "__name", "board_info", "in_app", "hide_sign_up_and_login", "_", "ui_actions", "TitleItem", "HowItWorksButton", "ForTeamsButton", "PricingButton", "SignUp", "LoginButton", "CloseWindow", "TopToolbarItemsMobileWebsite", "PublicBoardMenuItem", "BottomToolbarItemsMobileWebsite", "observer", "board", "show_scroll_indicator", "ui_state", "k", "ScrollIndicator", "Chat", "BottomToolbarItemsDesktopWebsite", "HolyTrinityOfVeryImportantLinks", "LanguageSwitcher", "TopToolbarItemsPublicPage", "title", "running_on_mobile_device", "TopToolbarItemsMobilePublicPage", "TopToolbarItemsDesktopPublicPage", "TypographyLogo", "BottomToolbarItemsDesktopPublicPage", "user_lang", "Button", "i18n", "close", "q", "hp_lang", "toggle_hp_language", "text", "open_help", "e", "cancel_event", "open_intercom", "IconButton", "props", "is_start_page", "BoardTitle", "Menu", "PublicMenuLinkItem", "MenuItem", "Icon", "MenuItemDivider", "target_url"] }