{
  "version": 3,
  "sources": ["../../startup/startup_public_board.ts", "../../../lib.web.resources/local_cache.ts", "../../../lib.web.primitives/eventbus.ts", "../../startup/sync_with_worker.ts", "../../app.tsx", "../../pages/board_page.tsx", "../../board/board_container.tsx", "../../board/board_background.tsx", "../../board/toolbar_items.tsx", "../../../lib.web.board_chooser/board_chooser_menu.tsx", "../../../lib.web.board_chooser/board_chooser_items.tsx", "../../board/toolbar_items_board.tsx", "../../account/highlight_badge.tsx", "../../meet/meet_state.ts", "../../board/board_history.tsx", "../../../lib.web.mdc/chip.tsx", "../../../../node_modules/@material/chips/node_modules/tslib/tslib.es6.js", "../../../../node_modules/@material/chips/chip/constants.ts", "../../../../node_modules/@material/chips/chip/foundation.ts", "../../../../node_modules/@material/chips/chip/component.ts", "../../../../node_modules/@material/dom/announce.ts", "../../../../node_modules/@material/chips/chip-set/constants.ts", "../../../../node_modules/@material/chips/chip-set/foundation.ts", "../../../../node_modules/@material/chips/chip-set/component.ts", "../../board/toggle_sort_boards_alphabetically.tsx", "../../board/toolbar_items_public_board.tsx", "../../../lib.web.mdc/bottom_app_bar.tsx", "../../../../node_modules/@babel/runtime/helpers/esm/extends.js", "../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js", "../../../../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js", "../../../../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js", "../../../../node_modules/dom-helpers/esm/hasClass.js", "../../../../node_modules/dom-helpers/esm/addClass.js", "../../../../node_modules/dom-helpers/esm/removeClass.js", "../../../../node_modules/react-transition-group/esm/CSSTransition.js", "../../../../node_modules/react-transition-group/esm/Transition.js", "../../../../node_modules/react-transition-group/esm/config.js", "../../../../node_modules/react-transition-group/esm/TransitionGroupContext.js", "../../../../node_modules/react-transition-group/esm/utils/reflow.js", "../../debug/debug.tsx", "../../dialogs/dialog_container.tsx", "../../startup/worker_gateway.ts", "../../../lib.shared.search/fuzzy_matcher.ts", "../../../lib.shared.search/board_search.ts", "../../misc/cling_hp.ts", "../../public.ts"],
  "sourcesContent": ["import {init as init_download} from \"../misc/download\"\nimport {\n    Account,\n    AccountAnalytics,\n    Board,\n    BoardType,\n    Client,\n    CLING_ANONYMOUS,\n    create_SessionUID,\n    derive_URLUID,\n    MediaInfo,\n    Locale,\n    ReportUserEventRequest,\n    SyncEntityType,\n    URLInfo,\n    SourceCampaign,\n    SourceCampaignType,\n} from \"@cling/lib.shared.model/model\"\nimport {load_js} from \"@cling/lib.web.lazy_load\"\nimport * as React from \"react\"\nimport {render} from \"preact\"\nimport * as state from \"../state/index\"\nimport {Buffer} from \"buffer\"\nimport {assert, nop, not_null} from \"@cling/lib.shared.utils\"\nimport {init as init_thumbnails} from \"@cling/lib.web.resources/thumbnails\"\nimport {CLING_ANONYMOUS_FULL_ACCOUNT, from_buffer, to_buffer} from \"@cling/lib.shared.model\"\nimport {\n    account_resource,\n    board_info_resource,\n    CurrentUser,\n    init as init_resources,\n} from \"@cling/lib.web.resources\"\nimport {init as init_sync_with_worker} from \"./sync_with_worker\"\nimport type {UID} from \"@cling/lib.shared.types/common\"\nimport {init as init_i18n} from \"@cling/lib.web.i18n\"\nimport {init as init_analytics, parse_source_campaign} from \"@cling/lib.web.analytics\"\nimport {is_avif_supported, is_webp_supported, running_on_mobile_device} from \"@cling/lib.web.utils\"\nimport {report_error} from \"@cling/lib.shared.debug\"\nimport {App} from \"../app\"\nimport type {LocalCache} from \"@cling/lib.web.resources/local_cache\"\nimport {log} from \"@cling/lib.shared.logging\"\nimport {call_function, init as init_faas} from \"@cling/lib.shared.faas\"\nimport {init as init_intercom} from \"../misc/intercom\"\nimport {init_dev, misc_init, preload_assets, set_global_css_classes} from \"./startup_common\"\nimport {set_fatal_error_url_params} from \"@cling/lib.web.utils/fatal_error_url\"\nimport {init_log_event_reporting} from \"./init_logging\"\nimport {query_param} from \"@cling/lib.web.utils/query_param\"\nimport {goto_board, is_cling_hp} from \"../utils\"\nimport {board_name} from \"../board/board_name\"\nimport p_limit from \"p-limit\"\nimport {BoardSearch} from \"@cling/lib.shared.search/board_search\"\nimport {inject_cling_hp_code} from \"../misc/cling_hp\"\nimport {ui_actions} from \"../state/index\"\nimport {safe_session_storage} from \"@cling/lib.web.utils/safe_storage\"\n\nconst report_user_event_queue = p_limit(1)\n\nexport async function start_public_board() {\n    // There is no need to keep this information and we don't want to\n    // raise false positive \"alerts\" by users that we store something in session storage.\n    safe_session_storage.removeItem(\"ttfl_start\")\n    parse_source_campaign()\n    const user_locale = query_param(\"locale\", is_cling_hp() || navigator.language) as Locale\n    cling.public_board_in_app = !!query_param(\"in_app\")\n    const cling_hp_info_page = query_param(\"p\")\n    // Get rid of any parameters or hashes.\n    window.history.pushState(\n        \"\",\n        document.title,\n        `${location.protocol}//${location.host}${location.pathname}`,\n    )\n    const session_uid = create_SessionUID()\n    set_fatal_error_url_params({s: session_uid, a: CLING_ANONYMOUS})\n    const {frontend_only, dev} = init_dev()\n    misc_init({dev})\n    set_global_css_classes()\n    document.body.classList.add(\"public\")\n    if (location.hostname.startsWith(\"dev-\")) {\n        ;(window as any).test_helper = {load_js, goto_board}\n    }\n    if (frontend_only) {\n        await init_frontend_only()\n    }\n    const await_before_render: Promise<void>[] = []\n    preload_assets({await_before_render})\n    const current_user = new CurrentUser({\n        account: CLING_ANONYMOUS_FULL_ACCOUNT.account,\n        account_attributes: CLING_ANONYMOUS_FULL_ACCOUNT.account_attributes,\n        account_analytics: new AccountAnalytics({\n            uid: CLING_ANONYMOUS,\n            version: 1,\n            board_last_seen: [],\n        }),\n        account_settings: CLING_ANONYMOUS_FULL_ACCOUNT.account_settings,\n        account_auth: CLING_ANONYMOUS_FULL_ACCOUNT.account_auth,\n        is_new: false,\n    })\n    await init_i18n(user_locale)\n    current_user.account.locale = user_locale\n    const client = running_on_mobile_device() ? Client.web_app_mobile : Client.web_app_desktop\n    init_analytics({\n        client,\n        client_version: cling.version,\n        current_user_info: () => ({\n            tracking_id: undefined,\n            locale: current_user.account.locale,\n            feature_switches: current_user.account_attributes.feature_switches,\n            team_uids: [],\n            plan: undefined,\n            cohort_date: current_user.account.first_change.date,\n        }),\n        send_user_event:\n            frontend_only ||\n            (is_cling_hp() &&\n                location.hostname !== \"cling.com\" &&\n                // We need events reported for `/../whats-new.html` because a) it serves\n                // a project board and not a board from cling.com and b) we use it in tests.\n                !location.href.endsWith(\"/whats-new.html\"))\n                ? nop\n                : (user_event, browser_env) => {\n                      browser_env.document_referrer = document.referrer.startsWith(\n                          `https://${location.host}`,\n                      )\n                          ? \"\"\n                          : document.referrer\n                      const board_info = user_event.board_uid\n                          ? board_info_resource.read(user_event.board_uid)\n                          : undefined\n                      if (board_info && is_cling_hp()) {\n                          browser_env.document_title = board_name(board_info)\n                      } else if (board_info && board_info.indexed_by_search_engines) {\n                          browser_env.document_title = `[pb] ${board_name(board_info)}`\n                          if (!user_event.source_campaign) {\n                              user_event.source_campaign = new SourceCampaign({\n                                  type: SourceCampaignType.public_board,\n                              })\n                          }\n                      } else {\n                          browser_env.document_title = \"__public_board\"\n                          if (!user_event.source_campaign) {\n                              user_event.source_campaign = new SourceCampaign({\n                                  type: SourceCampaignType.public_board,\n                              })\n                          }\n                      }\n                      report_user_event_queue(() =>\n                          call_function(\n                              new ReportUserEventRequest({\n                                  user_events: [user_event],\n                                  browser_env,\n                              }),\n                          ).catch(report_error),\n                      ).catch(report_error)\n                  },\n        current_board_uid: () => ui_state.current_board_uid,\n    })\n    init_log_event_reporting(client)\n    const faas_trace_provider = () =>\n        `|web_app:${process.env.VERSION}:${CLING_ANONYMOUS}:${session_uid}|`\n    if (!frontend_only) {\n        init_faas({\n            request_modifier: (req) => {\n                req.headers[\"x-cling-faas-trace\"] = faas_trace_provider()\n            },\n            on_401: () => {\n                reload(\"Got a 401\")\n            },\n        })\n    }\n    init_download(faas_trace_provider, () => true)\n    const {caches} = await init_sync_with_worker(\n        // We can safely ignore all updates from worker because there is no worker :-)\n        () => true,\n    )\n    const {request_sync, board} = request_sync_factory(caches)\n    init_resources({\n        current_user,\n        caches,\n        request_sync,\n        wait_for_sync: async (uid, type) => {\n            if (uid !== board.uid) {\n                report_error(\"`wait_for_sync` should not be called for this uid/type\", {uid, type})\n            }\n        },\n    })\n    const board_search = new BoardSearch(\n        (board_uid) => (board_uid === board.uid ? board.board_info : undefined),\n        () => undefined,\n        () => account_resource.read_all(),\n        CLING_ANONYMOUS,\n    )\n    board_search.update(board)\n    const ui_state = state.init({\n        current_user,\n        call_search: async (query) => {\n            return {matches: board_search.search(query), indexed_board_uids: [board.uid]}\n        },\n        publish_patch: () => {\n            // Ignored - we will never send patches.\n        },\n    })\n    ui_state.set_current_board_uid(board.uid, \"latest\")\n    ui_state.desktop_board_chooser_state = \"hidden\"\n    assert(state.current_user, \"`state.current_user` has not been set yet.\")\n    const thumbnail_ext = (await is_avif_supported())\n        ? \".avif\"\n        : (await is_webp_supported())\n          ? \".webp\"\n          : \".png\"\n    await init_thumbnails({\n        thumbnail_url(args) {\n            return not_null(cling.content).thumbnail_url({...args, ext: thumbnail_ext})\n        },\n        image_cache_thrash_index: () => 0,\n        skip_cache: true,\n    })\n    init_intercom({\n        crm_id: undefined,\n        email: undefined,\n        full_name: undefined,\n    })\n    if (is_cling_hp()) {\n        await inject_cling_hp_code({cling_hp_info_page})\n    }\n    await Promise.all(await_before_render)\n    render(React.createElement(App), document.getElementById(\"root\")!)\n    if (cling.content?.highlighted_card_uid) {\n        ui_actions.highlight_card(cling.content.highlighted_card_uid)\n    }\n}\n\nfunction request_sync_factory(caches: Record<SyncEntityType, LocalCache<any, any>>) {\n    // Prefill all caches - then there should not be anything needed to be requested.\n    const content = not_null(cling.content)\n    const board_buf = Buffer.from(content.board_base64, \"base64\")\n    const board = from_buffer(Board, board_buf)\n    caches[SyncEntityType.board].put(board.uid, board_buf, board)\n    const board_info = board.board_info\n    caches[SyncEntityType.board_info].put(board.uid, to_buffer(board_info), board_info)\n    content.board_base64 = \"\"\n    for (const x of content.accounts_base64) {\n        const buf = Buffer.from(x, \"base64\")\n        const account = from_buffer(Account, buf)\n        caches[SyncEntityType.account].put(account.uid, buf, account)\n    }\n    content.accounts_base64 = []\n    for (const x of content.media_infos_base64) {\n        const buf = Buffer.from(x, \"base64\")\n        const media_info = from_buffer(MediaInfo, buf)\n        caches[SyncEntityType.media_info].put(media_info.blob_uid, buf, media_info)\n    }\n    content.media_infos_base64 = []\n    for (const x of content.url_infos_base64) {\n        const buf = Buffer.from(x, \"base64\")\n        const url_info = from_buffer(URLInfo, buf)\n        caches[SyncEntityType.url_info].put(derive_URLUID(url_info.url), buf, url_info)\n    }\n    content.url_infos_base64 = []\n    // Delete the script-tag, we no longer need it.\n    document.getElementById(\"cling-public-content\")?.remove()\n    return {\n        request_sync: (uid: UID, type: SyncEntityType) => {\n            log.warn(\"Unexpected call to `request_sync`\", {uid, type: SyncEntityType[type]})\n        },\n        board,\n    }\n}\n\nasync function init_frontend_only() {\n    ;(window as any).test_helper = (window as any).test_helper || {}\n    await load_js(\n        {src: \"/c/dist/dev_test_helper.js\", type: \"module\"},\n        () => !!(window as any).test_helper.frontend_only,\n    )\n    const data = (window as any).test_helper.frontend_only.frontend_only_test_data(location.search)\n    cling.content = {\n        board_base64: to_buffer(\n            data.boards.find((x: Board) => x.board_type === BoardType.dashboard),\n        ).toString(\"base64\"),\n        accounts_base64: data.accounts.map((x: Account) => to_buffer(x).toString(\"base64\")),\n        media_infos_base64: data.media_infos.map((x: MediaInfo) => to_buffer(x).toString(\"base64\")),\n        url_infos_base64: data.url_infos.map((x: URLInfo) => to_buffer(x).toString(\"base64\")),\n        thumbnail_url: () => {\n            throw new Error(\"Not needed in frontend_only mode\")\n        },\n    }\n}\n", "import {observable, makeObservable, runInAction} from \"mobx\"\nimport {from_buffer} from \"@cling/lib.shared.model\"\nimport {NotFound} from \"@cling/lib.shared.error/errors\"\nimport type {UID} from \"@cling/lib.shared.types/common\"\n\n/**\n * A local cache that does not deal with versions of entities. It simply stores everything it\n * is told to store. The responsibility for feeding correct versions of entities lies outside\n * this cache.\n * This highly reduces complexity and we have a single source of truth.\n */\nexport interface LocalCache<K extends UID, V extends {_to_pb: (args: any) => any}> {\n    /**\n     * An error is thrown if the key does not exist.\n     * Some data might still arrive later. In those cases you have to check with `has()` before.\n     */\n    get(key: K): V\n    has(key: K): boolean\n    put(key: K, pb: Uint8Array, o?: V): void\n    remove(key: K): void\n    values(): Iterable<V>\n    keys(): Iterable<K>\n}\n\ninterface ModelClass<V> {\n    name: string\n    _from_pb: (p: any) => V\n}\n\nexport function default_local_cache<K extends UID, V extends {_to_pb: (args: any) => any}>(\n    type: ModelClass<V>,\n): LocalCache<K, V> {\n    return new LocalCacheImpl({type})\n}\n\nexport class LocalCacheImpl<K extends UID, V extends {_to_pb: (args: any) => any}>\n    implements LocalCache<K, V>\n{\n    private map = new Map<K, {pb?: Uint8Array; o?: V}>()\n    private type: ModelClass<V>\n\n    constructor({type}: {type: ModelClass<V>}) {\n        makeObservable<LocalCacheImpl<K, V>, \"map\">(this, {\n            map: observable.shallow,\n        })\n        this.type = type\n    }\n\n    get(key: K): V {\n        const cache_entry = this.map.get(key)\n        if (!cache_entry) {\n            throw new NotFound(`Entity (${this.type.name}) is not cached`, key)\n        }\n        if (!cache_entry.o) {\n            cache_entry.o = from_buffer(this.type, cache_entry.pb!)\n            cache_entry.pb = undefined\n        }\n        return cache_entry.o\n    }\n\n    has(key: K): boolean {\n        return this.map.has(key)\n    }\n\n    put(key: K, pb: Uint8Array, o?: V) {\n        runInAction(() => this.map.set(key, {pb, o}))\n    }\n\n    remove(key: K) {\n        runInAction(() => this.map.delete(key))\n    }\n\n    *values(): Iterable<V> {\n        for (const key of this.keys()) {\n            yield this.get(key)\n        }\n    }\n\n    keys(): Iterable<K> {\n        return this.map.keys()\n    }\n}\n", "import {nop} from \"@cling/lib.shared.utils\"\n\ntype Listener<T> = (msg: {data: T}) => void\n\n/**\n * An eventbus that will broadcast messages to all other tabs *and* itself.\n */\nexport interface EventBus<T> {\n    postMessage: (msg: T) => void\n    addEventListener: (listener: Listener<T>) => void\n}\n\nexport function blackhole_eventbus<T>(): EventBus<T> {\n    return {\n        postMessage: nop,\n        addEventListener: nop,\n    }\n}\n\nexport function local_eventbus<T>(): EventBus<T> {\n    const listeners: Listener<T>[] = []\n    return {\n        addEventListener: (listener) => {\n            listeners.push(listener)\n        },\n        postMessage: (msg) => {\n            listeners.forEach((x) => x({data: msg}))\n        },\n    }\n}\n", "import {\n    AccountUID,\n    SyncEntityType,\n    BoardUID,\n    Board,\n    BoardInfo,\n    Account,\n    AccountSettings,\n    AccountAttributes,\n    AccountAuth,\n    AccountAnalytics,\n    TeamUID,\n    Team,\n    TeamMembers,\n    URLUID,\n    URLInfo,\n    BlobUID,\n    MediaInfo,\n    ClingErrorCode,\n    OrganizationUID,\n    Organization,\n    OrganizationMembers,\n    MeetStatus,\n} from \"@cling/lib.shared.model\"\nimport type {UID} from \"@cling/lib.shared.types/common\"\nimport {LocalCache, default_local_cache} from \"@cling/lib.web.resources/local_cache\"\nimport {local_eventbus} from \"@cling/lib.web.primitives\"\nimport {\n    not_null,\n    ControllablePromise,\n    new_ControllablePromise,\n    assert_never,\n} from \"@cling/lib.shared.utils\"\nimport {log} from \"@cling/lib.shared.logging\"\nimport {NotFound, Gone, Forbidden, ClingError} from \"@cling/lib.shared.error\"\nimport type {SyncUpdate} from \"@cling/lib.web.worker/worker_interface\"\nimport {runInAction} from \"mobx\"\n\nconst outstanding = new Map<string, ControllablePromise<void> | undefined>()\nlet apply_batch_timeout: any\nlet ignore_sync_update: (msg: SyncUpdate) => boolean\nlet board_sync_paused: BoardUID | undefined = undefined\nconst batch: SyncUpdate[] = []\n\nexport async function init(ignore_sync_update_: typeof ignore_sync_update) {\n    ignore_sync_update = ignore_sync_update_\n    const new_cache = <K extends UID, V extends {_to_pb: (args: any) => any}>(\n        type: any,\n    ): LocalCache<K, V> => {\n        return default_local_cache<K, V>(type) as any\n    }\n    const caches = {\n        [SyncEntityType.board]: new_cache<BoardUID, Board>(Board),\n        [SyncEntityType.board_info]: new_cache<BoardUID, BoardInfo>(BoardInfo),\n        [SyncEntityType.account]: new_cache<AccountUID, Account>(Account),\n        [SyncEntityType.account_settings]: new_cache<AccountUID, AccountSettings>(AccountSettings),\n        [SyncEntityType.account_attributes]: new_cache<AccountUID, AccountAttributes>(\n            AccountAttributes,\n        ),\n        [SyncEntityType.account_auth]: new_cache<AccountUID, AccountAuth>(AccountAuth),\n        [SyncEntityType.account_analytics]: new_cache<AccountUID, AccountAnalytics>(\n            AccountAnalytics,\n        ),\n        [SyncEntityType.organization]: new_cache<OrganizationUID, Organization>(Organization),\n        [SyncEntityType.organization_members]: new_cache<OrganizationUID, OrganizationMembers>(\n            OrganizationMembers,\n        ),\n        [SyncEntityType.team]: new_cache<TeamUID, Team>(Team),\n        [SyncEntityType.team_members]: new_cache<TeamUID, TeamMembers>(TeamMembers),\n        [SyncEntityType.url_info]: new_cache<URLUID, URLInfo>(URLInfo),\n        [SyncEntityType.media_info]: new_cache<BlobUID, MediaInfo>(MediaInfo),\n        [SyncEntityType.meet_status]: new_cache<BoardUID, MeetStatus>(MeetStatus),\n    }\n    const local_cache_sync_event_bus = local_eventbus<SyncUpdate>()\n    local_cache_sync_event_bus.addEventListener(({data: msg}) => {\n        // log.debug(\"Received sync message\", {\n        //     message_type: msg.type,\n        //     uid: msg.uid,\n        //     sync_entity_type: SyncEntityType[msg.sync_entity_type],\n        // })\n        // Debounce this message, so we can reduce the number of MobX triggers being fired.\n        batch.push(msg)\n        if (!apply_batch_timeout) {\n            apply_batch_timeout = setTimeout(() => _apply_batch(caches), 97)\n        }\n    })\n    return {\n        caches,\n        local_cache_sync_event_bus,\n        pause_board_sync: (board_uid: BoardUID | undefined) => (board_sync_paused = board_uid),\n    }\n}\n\nfunction _apply_batch(caches: Record<SyncEntityType, LocalCache<UID, any>>) {\n    try {\n        runInAction(() => {\n            const retain = []\n            try {\n                while (batch.length > 0) {\n                    const msg = batch.shift()!\n                    if (msg.uid === board_sync_paused) {\n                        retain.push(msg)\n                        continue\n                    }\n                    _handle_message(msg, caches)\n                }\n            } finally {\n                batch.push(...retain)\n            }\n        })\n    } finally {\n        apply_batch_timeout = 0\n    }\n    if (batch.length > 0) {\n        clearTimeout(apply_batch_timeout)\n        apply_batch_timeout = setTimeout(() => _apply_batch(caches), 597)\n    }\n}\n\nfunction _handle_message(msg: SyncUpdate, caches: Record<SyncEntityType, LocalCache<UID, any>>) {\n    const sync_key = outstanding_sync_key(msg.sync_entity_type, msg.uid)\n    const promise = outstanding.get(sync_key)\n    const cache = not_null(\n        caches[msg.sync_entity_type],\n        `No cache for ${SyncEntityType[msg.sync_entity_type]}`,\n    )\n    if (ignore_sync_update(msg)) {\n        log.debug(\"Ignoring sync message\", {\n            message_type: msg.type,\n            uid: msg.uid,\n            sync_entity_type: SyncEntityType[msg.sync_entity_type],\n        })\n        return\n    }\n    log.debug(\"Handling sync message\", {\n        message_type: msg.type,\n        uid: msg.uid,\n        sync_entity_type: SyncEntityType[msg.sync_entity_type],\n    })\n    if (msg.type === \"sync_put\") {\n        cache.put(msg.uid, msg.full_pb)\n        promise?.resolve()\n    } else if (msg.type === \"sync_remove\") {\n        cache.remove(msg.uid)\n        promise?.reject(new NotFound(\"Not found or lost access\", msg.uid))\n    } else if (msg.type === \"sync_error\") {\n        cache.remove(msg.uid)\n        if (msg.cling_error_code === ClingErrorCode.not_found) {\n            promise?.reject(new NotFound(\"Not found or lost access\", msg.uid))\n        } else if (msg.cling_error_code === ClingErrorCode.gone) {\n            promise?.reject(new Gone(\"Gone on server\", msg.uid))\n        } else if (msg.cling_error_code === ClingErrorCode.sec_forbidden) {\n            promise?.reject(new Forbidden(\"Access denied or revoked\", {uids: [msg.uid]}))\n        } else {\n            promise?.reject(\n                new ClingError(`Unknown error: ${ClingErrorCode[msg.cling_error_code]}`, 400, {\n                    extra: {cling_error_code: msg.cling_error_code},\n                    uids: [msg.uid],\n                }),\n            )\n        }\n    } else if (msg.type === \"sync_up_to_date\") {\n        promise?.resolve()\n    } else {\n        throw assert_never(msg)\n    }\n    outstanding.delete(sync_key)\n}\n\nexport const request_sync_factory =\n    ({request_sync}: {request_sync: (uid: UID, type: SyncEntityType) => void}) =>\n    (uid: UID, type: SyncEntityType) => {\n        const sync_key = outstanding_sync_key(type, uid)\n        if (outstanding.has(sync_key)) {\n            return\n        }\n        log.debug(`RequestSync ${uid}/${SyncEntityType[type]}`)\n        outstanding.set(sync_key, undefined)\n        request_sync(uid, type)\n    }\n\nexport const wait_for_sync_factory =\n    ({request_sync}: {request_sync: (uid: UID, type: SyncEntityType) => void}) =>\n    async (uid: UID, type: SyncEntityType) => {\n        const sync_key = outstanding_sync_key(type, uid)\n        const cur_outstanding = outstanding.get(sync_key)\n        if (cur_outstanding) {\n            return cur_outstanding\n        }\n        log.debug(`RequestSync ${uid}/${SyncEntityType[type]}`)\n        const promise = new_ControllablePromise<void>()\n        outstanding.set(sync_key, promise)\n        request_sync(uid, type)\n        return promise\n    }\n\nfunction outstanding_sync_key(type: SyncEntityType, uid: UID) {\n    return `${type}:${uid}`\n}\n", "import * as React from \"react\"\nimport {RouteComponentProps, Router} from \"@reach/router/index\"\nimport {Snackbar, StickySnackbar} from \"@cling/lib.web.mdc\"\nimport {BoardPage} from \"./pages/board_page\"\nimport {assert, encode_b62, error_to_string, sleep} from \"@cling/lib.shared.utils\"\nimport {ExportBoardToast, ImportBoardToast, UploadProgressToast} from \"./toasts/index\"\nimport {observer} from \"mobx-react\"\nimport {current_user, ui_actions, ui_state} from \"./state/index\"\nimport {\n    as_BoardUID,\n    as_CardUID,\n    board_uid_type,\n    board_vanity_uri,\n    BoardType,\n    BoardUID,\n    BoardUID_prefix,\n    CardUID,\n    derive_dashboard_uid,\n    is_BoardUID,\n    is_CardUID,\n    PageView,\n    SearchBoardsRequest,\n    SearchBoardsResponse,\n} from \"@cling/lib.shared.model\"\nimport {report_error, report_info} from \"@cling/lib.shared.debug\"\nimport {Debug} from \"./debug/debug\"\nimport {running_on_mobile_device} from \"@cling/lib.web.utils\"\nimport {KeyboardShortcuts} from \"./misc/keyboard_shortcuts\"\nimport {fatal_error_url} from \"@cling/lib.web.utils/fatal_error_url\"\nimport {parse as parse_search_query} from \"@cling/lib.shared.search/search_query_parser\"\nimport {log} from \"@cling/lib.shared.logging\"\nimport {DialogContainer} from \"./dialogs/dialog_container\"\nimport {is_elm_inside_an_active_rich_text_editor} from \"@cling/lib.web.rich_text_editor\"\nimport {ImportDataToast} from \"./import_data/import_data_toast\"\nimport {Buffer} from \"buffer\"\nimport {sensors} from \"./debug/sensors\"\nimport type {UID} from \"@cling/lib.shared.types/common\"\nimport {BoardContext} from \"./board_context\"\nimport {autorun, reaction, runInAction} from \"mobx\"\nimport {board_name} from \"./board/board_name\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {send_message_to_worker} from \"./startup/worker_gateway\"\nimport {classNames} from \"@cling/lib.web.utils\"\nimport {board_info_resource, board_resource} from \"@cling/lib.web.resources\"\nimport {categorize_error} from \"@cling/lib.shared.error\"\nimport {goto_dashboard} from \"./utils\"\nimport {board_history_state} from \"./board/board_history\"\nimport {GlobalDropAndPasteHandler} from \"./misc/global_drop_and_paste\"\nimport {report_user_event} from \"@cling/lib.web.analytics\"\nimport {can_call_faas} from \"@cling/lib.web.auth\"\nimport {call_function} from \"@cling/lib.shared.faas\"\nimport {Card} from \"./card/card\"\nimport {React_lazy, React_suspense} from \"@cling/lib.web.lazy_load/suspense\"\nimport {meet_state} from \"./meet/meet_state\"\nimport {video_player_state} from \"./card/video_player\"\nimport {SimpleTooltipContainer} from \"@cling/lib.web.mdc/simple_tooltip\"\nimport AuthorizeAppPage from \"./pages/authorize_app_page\"\nconst OrganizationsPage = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/team/organizations_page\"),\n)\nconst AddOrganizationPage = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/team/add_organization_page\"),\n)\nconst DragAndDropGhost = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/drag_and_drop\"),\n)\nconst Meet = React_lazy(() =>\n    import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/meet/meet\").then((x) => ({\n        default: x.Meet,\n    })),\n)\nconst VideoPlayerContainer = React_lazy(() => import(\"@cling/client.web_app/card/video_player\"))\nconst ShareTargetPage = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/pages/share_target_page\"),\n)\nconst EmailMarkupPage = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/pages/email_markup_page\"),\n)\nconst CheckoutPage = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/pages/checkout_page\"),\n)\n\nexport class App extends React.Component {\n    private dispose_on_unmount: (() => void)[] = []\n    constructor(props: any) {\n        super(props)\n        if (running_on_mobile_device()) {\n            // Suppress context menus on mobile for the most part as they interfere with\n            // long press.\n            const suppress_context_menu = () => {\n                const listener = (e: any) => {\n                    const target = e.target as HTMLElement\n                    if (\n                        target.tagName === \"INPUT\" ||\n                        is_elm_inside_an_active_rich_text_editor(target)\n                    ) {\n                        return\n                    }\n                    e.stopImmediatePropagation()\n                    e.preventDefault()\n                    e.stopPropagation()\n                }\n                document.addEventListener(\"contextmenu\", listener)\n                return () => window.removeEventListener(\"contextmenu\", listener)\n            }\n            this.dispose_on_unmount.push(suppress_context_menu())\n        } else if (!process.env.F_PUBLIC) {\n            this.dispose_on_unmount.push(\n                autorun(() => {\n                    const {board} = ui_state.current_board\n                    if (!board) {\n                        return\n                    }\n                    const new_vanity = location.pathname.replace(\n                        /(\\/c\\/[^?#]*)/,\n                        board_vanity_uri(board.uid, board_name(board)),\n                    )\n                    window.history.replaceState(\n                        history.state,\n                        \"\",\n                        `${new_vanity}${location.search}${location.hash}`,\n                    )\n                }),\n            )\n        }\n        this.dispose_on_unmount.push(\n            reaction(\n                () => ui_state.highlighted_card_state,\n                (highlighted_card_state) => {\n                    const board = ui_state.current_board.board\n                    if (!highlighted_card_state || !board) {\n                        return\n                    }\n                    if (!board.contains(highlighted_card_state.card_uid)) {\n                        // The card is not on the board, perhaps on trashcan or clipboard.\n                        // Note: If we run on mobile, the trashcan or clipboard will be\n                        // opened as a board directly.\n                        if (!running_on_mobile_device()) {\n                            if (\n                                board_resource.clipboard.contains(highlighted_card_state.card_uid)\n                            ) {\n                                if (!ui_state.clipboard_shown) {\n                                    ui_actions.toggle_clipboard_shown()\n                                }\n                            }\n                            if (board_resource.trashcan.contains(highlighted_card_state.card_uid)) {\n                                if (!ui_state.trashcan_shown) {\n                                    ui_actions.toggle_trashcan_shown()\n                                }\n                            }\n                        }\n                    }\n                },\n                {fireImmediately: true, name: \"app.tsx - highlighted_card_uid\"},\n            ),\n        )\n    }\n\n    componentWillUnmount() {\n        for (const dispose of this.dispose_on_unmount) {\n            dispose()\n        }\n        this.dispose_on_unmount = []\n    }\n\n    async componentDidCatch(error: Error) {\n        if (process.env.NODE_ENV === \"test\") {\n            throw error\n        }\n        report_error(\"App.componentDidCatch() - sending user to /oops\", error)\n        goto(\n            fatal_error_url(\n                \"App.componentDidCatch(...)\\n\\ncomponent stack:\\n\" + error_to_string(error),\n            ),\n        )\n    }\n\n    render() {\n        log.debug(`App.render() -- location.pathname: ${location.pathname}`)\n        return (\n            <>\n                <BoardContext.Provider value={ui_state}>\n                    <Router>\n                        {!process.env.F_PUBLIC && (\n                            <BoardOrCardPage\n                                vanity_text_and_uid={derive_dashboard_uid(current_user.account.uid)}\n                                default\n                            />\n                        )}\n                        {process.env.F_PUBLIC && <PublicBoardWithCustomURI default />}\n                        <BoardOrCardPage path=\"/c/:vanity_text_and_uid\" />\n                        <BoardOrCardPage path=\"/c/:vanity_text_and_uid/comments\" open_comments />\n                        <BoardOrCardPage path=\"/c/:vanity_text_and_uid/:card_uid\" />\n                        <BoardOrCardPage\n                            path=\"/c/:vanity_text_and_uid/:card_uid/comments\"\n                            open_comments\n                        />\n                        {!process.env.F_PUBLIC && <LazyShareTargetPage path=\"/c/share_target\" />}\n                        {!process.env.F_PUBLIC && <LazyCheckoutPage path=\"/c/checkout\" />}\n                        {!process.env.F_PUBLIC && <AuthorizeAppPage path=\"/c/authorize\" />}\n                        {!process.env.F_PUBLIC && (\n                            <LazyEmailMarkupPage path=\"/c/email_markup/:board_uid\" />\n                        )}\n                        {!process.env.F_PUBLIC && <LazyOrganizationsPage path=\"/c/organizations\" />}\n                        {!process.env.F_PUBLIC && (\n                            <LazyOrganizationsPage path=\"/c/organizations/:organization_uid/:uid_or_screen/:filter\" />\n                        )}\n                        {!process.env.F_PUBLIC && (\n                            <LazyAddOrganizationPage path=\"/c/organizations/add\" />\n                        )}\n                    </Router>\n                    <BoardPage />\n                    {!process.env.F_PUBLIC && <LazyDragAndDropGhost />}\n                    {!process.env.F_PUBLIC && <ImportBoardToast />}\n                    {!process.env.F_PUBLIC && <ImportDataToast />}\n                    {!process.env.F_PUBLIC && <ExportBoardToast />}\n                    {!process.env.F_PUBLIC && <UploadProgressToast />}\n                    <DialogContainer />\n                    {!process.env.F_PUBLIC && <NewVersionAvailableHint />}\n                    {!process.env.F_PUBLIC && <KeyboardShortcuts />}\n                    <ObservingSnackbar />\n                    {!process.env.F_PUBLIC && !running_on_mobile_device() && (\n                        <GlobalDropAndPasteHandler />\n                    )}\n                    {!process.env.F_PUBLIC && <LazyMeet />}\n                    <LazyVideoPlayerContainer />\n                    <Debug />\n                </BoardContext.Provider>\n                {!running_on_mobile_device() && <SimpleTooltipContainer />}\n            </>\n        )\n    }\n}\n\nconst BoardOrCardPage = ({\n    vanity_text_and_uid,\n    card_uid,\n    open_comments,\n}: RouteComponentProps<{\n    vanity_text_and_uid: string\n    card_uid?: CardUID\n    open_comments?: boolean\n}>) => {\n    const set_ui_state_current_board_uid = React.useCallback(\n        (props_board_uid?: BoardUID, props_card_uid?: CardUID, props_open_comments?: boolean) => {\n            let board_uid = props_board_uid\n            if (!is_BoardUID(board_uid)) {\n                goto(\"/board_invalid\")\n                return\n            }\n            if (ui_state.current_board_uid === board_uid) {\n                ui_actions.highlight_card(props_card_uid)\n                return\n            }\n            const board_type = board_uid_type(board_uid)\n            if (!running_on_mobile_device()) {\n                // On desktop we do not open these system boards directly but rather open the\n                // corresponding aux column on the dashboard.\n                if ([BoardType.trashcan, BoardType.clipboard].includes(board_type)) {\n                    board_uid = derive_dashboard_uid(current_user.account.uid)\n                }\n            }\n            if (!NProgress.started()) {\n                NProgress.start(0.5, {delay: 200})\n            }\n            // Load the board and react to errors.\n            board_resource\n                .wait_for_sync(board_uid)\n                .then(() => {\n                    NProgress.done()\n                })\n                .catch(async (error) => {\n                    NProgress.done()\n                    if ([403, 404, 410].includes(categorize_error(error).status)) {\n                        goto(\"/board_invalid\")\n                    } else {\n                        if (board_uid_type(as_BoardUID(board_uid)) === BoardType.dashboard) {\n                            goto(fatal_error_url(error))\n                        } else {\n                            report_error(\n                                \"Board could not be synced - redirecting user to dashboard\",\n                                error,\n                            )\n                            goto_dashboard({replace: true}).catch(report_error)\n                        }\n                    }\n                })\n            sensors.expect_board_will_be_shown(board_uid)\n            runInAction(() => {\n                board_history_state.close()\n                if (ui_state.set_current_board_uid(board_uid!, \"latest\")) {\n                    if (!running_on_mobile_device()) {\n                        if (board_type === BoardType.clipboard && !ui_state.clipboard_shown) {\n                            ui_actions.toggle_clipboard_shown()\n                        }\n                        if (board_type === BoardType.trashcan && !ui_state.trashcan_shown) {\n                            ui_actions.toggle_trashcan_shown()\n                        }\n                    }\n                    ui_actions.highlight_card(props_card_uid)\n                    if (props_open_comments && props_card_uid) {\n                        ui_actions.open_comments(props_card_uid)\n                    }\n                }\n            })\n        },\n        [],\n    )\n    const [prev_uid, set_prev_uid] = React.useState<UID>()\n    const uid = vanity_text_and_uid?.includes(\"-\")\n        ? vanity_text_and_uid?.split(\"-\").pop()\n        : vanity_text_and_uid\n    React.useEffect(() => {\n        if (uid === prev_uid) {\n            return\n        }\n        if (!process.env.F_PUBLIC && (is_CardUID(uid) || card_uid)) {\n            const search_card_uid = card_uid || as_CardUID(uid)\n            sensors.expect_board_will_be_shown()\n            board_uid_by_card_uid(\n                search_card_uid,\n                is_BoardUID(uid) ? 8_000 : 30_000,\n                is_BoardUID(uid) ? uid : undefined,\n            )\n                .then((board_uid) => {\n                    if (!board_uid) {\n                        if (is_BoardUID(uid)) {\n                            // Card has not been found - fall back to just viewing the board.\n                            log.debug(\n                                `BoardOrCardPage.render() -- board_uid: ${JSON.stringify(uid)}`,\n                            )\n                            sensors.expect_board_will_be_shown(uid)\n                            ui_state.search_state.end_search()\n                            set_prev_uid(uid)\n                            set_ui_state_current_board_uid(uid)\n                        } else {\n                            goto(\"/board_invalid\")\n                        }\n                        return\n                    }\n                    log.debug(`BoardOrCardPage.render() -- board_uid: ${JSON.stringify(board_uid)}`)\n                    sensors.expect_board_will_be_shown(board_uid)\n                    ui_state.search_state.end_search()\n                    set_prev_uid(uid as UID)\n                    set_ui_state_current_board_uid(board_uid, search_card_uid, open_comments)\n                })\n                .catch((error) => {\n                    report_error(error)\n                    goto(\"/board_invalid\")\n                })\n        } else {\n            let cur_board_uid: BoardUID\n            if (is_BoardUID(uid)) {\n                cur_board_uid = uid\n            } else {\n                // This might be a legacy board-uid.\n                try {\n                    cur_board_uid = as_BoardUID(\n                        BoardUID_prefix + encode_b62(Buffer.from(uid!.substring(2), \"hex\")),\n                    )\n                } catch {\n                    goto(\"/board_invalid\")\n                    return\n                }\n            }\n            log.debug(`BoardOrCardPage.render() -- board_uid: ${JSON.stringify(cur_board_uid)}`)\n            sensors.expect_board_will_be_shown(cur_board_uid)\n            ui_state.search_state.end_search()\n            set_prev_uid(cur_board_uid)\n            set_ui_state_current_board_uid(cur_board_uid, card_uid, open_comments)\n        }\n    }, [uid, prev_uid, card_uid, set_ui_state_current_board_uid, open_comments])\n    useBoardChange()\n    return null\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction PublicBoardWithCustomURI(_: RouteComponentProps) {\n    useBoardChange()\n    return null\n}\n\nfunction LazyCheckoutPage(props: RouteComponentProps) {\n    return (\n        <React_suspense>\n            <CheckoutPage {...props} />\n        </React_suspense>\n    )\n}\n\nfunction LazyEmailMarkupPage(props: RouteComponentProps) {\n    return (\n        <React_suspense>\n            <EmailMarkupPage {...props} />\n        </React_suspense>\n    )\n}\n\nfunction LazyShareTargetPage(props: RouteComponentProps) {\n    return (\n        <React_suspense>\n            <ShareTargetPage {...props} />\n        </React_suspense>\n    )\n}\n\nfunction LazyOrganizationsPage(props: RouteComponentProps) {\n    return (\n        <React_suspense>\n            <OrganizationsPage {...props} />\n        </React_suspense>\n    )\n}\n\nfunction LazyAddOrganizationPage(props: RouteComponentProps) {\n    return (\n        <React_suspense>\n            <AddOrganizationPage {...props} />\n        </React_suspense>\n    )\n}\n\nfunction LazyDragAndDropGhost() {\n    return (\n        <React_suspense>\n            <DragAndDropGhost render_card={Card} />\n        </React_suspense>\n    )\n}\n\nconst LazyMeet = observer(() => {\n    if (!meet_state.board) {\n        return null\n    }\n    return (\n        <React_suspense>\n            <Meet />\n        </React_suspense>\n    )\n})\n\nconst LazyVideoPlayerContainer = observer(() => {\n    if (!video_player_state.url) {\n        return null\n    }\n    return (\n        <React_suspense>\n            <VideoPlayerContainer />\n        </React_suspense>\n    )\n})\n\nlet last_board_uid: BoardUID | undefined\nlet last_board_change_at: Date | undefined\n\nconst useBoardChange = () => {\n    React.useEffect(() => {\n        const current_board_uid = ui_state.current_board_uid\n        if (last_board_uid === current_board_uid || !current_board_uid) {\n            return\n        }\n        if (last_board_change_at && last_board_uid) {\n            ui_actions.update_board_last_seen(last_board_uid, last_board_change_at)\n        }\n        last_board_uid = current_board_uid\n        // Wait until board is synced. It should be displayed then.\n        board_resource\n            .wait_for_sync(current_board_uid)\n            .then((board) => {\n                Snackbar.clear()\n                const event = report_user_event({page_view: new PageView({})})\n                last_board_change_at = event.seen.date\n                last_board_uid = current_board_uid\n                if (\n                    !process.env.F_PUBLIC &&\n                    // Only show the toast if the user has explicit access to the board\n                    // and not just because it is public.\n                    board.acl.entries(current_user.account_attributes).length > 0 &&\n                    ui_state.is_new_or_changed(board.board_info)\n                ) {\n                    Snackbar.show_message(i18n.there_are_new_changes, i18n.show, () =>\n                        board_history_state.open(),\n                    )\n                }\n            })\n            .catch((error) => {\n                // We ignore this error here. The error handling for missing boards is done in\n                // `BoardOrCardPage`.\n                report_info(error)\n            })\n    })\n}\n\nconst ObservingSnackbar = observer(() => (\n    <Snackbar\n        className={classNames(\"app__snackbar\", {\n            \"app__snackbar--with-bottom-app-bar\": ui_state.app_bar_shown,\n        })}\n    />\n))\n\nconst NewVersionAvailableHint = observer(() => {\n    const update_web_app = React.useCallback(() => {\n        const reason = \"New version available, user choose to update\"\n        send_message_to_worker({type: \"reload\", reason})\n        reload(reason)\n    }, [])\n    const {current_board} = React.useContext(BoardContext)\n    if (!ui_state.show_new_version_available) {\n        return null\n    }\n    if (!current_board) {\n        // Only show if we are on a board page.\n        return null\n    }\n    return (\n        <StickySnackbar\n            className={classNames(\"app__snackbar\", {\n                \"app__snackbar--with-bottom-app-bar\": ui_state.app_bar_shown,\n            })}\n            message={i18n.new_version_available}\n            action_button_label={i18n.update}\n            action={update_web_app}\n        />\n    )\n})\n\nasync function board_uid_by_card_uid(\n    card_uid: CardUID,\n    timeout = 30_000,\n    board_uid?: BoardUID,\n): Promise<BoardUID | undefined> {\n    let found_on_server: BoardUID | undefined\n    if (board_uid) {\n        const board = board_resource.read(board_uid)\n        if (board?.contains(card_uid)) {\n            return board.uid\n        }\n    }\n    const query_server = async () => {\n        const {matches} = await call_function(\n            new SearchBoardsRequest({card_uid}),\n            SearchBoardsResponse,\n        )\n        if (matches.length === 1) {\n            found_on_server = matches[0].board_uid\n            return found_on_server\n        }\n        return undefined\n    }\n    // Go and find the board the given card belongs to. Keep in mind that we fetch all boards\n    // in the background so the query should give the right board-uid eventually.\n    let retry_until = Date.now() + timeout\n    let server_queried = false\n    for (;;) {\n        if (can_call_faas() && !server_queried) {\n            server_queried = true\n            query_server().catch(report_error)\n        }\n        if (found_on_server) {\n            return found_on_server\n        }\n        const query = parse_search_query(`card.uid:${card_uid} archived:show`)\n        assert(!query.invalid, \"Query must not be invalid\")\n        const {matches, indexed_board_uids} = await ui_state.search_state.call_search(query)\n        if (matches.length > 0) {\n            const matched_board_uid = matches[0].board_uid\n            assert(\n                is_BoardUID(matched_board_uid),\n                `BoardUID returned by search is not a board-uid: ${matched_board_uid}`,\n            )\n            return matched_board_uid\n        } else if (Date.now() > retry_until) {\n            return undefined\n        }\n        if (indexed_board_uids.length >= board_info_resource.read_all().length) {\n            // All boards are indexed, so we can lower the wait time.\n            retry_until -= 2_000\n        }\n        await sleep(process.env.NODE_ENV === \"test\" ? 10 : 1000)\n    }\n}\n", "import * as React from \"react\"\nimport {observer} from \"mobx-react\"\nimport {Page, TopAppBar} from \"@cling/lib.web.mdc\"\nimport {board_uid_type, BoardInfo, BoardStyleStruct, BoardType} from \"@cling/lib.shared.model\"\nimport {BoardContainer} from \"../board/board_container\"\nimport {BoardBackground} from \"../board/board_background\"\nimport {\n    BottomDesktopToolbars,\n    BottomMobileToolbarItems,\n    TopToolbarItems,\n} from \"../board/toolbar_items\"\nimport {board_info_resource} from \"@cling/lib.web.resources\"\nimport {current_user, ui_actions, ui_state} from \"../state/index\"\nimport {running_on_mobile_device} from \"@cling/lib.web.utils\"\nimport {BoardDrawer} from \"../board/board_drawer\"\nimport {background_style} from \"@cling/lib.web.layout\"\nimport {GlobalBackdrop} from \"../misc/global_backdrop\"\nimport {profiler} from \"../profiler\"\nimport {BottomAppBar} from \"@cling/lib.web.mdc/bottom_app_bar\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {classNames} from \"@cling/lib.web.utils\"\nimport {CSSTransition} from \"react-transition-group\"\nimport {board_name} from \"../board/board_name\"\nimport {DesktopBoardChooser} from \"../board/desktop_board_chooser\"\nimport {BoardContext} from \"../board_context\"\nimport {React_lazy, React_suspense} from \"@cling/lib.web.lazy_load/suspense\"\nimport {board_background_image_url} from \"@cling/lib.web.resources/thumbnails\"\nconst ObservingBoardHistory = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/board/board_history\"),\n)\n\nexport const BoardPage = observer(() => {\n    const [is_drawer_open, set_is_drawer_open] = React.useState(false)\n    const open_drawer = React.useCallback(() => {\n        ui_actions.hide_card_menus()\n        set_is_drawer_open(true)\n    }, [])\n    React.useEffect(() => profiler.on_page_mounted(), [])\n    const {\n        current_board: {board, display_version},\n        current_board_uid,\n    } = React.useContext(BoardContext)\n    const close_drawer = React.useCallback(() => {\n        set_is_drawer_open(false)\n    }, [])\n    const on_drawer_open = React.useCallback(() => {\n        set_is_drawer_open(true)\n    }, [])\n    if (!current_board_uid) {\n        return null\n    }\n    let board_info: BoardInfo | undefined\n    let board_style: BoardStyleStruct\n    if (!board) {\n        // If we have the `BoardInfo`, we can use its `board_style`.\n        board_info = board_info_resource.read(current_board_uid)\n        board_style = board_info?.board_style ?? {\n            background_color: \"\",\n            background_image_url: \"\",\n            background_image_blob: undefined,\n            background_is_pattern: false,\n        }\n    } else {\n        board_style = board!.board_style\n    }\n    const permissions = board ? current_user.board_permissions(board, display_version) : ({} as any)\n    const is_dashboard = board_uid_type(current_board_uid) === BoardType.dashboard\n    let document_title = ui_state.search_state.all_boards\n        ? i18n.search\n        : is_dashboard\n          ? Page.document_title_suffix\n          : board_uid_type(current_board_uid) === BoardType.trashcan\n            ? i18n.trashcan\n            : board_uid_type(current_board_uid) === BoardType.clipboard\n              ? i18n.clipboard\n              : board\n                ? board_name(board)\n                : \"\"\n    const {num_changed_user_boards} = ui_state\n    if (num_changed_user_boards > 0) {\n        document_title = `(${num_changed_user_boards}) ${document_title}`\n    }\n    // We use the `key` attribute to force a re-render once the currently used language\n    // changes ...\n    const top_app_bar = (\n        <TopAppBar\n            more_items={\n                <TopToolbarItems\n                    key={`toolbar_${current_user.account.locale}`}\n                    board_info={board_info || board?.board_info}\n                    is_dashboard={is_dashboard}\n                    permissions={permissions}\n                    open_drawer={open_drawer}\n                />\n            }\n            className={classNames(\"board-page__top-app-bar\", {\n                \"board-page__top-app-bar--shown\": ui_state.app_bar_shown,\n                \"board-page__top-app-bar--hidden\": !ui_state.app_bar_shown,\n                \"board-page__top-app-bar--search\": ui_state.search_state.search_box_open,\n                \"board-page__top-app-bar--desktop-board-chooser-open\":\n                    ui_state.desktop_board_chooser_state !== \"hidden\",\n            })}\n        >\n            <GlobalBackdrop />\n        </TopAppBar>\n    )\n    const bottom_app_bar_shown =\n        !running_on_mobile_device() ||\n        (ui_state.app_bar_shown && !ui_state.search_state.search_box_open)\n    const bottom_app_bar = running_on_mobile_device() ? (\n        <BottomAppBar\n            className={classNames(\"board-page__bottom-app-bar\", {\n                \"board-page__bottom-app-bar--shown\": bottom_app_bar_shown,\n                \"board-page__bottom-app-bar--hidden\": !bottom_app_bar_shown,\n            })}\n        >\n            <BottomMobileToolbarItems\n                is_dashboard={is_dashboard}\n                board_info={board_info || board?.board_info}\n            />\n        </BottomAppBar>\n    ) : undefined\n    const drawer = process.env.F_PUBLIC ? undefined : (\n        <BoardDrawer\n            is_open={is_drawer_open}\n            close={close_drawer}\n            onClose={close_drawer}\n            onOpen={on_drawer_open}\n            header_style={\n                board\n                    ? background_style({\n                          url: board_background_image_url(board.board_style),\n                          color: board.board_style.background_color,\n                          is_pattern: board.board_style.background_is_pattern,\n                      })\n                    : undefined\n            }\n        />\n    )\n    const css_transition_enter_class = process.env.F_PUBLIC\n        ? \"board-page__content--enter-fast\"\n        : \"board-page__content--enter\"\n    // We use the `key` attribute to `<Board .../>` to force a re-render once the board-uid,\n    // the display mode (all boards vs single board), or the currently used language changes ...\n    return (\n        <Page\n            document_title={document_title}\n            top_app_bar={top_app_bar}\n            bottom_app_bar={bottom_app_bar}\n            drawer={drawer}\n            data-test-id=\"BoardPage\"\n        >\n            <BoardBackground\n                key=\"background\"\n                board_uid={current_board_uid}\n                board_style={board_style}\n            />\n            <div key=\"content\" className=\"board-page__container\">\n                {!process.env.F_PUBLIC && !running_on_mobile_device() && <DesktopBoardChooser />}\n                {board && (\n                    <CSSTransition\n                        key={\n                            `${board.uid}_${display_version}_` +\n                            `${ui_state.main_view}_` +\n                            `${current_user.account.locale}`\n                        }\n                        classNames={{\n                            appearActive: css_transition_enter_class,\n                            appearDone: css_transition_enter_class,\n                            enterActive: css_transition_enter_class,\n                            enterDone: css_transition_enter_class,\n                        }}\n                        in\n                        appear\n                        timeout={10}\n                    >\n                        <div key=\"content\" className=\"board-page__content\">\n                            <BoardContainer key=\"board\" />\n                        </div>\n                    </CSSTransition>\n                )}\n                {!process.env.F_PUBLIC && (\n                    <React_suspense>\n                        <ObservingBoardHistory\n                            key={`history:${board?.uid}:${current_user.account.locale}`}\n                        />\n                    </React_suspense>\n                )}\n                {!running_on_mobile_device() && <BottomDesktopToolbars />}\n            </div>\n        </Page>\n    )\n})\n", "import * as React from \"react\"\nimport {observer} from \"mobx-react\"\nimport {BoardContext} from \"../board_context\"\nimport {sensors} from \"../debug/sensors\"\nimport {profiler} from \"../profiler\"\nimport {ui_state} from \"../state/index\"\nimport {assert_never} from \"@cling/lib.shared.utils\"\nimport {log} from \"@cling/lib.shared.logging\"\nimport {React_lazy, React_suspense} from \"@cling/lib.web.lazy_load/suspense\"\nconst CalendarView = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/board/calendar_view\"),\n)\nconst SearchResult = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/search/search_result\"),\n)\nconst ColumnsView = React_lazy(() => import(\"@cling/client.web_app/board/columns_view\"))\n\nexport const BoardContainer = observer(() => {\n    const {\n        current_board: {board, display_version},\n    } = React.useContext(BoardContext)\n    React.useEffect(() => {\n        NProgress.done()\n        if (!board) {\n            return\n        }\n        if (display_version === \"latest\") {\n            profiler.on_board_mounted(board)\n            sensors.board_shown(board)\n        }\n        log.debug(\"Rendering board\", {\n            board_uid: board.uid,\n            display_version,\n            board_version: board.version,\n            view: ui_state.main_view,\n        })\n    }, [board, display_version])\n    if (ui_state.main_view === \"columns\") {\n        if (ui_state.search_state.all_boards) {\n            return (\n                <React_suspense>\n                    <SearchResult key=\"search\" />\n                </React_suspense>\n            )\n        }\n        return (\n            <React_suspense>\n                <ColumnsView />\n            </React_suspense>\n        )\n    } else if (ui_state.main_view === \"calendar\") {\n        return (\n            <React_suspense>\n                <CalendarView />\n            </React_suspense>\n        )\n    } else {\n        throw assert_never(ui_state.main_view)\n    }\n})\n", "import * as React from \"react\"\nimport {observer} from \"mobx-react\"\nimport type {BoardStyleStruct, BoardUID} from \"@cling/lib.shared.model\"\nimport {background_style} from \"@cling/lib.web.layout\"\nimport {board_background_image_url} from \"@cling/lib.web.resources/thumbnails\"\nimport {media_info_resource} from \"@cling/lib.web.resources\"\n\n/**\n * Render the current and the previous board's background and cross-fade.\n */\nexport const BoardBackground = observer(\n    ({board_uid, board_style}: {board_uid: BoardUID; board_style: BoardStyleStruct}) => {\n        const [image_url, set_image_url] = React.useState(\"\")\n        const [prev_board_uid, set_prev_board_uid] = React.useState<undefined | BoardUID>()\n        const timeout = React.useRef<any>()\n        // This is a bit of a hack. We request the media-info only because once it's loaded,\n        // we can be sure that the image is available.\n        if (board_style.background_image_blob) {\n            media_info_resource.read(board_style.background_image_blob.uid)\n        }\n        const url = board_background_image_url(board_style)\n        React.useEffect(() => {\n            clearTimeout(timeout.current)\n            if (!url) {\n                set_image_url(\"\")\n                return\n            }\n            if (board_uid !== prev_board_uid) {\n                // Change the image immediately if the board has changed.\n                set_prev_board_uid(board_uid)\n                set_image_url(url)\n                return\n            }\n            // Otherwise, wait until the image is loaded or an error occurs.\n            const img = new Image()\n            img.onload = () => {\n                clearTimeout(timeout.current)\n                set_image_url(url)\n            }\n            img.onerror = () => {\n                clearTimeout(timeout.current)\n                set_image_url(url)\n            }\n            img.src = url\n            timeout.current = setTimeout(() => {\n                set_image_url(url)\n            }, 5000)\n        }, [url, board_uid, prev_board_uid, board_style])\n        return (\n            <div\n                className=\"board-background\"\n                style={background_style({\n                    url: image_url,\n                    color: board_style.background_color,\n                    is_pattern: board_style.background_is_pattern,\n                })}\n            />\n        )\n    },\n)\n", "import type {BoardInfo} from \"@cling/lib.shared.model\"\nimport {BoardPermissions, board_resource} from \"@cling/lib.web.resources\"\nimport {running_on_mobile_device} from \"@cling/lib.web.utils\"\nimport * as React from \"react\"\nimport {is_cling_hp} from \"../utils\"\nimport {\n    BottomToolbarItemsMobileBoard,\n    TopToolbarItemsDesktopBoard,\n    TopToolbarItemsMobileBoard,\n} from \"./toolbar_items_board\"\nimport {\n    BottomToolbarItemsDesktopPublicBoard,\n    BottomToolbarItemsMobilePublicBoard,\n    TopToolbarItemsDesktopPublicBoard,\n    TopToolbarItemsMobilePublicBoard,\n} from \"./toolbar_items_public_board\"\nimport {\n    BottomToolbarItemsDesktopWebsite,\n    BottomToolbarItemsMobileWebsite,\n    TopToolbarItemsDesktopWebsite,\n    TopToolbarItemsMobileWebsite,\n} from \"./toolbar_items_website\"\n\nexport const TopToolbarItems = ({\n    is_dashboard,\n    board_info,\n    permissions,\n    open_drawer,\n}: {\n    is_dashboard: boolean\n    board_info?: BoardInfo\n    permissions: BoardPermissions\n    open_drawer: () => void\n}) => {\n    if (is_cling_hp()) {\n        return running_on_mobile_device() ? (\n            <TopToolbarItemsMobileWebsite board_info={board_info} />\n        ) : (\n            <TopToolbarItemsDesktopWebsite board_info={board_info} />\n        )\n    }\n    if (process.env.F_PUBLIC) {\n        return running_on_mobile_device() ? (\n            <TopToolbarItemsMobilePublicBoard is_dashboard={is_dashboard} board_info={board_info} />\n        ) : (\n            <TopToolbarItemsDesktopPublicBoard board_info={board_info} />\n        )\n    }\n    return running_on_mobile_device() ? (\n        <TopToolbarItemsMobileBoard\n            is_dashboard={is_dashboard}\n            open_drawer={open_drawer}\n            permissions={permissions}\n            board_info={board_info}\n        />\n    ) : (\n        <TopToolbarItemsDesktopBoard\n            is_dashboard={is_dashboard}\n            open_drawer={open_drawer}\n            permissions={permissions}\n            board_info={board_info}\n        />\n    )\n}\n\nexport const BottomMobileToolbarItems = ({\n    board_info,\n    is_dashboard,\n}: {\n    is_dashboard: boolean\n    board_info?: BoardInfo\n}) => {\n    const board = board_info && board_resource.read(board_info.uid)\n    if (is_cling_hp()) {\n        return <BottomToolbarItemsMobileWebsite board={board} />\n    }\n    if (process.env.F_PUBLIC) {\n        return <BottomToolbarItemsMobilePublicBoard board={board} is_dashboard={is_dashboard} />\n    }\n    return <BottomToolbarItemsMobileBoard board={board} is_dashboard={is_dashboard} />\n}\n\nexport const BottomDesktopToolbars = () => {\n    if (process.env.F_PUBLIC && !!is_cling_hp()) {\n        return <BottomToolbarItemsDesktopWebsite />\n    }\n    if (process.env.F_PUBLIC && !is_cling_hp()) {\n        return <BottomToolbarItemsDesktopPublicBoard />\n    }\n    return null\n}\n", "import * as React from \"react\"\nimport {observer} from \"mobx-react\"\nimport {Menu} from \"@cling/lib.web.mdc\"\nimport type {BoardUID} from \"@cling/lib.shared.model\"\nimport {board_chooser_items, BoardChooserItem} from \"./board_chooser_items\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {running_on_mobile_device} from \"@cling/lib.web.utils\"\n\ninterface Props {\n    anchor: React.ReactElement\n    onSelected: (board_uid: BoardUID) => void\n    onOpen?: () => void\n    onClose?: () => void\n    is_open: boolean\n    sort_boards_alphabetically: boolean\n    items: BoardChooserItem[]\n    first_menu_item?: any\n    \"data-test-id\"?: string\n}\n\nexport const BoardChooserMenu = observer(\n    ({\n        anchor,\n        items,\n        first_menu_item,\n        onOpen,\n        onClose,\n        onSelected,\n        sort_boards_alphabetically,\n        \"data-test-id\": data_test_id,\n        is_open,\n    }: Props) => {\n        const menu_ref = React.createRef<Menu>()\n        React.useEffect(() => {\n            if (is_open) {\n                menu_ref.current?.open_menu()\n            } else {\n                menu_ref.current?.close_menu()\n            }\n        })\n        const menu_items = board_chooser_items({\n            element_type: \"MenuItem\",\n            items,\n            sort_boards_alphabetically,\n        })\n        return (\n            <Menu\n                ref={menu_ref}\n                searchable\n                data-test-id={data_test_id}\n                search_label={i18n.search}\n                search_initial_focus={!running_on_mobile_device()}\n                search_pos={running_on_mobile_device() ? \"bottom\" : \"top\"}\n                first_menu_item={first_menu_item}\n                onOpen={onOpen}\n                onClose={onClose}\n                onSelected={onSelected as any}\n                anchor={\n                    <>\n                        {anchor}\n                        {items.some((x) => x.show_badge) && (\n                            <div className=\"board-chooser__new-or-changed-badge mdcx-badge mdcx-badge--small mdcx-badge--secondary\">\n                                &nbsp;\n                            </div>\n                        )}\n                    </>\n                }\n                className=\"board-chooser__menu\"\n            >\n                {menu_items}\n            </Menu>\n        )\n    },\n)\n", "import * as React from \"react\"\nimport {ListItem, MenuItem, MenuItemDivider, Icon} from \"@cling/lib.web.mdc\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {\n    BoardType,\n    BoardUID,\n    board_uid_type,\n    board_vanity_uri,\n    is_system_board_uid,\n} from \"@cling/lib.shared.model\"\n\nexport type BoardChooserItem = {\n    uid: BoardUID\n    sort: {\n        name: string\n        date_ms: number\n    }\n    user_board_title: any\n    user_board_title_str: string\n    background_style: React.CSSProperties\n    show_badge?: boolean\n    disabled?: boolean\n    selected?: boolean\n    can_be_folded?: boolean\n    archived?: boolean\n    num_participants_in_video_chat: number\n}\n\nexport function board_chooser_items({\n    element_type,\n    items,\n    onSelected,\n    sort_boards_alphabetically,\n}: {\n    element_type: \"ListItem\" | \"MenuItem\"\n    items: BoardChooserItem[]\n    onSelected?: (board_uid: BoardUID) => void\n    sort_boards_alphabetically: boolean\n}) {\n    const system_boards = items.filter((x) => is_system_board_uid(x.uid))\n    const normal_boards = items.filter((x) => !is_system_board_uid(x.uid))\n    // Sort the boards by whether they are archived, can be folded, modification date, or name\n    // based on `sort_boards_alphabetically`.\n    normal_boards.sort((a, b) => {\n        let res = (a.archived ? 1 : 0) - (b.archived ? 1 : 0)\n        if (res !== 0) {\n            return res\n        }\n        if (!sort_boards_alphabetically) {\n            res = (a.can_be_folded ? 1 : 0) - (b.can_be_folded ? 1 : 0)\n            if (res !== 0) {\n                return res\n            }\n            res = b.sort.date_ms - a.sort.date_ms\n            if (res !== 0) {\n                return res\n            }\n        }\n        return a.sort.name.localeCompare(b.sort.name)\n    })\n    const chooser_item = (item: BoardChooserItem, key_prefix = \"\") => {\n        const graphic = (\n            <div className=\"board-chooser-item__icon\" style={item.background_style}>\n                {item.show_badge && (\n                    <div className=\"board-chooser-item__new-or-changed-badge mdcx-badge mdcx-badge--small mdcx-badge--secondary\">\n                        &nbsp;\n                    </div>\n                )}\n            </div>\n        )\n        const board_type = board_uid_type(item.uid)\n        const title =\n            board_type === BoardType.dashboard\n                ? i18n.cling_home_screen\n                : board_type === BoardType.trashcan\n                  ? i18n.trashcan\n                  : board_type === BoardType.clipboard\n                    ? i18n.clipboard\n                    : item.user_board_title\n        const meta =\n            item.num_participants_in_video_chat > 0 ? (\n                <div>\n                    <Icon icon=\"voice_chat\" primary />\n                </div>\n            ) : undefined\n        if (element_type === \"ListItem\") {\n            return (\n                <ListItem\n                    key={key_prefix + item.uid}\n                    className=\"board-chooser-item\"\n                    disabled={item.disabled}\n                    selected={item.selected}\n                    onClick={onSelected ? () => onSelected(item.uid) : undefined}\n                    data-test-id={`BoardChooser_board_${item.uid}`}\n                    data-can-be-folded={item.can_be_folded}\n                    value={item.uid}\n                >\n                    {graphic}\n                    <a\n                        href={board_vanity_uri(item.uid, item.user_board_title_str)}\n                        onClick={on_click}\n                        tabIndex={-1}\n                    >\n                        {title}\n                    </a>\n                    {meta}\n                </ListItem>\n            )\n        }\n        return (\n            <MenuItem\n                key={key_prefix + item.uid}\n                title={title}\n                className=\"board-chooser-item\"\n                disabled={item.disabled}\n                graphic={graphic}\n                value={item.uid}\n                meta={meta}\n                data-test-id={`BoardChooser_board_${item.uid}`}\n                data-can-be-folded={item.can_be_folded}\n            />\n        )\n    }\n    const result = []\n    if (system_boards.length > 0) {\n        // Render in order \"dashboard\", \"clipboard\", \"trashcan\" ...\n        for (const board_type of [BoardType.dashboard, BoardType.clipboard, BoardType.trashcan]) {\n            const item = system_boards.find((x) => board_uid_type(x.uid) === board_type)\n            if (item) {\n                result.push(chooser_item(item))\n            }\n        }\n    }\n    if (normal_boards.length > 0) {\n        if (system_boards.length > 1) {\n            result.push(<MenuItemDivider key=\"regular\" title={i18n.all_your_boards} />)\n        }\n        result.push(...normal_boards.map((x) => chooser_item(x)))\n    }\n    return result\n}\n\nfunction on_click(e: React.MouseEvent) {\n    e.preventDefault()\n    if (e.ctrlKey || e.metaKey) {\n        // Open the board in a new window ...\n        const url = e.currentTarget.getAttribute(\"href\")\n        if (url) {\n            open(url, \"_blank\")\n            e.stopPropagation()\n        }\n    }\n}\n", "import {report_error} from \"@cling/lib.shared.debug\"\nimport {\n    AccessLevel,\n    Board,\n    BoardInfo,\n    BoardType,\n    BoardUID,\n    board_uid_type,\n    derive_clipboard_uid,\n    derive_trashcan_uid,\n    FeatureSwitch,\n} from \"@cling/lib.shared.model\"\nimport {BoardChooserMenu} from \"@cling/lib.web.board_chooser\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {React_lazy, React_suspense} from \"@cling/lib.web.lazy_load/suspense\"\nimport {Button, Icon, IconButton, Menu, MenuItem, MenuItemDivider} from \"@cling/lib.web.mdc\"\nimport {BoardPermissions, board_resource, meet_status_resource} from \"@cling/lib.web.resources\"\nimport {cancel_event, running_on_mobile_device} from \"@cling/lib.web.utils\"\nimport {navigate} from \"@reach/router/index\"\nimport {runInAction} from \"mobx\"\nimport {observer} from \"mobx-react\"\nimport * as React from \"react\"\nimport {useCallback} from \"react\"\nimport {HighlightBadge} from \"../account/highlight_badge\"\nimport {meet_state} from \"../meet/meet_state\"\nimport {GlobalBackdrop} from \"../misc/global_backdrop\"\nimport {open_intercom} from \"../misc/intercom\"\nimport {print_board} from \"../misc/print\"\nimport {current_user, export_board_state, ui_actions, ui_state} from \"../state/index\"\nimport model_actions from \"../state/model_actions\"\nimport {goto_board, goto_dashboard} from \"../utils\"\nimport {\n    board_chooser_board_infos,\n    board_chooser_props,\n    people_chooser_board_infos,\n    people_chooser_props,\n} from \"./board_chooser_props\"\nimport {board_history_state} from \"./board_history\"\nimport {BoardTitle} from \"./board_title\"\nimport {ScrollIndicator} from \"./scroll_indicator\"\nimport {ToggleSortBoardsAlphabetically} from \"./toggle_sort_boards_alphabetically\"\nconst SearchBox = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/search/search_box\"),\n    \"eager_load\",\n)\n\nexport const TopToolbarItemsDesktopBoard = observer(\n    ({\n        open_drawer,\n        permissions,\n        is_dashboard,\n        board_info,\n    }: {\n        is_dashboard: boolean\n        board_info?: BoardInfo\n        permissions: BoardPermissions\n        open_drawer: () => void\n    }) => {\n        const {search_box_open} = ui_state.search_state\n        return (\n            <nav\n                className=\"toolbar-items toolbar-items--top\"\n                onMouseEnter={ui_actions.hide_card_menus}\n            >\n                <div className=\"toolbar-items__top-left\">\n                    {is_dashboard && <MenuDrawerItem open_drawer={open_drawer} />}\n                    {!is_dashboard && <GoToHomeItem icon=\"home\" is_dashboard={is_dashboard} />}\n                    <ToggleDesktopBoardChooserItem board_info={board_info} />\n                    <ToggleMainViewItem />\n                    {!search_box_open && <ClosedSearchItem />}\n                    {search_box_open && (\n                        <div className=\"toolbar-items__search-open-placeholder--desktop\" />\n                    )}\n                </div>\n                {search_box_open && <OpenSearchItem />}\n                {!search_box_open && (\n                    <TitleItem\n                        is_dashboard={is_dashboard}\n                        board_info={board_info}\n                        permissions={permissions}\n                    />\n                )}\n                <div className=\"toolbar-items__top-right-container\">\n                    <div className=\"toolbar-items__top-right\">\n                        {permissions.can_join_video_meeting &&\n                            board_info &&\n                            !ui_state.search_state.all_boards && (\n                                <VideoMeetingButton board_info={board_info} />\n                            )}\n                        {permissions.can_share_board && <ShareItem permissions={permissions} />}\n                        {ui_state.main_view !== \"calendar\" && !ui_state.search_state.all_boards && (\n                            <CollapseItem />\n                        )}\n                        <BoardMenuItem permissions={permissions} board_info={board_info} />\n                    </div>\n                </div>\n            </nav>\n        )\n    },\n)\n\nexport const TopToolbarItemsMobileBoard = observer(\n    ({\n        board_info,\n        permissions,\n        is_dashboard,\n        open_drawer,\n    }: {\n        is_dashboard: boolean\n        board_info?: BoardInfo\n        permissions: BoardPermissions\n        open_drawer: () => void\n    }) => {\n        const {search_box_open} = ui_state.search_state\n        if (search_box_open) {\n            return (\n                <nav className=\"toolbar-items toolbar-items--top toolbar-items--search-open\">\n                    <OpenSearchItem />\n                </nav>\n            )\n        }\n        return (\n            <nav className=\"toolbar-items toolbar-items--top\">\n                {is_dashboard && <MenuDrawerItem open_drawer={open_drawer} />}\n                {!is_dashboard && <GoToHomeItem icon=\"arrow_back\" is_dashboard={is_dashboard} />}\n                <TitleItem\n                    is_dashboard={is_dashboard}\n                    permissions={permissions}\n                    board_info={board_info}\n                />\n                {permissions.can_join_video_meeting && board_info && (\n                    <VideoMeetingButton board_info={board_info} />\n                )}\n                {ui_state.main_view !== \"calendar\" && !ui_state.search_state.all_boards && (\n                    <CollapseItem />\n                )}\n                <BoardMenuItem board_info={board_info} permissions={permissions} />\n            </nav>\n        )\n    },\n)\n\nexport const BottomToolbarItemsMobileBoard = ({\n    board,\n    is_dashboard,\n}: {\n    is_dashboard: boolean\n    board?: Board\n}) => {\n    return (\n        <>\n            {ui_state.main_view === \"columns\" && <ScrollIndicator board={board} />}\n            <nav className=\"toolbar-items toolbar-items--bottom\">\n                <GlobalBackdrop />\n                <GoToHomeItem icon=\"home\" is_dashboard={is_dashboard} />\n                <PeopleChooserItem />\n                <BoardChooserItem />\n                <ToggleMainViewItem />\n                <ClosedSearchItem />\n            </nav>\n        </>\n    )\n}\n\nconst MenuDrawerItem = observer(({open_drawer}: {open_drawer: () => void}) => {\n    return (\n        <IconButton\n            data-test-id=\"ToolbarItems_open_drawer\"\n            icon=\"menu\"\n            onClick={open_drawer}\n            small={!running_on_mobile_device()}\n            tooltip={running_on_mobile_device() ? undefined : i18n.menu}\n        />\n    )\n})\n\nexport const TitleItem = (props: {\n    is_dashboard: boolean\n    board_info?: BoardInfo\n    permissions: {\n        can_change_board_settings: boolean\n    }\n}) => {\n    const {is_dashboard, board_info, permissions} = props\n    return (\n        <BoardTitle\n            board={board_info}\n            title_override={is_dashboard ? \"Cling\" : undefined}\n            className=\"mdc-top-app-bar__title toolbar-items__title\"\n            onClick={\n                permissions.can_change_board_settings && !running_on_mobile_device()\n                    ? ui_actions.open_board_settings_dialog\n                    : undefined\n            }\n            data-test-id=\"ToolbarItems_title\"\n        />\n    )\n}\n\nconst ToggleDesktopBoardChooserItem = observer(\n    ({board_info}: {board_info: BoardInfo | undefined}) => {\n        const toggle = useCallback(\n            () =>\n                ui_actions.toggle_desktop_board_chooser(\n                    ui_state.desktop_board_chooser_state === \"hidden\"\n                        ? board_info?.board_type === BoardType.people\n                            ? \"people\"\n                            : \"boards\"\n                        : \"hidden\",\n                ),\n            [board_info],\n        )\n        const show_badge =\n            people_chooser_board_infos().some((x) => ui_state.is_new_or_changed(x)) ||\n            board_chooser_board_infos(\"dashboard_and_user_boards\", AccessLevel.read).some(\n                (x) => x.is_user_board && ui_state.is_new_or_changed(x),\n            )\n        return (\n            <IconButton\n                icon=\"dashboard\"\n                outlined={ui_state.desktop_board_chooser_state === \"hidden\"}\n                tooltip={i18n.boards}\n                badge={show_badge ? {secondary: true, value: \"\", small: true} : undefined}\n                small={!running_on_mobile_device()}\n                onClick={toggle}\n            />\n        )\n    },\n)\n\nexport const BoardChooserItem = observer(() => {\n    const [is_menu_open, set_is_menu_open] = React.useState(false)\n    const open_menu = React.useCallback(() => {\n        set_is_menu_open(true)\n    }, [])\n    const close_menu = React.useCallback(() => {\n        set_is_menu_open(false)\n    }, [])\n    const on_board_selected = React.useCallback((board_uid: BoardUID) => {\n        const board_type = board_uid_type(board_uid)\n        if (!running_on_mobile_device() && board_type === BoardType.clipboard) {\n            ui_actions.toggle_clipboard_shown()\n        } else if (!running_on_mobile_device() && board_type === BoardType.trashcan) {\n            ui_actions.toggle_trashcan_shown()\n        } else if (board_type === BoardType.dashboard) {\n            goto_dashboard().catch(report_error)\n        } else {\n            goto_board({board_uid}).catch(report_error)\n        }\n    }, [])\n    const add_board = React.useCallback(() => {\n        set_is_menu_open(false)\n        ui_actions.open_add_board_dialog()\n    }, [])\n    const is_regular_board = ui_state.current_board.board?.board_type === BoardType.regular\n    return (\n        <BoardChooserMenu\n            data-test-id=\"ToolbarItems_board_chooser_menu\"\n            is_open={is_menu_open}\n            onOpen={open_menu}\n            onClose={close_menu}\n            anchor={\n                <IconButton\n                    icon=\"dashboard\"\n                    tooltip={i18n.boards}\n                    outlined={!is_regular_board}\n                    data-test-id={\"BoardChooserItem\"}\n                    small={!running_on_mobile_device()}\n                    label={i18n.boards}\n                />\n            }\n            {...board_chooser_props(\"user_boards\")}\n            sort_boards_alphabetically={current_user.account_settings.sort_boards_alphabetically}\n            onSelected={on_board_selected}\n            first_menu_item={\n                <div key=\"add_board\">\n                    <TryClingPro />\n                    <div className=\"mt--1 flex-row justify-content--center\">\n                        <Button\n                            raised\n                            onClick={add_board}\n                            data-test-id=\"BoardChooserItem_add_board\"\n                        >\n                            {i18n.add_a_board}\n                        </Button>\n                    </div>\n                    <div className=\"mt--1 flex-row justify-content--center\">\n                        <ToggleSortBoardsAlphabetically display=\"link\" />\n                    </div>\n                </div>\n            }\n        />\n    )\n})\n\nexport const PeopleChooserItem = observer(() => {\n    const [is_menu_open, set_is_menu_open] = React.useState(false)\n    const open_menu = React.useCallback(() => {\n        set_is_menu_open(true)\n    }, [])\n    const close_menu = React.useCallback(() => {\n        set_is_menu_open(false)\n    }, [])\n    const on_board_selected = React.useCallback((board_uid: BoardUID) => {\n        const board_type = board_uid_type(board_uid)\n        if (board_type === BoardType.dashboard) {\n            goto_dashboard().catch(report_error)\n        } else {\n            goto_board({board_uid}).catch(report_error)\n        }\n    }, [])\n    const add_board = React.useCallback(() => {\n        set_is_menu_open(false)\n        ui_actions.open_start_conversation_dialog()\n    }, [])\n    const is_people_board = ui_state.current_board.board?.board_type === BoardType.people\n    return (\n        <BoardChooserMenu\n            is_open={is_menu_open}\n            onOpen={open_menu}\n            onClose={close_menu}\n            anchor={\n                <IconButton\n                    icon=\"face\"\n                    tooltip={i18n.people}\n                    outlined={!is_people_board}\n                    data-test-id={\"PeopleChooserItem\"}\n                    small={!running_on_mobile_device()}\n                    label={i18n.people}\n                />\n            }\n            {...people_chooser_props()}\n            onSelected={on_board_selected}\n            sort_boards_alphabetically={current_user.account_settings.sort_boards_alphabetically}\n            first_menu_item={\n                <div key=\"add_board\">\n                    <TryClingPro />\n                    <div className=\"mt--1 flex-row justify-content--center\">\n                        <Button raised onClick={add_board}>\n                            {i18n.start_a_conversation}\n                        </Button>\n                    </div>\n                    <div className=\"mt--1 flex-row justify-content--center\">\n                        <ToggleSortBoardsAlphabetically display=\"link\" />\n                    </div>\n                </div>\n            }\n        />\n    )\n})\n\nconst CollapseItem = observer(() => {\n    const toggle_collapse_expand_all = React.useCallback(() => {\n        ui_actions.toggle_collapse_expand_all()\n    }, [])\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            tooltip={i18n.toggle_collapse_expand_all(ui_state.toggle_collapse_expand_all)}\n            small={!running_on_mobile_device()}\n            onClick={toggle_collapse_expand_all}\n        />\n    )\n})\n\nconst ToggleMainViewItem = observer(() => {\n    const is_columns = ui_state.main_view === \"columns\"\n    return (\n        <div>\n            <IconButton\n                icon={is_columns ? \"today\" : \"view_week\"}\n                outlined\n                data-test-id=\"ToggleMainViewItem\"\n                tooltip={is_columns ? i18n.calendar : i18n.columns}\n                small={!running_on_mobile_device()}\n                onClick={ui_actions.toggle_calendar}\n                label={\n                    running_on_mobile_device()\n                        ? is_columns\n                            ? i18n.calendar\n                            : i18n.columns\n                        : undefined\n                }\n            />\n        </div>\n    )\n})\n\nconst ShareItem = observer((props: {permissions: {can_share_board: boolean}}) => {\n    const {permissions} = props\n    const disabled = !permissions.can_share_board || ui_state.search_state.all_boards\n    return (\n        <IconButton\n            disabled={disabled}\n            icon=\"share\"\n            tooltip={i18n.share_this_board}\n            small={!running_on_mobile_device()}\n            data-test-id=\"ShareItem\"\n            onClick={disabled ? undefined : ui_actions.open_share_board_dialog}\n        />\n    )\n})\n\nconst VideoMeetingButton = observer(({board_info}: {board_info: BoardInfo}) => {\n    const on_click = React.useCallback(() => {\n        runInAction(() => {\n            if (!board_info) {\n                return\n            }\n            if (!meet_state.board?.uid) {\n                meet_state.join(board_info)\n            }\n        })\n    }, [board_info])\n    const num_participants = meet_status_resource.read(board_info.uid)?.participants.length ?? 0\n    return (\n        <IconButton\n            onClick={on_click}\n            icon=\"voice_chat\"\n            outlined={meet_state.board?.uid !== board_info.uid}\n            small={!running_on_mobile_device()}\n            tooltip={i18n.join_video_meeting}\n            badge={\n                num_participants > 0\n                    ? {\n                          secondary: true,\n                          value: num_participants,\n                          small: false,\n                      }\n                    : undefined\n            }\n            data-test-id=\"Toolbar_meet\"\n        />\n    )\n})\n\nconst ClosedSearchItem = () => {\n    const open_search_box = React.useCallback((e) => {\n        // It is important to cancel the event because it might bubble up and get caught by\n        // the click-handler registered at document level in `search_box.tsx`.\n        cancel_event(e)\n        ui_state.search_state.open_search_box()\n    }, [])\n    return (\n        <IconButton\n            icon=\"search\"\n            tooltip={`${i18n.search}   /`}\n            onClick={open_search_box}\n            small={!running_on_mobile_device()}\n            label={running_on_mobile_device() ? i18n.search : undefined}\n            data-test-id=\"ToolbarItems_open_search\"\n        />\n    )\n}\n\nexport const OpenSearchItem = () => {\n    const search = React.useCallback((new_query_string: string) => {\n        ui_state.search_state\n            .search(new_query_string)\n            .then(() => {\n                runInAction(() => {\n                    if (new_query_string && ui_state.main_view === \"columns\") {\n                        ui_state.layout_state.scroll_to_column(0)\n                        ui_state.layout_state.scroll_all_columns_to_top()\n                    }\n                    if (ui_state.search_state.is_search_narrowing_down) {\n                        ui_state.highlighted_card_state = undefined\n                    }\n                })\n            })\n            .catch(report_error)\n    }, [])\n    const end_search = React.useCallback(() => {\n        ui_state.search_state.end_search()\n        if (ui_state.main_view === \"columns\") {\n            ui_state.layout_state.scroll_all_columns_to_top()\n            ui_state.layout_state.scroll_to_natural_first_column()\n        }\n    }, [])\n    React.useEffect(() => {\n        ui_actions.fully_expand_all()\n    }, [])\n    return (\n        <div className=\"toolbar-items__search\">\n            <React_suspense>\n                <SearchBox initial_query_string={\"\"} onChange={search} onClose={end_search} />\n            </React_suspense>\n        </div>\n    )\n}\n\nexport const GoToHomeItem = ({\n    icon,\n    is_dashboard,\n}: {\n    is_dashboard: boolean\n    icon: \"home\" | \"arrow_back\"\n}) => {\n    const on_click = React.useCallback(() => {\n        if (ui_state.main_view === \"calendar\") {\n            ui_actions.toggle_calendar()\n        }\n        if (is_dashboard) {\n            ui_state.layout_state.scroll_all_columns_to_top()\n            ui_state.layout_state.scroll_to_natural_first_column()\n        } else {\n            goto_dashboard().catch(report_error)\n        }\n    }, [is_dashboard])\n    return (\n        <IconButton\n            icon={icon}\n            outlined={!is_dashboard}\n            onClick={on_click}\n            small={!running_on_mobile_device()}\n            data-test-id=\"GoToHomeItem\"\n            label={\n                running_on_mobile_device()\n                    ? icon === \"arrow_back\"\n                        ? undefined\n                        : i18n.home\n                    : undefined\n            }\n            tooltip={running_on_mobile_device() ? undefined : i18n.home}\n        />\n    )\n}\n\nexport const BoardMenuItem = observer(\n    ({board_info, permissions}: {board_info?: BoardInfo; permissions: BoardPermissions}) => {\n        const menu_ref = React.useRef<Menu>(null)\n        const export_board = React.useCallback(async () => {\n            if (!board_info || export_board_state.export_pending) {\n                return\n            }\n            export_board_state.start_export(board_info.uid).catch(report_error)\n        }, [board_info])\n        const show_export_board_teaser = React.useCallback(() => {\n            ui_actions.open_pro_feature_teaser_dialog({\n                description: i18n.export_board_lets_you_download,\n            })\n        }, [])\n        const empty_trashcan = React.useCallback(() => {\n            model_actions.empty_trashcan()\n        }, [])\n        const toggle_archived_cards = React.useCallback(() => {\n            if (ui_state.search_state.archived_cards_shown) {\n                ui_actions.show_archived(false).catch(report_error)\n            } else {\n                ui_actions.show_archived(true).catch(report_error)\n            }\n        }, [])\n        const open_trashcan = React.useCallback(() => {\n            if (running_on_mobile_device()) {\n                goto_board({board_uid: derive_trashcan_uid(current_user.account.uid)}).catch(\n                    report_error,\n                )\n            } else {\n                ui_actions.toggle_trashcan_shown()\n            }\n        }, [])\n        const open_clipboard = React.useCallback(() => {\n            if (running_on_mobile_device()) {\n                goto_board({board_uid: derive_clipboard_uid(current_user.account.uid)}).catch(\n                    report_error,\n                )\n            } else {\n                ui_actions.toggle_clipboard_shown()\n            }\n        }, [])\n        const print = React.useCallback(() => {\n            if (!board_info) {\n                return\n            }\n            const board = board_resource.read(board_info.uid)\n            if (!board) {\n                return\n            }\n            print_board(board)\n        }, [board_info])\n        const email_markup = React.useCallback(() => {\n            if (!board_info) {\n                return\n            }\n            navigate(`/c/email_markup/${board_info.uid}`).catch(report_error)\n        }, [board_info])\n        const archive_board = React.useCallback(() => {\n            if (!board_info) {\n                return\n            }\n            model_actions.archive_board(board_info).catch(report_error)\n        }, [board_info])\n        const unarchive_board = React.useCallback(() => {\n            if (!board_info) {\n                return\n            }\n            model_actions.unarchive_board(board_info).catch(report_error)\n        }, [board_info])\n        const remove_board = React.useCallback(() => {\n            if (!board_info) {\n                return\n            }\n            model_actions.remove_board(board_info)\n        }, [board_info])\n        const leave_board = React.useCallback(() => {\n            if (!board_info) {\n                return\n            }\n            model_actions.remove_acl_entry(board_info, current_user.account.uid)\n        }, [board_info])\n        const open_help = React.useCallback(() => open_intercom(\"home\"), [])\n        const is_board_archived = !!(\n            board_info && current_user.account_settings.board_setting(board_info.uid)?.archived\n        )\n        const search_on_all_boards = ui_state.search_state.all_boards\n        const show_share_board = permissions.can_share_board && running_on_mobile_device()\n        const is_trashcan = board_info?.board_type === BoardType.trashcan\n        const is_clipboard = board_info?.board_type === BoardType.clipboard\n        const can_convert_to_email_markup =\n            current_user.has_feature_switch(FeatureSwitch.email_markup) && board_info?.acl.is_public\n        const can_view_history =\n            permissions.can_view_history &&\n            ui_state.main_view !== \"calendar\" &&\n            !search_on_all_boards\n        const can_open_clipboard_trashcan = ui_state.main_view !== \"calendar\"\n        const can_print = ui_state.main_view !== \"calendar\" && !search_on_all_boards\n        const can_copy_board = permissions.can_copy_board && !search_on_all_boards\n        const can_export_board = permissions.can_export_board && !search_on_all_boards\n        const could_export_board_in_cling_pro =\n            permissions.could_export_board_in_cling_pro && !search_on_all_boards\n        const can_open_board_settings =\n            !search_on_all_boards && permissions.can_change_board_settings\n        const can_import_data =\n            permissions.can_import_data && !search_on_all_boards && ui_state.main_view === \"columns\"\n        const can_show_archived_cards =\n            !ui_state.search_state.search_box_open && !search_on_all_boards && board_info\n        const can_archive_board = permissions.can_archive_board && !search_on_all_boards\n        const can_remove_board = permissions.can_remove_board && !search_on_all_boards\n        const can_leave_board = permissions.can_leave_board && !search_on_all_boards\n        return (\n            <Menu\n                className=\"toolbar-items__board-menu\"\n                data-test-id=\"BoardMenu\"\n                ref={menu_ref}\n                anchor={\n                    <IconButton\n                        icon=\"more_vert\"\n                        data-test-id=\"ToolbarItems_board_menu\"\n                        outlined\n                        small={!running_on_mobile_device()}\n                        tooltip={i18n.more}\n                    />\n                }\n            >\n                {can_show_archived_cards && (\n                    <MenuItem\n                        onClick={toggle_archived_cards}\n                        title={\n                            ui_state.search_state.archived_cards_shown\n                                ? i18n.hide_archived_cards\n                                : i18n.show_archived_cards\n                        }\n                        graphic={\n                            <Icon\n                                icon=\"archive\"\n                                outlined={!ui_state.search_state.archived_cards_shown}\n                            />\n                        }\n                    />\n                )}\n                {can_open_board_settings && (\n                    <MenuItem\n                        onClick={ui_actions.open_board_settings_dialog}\n                        title={i18n.board_settings}\n                        graphic={<Icon icon=\"settings\" outlined />}\n                    />\n                )}\n                {can_import_data && (\n                    <MenuItem\n                        onClick={ui_actions.open_import_data_dialog}\n                        title={i18n.import_data}\n                        graphic={<Icon icon=\"input\" outlined />}\n                        data-test-id=\"ToolbarItems_import_data\"\n                    />\n                )}\n                {can_print && (\n                    <MenuItem\n                        onClick={print}\n                        title={i18n.print}\n                        graphic={<Icon icon=\"print\" outlined />}\n                        data-test-id=\"ToolbarItems_print\"\n                    />\n                )}\n                {can_convert_to_email_markup && (\n                    <MenuItem\n                        onClick={email_markup}\n                        title={i18n.email_markup}\n                        graphic={<Icon icon=\"email\" outlined />}\n                    />\n                )}\n                {(can_show_archived_cards ||\n                    can_open_board_settings ||\n                    can_import_data ||\n                    can_print ||\n                    can_convert_to_email_markup) && <MenuItemDivider />}\n                <MenuItem\n                    onClick={open_help}\n                    title={i18n.get_help}\n                    graphic={<Icon icon=\"chat_bubble_outline\" outlined />}\n                />\n                {is_trashcan && <MenuItemDivider />}\n                {is_trashcan && (\n                    <MenuItem\n                        title={i18n.empty_trashcan}\n                        graphic={<Icon icon=\"delete_sweep\" outlined />}\n                        onClick={empty_trashcan}\n                        data-test-id=\"BoardMenu_empty_trashcan\"\n                    />\n                )}\n                {(can_export_board ||\n                    could_export_board_in_cling_pro ||\n                    can_archive_board ||\n                    can_remove_board ||\n                    show_share_board ||\n                    can_view_history ||\n                    can_leave_board) && <MenuItemDivider />}\n                {can_view_history && (\n                    <MenuItem\n                        onClick={board_history_state.toggle}\n                        title={i18n.version_history}\n                        data-test-id=\"BoardMenu_version_history\"\n                        graphic={<Icon icon=\"history\" outlined />}\n                    />\n                )}\n                {show_share_board && (\n                    <MenuItem\n                        graphic={<Icon icon=\"share\" outlined />}\n                        title={i18n.share_board}\n                        data-test-id=\"BoardMenu_share_board\"\n                        onClick={ui_actions.open_share_board_dialog}\n                    />\n                )}\n                {can_copy_board && (\n                    <MenuItem\n                        onClick={ui_actions.open_copy_board_dialog}\n                        data-test-id=\"BoardMenu_copy_board\"\n                        graphic={<Icon icon=\"content_copy\" outlined />}\n                        title={i18n.copy_board}\n                    />\n                )}\n                {(can_export_board || could_export_board_in_cling_pro) && board_info && (\n                    <MenuItem\n                        onClick={can_export_board ? export_board : show_export_board_teaser}\n                        disabled={export_board_state.export_pending}\n                        data-test-id=\"ToolbarItems_export_board\"\n                        graphic={<Icon icon=\"cloud_download\" outlined />}\n                        title={i18n.export_board}\n                        meta={!can_export_board && <HighlightBadge type=\"pro\" />}\n                    />\n                )}\n                {can_archive_board && board_info && (\n                    <MenuItem\n                        title={is_board_archived ? i18n.restore_board : i18n.archive_board}\n                        graphic={\n                            <Icon icon={is_board_archived ? \"unarchive\" : \"archive\"} outlined />\n                        }\n                        onClick={is_board_archived ? unarchive_board : archive_board}\n                    />\n                )}\n                {can_remove_board && board_info && (\n                    <MenuItem\n                        className=\"toolbar-items__dangerous\"\n                        title={i18n.remove_board}\n                        graphic={<Icon icon=\"delete\" outlined />}\n                        onClick={remove_board}\n                    />\n                )}\n                {can_leave_board && board_info && (\n                    <MenuItem\n                        className=\"toolbar-items__dangerous\"\n                        title={i18n.leave_board}\n                        graphic={<Icon icon=\"person_remove\" outlined />}\n                        onClick={leave_board}\n                    />\n                )}\n                {can_open_clipboard_trashcan && (\n                    <>\n                        <MenuItemDivider />\n                        <MenuItem\n                            title={i18n.open_clipboard}\n                            disabled={is_clipboard}\n                            graphic={\n                                <Icon icon=\"content_paste\" outlined={!ui_state.clipboard_shown} />\n                            }\n                            onClick={open_clipboard}\n                            data-test-id=\"BoardMenu_open_clipboard\"\n                        />\n                        <MenuItem\n                            title={i18n.open_trashcan}\n                            disabled={is_trashcan}\n                            graphic={<Icon icon=\"delete\" outlined={!ui_state.trashcan_shown} />}\n                            onClick={open_trashcan}\n                            data-test-id=\"BoardMenu_open_trashcan\"\n                        />\n                    </>\n                )}\n            </Menu>\n        )\n    },\n)\n\nconst TryClingPro = () => {\n    if (\n        current_user.account_attributes.has_pro_features ||\n        // Needed for Obersee.\n        current_user.account_attributes.team_uids.length > 0\n    ) {\n        return null\n    }\n    return (\n        <div className=\"toolbar-items__try-cling-pro full-width flex-col align-items--center\">\n            <Button raised secondary onClick={ui_actions.open_checkout_dialog}>\n                {i18n.try_cling_pro}\n            </Button>\n            <div className=\"font--caption text-align--center mt--1\">{i18n.get_all_the_space}</div>\n        </div>\n    )\n}\n", "import * as React from \"react\"\nimport {classNames} from \"@cling/lib.web.utils\"\nimport {i18n} from \"@cling/lib.web.i18n\"\n\nexport function HighlightBadge({\n    onClick,\n    margin_left,\n    type,\n    overlay,\n    className,\n}: {\n    onClick?: () => void\n    margin_left?: boolean\n    type: \"pro\" | \"new\"\n    overlay?: boolean\n    className?: string\n}) {\n    return (\n        <div\n            className={classNames(\"highlight-badge\", className, {\n                \"highlight-badge--margin-left\": margin_left,\n                \"highlight-badge--pro\": type === \"pro\",\n                \"highlight-badge--new\": type === \"new\",\n                \"highlight-badge--overlay\": overlay,\n            })}\n            onClick={onClick}\n        >\n            {type === \"pro\" && \"PRO\"}\n            {type === \"new\" && i18n.new_.toUpperCase()}\n        </div>\n    )\n}\n", "import {observable, runInAction, makeObservable} from \"mobx\"\nimport type {BoardUID, BoardStyle, AccountUID, BoardType} from \"@cling/lib.shared.model\"\n\ntype MinBoardProps = {\n    uid: BoardUID\n    name: string\n    board_style: BoardStyle\n    board_type: BoardType\n    people_board_shared_with: (current_user: AccountUID) => AccountUID\n}\n\nclass MeetState {\n    private _board: MinBoardProps | undefined = undefined\n\n    join = (board: MinBoardProps) => {\n        runInAction(() => (this._board = board))\n    }\n\n    hangup = () => {\n        runInAction(() => (this._board = undefined))\n    }\n\n    constructor() {\n        makeObservable<MeetState, \"_board\">(this, {\n            _board: observable,\n        })\n    }\n\n    get board() {\n        return this._board\n    }\n}\n\nexport const meet_state = new MeetState()\n", "import * as React from \"react\"\nimport {classNames} from \"@cling/lib.web.utils\"\nimport {observer} from \"mobx-react\"\nimport {BoardContext} from \"../board_context\"\nimport {board_resource} from \"@cling/lib.web.resources\"\nimport {Button, Icon, IconButton, ListItem, SearchableList, Snackbar} from \"@cling/lib.web.mdc\"\nimport {\n    AccountUID,\n    Board,\n    BoardChangelogEntry,\n    BoardPatchOpType,\n    BoardUID,\n    Card,\n    CardChangelogEntry,\n    CardPatchOpType,\n    CLING_BOT,\n    CommentChangelogEntry,\n    CommentPatchOpType,\n} from \"@cling/lib.shared.model\"\nimport {observable, runInAction, makeObservable} from \"mobx\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {PrincipalInfo} from \"../account/principal_info\"\nimport {current_user, ui_actions, ui_state} from \"../state/index\"\nimport {RelDate} from \"../misc/rel_date\"\nimport {can_call_faas} from \"@cling/lib.web.auth\"\nimport {running_on_mobile_device, running_on_phone} from \"@cling/lib.web.utils\"\nimport {cancel_event} from \"@cling/lib.web.utils\"\nimport {not_null} from \"@cling/lib.shared.utils\"\nimport {useCardPermission, useCurrentBoardPermission} from \"../state/permission_hooks\"\nimport {HighlightBadge} from \"../account/highlight_badge\"\nimport {Chip, ChipSet} from \"@cling/lib.web.mdc/chip\"\nimport {CardSynopsisOneLiner} from \"../card/card_synopsis\"\nimport {LoadingIndicator} from \"@cling/lib.web.lazy_load/loading_indicator\"\nimport {GlobalBackdrop} from \"../misc/global_backdrop\"\n\nclass BoardHistoryState {\n    private _open = false\n\n    constructor() {\n        makeObservable<BoardHistoryState, \"_open\">(this, {\n            _open: observable,\n        })\n    }\n\n    get is_open() {\n        return this._open\n    }\n\n    open = () => {\n        if (!ui_state.current_board.board || this._open) {\n            return\n        }\n        if (!can_call_faas()) {\n            Snackbar.show_message(i18n.version_history_is_not_available_are_you_offline)\n        }\n        runInAction(() => {\n            this._open = true\n        })\n    }\n\n    toggle = () => {\n        if (this._open) {\n            this.close()\n        } else {\n            this.open()\n        }\n    }\n\n    close = () => {\n        runInAction(() => {\n            this._open = false\n            ui_state.app_bar_enabled = true\n        })\n        ui_actions.highlight_card(undefined)\n        if (!ui_state.current_board_uid) {\n            return\n        }\n        ui_state.set_current_board_uid(ui_state.current_board_uid, \"latest\")\n    }\n}\n\nexport const board_history_state = new BoardHistoryState()\n\ntype ChangelogData = {\n    account_uid: AccountUID\n    patch_op_type: number\n    board_uid?: BoardUID\n    date: Date\n}\n\nconst important_change_op_types = [\n    CardPatchOpType.AddCard,\n    CommentPatchOpType.AddComment,\n    CardPatchOpType.SetCardFileBlob,\n    CardPatchOpType.SetCardFileFileName,\n    CardPatchOpType.SetCardFileTitle,\n    CardPatchOpType.SetCardLinkTitle,\n    CardPatchOpType.SetCardLinkURL,\n    CardPatchOpType.SetCardNoteSafeHtml,\n    CardPatchOpType.SetCardNoteTitle,\n    CardPatchOpType.SetTaskAssignee,\n    CardPatchOpType.SetTaskStatus,\n    CardPatchOpType.SetTaskDate,\n    CardPatchOpType.PasteCard,\n] as number[]\n\nexport const BoardHistoryList = observer(\n    ({\n        search_visible,\n        show_my_changes,\n        show_important_only,\n        onChange,\n    }: {\n        search_visible?: boolean\n        show_my_changes: boolean\n        show_important_only: boolean\n        onChange?: () => void\n    }) => {\n        const list_ref = React.useRef<SearchableList>(null)\n        const {\n            current_board: {display_version},\n            current_board_uid,\n        } = React.useContext(BoardContext)\n        const [changes, set_changes] = React.useState<\n            {\n                board_version: number\n                card?: Card\n                patch_op_type: CardPatchOpType | CommentPatchOpType | BoardPatchOpType\n                account_uid: AccountUID\n                date: Date\n                desc: React.ReactElement\n            }[]\n        >([])\n        const [show_spinner_for, set_show_spinner_for] = React.useState<number | undefined>()\n        const [show_num, set_show_num] = React.useState(100)\n        const show_more = React.useCallback(() => {\n            set_show_num(Math.min(show_num + 100, changes.length))\n        }, [show_num, changes])\n        const show_version = React.useCallback(\n            (index_str: string) => {\n                if (index_str === \"latest\") {\n                    ui_actions.highlight_card(undefined)\n                    ui_state.set_current_board_uid(not_null(current_board_uid), \"latest\")\n                    return\n                }\n                const change = changes[parseInt(index_str)]\n                ui_actions.hide_all_comments()\n                set_show_spinner_for(change.board_version)\n                ui_actions.fully_expand_all()\n                ui_state.set_current_board_uid(\n                    not_null(current_board_uid),\n                    change.board_version,\n                    () => {\n                        set_show_spinner_for(undefined)\n                        ui_actions.highlight_card(change.card?.uid)\n                        if (change.patch_op_type === CommentPatchOpType.AddComment && change.card) {\n                            // Note: We must use `ui_state.current_board.board` here, because `board`\n                            //       is not up-to-date yet.\n                            const card = not_null(\n                                ui_state.current_board.board?.card(change.card.uid),\n                            )\n                            ui_actions.open_comments(card)\n                        }\n                        onChange?.()\n                    },\n                )\n            },\n            [current_board_uid, changes, onChange],\n        )\n        React.useEffect(() => {\n            // Go to \"latest version\" whenever `show_my_changes` or `show_important_only` changes.\n            ui_actions.highlight_card(undefined)\n            ui_state.set_current_board_uid(not_null(current_board_uid), \"latest\")\n        }, [current_board_uid, show_my_changes, show_important_only])\n        const latest_board = current_board_uid ? board_resource.read(current_board_uid) : undefined\n        const {can_view_whole_history, could_view_whole_history} = useCurrentBoardPermission()\n        React.useEffect(() => {\n            if (!latest_board) {\n                set_changes([])\n                return\n            }\n            set_changes(\n                calculate_changes({\n                    can_view_whole_history,\n                    show_important_only,\n                    show_my_changes,\n                    latest_board,\n                }),\n            )\n            // `latest_board?.last_change` is important, because we want to re-calculate the\n            // list of changes even if the board changes locally only.\n        }, [\n            show_my_changes,\n            show_important_only,\n            latest_board,\n            latest_board?.last_change,\n            can_view_whole_history,\n        ])\n        React.useEffect(() => {\n            if (search_visible) {\n                list_ref.current?.focus_search_field()\n            }\n        }, [search_visible])\n        const {can_edit_card, can_add_comment} = useCardPermission(latest_board?.root)\n        const modifications_allowed_in_latest_version = can_edit_card || can_add_comment\n        const is_plan_free_limit_reached =\n            !can_view_whole_history &&\n            show_num >= changes.length &&\n            changes[changes.length - 1]?.board_version !== 1\n        const are_there_versions_before_20210401 =\n            !is_plan_free_limit_reached &&\n            show_num >= changes.length &&\n            changes[changes.length - 1]?.board_version !== 1 &&\n            (latest_board?.first_change?.date.getTime() ?? 0) < new Date(\"2021-04-01\").getTime()\n        const show_cling_pro_teaser = React.useCallback(\n            () =>\n                ui_actions.open_pro_feature_teaser_dialog({\n                    description: i18n.to_view_versions_older_than_7_days,\n                }),\n            [],\n        )\n        if (!current_board_uid) {\n            return null\n        }\n        return (\n            <SearchableList\n                search_visible={!!search_visible}\n                onSelected={show_version}\n                search_label={i18n.search}\n                className=\"board-history__list\"\n                ref={list_ref}\n                data-test-id=\"BoardHistory_list\"\n            >\n                <ListItem\n                    key=\"latest\"\n                    value=\"latest\"\n                    selected={display_version === \"latest\"}\n                    data-test-id=\"BoardHistory_version_latest\"\n                >\n                    <div className=\"board-history__avatar\">\n                        <Icon\n                            icon={modifications_allowed_in_latest_version ? \"edit\" : \"history\"}\n                            outlined\n                        />\n                    </div>\n                    <div className=\"board-history__entry\">\n                        <div className=\"board-history__entry-header\">\n                            {modifications_allowed_in_latest_version &&\n                                i18n.modifications_are_allowed}\n                        </div>\n                        <div\n                            className=\"board-history__entry-description\"\n                            data-test-id=\"BoardHistory_entry_desc\"\n                        >\n                            {i18n.live}\n                        </div>\n                    </div>\n                </ListItem>\n                {changes\n                    .filter((_, i) => i < show_num)\n                    .map((x, i) => (\n                        <ListItem\n                            key={x.board_version}\n                            value={`${i}`}\n                            selected={x.board_version === display_version}\n                            data-test-id={`BoardHistory_version_${x.board_version}`}\n                        >\n                            <div className=\"board-history__avatar\">\n                                {show_spinner_for === x.board_version && (\n                                    <div className=\"board-history__avatar-loading\">\n                                        <LoadingIndicator delay={500} alpha={1} />\n                                    </div>\n                                )}\n                                <PrincipalInfo\n                                    className={classNames(\"board-history__avatar-pi\", {\n                                        \"board-history__avatar-pi--loading\":\n                                            show_spinner_for === x.board_version,\n                                    })}\n                                    display=\"avatar\"\n                                    uid={x.account_uid}\n                                    data-test-ignore\n                                />\n                                {x.date.getTime() >\n                                    (ui_state.board_last_seen(current_board_uid)?.getTime() ??\n                                        0) && (\n                                    <div className=\"board-history__avatar-badge mdcx-badge mdcx-badge--secondary mdcx-badge--small\" />\n                                )}\n                            </div>\n                            <div className=\"board-history__entry\">\n                                <div className=\"board-history__entry-header\">\n                                    <RelDate date={x.date} />{\" \"}\n                                    <PrincipalInfo\n                                        data-test-ignore\n                                        display=\"full_name_no_teams\"\n                                        uid={x.account_uid}\n                                    />\n                                </div>\n                                {!!x.card && (\n                                    <div\n                                        className=\"board-history__entry-synopsis\"\n                                        data-test-id=\"BoardHistory_entry_synopsis\"\n                                    >\n                                        <CardSynopsisOneLiner card={x.card} />\n                                    </div>\n                                )}\n                                <div\n                                    className=\"board-history__entry-description\"\n                                    data-test-id=\"BoardHistory_entry_desc\"\n                                >\n                                    {x.desc}\n                                </div>\n                            </div>\n                        </ListItem>\n                    ))}\n                {show_num < changes.length && (\n                    <div className=\"width--full\" data-ignore-in-search>\n                        <Button onClick={show_more} className=\"width--full\">\n                            {i18n.show_older_versions}\n                        </Button>\n                    </div>\n                )}\n                {are_there_versions_before_20210401 && (\n                    <div className=\"width--full font-caption mdc-list-item\" data-ignore-in-search>\n                        <div className=\"mt--1\">\n                            {i18n.due_to_technical_reasons_you_cannot_view_changes_made_before}\n                        </div>\n                    </div>\n                )}\n                {is_plan_free_limit_reached && could_view_whole_history && (\n                    <div\n                        className=\"width--full font-caption mdc-list-item\"\n                        data-ignore-in-search\n                        onClick={show_cling_pro_teaser}\n                    >\n                        <div className=\"mt--1\">\n                            {i18n.to_view_versions_older_than_7_days} <HighlightBadge type=\"pro\" />\n                        </div>\n                    </div>\n                )}\n                {/* Just a spacer (for NewElmFAB) */}\n                <div className=\"board-history__list-bottom-spacer\" data-ignore-in-search />\n            </SearchableList>\n        )\n    },\n)\n\nconst BoardHistory = observer(({is_open, on_close}: {is_open: boolean; on_close: () => void}) => {\n    const [search_visible, set_search_visible] = React.useState(false)\n    const {\n        current_board: {board},\n    } = React.useContext(BoardContext)\n    const [show_my_changes, set_show_my_changes] = React.useState<boolean>(\n        board?.acl.all.length === 1,\n    )\n    const [show_important_only, set_show_important_only] = React.useState<boolean>(true)\n    const toggle_show_my_changes = React.useCallback(\n        () => set_show_my_changes(!show_my_changes),\n        [show_my_changes],\n    )\n    const toggle_show_important_only = React.useCallback(\n        () => set_show_important_only(!show_important_only),\n        [show_important_only],\n    )\n    const on_toggle_search = React.useCallback(\n        () => set_search_visible(!search_visible),\n        [search_visible],\n    )\n    const [collapsed, set_collapsed] = React.useState(false)\n    const toggle_collapsed = React.useCallback(() => {\n        set_collapsed(!collapsed)\n        if (!running_on_phone()) {\n            return\n        }\n        runInAction(() => {\n            if (collapsed) {\n                ui_state.app_bar_shown = true\n                ui_state.app_bar_enabled = false\n            } else {\n                ui_state.app_bar_enabled = true\n            }\n        })\n    }, [collapsed])\n    const on_change_mobile = React.useCallback(() => {\n        toggle_collapsed()\n    }, [toggle_collapsed])\n    React.useEffect(() => {\n        if (is_open && running_on_phone()) {\n            runInAction(() => {\n                ui_state.app_bar_shown = true\n                ui_state.app_bar_enabled = false\n            })\n        }\n        if (!is_open) {\n            set_collapsed(false)\n            set_search_visible(false)\n        }\n    }, [is_open])\n    const open_help = React.useCallback(\n        () => ui_actions.open_website_page(\"detail/version-history\"),\n        [],\n    )\n    if (!board) {\n        return null\n    }\n    return (\n        <div\n            className={classNames(\"board-history\", {\n                \"board-history-desktop\": !running_on_phone(),\n                \"board-history-mobile\": running_on_phone(),\n                \"board-history--open\": is_open,\n                \"board-history--collapsed\": is_open && collapsed,\n                \"board-history--app-bar-shown\":\n                    ui_state.app_bar_shown && running_on_mobile_device(),\n            })}\n            onClick={cancel_event}\n        >\n            <GlobalBackdrop />\n            <div className=\"board-history__header\">\n                {running_on_phone() && (\n                    <IconButton\n                        icon={collapsed ? \"expand_less\" : \"expand_more\"}\n                        onClick={toggle_collapsed}\n                        outlined\n                        data-test-id=\"BoardHistory_toggle_collapsed\"\n                        data-test-state={collapsed ? \"collapsed\" : \"expanded\"}\n                    />\n                )}\n                <div\n                    className=\"board-history__header-title\"\n                    onClick={running_on_phone() ? toggle_collapsed : undefined}\n                >\n                    {i18n.version_history}\n                </div>\n                {!collapsed && (\n                    <IconButton\n                        icon={search_visible ? \"search_off\" : \"search\"}\n                        onClick={on_toggle_search}\n                        outlined\n                        small={!running_on_phone()}\n                        tooltip={i18n.search}\n                    />\n                )}\n                <IconButton\n                    onClick={open_help}\n                    small={!running_on_phone()}\n                    icon=\"help\"\n                    outlined\n                    tooltip={i18n.help}\n                />\n                <IconButton\n                    icon=\"close\"\n                    small={!running_on_phone()}\n                    outlined\n                    onClick={on_close}\n                    data-test-id=\"BoardHistory_close\"\n                    tooltip={i18n.close}\n                />\n            </div>\n            {is_open && (\n                <>\n                    <ChipSet className=\"p--1\" onClick={cancel_event}>\n                        <Chip primary={show_my_changes} onClick={toggle_show_my_changes}>\n                            {i18n.my_changes}\n                        </Chip>\n                        <Chip\n                            primary={show_important_only}\n                            onClick={toggle_show_important_only}\n                            data-test-id=\"BoardHistory_important_only\"\n                        >\n                            {i18n.important_only}\n                        </Chip>\n                    </ChipSet>\n                    <BoardHistoryList\n                        key=\"board_history_list\"\n                        search_visible={search_visible}\n                        onChange={running_on_phone() ? on_change_mobile : undefined}\n                        show_my_changes={show_my_changes}\n                        show_important_only={show_important_only}\n                    />\n                </>\n            )}\n        </div>\n    )\n})\n\nexport const ObservingBoardHistory = observer(() => {\n    return (\n        <BoardHistory is_open={board_history_state.is_open} on_close={board_history_state.close} />\n    )\n})\n\nexport function calculate_changes({\n    show_my_changes,\n    show_important_only,\n    can_view_whole_history,\n    latest_board,\n}: {\n    show_my_changes: boolean\n    show_important_only: boolean\n    can_view_whole_history: boolean\n    latest_board: Board\n}) {\n    const changes_map = new Map<\n        number,\n        [\n            CardChangelogEntry | CommentChangelogEntry | BoardChangelogEntry,\n            Card | undefined,\n            boolean /* `card_was_on_board` */,\n            boolean /* `contains_important_change */,\n        ]\n    >()\n    const set_change = (\n        changelog_entry: CardChangelogEntry | CommentChangelogEntry | BoardChangelogEntry,\n        card: Card | undefined,\n        card_was_on_board: boolean,\n    ) => {\n        // If there are multiple operations in a single patch, we have to deterministically\n        // determine, which one we want to display.\n        const precedence = [\n            // SetCardNoteSafeHtml is on top because we will add link-cards whenever the\n            // user enters an URL in a text-card IN THE SAME PATCH. We want to show this as\n            // \"Note text changed\".\n            CardPatchOpType.SetCardNoteSafeHtml,\n            CardPatchOpType.AddCard,\n            CommentPatchOpType.AddComment,\n            BoardPatchOpType.AddSystemBoard,\n            BoardPatchOpType.AddPeopleBoard,\n            BoardPatchOpType.AddBoard,\n            CardPatchOpType.PasteCard,\n            CardPatchOpType.SetCardFileBlob,\n        ]\n        const current = changes_map.get(changelog_entry.board_version)\n        if (current) {\n            let cur_precedence = precedence.indexOf(current[0].patch_op_type)\n            if (cur_precedence === -1) {\n                cur_precedence = Number.MAX_SAFE_INTEGER\n            }\n            let new_precedence = precedence.indexOf(changelog_entry.patch_op_type)\n            if (new_precedence === -1) {\n                new_precedence = Number.MAX_SAFE_INTEGER\n            }\n            if (new_precedence > cur_precedence) {\n                if (important_change_op_types.includes(changelog_entry.patch_op_type)) {\n                    current[3] = true\n                }\n                return\n            }\n        }\n        changes_map.set(changelog_entry.board_version, [\n            changelog_entry,\n            card,\n            card_was_on_board,\n            important_change_op_types.includes(changelog_entry.patch_op_type) || !!current?.[3],\n        ])\n    }\n    const changelog_is_clean_after = new Date(\"2021-04-01T00:00:00Z\").getTime()\n    const seven_days_ago = Date.now() - 7 * 24 * 60 * 60_000\n    const changelog_filter = (x: ChangelogData) =>\n        x.account_uid !== CLING_BOT &&\n        (show_my_changes || x.account_uid !== current_user.account.uid) &&\n        x.patch_op_type !== CardPatchOpType.CardChangelogMigration &&\n        !x.board_uid &&\n        // We cannot use changelog-data from before 2021-04-01 because it may contain\n        // metadata generated on other boards with higher board-version-numbers\n        // See ef25b6e39755d44348d93396c9cad875c0aec829 for the fix to that.\n        // We should re-create all metadata eventually.\n        x.date.getTime() > changelog_is_clean_after &&\n        (can_view_whole_history || x.date.getTime() > seven_days_ago)\n    // Note: BoardPatchOpType.CardChangelogMigration\n    //       equals CardPatchOpType.CardChangelogMigration\n    latest_board.changelog.filter(changelog_filter).forEach((x) => set_change(x, undefined, false))\n    for (const card of latest_board.regular_cards) {\n        let card_was_on_board = false\n        card.changelog\n            .filter(changelog_filter)\n            // Make a copy because `collapse_card_changes` might alter entries.\n            .map((x) => new CardChangelogEntry({...x}))\n            .filter(collapse_card_changes())\n            .forEach((x) => {\n                set_change(x, card, card_was_on_board)\n                card_was_on_board = card_was_on_board || !x.board_uid\n            })\n        for (const comment of card.comments.filter((x) => !x.removed)) {\n            comment.changelog.filter(changelog_filter).forEach((x) => set_change(x, card, false))\n        }\n    }\n    const result = []\n    for (let i = latest_board.version; i > 0; i--) {\n        const change = changes_map.get(i)\n        if (change) {\n            const [x, card, was_on_board_before, has_important_change] = change\n            if (show_important_only && !has_important_change) {\n                continue\n            }\n            result.push({\n                board_version: x.board_version,\n                card,\n                account_uid: x.account_uid,\n                patch_op_type: x.patch_op_type,\n                date: x.date,\n                desc: i18n.changelog_entry(x, was_on_board_before),\n            })\n        }\n    }\n    return result\n}\n\n/**\n * We want to collapse certain changes like consecutive operations on the same card by the same\n * user.\n * Note: Changelog entries are mutated!\n */\nfunction collapse_card_changes() {\n    let last_card_change: CardChangelogEntry | undefined\n    return (x: CardChangelogEntry): boolean => {\n        if (\n            !last_card_change ||\n            last_card_change.date.getTime() < x.date.getTime() - 60_000 ||\n            last_card_change.account_uid !== x.account_uid ||\n            last_card_change.board_version + 1 !== x.board_version\n        ) {\n            last_card_change = x\n            return true\n        }\n        if (last_card_change.patch_op_type === x.patch_op_type) {\n            last_card_change.board_version = x.board_version\n            return false\n        }\n        if (last_card_change.patch_op_type === CardPatchOpType.AddCard) {\n            last_card_change.board_version = x.board_version\n            return false\n        }\n        last_card_change = x\n        return true\n    }\n}\n\nexport default ObservingBoardHistory\n", "import * as React from \"react\"\nimport {MDCChipSet, MDCChip} from \"@material/chips/index\"\nimport {BaseComponent} from \"./base\"\nimport {classNames} from \"@cling/lib.web.utils\"\n\nexport class ChipSet extends BaseComponent<React.HTMLProps<HTMLDivElement>> {\n    focus() {\n        if (this.mdc_component_ref) {\n            this.mdc_component_ref.focus()\n        }\n    }\n\n    render() {\n        const {children, className, ...more_props} = this.props\n        return (\n            <div\n                className={classNames(\"mdc-chip-set\", className)}\n                role=\"grid\"\n                ref={this.add_mdc(MDCChipSet)}\n                {...more_props}\n            >\n                {children}\n            </div>\n        )\n    }\n}\n\ninterface Props {\n    small?: boolean\n    icon?: string\n    trailing?: boolean\n    className?: string\n    primary?: boolean\n}\n\nexport class Chip extends BaseComponent<Props & React.HTMLProps<HTMLDivElement>> {\n    render() {\n        const {icon, primary, trailing, small, children, className, ...other_props} = this.props\n        return (\n            <div\n                className={classNames(\"mdc-chip\", className, {\n                    \"mdcx-chip--small\": small,\n                    \"mdcx-chip--primary\": primary,\n                })}\n                role=\"row\"\n                ref={this.add_mdc(MDCChip)}\n                {...other_props}\n            >\n                <div className=\"mdc-chip__ripple\" />\n                {icon && !trailing && (\n                    <i\n                        className=\"material-icons mdc-chip__icon mdc-chip__icon--leading\"\n                        data-icon={icon}\n                    />\n                )}\n                <span role=\"gridcell\">\n                    <span role=\"button\" className=\"mdc-chip__primary-action\" tabIndex={0}>\n                        <span className=\"mdc-chip__text\">{children}</span>\n                    </span>\n                </span>\n                {icon && trailing && (\n                    <span role=\"gridcell\">\n                        <i\n                            className=\"material-icons mdc-chip__icon mdc-chip__icon--trailing\"\n                            role=\"button\"\n                            data-icon={icon}\n                        />\n                    </span>\n                )}\n            </div>\n        )\n    }\n}\n", "/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n    extendStatics = Object.setPrototypeOf ||\r\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n    return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n    __assign = Object.assign || function __assign(t) {\r\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n            s = arguments[i];\r\n            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n        }\r\n        return t;\r\n    }\r\n    return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n    return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n    return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n    function verb(n) { return function (v) { return step([n, v]); }; }\r\n    function step(op) {\r\n        if (f) throw new TypeError(\"Generator is already executing.\");\r\n        while (_) try {\r\n            if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n            if (y = 0, t) op = [op[0] & 2, t.value];\r\n            switch (op[0]) {\r\n                case 0: case 1: t = op; break;\r\n                case 4: _.label++; return { value: op[1], done: false };\r\n                case 5: _.label++; y = op[1]; op = [0]; continue;\r\n                case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n                default:\r\n                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n                    if (t[2]) _.ops.pop();\r\n                    _.trys.pop(); continue;\r\n            }\r\n            op = body.call(thisArg, _);\r\n        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n    }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n    if (k2 === undefined) k2 = k;\r\n    o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n    for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n    if (!m) return o;\r\n    var i = m.call(o), r, ar = [], e;\r\n    try {\r\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n    }\r\n    catch (error) { e = { error: error }; }\r\n    finally {\r\n        try {\r\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n        }\r\n        finally { if (e) throw e.error; }\r\n    }\r\n    return ar;\r\n}\r\n\r\nexport function __spread() {\r\n    for (var ar = [], i = 0; i < arguments.length; i++)\r\n        ar = ar.concat(__read(arguments[i]));\r\n    return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n    for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n        for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n            r[k] = a[j];\r\n    return r;\r\n};\r\n\r\nexport function __await(v) {\r\n    return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n    return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n    function fulfill(value) { resume(\"next\", value); }\r\n    function reject(value) { resume(\"throw\", value); }\r\n    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n    var i, p;\r\n    return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n    if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n    return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n    if (mod && mod.__esModule) return mod;\r\n    var result = {};\r\n    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n    result.default = mod;\r\n    return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n    return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to get private field on non-instance\");\r\n    }\r\n    return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n    if (!privateMap.has(receiver)) {\r\n        throw new TypeError(\"attempted to set private field on non-instance\");\r\n    }\r\n    privateMap.set(receiver, value);\r\n    return value;\r\n}\r\n", null, null, null, null, null, null, null, "import * as React from \"react\"\nimport {report_error} from \"@cling/lib.shared.debug\"\nimport {call_function} from \"@cling/lib.shared.faas\"\nimport {\n    create_PatchUID,\n    PatchAccountSettings,\n    PatchFullAccountRequest,\n    TriState,\n} from \"@cling/lib.shared.model\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {runInAction} from \"mobx\"\nimport {current_user} from \"../state/index\"\nimport {observer} from \"mobx-react\"\nimport {IconButton} from \"@cling/lib.web.mdc\"\n\nexport const ToggleSortBoardsAlphabetically = observer(({display}: {display: \"icon\" | \"link\"}) => {\n    const {sort_boards_alphabetically} = current_user.account_settings\n    const on_click = React.useCallback(() => {\n        runInAction(\n            () =>\n                (current_user.account_settings.sort_boards_alphabetically =\n                    !sort_boards_alphabetically),\n        )\n        call_function(\n            new PatchFullAccountRequest({\n                patch_uid: create_PatchUID(),\n                patch_account_settings: new PatchAccountSettings({\n                    sort_boards_alphabetically: sort_boards_alphabetically\n                        ? TriState.false\n                        : TriState.true,\n                }),\n            }),\n        ).catch(report_error)\n    }, [sort_boards_alphabetically])\n    if (display === \"link\") {\n        return (\n            <a className=\"action\" onClick={on_click}>\n                {sort_boards_alphabetically\n                    ? i18n.recently_modified_first\n                    : i18n.sort_alphabetically}\n            </a>\n        )\n    } else {\n        return (\n            <IconButton\n                icon=\"sort_by_alpha\"\n                small\n                onClick={on_click}\n                outlined\n                className={sort_boards_alphabetically ? \"\" : \"mdcx-icon--not-pressed\"}\n                tooltip={\n                    sort_boards_alphabetically\n                        ? i18n.sort_alphabetically\n                        : i18n.recently_modified_first\n                }\n                data-test-id=\"ToggleSortBoardsAlphabetically\"\n            />\n        )\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 {board_resource} from \"@cling/lib.web.resources\"\nimport {observer} from \"mobx-react\"\nimport * as React from \"react\"\nimport {open_intercom} from \"../misc/intercom\"\nimport {print_board} from \"../misc/print\"\nimport {ui_actions, ui_state} from \"../state/index\"\nimport {BoardTitle} from \"./board_title\"\nimport {ScrollIndicator} from \"./scroll_indicator\"\nimport {\n    CollapseItem,\n    SignUp,\n    HolyTrinityOfVeryImportantLinks,\n    PublicMenuLinkItem,\n    TypographyLogo,\n} from \"./toolbar_items_common\"\n\nexport const TopToolbarItemsDesktopPublicBoard = ({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            onMouseEnter={ui_actions.hide_card_menus}\n            data-test-id=\"TopToolbarItems\"\n        >\n            <TitleItem is_dashboard={false} board_info={board_info} />\n            {!in_app && <SignUp raised secondary />}\n            {in_app && <ReturnToApp />}\n            <CollapseItem />\n        </nav>\n    )\n}\n\nexport const BottomToolbarItemsDesktopPublicBoard = observer(() => {\n    const in_app = !!cling.public_board_in_app\n    return (\n        <nav\n            className=\"toolbar-items-public-bottom-desktop-right\"\n            onMouseEnter={ui_actions.hide_card_menus}\n            data-test-id=\"BottomToolbarItems\"\n        >\n            <TypographyLogo in_app={in_app} className=\"toolbar-items__typography-logo--small\" />\n            <HolyTrinityOfVeryImportantLinks />\n        </nav>\n    )\n})\n\nexport const TopToolbarItemsMobilePublicBoard = ({\n    is_dashboard,\n    board_info,\n}: {\n    is_dashboard: boolean\n    board_info?: BoardInfo\n}) => {\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 is_dashboard={is_dashboard} board_info={board_info} />\n            <PublicBoardMenuItem\n                board={board_info && board_resource.read(board_info.uid)}\n                in_app={in_app}\n            />\n        </nav>\n    )\n}\n\nexport const BottomToolbarItemsMobilePublicBoard = observer(\n    (props: {is_dashboard: boolean; board?: Board}) => {\n        const in_app = !!cling.public_board_in_app\n        const show_scroll_indicator = !ui_state.layout_state.all_columns_fully_visible\n        return (\n            <>\n                {show_scroll_indicator && <ScrollIndicator board={props.board} />}\n                <nav\n                    className=\"toolbar-items toolbar-items--public toolbar-items--bottom\"\n                    data-test-id=\"BottomToolbarItems\"\n                >\n                    <TypographyLogo in_app={in_app} />\n                    <div className=\"toolbar-items__flex\" />\n                    {!in_app && <SignUp raised secondary />}\n                    {in_app && <ReturnToApp />}\n                </nav>\n            </>\n        )\n    },\n)\n\nconst ReturnToApp = () => {\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 TitleItem = ({is_dashboard, board_info}: {is_dashboard: boolean; board_info?: BoardInfo}) => (\n    <BoardTitle\n        board={board_info}\n        title_override={is_dashboard ? \"Cling\" : undefined}\n        className=\"mdc-top-app-bar__title toolbar-items__title toolbar-items__title--left\"\n        data-test-id=\"ToolbarItems_title\"\n    />\n)\n\nconst PublicBoardMenuItem = observer(({board, in_app}: {board?: Board; in_app: boolean}) => {\n    const print = React.useCallback(() => {\n        if (!board) {\n            return\n        }\n        print_board(board)\n    }, [board])\n    const open_help = React.useCallback(() => open_intercom(\"home\"), [])\n    const toggle_collapse_expand_all = React.useCallback(() => {\n        ui_actions.toggle_collapse_expand_all()\n    }, [])\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            {!!board && (\n                <MenuItem\n                    graphic={\n                        <Icon\n                            icon={\n                                ui_state.toggle_collapse_expand_all ? \"view_stream\" : \"view_module\"\n                            }\n                        />\n                    }\n                    onClick={toggle_collapse_expand_all}\n                    title={i18n.toggle_collapse_expand_all(ui_state.toggle_collapse_expand_all)}\n                />\n            )}\n            {!!board && (\n                <MenuItem\n                    onClick={print}\n                    title={i18n.print}\n                    graphic={<Icon icon=\"print\" outlined />}\n                    data-test-id=\"ToolbarItems_print\"\n                />\n            )}\n            {!!board && <MenuItemDivider />}\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}\n                        uri=\"privacy.html\"\n                    />\n                    <PublicMenuLinkItem icon=\"info\" title={i18n.imprint} uri=\"about.html\" />\n                </>\n            )}\n        </Menu>\n    )\n})\n", "import * as React from \"react\"\n\nimport {classNames} from \"@cling/lib.web.utils\"\n\ntype Props = React.HTMLAttributes<HTMLHeadElement> & {\n    children?: any\n    className?: string\n}\n\n/**\n * We have to fake this, because there is no component yet in MDC.\n */\nexport class BottomAppBar extends React.PureComponent<Props> {\n    render() {\n        const {children, className, ...html_props} = this.props\n        return (\n            <footer\n                className={classNames(\n                    \"mdc-top-app-bar mdc-top-app-bar--fixed mdcx-bottom-app-bar\",\n                    className,\n                )}\n                {...html_props}\n            >\n                <div className=\"mdc-top-app-bar__row\">{children}</div>\n            </footer>\n        )\n    }\n}\n", "export default function _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}", "export default function _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}", "export default function _setPrototypeOf(o, p) {\n  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n    o.__proto__ = p;\n    return o;\n  };\n  return _setPrototypeOf(o, p);\n}", "import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n  subClass.prototype = Object.create(superClass.prototype);\n  subClass.prototype.constructor = subClass;\n  setPrototypeOf(subClass, superClass);\n}", "export default function hasClass(element, className) {\n  if (element.classList) return !!className && element.classList.contains(className);\n  return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}", "import hasClass from './hasClass';\nexport default function addClass(element, className) {\n  if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}", "function replaceClassName(origClass, classToRemove) {\n  return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n\nexport default function removeClass(element, className) {\n  if (element.classList) {\n    element.classList.remove(className);\n  } else if (typeof element.className === 'string') {\n    ;\n    element.className = replaceClassName(element.className, className);\n  } else {\n    element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n  }\n}", "import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport addOneClass from 'dom-helpers/addClass';\nimport removeOneClass from 'dom-helpers/removeClass';\nimport React from 'react';\nimport Transition from './Transition';\nimport { classNamesShape } from './utils/PropTypes';\nimport { forceReflow } from './utils/reflow';\n\nvar _addClass = function addClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return addOneClass(node, c);\n  });\n};\n\nvar removeClass = function removeClass(node, classes) {\n  return node && classes && classes.split(' ').forEach(function (c) {\n    return removeOneClass(node, c);\n  });\n};\n/**\n * A transition component inspired by the excellent\n * [ng-animate](https://docs.angularjs.org/api/ngAnimate) library, you should\n * use it if you're using CSS transitions or animations. It's built upon the\n * [`Transition`](https://reactcommunity.org/react-transition-group/transition)\n * component, so it inherits all of its props.\n *\n * `CSSTransition` applies a pair of class names during the `appear`, `enter`,\n * and `exit` states of the transition. The first class is applied and then a\n * second `*-active` class in order to activate the CSS transition. After the\n * transition, matching `*-done` class names are applied to persist the\n * transition state.\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <CSSTransition in={inProp} timeout={200} classNames=\"my-node\">\n *         <div>\n *           {\"I'll receive my-node-* classes\"}\n *         </div>\n *       </CSSTransition>\n *       <button type=\"button\" onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the `in` prop is set to `true`, the child component will first receive\n * the class `example-enter`, then the `example-enter-active` will be added in\n * the next tick. `CSSTransition` [forces a\n * reflow](https://github.com/reactjs/react-transition-group/blob/5007303e729a74be66a21c3e2205e4916821524b/src/CSSTransition.js#L208-L215)\n * between before adding the `example-enter-active`. This is an important trick\n * because it allows us to transition between `example-enter` and\n * `example-enter-active` even though they were added immediately one after\n * another. Most notably, this is what makes it possible for us to animate\n * _appearance_.\n *\n * ```css\n * .my-node-enter {\n *   opacity: 0;\n * }\n * .my-node-enter-active {\n *   opacity: 1;\n *   transition: opacity 200ms;\n * }\n * .my-node-exit {\n *   opacity: 1;\n * }\n * .my-node-exit-active {\n *   opacity: 0;\n *   transition: opacity 200ms;\n * }\n * ```\n *\n * `*-active` classes represent which styles you want to animate **to**, so it's\n * important to add `transition` declaration only to them, otherwise transitions\n * might not behave as intended! This might not be obvious when the transitions\n * are symmetrical, i.e. when `*-enter-active` is the same as `*-exit`, like in\n * the example above (minus `transition`), but it becomes apparent in more\n * complex transitions.\n *\n * **Note**: If you're using the\n * [`appear`](http://reactcommunity.org/react-transition-group/transition#Transition-prop-appear)\n * prop, make sure to define styles for `.appear-*` classes as well.\n */\n\n\nvar CSSTransition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(CSSTransition, _React$Component);\n\n  function CSSTransition() {\n    var _this;\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;\n    _this.appliedClasses = {\n      appear: {},\n      enter: {},\n      exit: {}\n    };\n\n    _this.onEnter = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument[0],\n          appearing = _this$resolveArgument[1];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, appearing ? 'appear' : 'enter', 'base');\n\n      if (_this.props.onEnter) {\n        _this.props.onEnter(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntering = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument2 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument2[0],\n          appearing = _this$resolveArgument2[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.addClass(node, type, 'active');\n\n      if (_this.props.onEntering) {\n        _this.props.onEntering(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onEntered = function (maybeNode, maybeAppearing) {\n      var _this$resolveArgument3 = _this.resolveArguments(maybeNode, maybeAppearing),\n          node = _this$resolveArgument3[0],\n          appearing = _this$resolveArgument3[1];\n\n      var type = appearing ? 'appear' : 'enter';\n\n      _this.removeClasses(node, type);\n\n      _this.addClass(node, type, 'done');\n\n      if (_this.props.onEntered) {\n        _this.props.onEntered(maybeNode, maybeAppearing);\n      }\n    };\n\n    _this.onExit = function (maybeNode) {\n      var _this$resolveArgument4 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument4[0];\n\n      _this.removeClasses(node, 'appear');\n\n      _this.removeClasses(node, 'enter');\n\n      _this.addClass(node, 'exit', 'base');\n\n      if (_this.props.onExit) {\n        _this.props.onExit(maybeNode);\n      }\n    };\n\n    _this.onExiting = function (maybeNode) {\n      var _this$resolveArgument5 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument5[0];\n\n      _this.addClass(node, 'exit', 'active');\n\n      if (_this.props.onExiting) {\n        _this.props.onExiting(maybeNode);\n      }\n    };\n\n    _this.onExited = function (maybeNode) {\n      var _this$resolveArgument6 = _this.resolveArguments(maybeNode),\n          node = _this$resolveArgument6[0];\n\n      _this.removeClasses(node, 'exit');\n\n      _this.addClass(node, 'exit', 'done');\n\n      if (_this.props.onExited) {\n        _this.props.onExited(maybeNode);\n      }\n    };\n\n    _this.resolveArguments = function (maybeNode, maybeAppearing) {\n      return _this.props.nodeRef ? [_this.props.nodeRef.current, maybeNode] // here `maybeNode` is actually `appearing`\n      : [maybeNode, maybeAppearing];\n    };\n\n    _this.getClassNames = function (type) {\n      var classNames = _this.props.classNames;\n      var isStringClassNames = typeof classNames === 'string';\n      var prefix = isStringClassNames && classNames ? classNames + \"-\" : '';\n      var baseClassName = isStringClassNames ? \"\" + prefix + type : classNames[type];\n      var activeClassName = isStringClassNames ? baseClassName + \"-active\" : classNames[type + \"Active\"];\n      var doneClassName = isStringClassNames ? baseClassName + \"-done\" : classNames[type + \"Done\"];\n      return {\n        baseClassName: baseClassName,\n        activeClassName: activeClassName,\n        doneClassName: doneClassName\n      };\n    };\n\n    return _this;\n  }\n\n  var _proto = CSSTransition.prototype;\n\n  _proto.addClass = function addClass(node, type, phase) {\n    var className = this.getClassNames(type)[phase + \"ClassName\"];\n\n    var _this$getClassNames = this.getClassNames('enter'),\n        doneClassName = _this$getClassNames.doneClassName;\n\n    if (type === 'appear' && phase === 'done' && doneClassName) {\n      className += \" \" + doneClassName;\n    } // This is to force a repaint,\n    // which is necessary in order to transition styles when adding a class name.\n\n\n    if (phase === 'active') {\n      if (node) forceReflow(node);\n    }\n\n    if (className) {\n      this.appliedClasses[type][phase] = className;\n\n      _addClass(node, className);\n    }\n  };\n\n  _proto.removeClasses = function removeClasses(node, type) {\n    var _this$appliedClasses$ = this.appliedClasses[type],\n        baseClassName = _this$appliedClasses$.base,\n        activeClassName = _this$appliedClasses$.active,\n        doneClassName = _this$appliedClasses$.done;\n    this.appliedClasses[type] = {};\n\n    if (baseClassName) {\n      removeClass(node, baseClassName);\n    }\n\n    if (activeClassName) {\n      removeClass(node, activeClassName);\n    }\n\n    if (doneClassName) {\n      removeClass(node, doneClassName);\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        _ = _this$props.classNames,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"classNames\"]);\n\n    return /*#__PURE__*/React.createElement(Transition, _extends({}, props, {\n      onEnter: this.onEnter,\n      onEntered: this.onEntered,\n      onEntering: this.onEntering,\n      onExit: this.onExit,\n      onExiting: this.onExiting,\n      onExited: this.onExited\n    }));\n  };\n\n  return CSSTransition;\n}(React.Component);\n\nCSSTransition.defaultProps = {\n  classNames: ''\n};\nCSSTransition.propTypes = process.env.NODE_ENV !== \"production\" ? _extends({}, Transition.propTypes, {\n  /**\n   * The animation classNames applied to the component as it appears, enters,\n   * exits or has finished the transition. A single name can be provided, which\n   * will be suffixed for each stage, e.g. `classNames=\"fade\"` applies:\n   *\n   * - `fade-appear`, `fade-appear-active`, `fade-appear-done`\n   * - `fade-enter`, `fade-enter-active`, `fade-enter-done`\n   * - `fade-exit`, `fade-exit-active`, `fade-exit-done`\n   *\n   * A few details to note about how these classes are applied:\n   *\n   * 1. They are _joined_ with the ones that are already defined on the child\n   *    component, so if you want to add some base styles, you can use\n   *    `className` without worrying that it will be overridden.\n   *\n   * 2. If the transition component mounts with `in={false}`, no classes are\n   *    applied yet. You might be expecting `*-exit-done`, but if you think\n   *    about it, a component cannot finish exiting if it hasn't entered yet.\n   *\n   * 2. `fade-appear-done` and `fade-enter-done` will _both_ be applied. This\n   *    allows you to define different behavior for when appearing is done and\n   *    when regular entering is done, using selectors like\n   *    `.fade-enter-done:not(.fade-appear-done)`. For example, you could apply\n   *    an epic entrance animation when element first appears in the DOM using\n   *    [Animate.css](https://daneden.github.io/animate.css/). Otherwise you can\n   *    simply use `fade-enter-done` for defining both cases.\n   *\n   * Each individual classNames can also be specified independently like:\n   *\n   * ```js\n   * classNames={{\n   *  appear: 'my-appear',\n   *  appearActive: 'my-active-appear',\n   *  appearDone: 'my-done-appear',\n   *  enter: 'my-enter',\n   *  enterActive: 'my-active-enter',\n   *  enterDone: 'my-done-enter',\n   *  exit: 'my-exit',\n   *  exitActive: 'my-active-exit',\n   *  exitDone: 'my-done-exit',\n   * }}\n   * ```\n   *\n   * If you want to set these classes using CSS Modules:\n   *\n   * ```js\n   * import styles from './styles.css';\n   * ```\n   *\n   * you might want to use camelCase in your CSS file, that way could simply\n   * spread them instead of listing them one by one:\n   *\n   * ```js\n   * classNames={{ ...styles }}\n   * ```\n   *\n   * @type {string | {\n   *  appear?: string,\n   *  appearActive?: string,\n   *  appearDone?: string,\n   *  enter?: string,\n   *  enterActive?: string,\n   *  enterDone?: string,\n   *  exit?: string,\n   *  exitActive?: string,\n   *  exitDone?: string,\n   * }}\n   */\n  classNames: classNamesShape,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or 'appear' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter-active' or\n   * 'appear-active' class is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'enter' or\n   * 'appear' classes are **removed** and the `done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' class is\n   * applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit-active' is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * A `<Transition>` callback fired immediately after the 'exit' classes\n   * are **removed** and the `exit-done` class is added to the DOM node.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement)\n   */\n  onExited: PropTypes.func\n}) : {};\nexport default CSSTransition;", "import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        if (this.props.unmountOnExit || this.props.mountOnEnter) {\n          var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n          // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n          // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.\n\n          if (node) forceReflow(node);\n        }\n\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || config.disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || config.disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      React.createElement(TransitionGroupContext.Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: PropTypes.shape({\n    current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n      var value = propValue[key];\n      return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n    }\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;", "export default {\n  disabled: false\n};", "import React from 'react';\nexport default React.createContext(null);", "export var forceReflow = function forceReflow(node) {\n  return node.scrollTop;\n};", "import * as React from \"react\"\nimport {observer} from \"mobx-react\"\nimport {current_user} from \"../state/index\"\nimport {debug_state} from \"../state/debug_state\"\nimport {IconButton} from \"@cling/lib.web.mdc\"\n\nexport const Debug = observer(() => {\n    const [mode, set_mode] = React.useState<\"minimized\" | \"maximized\">(\"minimized\")\n    const maximize = React.useCallback(() => {\n        set_mode(\"maximized\")\n    }, [])\n    const minimize = React.useCallback(() => {\n        set_mode(\"minimized\")\n    }, [])\n    const copy = React.useCallback(() => {\n        const range = document.createRange()\n        const pre_error = document.querySelector(\"#debug_error\")!\n        range.setStart(pre_error.firstChild!, 0)\n        range.setEndBefore(pre_error.firstChild!.nextSibling!)\n        const selection = getSelection()!\n        selection.removeAllRanges()\n        selection.addRange(range)\n        document.execCommand(\"copy\")\n        selection.removeAllRanges()\n    }, [])\n    if (\n        !(\n            cling.dev ||\n            current_user.account_attributes.email.endsWith(\"@cling.com\") ||\n            current_user.account_attributes.email.endsWith(\"@flunder.io\")\n        )\n    ) {\n        return null\n    }\n    if (mode === \"maximized\") {\n        return (\n            <pre className=\"debug__maximized\" id=\"debug_error\">\n                {debug_state.errors_and_log_history || \"No errors.\"}\n                <div className=\"debug__buttons\">\n                    <IconButton icon=\"content_copy\" secondary onClick={copy} />\n                    <IconButton icon=\"close\" secondary onClick={minimize} />\n                </div>\n            </pre>\n        )\n    }\n    const {offline, num_errors} = debug_state\n    return (\n        <div className=\"debug\" data-test-ignore onClick={maximize}>\n            {offline && <div>Offline!</div>}\n            {num_errors > 0 && (\n                <div className=\"debug__error\">\n                    {num_errors === 1 ? \"1 Error\" : num_errors + \" Errors\"}\n                </div>\n            )}\n        </div>\n    )\n})\n", "import * as React from \"react\"\nimport {observer} from \"mobx-react\"\nimport {React_lazy, React_suspense} from \"@cling/lib.web.lazy_load/suspense\"\nimport {ui_actions, ui_state} from \"../state/index\"\nconst TaskEditDialog = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/card/task_edit_dialog\"),\n)\nconst SendToBoardDialog = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/card/send_to_board_dialog\"),\n)\nconst CheckoutDialog = React_lazy(() => import(\"@cling/client.web_app/payment/checkout_dialog\"))\nconst QuotaLimitExceededDialog = React_lazy(\n    () =>\n        import(\n            process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/account/quota_limit_exceeded_dialog\"\n        ),\n)\nconst AccountSettingsDialog = React_lazy(\n    () =>\n        import(\n            process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/account/account_settings_dialog\"\n        ),\n)\nconst ProFeatureTeaserDialog = React_lazy(\n    () =>\n        import(\n            process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/account/pro_feature_teaser_dialog\"\n        ),\n)\nconst ClingProTeaser = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/account/cling_pro_teaser\"),\n)\nconst BoardSettingsDialogContainer = React_lazy(\n    () =>\n        import(\n            process.env.F_PUBLIC_LAZY ||\n                \"@cling/client.web_app/dialogs/board_settings_dialog_container\"\n        ),\n)\nconst ShareBoardDialog = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/dialogs/share_board_dialog\"),\n)\nconst StartConversationDialog = React_lazy(\n    () =>\n        import(\n            process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/dialogs/start_conversation_dialog\"\n        ),\n)\nconst ImportDataDialog = React_lazy(\n    () =>\n        import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/import_data/import_data_dialog\"),\n)\nconst DiagnosticsDialog = React_lazy(\n    () => import(\"@cling/client.web_app/dialogs/diagnostics_dialog\"),\n)\nconst TeamsDialog = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/team/teams_dialog\"),\n)\nconst PromptContainer = React_lazy(() => import(\"@cling/client.web_app/dialogs/prompt\"))\nconst CopyBoardDialog = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/dialogs/copy_board_dialog\"),\n)\nconst AddBoardDialog = React_lazy(\n    () => import(process.env.F_PUBLIC_LAZY || \"@cling/client.web_app/dialogs/add_board_dialog\"),\n)\nconst ReportAbuseDialog = React_lazy(() => import(\"@cling/client.web_app/card/report_abuse_dialog\"))\n\nexport const DialogContainer = observer(() => {\n    let dialog\n    if (ui_state.dialog === \"new_board\") {\n        dialog = <AddBoardDialog />\n    } else if (ui_state.dialog === \"copy_board\") {\n        dialog = <CopyBoardDialog />\n    } else if (ui_state.dialog === \"board_settings\") {\n        dialog = <BoardSettingsDialogContainer />\n    } else if (ui_state.dialog === \"share_board\") {\n        dialog = <ShareBoardDialog />\n    } else if (ui_state.dialog === \"import_data\") {\n        dialog = <ImportDataDialog />\n    } else if (ui_state.dialog === \"task_editor\") {\n        dialog = <TaskEditDialog {...ui_state.task_edit_dialog_props!} />\n    } else if (ui_state.dialog === \"send_to_board\") {\n        dialog = <SendToBoardDialog {...ui_state.send_to_board_dialog_props!} />\n    } else if (ui_state.dialog === \"checkout\") {\n        dialog = <CheckoutDialog on_cancel={ui_actions.close_dialog} />\n    } else if (ui_state.dialog === \"quota_limit_exceeded_dialog\") {\n        dialog = <QuotaLimitExceededDialog />\n    } else if (ui_state.dialog === \"account_settings\") {\n        dialog = <AccountSettingsDialog />\n    } else if (ui_state.dialog === \"start_conversation\") {\n        dialog = <StartConversationDialog />\n    } else if (ui_state.dialog === \"diagnostics\") {\n        dialog = <DiagnosticsDialog />\n    } else if (ui_state.dialog === \"teams\") {\n        dialog = <TeamsDialog />\n    } else if (ui_state.dialog === \"report_abuse\") {\n        dialog = <ReportAbuseDialog {...ui_state.report_abuse_dialog_props} />\n    }\n    return (\n        <React_suspense>\n            {ui_state.pro_feature_teaser_dialog_props && (\n                <ProFeatureTeaserDialog {...ui_state.pro_feature_teaser_dialog_props!} />\n            )}\n            <PromptContainer />\n            {dialog}\n            <ClingProTeaser />\n        </React_suspense>\n    )\n})\n", "import type {\n    MessageFromWorker,\n    Ping,\n    PublishPatch,\n    Reload,\n    RequestSync,\n    RequestSyncAllFromStore,\n    Search,\n    SendAuthState,\n    SendSearchResult,\n    SyncUpdate,\n    PatchPublished,\n    AddProvisionalMediaInfo,\n} from \"@cling/lib.web.worker/worker_interface\"\nimport {log} from \"@cling/lib.shared.logging\"\nimport {assert_never} from \"@cling/lib.shared.utils\"\nimport type {EventBus} from \"@cling/lib.web.primitives\"\nimport {register_auth_listener, enforce_refresh} from \"@cling/lib.web.auth\"\nimport {fatal_error_url} from \"@cling/lib.web.utils/fatal_error_url\"\nimport {report_info} from \"@cling/lib.shared.debug\"\nimport {sensors} from \"../debug/sensors\"\nimport type {AuthInfo} from \"@cling/lib.shared.model\"\nimport {Snackbar} from \"@cling/lib.web.mdc\"\nimport {i18n} from \"@cling/lib.web.i18n\"\nimport {open_intercom} from \"../misc/intercom\"\n\nlet _port: Pick<MessagePort, \"postMessage\">\nlet last_pong_received_at = 0\n\nfunction handle_message_from_worker({\n    sync_updates_bus,\n    search_bus,\n    publish_patch_bus,\n}: {\n    sync_updates_bus: EventBus<SyncUpdate>\n    search_bus: EventBus<Search | SendSearchResult>\n    publish_patch_bus: EventBus<PublishPatch | PatchPublished>\n}) {\n    return (event: MessageEvent) => {\n        const msg = event.data.msg as MessageFromWorker\n        if (msg.type === \"log\") {\n            const {severity, context, message, extra} = msg\n            let prefix\n            if (navigator.userAgent.includes(\"Chrome/\") && !window._under_test) {\n                // Colorize the context (cyan background).\n                prefix = `\\x1b[46m[${context}]\\x1b[91m\\x1b[0m `\n            } else {\n                prefix = `[${context}] `\n            }\n            log[severity](`${prefix}${message}`, extra)\n        } else if (msg.type === \"pong\") {\n            last_pong_received_at = Date.now()\n            sensors.set_network_state(msg.offline ? \"offline\" : \"online\")\n        } else if (\n            msg.type === \"sync_put\" ||\n            msg.type === \"sync_remove\" ||\n            msg.type === \"sync_up_to_date\" ||\n            msg.type === \"sync_error\"\n        ) {\n            sync_updates_bus.postMessage(msg)\n        } else if (msg.type === \"fatal_error\") {\n            goto(fatal_error_url(msg.error))\n        } else if (msg.type === \"send_search_result\") {\n            search_bus.postMessage(msg)\n        } else if (msg.type === \"reload\") {\n            reload(`Received \"reload\" message from worker: ${msg.reason}`)\n        } else if (msg.type === \"patch_published\") {\n            publish_patch_bus.postMessage(msg)\n            sensors.patch_published(msg.patch_uid)\n            if (msg.cling_error_code) {\n                Snackbar.show_message(\n                    `${i18n.changes_could_not_be_saved} ${i18n.cling_error_code_msg(\n                        msg.cling_error_code,\n                        \"\",\n                    )}`,\n                    i18n.help,\n                    () => open_intercom(\"new_message\"),\n                )\n            }\n        } else if (msg.type === \"refresh_auth\") {\n            log.info(\"Worker told us to refresh auth\")\n            enforce_refresh()\n        } else {\n            throw assert_never(msg)\n        }\n    }\n}\n\nexport function send_message_to_worker(msg: Reload) {\n    _port?.postMessage({msg})\n}\n\nexport function init({\n    auth_info_provider,\n    csrf_token_provider,\n    port,\n    sync_updates_bus,\n    request_sync_bus,\n    publish_patch_bus,\n    search_bus,\n    add_provisional_media_info_bus,\n    ping_message,\n}: {\n    auth_info_provider: () => AuthInfo\n    csrf_token_provider: () => string\n    port: Pick<MessagePort, \"postMessage\" | \"addEventListener\">\n    sync_updates_bus: EventBus<SyncUpdate>\n    request_sync_bus: EventBus<RequestSync | RequestSyncAllFromStore>\n    publish_patch_bus: EventBus<PublishPatch | PatchPublished>\n    search_bus: EventBus<Search | SendSearchResult>\n    add_provisional_media_info_bus: EventBus<AddProvisionalMediaInfo>\n    ping_message: Ping\n}) {\n    _port = port\n    port.addEventListener(\n        \"message\",\n        handle_message_from_worker({\n            sync_updates_bus,\n            search_bus,\n            publish_patch_bus,\n        }),\n    )\n    request_sync_bus.addEventListener((event) => {\n        port.postMessage({msg: event.data})\n    })\n    publish_patch_bus.addEventListener((event) => {\n        const msg = event.data\n        if (msg.type === \"publish_patch\") {\n            port.postMessage({msg: event.data})\n        } else if (msg.type === \"patch_published\") {\n            // Ignored\n        } else {\n            assert_never(msg)\n        }\n    })\n    search_bus.addEventListener((event) => {\n        const msg = event.data\n        if (msg.type === \"search\") {\n            port.postMessage({msg: event.data})\n        } else if (msg.type === \"send_search_result\") {\n            // Ignored\n        } else {\n            assert_never(msg)\n        }\n    })\n    add_provisional_media_info_bus.addEventListener((event) => {\n        const msg = event.data\n        if (msg.type === \"add_provisional_media_info\") {\n            port.postMessage({msg: event.data})\n        }\n    })\n    register_auth_listener(({account_uid, team_uids, admin_organization_uids}) => {\n        log.debug(`[worker_gateway] Sending auth state to worker ...`)\n        const msg: SendAuthState = {\n            type: \"send_auth_state\",\n            csrf_token: csrf_token_provider(),\n            auth_info: {account_uid, team_uids, admin_organization_uids},\n        }\n        port.postMessage({msg})\n    })\n    // Send `auth_state` and CSRF token to the worker.\n    port.postMessage({\n        msg: {\n            type: \"send_auth_state\",\n            auth_info: auth_info_provider(),\n            csrf_token: csrf_token_provider(),\n        } satisfies SendAuthState,\n    })\n    start_watchdog(port, ping_message)\n}\n\nfunction start_watchdog(port: {postMessage: (message: {msg: Ping}) => void}, ping_message: Ping) {\n    let last_ping_sent_at = 0\n    const send_ping = () => {\n        port.postMessage({msg: ping_message})\n        last_ping_sent_at = Date.now()\n    }\n    setInterval(() => {\n        const now = Date.now()\n        if (now - last_ping_sent_at < 11_000 && now - last_pong_received_at > 31_000) {\n            report_info(\n                `Did not receive pong within 30 seconds -- ${JSON.stringify({\n                    now,\n                    last_ping_sent_at,\n                    last_pong_received_at,\n                })}`,\n            )\n        }\n        send_ping()\n    }, 10_000)\n}\n", "/**\n * A simple fuzzy-string matching algorithm.\n *\n * Goals:\n * - Be fast.\n * - Don't change the source texts in any way, i.e. work w/o an index.\n *\n * Match rules:\n * - Case insensitive\n * - Ignore whitespace and `-`, `_`\n * - Allow for exactly one \"Buchstabendreher\"\n * - Using naive stemming.\n * - XML/HTML markup is ignored.\n *\n * Naive stemming:\n * - Match German Umlauts (in fact all diacritics) as their regular vowel counterpart (\u00FC => u)\n *   as well as \u00FC => ue etc.\n * - Match German `\u00DF` as `s` or `ss`\n * - Match `ss` as `s` and vice versa.\n *\n * Implementation:\n * A search term will be converted to a regular expression that is simple and fast.\n * This regular expression might be quite long, but it is expressive, complete and fast.\n */\n\n/**\n * Map all diacritics to their latin counterparts and other stemming mapping like `\u00FC => ue` etc.\n */\nconst stem_map = new Map<string, string>()\n;(() => {\n    for (let i = \"\u00C0\".charCodeAt(0); i <= \"\u017E\".charCodeAt(0); i++) {\n        const c = String.fromCharCode(i)\n        stem_map.set(c, c.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\"))\n    }\n    // Special handling for German Umlauts ...\n    stem_map.set(\"\u00E4\", \"a|ae\")\n    stem_map.set(\"\u00F6\", \"o|oe\")\n    stem_map.set(\"\u00FC\", \"u|ue\")\n    stem_map.set(\"\u00DF\", \"s|ss\")\n    // Common cases ...\n    stem_map.set(\"s\", \"s|ss\")\n})()\nconst word_characters = \"A-z\u00C0-\u017E0-9\"\nconst valid_characters = new RegExp(`[${word_characters}]`)\nconst gap_expr = `([-_\\\\s]??|<.*?>)`\nlet supports_re_look_behind = (() => {\n    try {\n        new RegExp(\"(?<!<[^>]*?)\")\n        return true\n    } catch {\n        return false\n    }\n})()\n\nexport type Match = {\n    indices: [number, number][]\n    /**\n     * A score between 0 and 1. For now this is really simple, the score will be:\n     * - 1 if the match is 100% and matches a full word.\n     * - 0.9 if the match is 100% and at the start of a full word.\n     * - 0.8 if the match is 100% and within a word.\n     * - 0.7 for all the rest.\n     */\n    score: number\n}\n\nfunction char_as_regex(c: string): string {\n    const mapped_c = stem_map.get(c)\n    if (mapped_c) {\n        return `(${mapped_c}|${escape_regex(c)})`\n    }\n    return escape_regex(c)\n}\n\nfunction reverse_stemming(s: string): string {\n    return s.replace(/ss/gi, \"\u00DF\").replace(/ue/gi, \"\u00FC\").replace(/ae/gi, \"\u00E4\").replace(/oe/gi, \"\u00F6\")\n}\n\n/**\n * Prepare a matcher that can be run against any text.\n *\n * @param opts.almost_exact if `true` then the only exacti matches ignoring the case will be\n *        returned.\n */\nexport function fuzzy_matcher(\n    search_term: string,\n    opts: {ignore_xml?: boolean; almost_exact?: boolean} = {},\n): (text: string) => Match[] {\n    const search_term_lower = search_term.toLowerCase()\n    const search_char_exprs = opts.almost_exact\n        ? [...search_term_lower].map((x) => escape_regex(x))\n        : [...reverse_stemming(search_term_lower)].map((x) => char_as_regex(x))\n    // We build a quite expressive but robust, fast and easy to debug regular expression ...\n    // 1) Match 100% ...\n    let re = `(${search_char_exprs.join(\"\")})`\n    if (search_term_lower.length > 2 && search_term_lower.length < 15 && !opts.almost_exact) {\n        // 2) Allow for one letter mix-ups (\"Buchstabendreher\") ...\n        for (let i = 1; i < search_term_lower.length - 1; i++) {\n            const mixed_search_term =\n                search_term_lower.substr(0, i) +\n                search_term_lower[i + 1] +\n                search_term_lower[i] +\n                search_term_lower.substr(i + 2)\n            const mixed_search_char_exprs = [...reverse_stemming(mixed_search_term)].map((x) =>\n                char_as_regex(x),\n            )\n            re += `|(${mixed_search_char_exprs.join(\"\")})`\n        }\n        // 3) Match with at most one character between each search-term-character ...\n        re += `|${search_char_exprs.join(gap_expr)}`\n    }\n    if (opts.ignore_xml) {\n        if (opts.almost_exact) {\n            re += `|${search_char_exprs.join(\"(<.*?>)?\")}`\n        }\n        re = `${supports_re_look_behind ? \"(?<!<[^>]*?)\" : \"(<[^>]*)?(>?)\"}(${re})`\n    }\n    const compiled = new RegExp(re, \"gimu\")\n    return (text: string) => {\n        const result: Match[] = []\n        let match\n        for (;;) {\n            match = compiled.exec(text)\n            if (!match || match[0] === \"\") {\n                break\n            }\n            if (opts.ignore_xml) {\n                if (match && match[2] === \">\") {\n                    const ignored = match.splice(0, 3)\n                    match.index += ignored[1]?.length ?? 0 + 1\n                } else if (match[0].startsWith(\"<\")) {\n                    break\n                }\n            }\n            // Calculate score ...\n            const full_match = match[0].toLowerCase()\n            const is_full_match = full_match === search_term_lower\n            const match_end_index = match.index + full_match.length - 1\n            let score = 1\n            if (is_full_match) {\n                const at_word_start =\n                    match.index === 0 || !text[match.index - 1].match(valid_characters)\n                const partial_match =\n                    search_char_exprs.length > 1 &&\n                    match_end_index < text.length - 1 &&\n                    text[match_end_index + 1].match(valid_characters)\n                if (partial_match) {\n                    score = at_word_start ? 0.9 : 0.8\n                }\n            } else {\n                score = 0.7\n            }\n            // Build highlighting indices that ignores HTML tags within the match ...\n            const markup_split = full_match.split(/[<>]/g)\n            const indices: [number, number][] = []\n            let start_index = match.index\n            for (let i = 0; i < markup_split.length; i += 2) {\n                indices.push([start_index, start_index + markup_split[i].length - 1])\n                if (i === markup_split.length - 1) {\n                    break\n                }\n                start_index += markup_split[i].length + markup_split[i + 1].length + 2\n            }\n            result.push({score, indices})\n        }\n        return result\n    }\n}\n\nfunction escape_regex(s: string) {\n    return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n}\n\nexport function __test_only__set_supports_re_look_behind(b: boolean) {\n    supports_re_look_behind = b\n}\n", "import {\n    Account,\n    AccountBoardSettings,\n    Board,\n    BoardUID,\n    Card,\n    CardUID,\n    Comment,\n    CommentUID,\n    TaskStatus,\n    BoardInfo,\n    AccountUID,\n    CardColor,\n    Team,\n    PrincipalUID,\n    is_AccountUID,\n    is_TeamUID,\n    BoardType,\n    extract_linked_board_and_card_uid,\n} from \"@cling/lib.shared.model\"\nimport {\n    assert_never,\n    fast_string_hash,\n    full_name,\n    flatten,\n    escape_html,\n} from \"@cling/lib.shared.utils\"\nimport type {SearchQuery, FieldExpression} from \"./types\"\nimport {fuzzy_matcher} from \"./fuzzy_matcher\"\n\nexport type SearchableTextField = \"title\" | \"safe_html\" | \"url\" | \"file_name\"\n\nexport type Match = {\n    board_uid: BoardUID\n    card_uid: CardUID\n    comment_uid?: CommentUID\n    order_value: number\n    text_matches: [\n        {\n            field: SearchableTextField\n            term: string\n            /**\n             * The hash of the text, in which the match was found.\n             */\n            text_hash: number\n            /**\n             * The indices of the found match(es). This can be used for highlighting.\n             */\n            text_indices: [number, number][]\n        },\n    ]\n    /**\n     * A score between 0 and 1 (perfect match). Field expressions always yield a score of 1. If\n     * there are multiple search terms the score is a \"running\" average.\n     */\n    score: number\n}\n\nconst searchable_text_fields: SearchableTextField[] = [\"title\", \"safe_html\", \"url\", \"file_name\"]\n\ntype SearchItemTexts = {[P in SearchableTextField]?: string | (() => string | undefined)}\n\ntype SearchItem = {\n    board_uid: BoardUID\n    card_uid: CardUID\n    comment_uid?: CommentUID\n    texts: SearchItemTexts\n    modified_at: number\n    board_archived: boolean\n    board_owner: AccountUID\n    board_acl_all: Set<PrincipalUID>\n    card_archived?: boolean\n    card_color?: CardColor\n    card_created_by: AccountUID\n    card_modified_by: AccountUID\n    card_kind?: \"note\" | \"link\" | \"file\"\n    task?: boolean\n    task_status?: TaskStatus\n    task_created_by?: AccountUID\n    task_modified_by?: AccountUID\n    task_assignee?: AccountUID\n    task_date?: number\n}\n\nexport class BoardSearch {\n    private search_items = new Map<BoardUID, {last_change: Date; items: SearchItem[]}>()\n\n    constructor(\n        private board_info: (board_uid: BoardUID) => BoardInfo | undefined,\n        private board_setting: (board_uid: BoardUID) => AccountBoardSettings | undefined,\n        private principals: () => (Account | Team)[],\n        private me_account_uid: AccountUID,\n    ) {}\n\n    /**\n     * Update the search index.\n     */\n    update(x: Board | {board_uid: BoardUID; board_archived: boolean}) {\n        if (x instanceof Board) {\n            const {uid, regular_cards} = x\n            const board_archived = !!this.board_setting(uid)?.archived\n            const board_acl_all = new Set(x.acl.all)\n            const items = []\n            for (const card of regular_cards) {\n                items.push(\n                    this._search_item({\n                        board: x,\n                        source: card,\n                        board_archived: board_archived,\n                        board_acl_all: board_acl_all,\n                    }),\n                )\n                for (const comment of card.comments) {\n                    items.push(\n                        this._search_item({\n                            board: x,\n                            source: comment,\n                            board_archived: board_archived,\n                            board_acl_all: board_acl_all,\n                        }),\n                    )\n                }\n            }\n            this.search_items.set(uid, {last_change: x.last_change.date, items})\n        } else {\n            const {board_uid, board_archived} = x\n            const y = this.search_items.get(board_uid)\n            if (y && y.items.length && y.items[0].board_archived !== board_archived) {\n                y.items.forEach((search_item) => (search_item.board_archived = board_archived))\n            }\n        }\n    }\n\n    get indexed_board_uids() {\n        return [...this.search_items.keys()]\n    }\n\n    /**\n     * Update the search index.\n     */\n    remove(board_uid: BoardUID) {\n        this.search_items.delete(board_uid)\n    }\n\n    search(query: SearchQuery, opts: {limit_cards?: number} = {}): Match[] {\n        const prepared_principals = this.principals().map((x) => ({\n            name: x instanceof Account ? full_name(x) : x.name,\n            uid: x.uid,\n        }))\n        let result = new Map<string, Match>()\n        // Pre-calculate some values to improve search speed.\n        const field_expressions = query.field_expressions.map((x) => {\n            if (x.field === \"modified.at\" || x.field === \"task.date\") {\n                if (x.term.range === \"open\") {\n                    x.term.from += 1\n                    x.term.to -= 1\n                } else if (x.term.range === \"left_closed\") {\n                    x.term.to -= 1\n                } else if (x.term.range === \"right_closed\") {\n                    x.term.from += 1\n                } else if (x.term.range !== \"closed\") {\n                    throw assert_never(x.term.range)\n                }\n            }\n            return x\n        })\n        // First filter non-text expressions aka `field expressions`.\n        let search_items = this.match_field_expressions(field_expressions, prepared_principals)\n        search_items.forEach((x) =>\n            result.set(`${x.board_uid}:${x.card_uid}:${x.comment_uid}`, {\n                board_uid: x.board_uid,\n                card_uid: x.card_uid,\n                comment_uid: x.comment_uid,\n                order_value: 0,\n                score: 1,\n                text_matches: [] as any,\n            }),\n        )\n        // Next, filter all text-expressions.\n        const text_expressions = field_expressions.filter((x) => !x.field) as {\n            term: string\n            quoted: boolean\n            not: boolean\n        }[]\n        for (const text_expression of text_expressions) {\n            const search_term_matches = new Map<string, Match>()\n            const matcher = fuzzy_matcher(text_expression.term, {\n                ignore_xml: true,\n                almost_exact: text_expression.quoted,\n            })\n            for (const text_field of searchable_text_fields) {\n                for (const search_item of search_items) {\n                    const text = search_item.texts[text_field]\n                    const final_text = typeof text === \"function\" ? text() : text\n                    if (!final_text) {\n                        continue\n                    }\n                    const matches = matcher(final_text)\n                    if (matches.length) {\n                        const key = `${search_item.board_uid}:${search_item.card_uid}:${search_item.comment_uid}`\n                        let res = result.get(key)\n                        const score = Math.max(...matches.map((x) => x.score))\n                        if (!res) {\n                            res = {\n                                board_uid: search_item.board_uid,\n                                card_uid: search_item.card_uid,\n                                comment_uid: search_item.comment_uid,\n                                order_value: 0,\n                                score: score,\n                                text_matches: [] as any,\n                            }\n                            result.set(key, res!)\n                        } else {\n                            if (res.text_matches.some((x) => x.term === text_expression.term)) {\n                                // Take the best score if we already matched the term.\n                                res.score = Math.max(res.score, score)\n                            } else {\n                                // Take \"continuous average\" otherwise.\n                                res.score = (res!.score + score) / 2\n                            }\n                        }\n                        res.text_matches.push({\n                            field: text_field,\n                            term: text_expression.term,\n                            text_hash: fast_string_hash(final_text),\n                            text_indices: flatten(matches.map((x) => x.indices)),\n                        })\n                        search_term_matches.set(key, res!)\n                    }\n                }\n            }\n            if (text_expression.not) {\n                // Make all `search_items` match except the once found.\n                for (const key of search_term_matches.keys()) {\n                    result.delete(key)\n                }\n            } else {\n                result = search_term_matches\n            }\n            search_items = search_items.filter((x) =>\n                result.has(`${x.board_uid}:${x.card_uid}:${x.comment_uid}`),\n            )\n        }\n        return this.sort_and_limit(search_items, result, query.order, opts.limit_cards)\n    }\n\n    private sort_and_limit(\n        search_items: SearchItem[],\n        matches: Map<string, Match>,\n        order?: {field: \"task.date\" | \"modified.at\"; dir: \"ASC\" | \"DESC\"},\n        limit_cards?: number,\n    ): Match[] {\n        let res: Match[]\n        if (!order) {\n            res = [...matches.values()].sort((a, b) => {\n                // We normalize the scores to 1000 in order to avoid floating point errors.\n                const sort_order = Math.floor(b.score * 1000) - Math.floor(a.score * 1000)\n                if (sort_order === 0) {\n                    // We want the sort order to be deterministic. The order of cards in a\n                    // board as determined by `board.regular_cards` is deterministic.\n                    // Let's make this deterministic across boards.\n                    return b.board_uid.localeCompare(a.board_uid)\n                }\n                return sort_order\n            })\n        } else {\n            let order_value_fn: (x: SearchItem) => number\n            if (order.field === \"task.date\") {\n                if (order.dir === \"ASC\") {\n                    order_value_fn = (x) =>\n                        x.task_date ||\n                        (x.task ? Number.MAX_SAFE_INTEGER - 2 : Number.MAX_SAFE_INTEGER - 1)\n                } else {\n                    order_value_fn = (x) => x.task_date || (x.task ? 1 : 0)\n                }\n            } else if (order.field === \"modified.at\") {\n                order_value_fn = (x) => x.modified_at\n            } else {\n                throw assert_never(order.field)\n            }\n            res = search_items.map((x) => {\n                const v = matches.get(`${x.board_uid}:${x.card_uid}:${x.comment_uid}`)!\n                v.order_value = order_value_fn(x)\n                return v\n            })\n            if (order.dir === \"ASC\") {\n                res.sort((a, b) => {\n                    const sort_order = a.order_value - b.order_value\n                    if (sort_order === 0) {\n                        // We want the sort order to be deterministic. The order of cards in a\n                        // board as determined by `board.regular_cards` is deterministic.\n                        // Let's make this deterministic across boards.\n                        return b.board_uid.localeCompare(a.board_uid)\n                    }\n                    return sort_order\n                })\n            } else {\n                res.sort((a, b) => {\n                    const sort_order = b.order_value - a.order_value\n                    if (sort_order === 0) {\n                        // We want the sort order to be deterministic. The order of cards in a\n                        // board as determined by `board.regular_cards` is deterministic.\n                        // Let's make this deterministic across boards.\n                        return b.board_uid.localeCompare(a.board_uid)\n                    }\n                    return sort_order\n                })\n            }\n        }\n        if (limit_cards && res.length > limit_cards) {\n            let num_cards = 0\n            for (let i = 0; i < res.length; i++) {\n                const x = res[i]\n                if (!x.comment_uid) {\n                    num_cards += 1\n                    if (num_cards > limit_cards) {\n                        res = res.slice(0, i)\n                        break\n                    }\n                }\n            }\n        }\n        return res\n    }\n\n    private match_field_expressions(\n        query: FieldExpression[],\n        prepared_principals: Array<{name: string; uid: PrincipalUID}>,\n    ): SearchItem[] {\n        const principal_uids_cache = new Map<string, Set<PrincipalUID>>()\n        const match_principal_uids = (\n            expr_term: string,\n            principal_uids: PrincipalUID | PrincipalUID[],\n        ) => {\n            let matches = principal_uids_cache.get(expr_term)\n            if (!matches) {\n                if (expr_term === \"me\") {\n                    matches = new Set([this.me_account_uid])\n                } else {\n                    const matcher = fuzzy_matcher(expr_term, {almost_exact: true})\n                    matches = new Set(\n                        prepared_principals.filter((x) => matcher(x.name).length).map((x) => x.uid),\n                    )\n                    if (is_AccountUID(expr_term) || is_TeamUID(expr_term)) {\n                        matches.add(expr_term)\n                    }\n                }\n                principal_uids_cache.set(expr_term, matches)\n            }\n            if (Array.isArray(principal_uids)) {\n                return principal_uids.some((x) => matches!.has(x))\n            }\n            return matches.has(principal_uids)\n        }\n        const result: SearchItem[] = []\n        const board_search_items = [...this.search_items.values()].map((x) => x.items)\n        for (const search_items of board_search_items) {\n            for (const search_item of search_items) {\n                const archived = !!(search_item.board_archived || search_item.card_archived)\n                let keep = true\n                let keep_archived = !archived\n                let board_matched_explicitely = false\n                for (const expr of query) {\n                    if (!expr.field) {\n                        // This  is a text search term, nothing to do.\n                        continue\n                    } else if (expr.field === \"board.uid\") {\n                        if (expr.term !== \"all\") {\n                            keep = expr.term.includes(search_item.board_uid)\n                            board_matched_explicitely = keep && !expr.not\n                        }\n                    } else if (expr.field === \"card.uid\") {\n                        keep = expr.term.includes(search_item.card_uid)\n                    } else if (expr.field === \"archived\") {\n                        if (expr.term === \"show\") {\n                            if (!expr.not) {\n                                keep_archived = true\n                            }\n                            continue\n                        } else {\n                            keep = archived === (expr.term === \"yes\")\n                            keep_archived = true\n                        }\n                    } else if (expr.field === \"card.color\") {\n                        keep =\n                            expr.term === \"yes\"\n                                ? !!search_item.card_color\n                                : search_item.card_color === expr.term\n                    } else if (expr.field === \"card.created.by\") {\n                        keep = match_principal_uids(expr.term, search_item.card_created_by)\n                    } else if (expr.field === \"card.modified.by\") {\n                        keep = match_principal_uids(expr.term, search_item.card_modified_by)\n                    } else if (expr.field === \"task\") {\n                        keep = search_item.task === (expr.term === \"yes\")\n                    } else if (\n                        expr.field === \"task.status\" ||\n                        expr.field === \"task.assignee\" ||\n                        expr.field === \"task.created.by\" ||\n                        expr.field === \"task.modified.by\" ||\n                        expr.field === \"task.date\"\n                    ) {\n                        // Querying a task-field only makes sense, if it is a task.\n                        if (!search_item.task) {\n                            keep = false\n                            break\n                        }\n                        if (expr.field === \"task.status\") {\n                            keep = search_item.task_status === expr.term\n                        } else if (expr.field === \"task.assignee\") {\n                            keep = match_principal_uids(expr.term, search_item.task_assignee!)\n                        } else if (expr.field === \"task.created.by\") {\n                            keep = match_principal_uids(expr.term, search_item.task_created_by!)\n                        } else if (expr.field === \"task.modified.by\") {\n                            keep = match_principal_uids(expr.term, search_item.task_modified_by!)\n                        } else if (expr.field === \"task.date\") {\n                            const {from, to} = expr.term\n                            keep = from <= search_item.task_date! && to >= search_item.task_date!\n                        } else {\n                            assert_never(expr)\n                        }\n                    } else if (expr.field === \"card.kind\") {\n                        keep = search_item.card_kind === expr.term\n                    } else if (expr.field === \"comment.uid\") {\n                        keep =\n                            !!search_item.comment_uid && expr.term.includes(search_item.comment_uid)\n                    } else if (expr.field === \"modified.at\") {\n                        const {from, to} = expr.term\n                        keep = from <= search_item.modified_at && to >= search_item.modified_at\n                    } else if (expr.field === \"board.owner\") {\n                        keep = expr.term.some((x) =>\n                            // new Set([search_item.board_owner]).has(search_item.board_owner)\n                            match_principal_uids(x, search_item.board_owner),\n                        )\n                    } else if (expr.field === \"board.acl.all\") {\n                        keep = false\n                        for (const x of search_item.board_acl_all) {\n                            if (expr.term.some((y) => match_principal_uids(y, x))) {\n                                keep = true\n                                break\n                            }\n                        }\n                    } else {\n                        assert_never(expr)\n                    }\n                    if (expr.not) {\n                        keep = !keep\n                    }\n                    if (!keep) {\n                        break\n                    }\n                }\n                if (\n                    (keep && keep_archived) ||\n                    (keep &&\n                        search_item.board_archived &&\n                        !search_item.card_archived &&\n                        board_matched_explicitely)\n                ) {\n                    result.push(search_item)\n                }\n            }\n        }\n        return result\n    }\n\n    private _search_item({\n        board,\n        source,\n        board_archived,\n        board_acl_all,\n    }: {\n        board: Board\n        source: Card | Comment\n        board_archived: boolean\n        board_acl_all: Set<PrincipalUID>\n    }): SearchItem {\n        const texts: SearchItemTexts = {}\n        let obj = source.note || source.link || (source.file as any)\n        const card = source instanceof Card ? source : source.parent\n        if (source instanceof Card && source.link) {\n            const target_board_uid = extract_linked_board_and_card_uid(source.link.url)?.board_uid\n            if (target_board_uid) {\n                // Special handling for board-link-cards.\n                obj = {\n                    // Lazy evaluation of the title-attribute as board-names can change.\n                    title: () => {\n                        const board_info = this.board_info(target_board_uid)\n                        return board_info ? escape_html(board_info.name) : undefined\n                    },\n                }\n            }\n        }\n        if (obj) {\n            for (const text_field of searchable_text_fields) {\n                const v = obj[text_field]\n                if (!v) {\n                    continue\n                }\n                texts[text_field] =\n                    text_field === \"safe_html\" || typeof v === \"function\" ? v : escape_html(v)\n            }\n        }\n        let modified_at =\n            source.last_important_change?.date.getTime() || source.last_change.date.getTime()\n        if (source instanceof Card) {\n            // This generic `modified_at` will take the comments into account.\n            const last_comment = source.comments[source.comments.length - 1]\n            if (last_comment) {\n                modified_at = Math.max(\n                    modified_at,\n                    last_comment.last_important_change?.date.getTime() ||\n                        last_comment.last_change.date.getTime(),\n                )\n            }\n        }\n        return {\n            board_uid: board.uid,\n            comment_uid: source instanceof Comment ? source.uid : undefined,\n            card_uid: card.uid,\n            texts,\n            modified_at,\n            board_archived,\n            card_color: card.color,\n            card_archived: card.archived,\n            card_created_by: card.first_change.account_uid,\n            card_modified_by: card.last_change.account_uid,\n            card_kind: card.note ? \"note\" : card.link ? \"link\" : card.file ? \"file\" : undefined,\n            task: !!card.task,\n            task_status: card.task ? card.task.status : undefined,\n            task_created_by: card.task ? card.task_first_change?.account_uid : undefined,\n            task_modified_by: card.task ? card.task_last_change?.account_uid : undefined,\n            task_assignee: card.task ? card.task.assignee : undefined,\n            task_date: card.task?.date?.getTime(),\n            board_owner: board.board_type === BoardType.people ? this.me_account_uid : board.owner,\n            board_acl_all,\n        }\n    }\n}\n", "/**\n * Code that is only relevant if the board is viewed as part of our homepage.\n */\nimport {report_error, report_info} from \"@cling/lib.shared.debug\"\nimport type {Board, NoteCard} from \"@cling/lib.shared.model\"\nimport {not_null} from \"@cling/lib.shared.utils\"\nimport {board_resource} from \"@cling/lib.web.resources\"\nimport {runInAction} from \"mobx\"\nimport {ui_state} from \"../state/index\"\nimport {set_user_currency} from \"../startup/startup_common\"\n\nexport async function inject_cling_hp_code({cling_hp_info_page}: {cling_hp_info_page?: string}) {\n    if (!location.pathname.match(/\\/(de|en)\\/(index.html|pricing.html|info\\/)/)) {\n        return\n    }\n    const board = await board_resource.wait_for_sync(ui_state.current_board_uid!)\n    if (location.pathname.endsWith(\"/pricing.html\")) {\n        const pro_card = board.regular_cards.find(\n            (x) =>\n                x.note?.title.startsWith(\"Cling Pro - starting at\") ||\n                x.note?.title.startsWith(\"Cling Pro - ab\"),\n        )\n        const team_card = board.regular_cards.find(\n            (x) =>\n                x.note?.title.startsWith(\"Cling for Teams - starting at\") ||\n                x.note?.title.startsWith(\"Cling f\u00FCr Teams - ab\"),\n        )\n        if (!pro_card || !team_card) {\n            report_error(\"Error on pricing page - cannot find placeholders\")\n            return\n        }\n        await set_user_currency()\n        if (ui_state.preferred_currency === \"USD\") {\n            pro_card.note!.title = pro_card.note!.title.replace(\"at\", \"at $ 4.40\")\n            pro_card.note!.title = pro_card.note!.title.replace(\"ab\", \"ab $ 4,40\")\n            team_card.note!.title = team_card.note!.title.replace(\"at\", \"at $ 8.80\")\n            team_card.note!.title = team_card.note!.title.replace(\"ab\", \"ab $ 8,80\")\n        } else {\n            pro_card.note!.title = pro_card.note!.title.replace(\"at\", \"at \u20AC 4\")\n            pro_card.note!.title = pro_card.note!.title.replace(\"ab\", \"ab \u20AC 4\")\n            team_card.note!.title = team_card.note!.title.replace(\"at\", \"at \u20AC 8\")\n            team_card.note!.title = team_card.note!.title.replace(\"ab\", \"ab \u20AC 8\")\n        }\n        return\n    }\n    if (location.pathname.includes(\"/info/\")) {\n        adapt_info_board(board, cling_hp_info_page)\n    }\n    remove_all_but_first_column(board)\n}\n\n/**\n * If `cling_hp_info_page` is set, then its contents will replace the board title and the first two\n * cards.\n */\nfunction adapt_info_board(board: Board, cling_hp_info_page?: string) {\n    if (!cling_hp_info_page) {\n        cling_hp_info_page = location.pathname\n            .split(\"/\")\n            .pop()\n            ?.replace(\".html\", \"\")\n            ?.replace(/-/g, \"_\")\n        if (!cling_hp_info_page) {\n            return\n        }\n    }\n    const config_card = board.regular_cards.find(\n        (x) => x.note?.title === cling_hp_info_page,\n    ) as NoteCard\n    if (!config_card) {\n        report_info(\"[info-page] No configuration found -- showing the first column\", {\n            cling_hp_info_page,\n        })\n        return\n    }\n    const first_column = not_null(board.columns.find((x) => x.children.length > 0))\n    runInAction(() => {\n        const text = config_card.note.safe_html.replace(/<.*?>/g, \"\").replace(/<\\/.*?>/g, \"\")\n        const title = text.match(/^Title:\\s(.*)$/)?.[1]\n        if (title) {\n            board.name = title\n        } else {\n            report_error(\"[info-page] No title found -- using the regular board title\", {\n                cling_hp_info_page,\n            })\n        }\n        first_column.children.splice(0, 2)\n        first_column.children.unshift(...config_card.children)\n        config_card.children = []\n        board.sanitize()\n    })\n    return board\n}\n\nfunction remove_all_but_first_column(board: Board) {\n    runInAction(() => {\n        let found = false\n        for (const x of board.columns) {\n            if (found || x.children.length === 0) {\n                x.parent.children.splice(x.parent_pos, 1)\n            } else {\n                found = x.children.length > 0\n            }\n        }\n    })\n}\n", "import {init} from \"./entry\"\nimport {report_error} from \"@cling/lib.shared.debug\"\nimport {start_public_board} from \"./startup/startup_public_board\"\n\nif (process.env.NODE_ENV !== \"test\") {\n    init()\n    start_public_board().catch(report_error)\n}\n"],
  "mappings": "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",
  "names": ["init_compat_module", "init_preact_module", "import_buffer", "default_local_cache", "type", "LocalCacheImpl", "__name", "_LocalCacheImpl", "__publicField", "makeObservable", "observable", "key", "cache_entry", "NotFound", "from_buffer", "pb", "o", "runInAction", "local_eventbus", "listeners", "__name", "listener", "msg", "x", "outstanding", "apply_batch_timeout", "ignore_sync_update", "board_sync_paused", "batch", "init", "ignore_sync_update_", "new_cache", "__name", "type", "default_local_cache", "caches", "Board", "BoardInfo", "Account", "AccountSettings", "AccountAttributes", "AccountAuth", "AccountAnalytics", "Organization", "OrganizationMembers", "Team", "TeamMembers", "URLInfo", "MediaInfo", "MeetStatus", "local_cache_sync_event_bus", "local_eventbus", "msg", "_apply_batch", "board_uid", "runInAction", "retain", "_handle_message", "sync_key", "outstanding_sync_key", "promise", "cache", "not_null", "SyncEntityType", "log", "NotFound", "Gone", "Forbidden", "ClingError", "ClingErrorCode", "assert_never", "outstanding_sync_key", "type", "uid", "__name", "init_compat_module", "import_router", "init_compat_module", "init_compat_module", "CalendarView", "React_lazy", "SearchResult", "ColumnsView", "BoardContainer", "observer", "board", "display_version", "x", "BoardContext", "y", "profiler", "sensors", "log", "ui_state", "_", "React_suspense", "assert_never", "init_compat_module", "BoardBackground", "observer", "board_uid", "board_style", "image_url", "set_image_url", "d", "prev_board_uid", "set_prev_board_uid", "timeout", "A", "media_info_resource", "url", "board_background_image_url", "y", "img", "_", "background_style", "init_compat_module", "init_compat_module", "init_compat_module", "board_chooser_items", "element_type", "items", "onSelected", "sort_boards_alphabetically", "system_boards", "x", "is_system_board_uid", "normal_boards", "a", "b", "res", "chooser_item", "__name", "item", "key_prefix", "graphic", "_", "board_type", "board_uid_type", "title", "i18n", "meta", "Icon", "ListItem", "board_vanity_uri", "on_click", "MenuItem", "result", "MenuItemDivider", "e", "url", "BoardChooserMenu", "observer", "anchor", "items", "first_menu_item", "onOpen", "onClose", "onSelected", "sort_boards_alphabetically", "data_test_id", "is_open", "menu_ref", "b", "y", "menu_items", "board_chooser_items", "_", "Menu", "i18n", "running_on_mobile_device", "k", "x", "import_router", "init_compat_module", "init_compat_module", "HighlightBadge", "onClick", "margin_left", "type", "overlay", "className", "_", "classNames", "i18n", "__name", "_MeetState", "__publicField", "__name", "board", "runInAction", "makeObservable", "observable", "MeetState", "meet_state", "init_compat_module", "init_compat_module", "extendStatics", "__name", "d", "b", "p", "__extends", "__", "__assign", "s", "i", "Direction", "EventSource", "strings", "cssClasses", "navigationKeys", "jumpChipKeys", "emptyClientRect", "MDCChipFoundation", "_super", "__extends", "adapter", "_this", "__assign", "__name", "strings", "cssClasses", "selected", "shouldNotifyClients", "shouldRemove", "getRootRect", "getCheckmarkRect", "checkmarkRect", "rootRect", "evt", "shouldHandle", "widthIsAnimating", "opacityIsAnimating", "chipWidth_1", "removedAnnouncement", "shouldHideLeadingIcon", "shouldShowLeadingIcon", "key", "navigationKeys", "hasTrailingAction", "dir", "source", "jumpChipKeys", "EventSource", "Direction", "isRTL", "keyEvt", "isDeletable", "MDCFoundation", "INTERACTION_EVENTS", "MDCChip", "_super", "__extends", "__name", "selected", "shouldRemove", "root", "rippleFactory", "_this", "el", "foundation", "MDCRipple", "strings", "rippleAdapter", "__assign", "MDCRippleFoundation", "evt", "evtType", "adapter", "className", "target", "attr", "propertyName", "key", "source", "removedAnnouncement", "shouldIgnore", "value", "MDCChipFoundation", "shouldNotifyClients", "parent", "MDCComponent", "AnnouncerPriority", "announce", "message", "priority", "Announcer", "__name", "liveRegion", "existingLiveRegion", "el", "strings", "cssClasses", "MDCChipSetFoundation", "_super", "__extends", "adapter", "_this", "__assign", "__name", "strings", "cssClasses", "chipId", "_a", "index", "selected", "shouldIgnore", "chipIsSelected", "removedAnnouncement", "maxIndex", "nextIndex", "key", "source", "navigationKeys", "isRTL", "shouldIncrement", "isHome", "isEnd", "shouldJumpChips", "jumpChipKeys", "EventSource", "dir", "Direction", "shouldNotifyClients", "chipIndex", "chipCount", "i", "previouslySelectedChip", "previouslySelectedIndex", "MDCFoundation", "_a", "MDCChipFoundation", "INTERACTION_EVENT", "SELECTION_EVENT", "REMOVAL_EVENT", "NAVIGATION_EVENT", "CHIP_SELECTOR", "MDCChipSetFoundation", "idCounter", "MDCChipSet", "_super", "__extends", "__name", "root", "chipFactory", "el", "MDCChip", "_this", "chip", "evt", "chipEl", "adapter", "message", "announce", "index", "chipId", "className", "selected", "shouldNotifyClients", "chipElements", "i", "MDCComponent", "_ChipSet", "BaseComponent", "children", "className", "more_props", "_", "classNames", "MDCChipSet", "__name", "ChipSet", "_Chip", "icon", "primary", "trailing", "small", "other_props", "MDCChip", "Chip", "_BoardHistoryState", "__publicField", "__name", "ui_state", "can_call_faas", "Snackbar", "i18n", "runInAction", "ui_actions", "makeObservable", "observable", "BoardHistoryState", "board_history_state", "important_change_op_types", "BoardHistoryList", "observer", "search_visible", "show_my_changes", "show_important_only", "onChange", "list_ref", "A", "display_version", "current_board_uid", "x", "BoardContext", "changes", "set_changes", "d", "show_spinner_for", "set_show_spinner_for", "show_num", "set_show_num", "show_more", "q", "show_version", "index_str", "not_null", "change", "card", "y", "latest_board", "board_resource", "can_view_whole_history", "could_view_whole_history", "useCurrentBoardPermission", "calculate_changes", "can_edit_card", "can_add_comment", "useCardPermission", "modifications_allowed_in_latest_version", "is_plan_free_limit_reached", "are_there_versions_before_20210401", "show_cling_pro_teaser", "_", "SearchableList", "ListItem", "Icon", "i", "LoadingIndicator", "PrincipalInfo", "classNames", "RelDate", "CardSynopsisOneLiner", "Button", "HighlightBadge", "BoardHistory", "is_open", "on_close", "set_search_visible", "board", "set_show_my_changes", "set_show_important_only", "toggle_show_my_changes", "toggle_show_important_only", "on_toggle_search", "collapsed", "set_collapsed", "toggle_collapsed", "running_on_phone", "on_change_mobile", "open_help", "running_on_mobile_device", "cancel_event", "GlobalBackdrop", "IconButton", "k", "ChipSet", "Chip", "ObservingBoardHistory", "changes_map", "set_change", "changelog_entry", "card_was_on_board", "precedence", "current", "cur_precedence", "new_precedence", "changelog_is_clean_after", "seven_days_ago", "changelog_filter", "CLING_BOT", "current_user", "CardChangelogEntry", "collapse_card_changes", "comment", "result", "was_on_board_before", "has_important_change", "last_card_change", "init_compat_module", "ToggleSortBoardsAlphabetically", "observer", "display", "sort_boards_alphabetically", "current_user", "on_click", "q", "runInAction", "call_function", "PatchFullAccountRequest", "create_PatchUID", "PatchAccountSettings", "report_error", "_", "i18n", "IconButton", "SearchBox", "React_lazy", "TopToolbarItemsDesktopBoard", "observer", "open_drawer", "permissions", "is_dashboard", "board_info", "search_box_open", "ui_state", "_", "ui_actions", "MenuDrawerItem", "GoToHomeItem", "ToggleDesktopBoardChooserItem", "ToggleMainViewItem", "ClosedSearchItem", "OpenSearchItem", "TitleItem", "VideoMeetingButton", "ShareItem", "CollapseItem", "BoardMenuItem", "TopToolbarItemsMobileBoard", "BottomToolbarItemsMobileBoard", "__name", "board", "k", "ScrollIndicator", "GlobalBackdrop", "PeopleChooserItem", "BoardChooserItem", "IconButton", "running_on_mobile_device", "i18n", "props", "BoardTitle", "toggle", "q", "show_badge", "people_chooser_board_infos", "x", "board_chooser_board_infos", "is_menu_open", "set_is_menu_open", "d", "open_menu", "close_menu", "on_board_selected", "board_uid", "board_type", "board_uid_type", "goto_dashboard", "report_error", "goto_board", "add_board", "is_regular_board", "BoardChooserMenu", "board_chooser_props", "current_user", "TryClingPro", "Button", "ToggleSortBoardsAlphabetically", "is_people_board", "people_chooser_props", "toggle_collapse_expand_all", "is_columns", "disabled", "on_click", "runInAction", "meet_state", "num_participants", "meet_status_resource", "open_search_box", "e", "cancel_event", "search", "new_query_string", "end_search", "y", "React_suspense", "icon", "menu_ref", "A", "export_board", "export_board_state", "show_export_board_teaser", "empty_trashcan", "model_actions_default", "toggle_archived_cards", "open_trashcan", "derive_trashcan_uid", "open_clipboard", "derive_clipboard_uid", "print", "board_resource", "print_board", "email_markup", "archive_board", "unarchive_board", "remove_board", "leave_board", "open_help", "open_intercom", "is_board_archived", "search_on_all_boards", "show_share_board", "is_trashcan", "is_clipboard", "can_convert_to_email_markup", "can_view_history", "can_open_clipboard_trashcan", "can_print", "can_copy_board", "can_export_board", "could_export_board_in_cling_pro", "can_open_board_settings", "can_import_data", "can_show_archived_cards", "can_archive_board", "can_remove_board", "can_leave_board", "Menu", "MenuItem", "Icon", "MenuItemDivider", "board_history_state", "HighlightBadge", "init_compat_module", "TopToolbarItemsDesktopPublicBoard", "__name", "board_info", "in_app", "_", "ui_actions", "TitleItem", "SignUp", "ReturnToApp", "CollapseItem", "BottomToolbarItemsDesktopPublicBoard", "observer", "TypographyLogo", "HolyTrinityOfVeryImportantLinks", "TopToolbarItemsMobilePublicBoard", "is_dashboard", "PublicBoardMenuItem", "board_resource", "BottomToolbarItemsMobilePublicBoard", "props", "show_scroll_indicator", "ui_state", "k", "ScrollIndicator", "close", "q", "Button", "i18n", "BoardTitle", "board", "print", "print_board", "open_help", "open_intercom", "toggle_collapse_expand_all", "Menu", "IconButton", "MenuItem", "Icon", "MenuItemDivider", "PublicMenuLinkItem", "TopToolbarItems", "__name", "is_dashboard", "board_info", "permissions", "open_drawer", "is_cling_hp", "running_on_mobile_device", "_", "TopToolbarItemsMobileWebsite", "TopToolbarItemsDesktopWebsite", "TopToolbarItemsMobilePublicBoard", "TopToolbarItemsDesktopPublicBoard", "BottomMobileToolbarItems", "board", "board_resource", "BottomToolbarItemsMobileWebsite", "BottomToolbarItemsMobilePublicBoard", "BottomDesktopToolbars", "BottomToolbarItemsDesktopWebsite", "BottomToolbarItemsDesktopPublicBoard", "init_compat_module", "_BottomAppBar", "N", "children", "className", "html_props", "_", "classNames", "__name", "BottomAppBar", "_extends", "target", "i", "source", "key", "__name", "_objectWithoutPropertiesLoose", "source", "excluded", "target", "sourceKeys", "key", "i", "__name", "_setPrototypeOf", "p", "__name", "o", "_inheritsLoose", "subClass", "superClass", "_setPrototypeOf", "__name", "hasClass", "element", "className", "__name", "addClass", "element", "className", "hasClass", "__name", "replaceClassName", "origClass", "classToRemove", "__name", "removeClass", "element", "className", "init_compat_module", "init_compat_module", "config_default", "init_compat_module", "TransitionGroupContext_default", "Rn", "forceReflow", "__name", "node", "UNMOUNTED", "EXITED", "ENTERING", "ENTERED", "EXITING", "Transition", "_React$Component", "_inheritsLoose", "props", "context", "_this", "parentGroup", "appear", "initialStatus", "__name", "_ref", "prevState", "nextIn", "_proto", "prevProps", "nextStatus", "status", "timeout", "exit", "enter", "mounting", "node", "Rn", "forceReflow", "_this2", "appearing", "_ref2", "maybeNode", "maybeAppearing", "timeouts", "enterTimeout", "config_default", "_this3", "nextState", "callback", "_this4", "active", "event", "handler", "doesNotHaveTimeoutOrListener", "_ref3", "maybeNextCallback", "_this$props", "children", "_in", "_mountOnEnter", "_unmountOnExit", "_appear", "_enter", "_exit", "_timeout", "_addEndListener", "_onEnter", "_onEntering", "_onEntered", "_onExit", "_onExiting", "_onExited", "_nodeRef", "childProps", "_objectWithoutPropertiesLoose", "TransitionGroupContext_default", "noop", "Transition_default", "_addClass", "__name", "node", "classes", "c", "addClass", "removeClass", "CSSTransition", "_React$Component", "_inheritsLoose", "_this", "_len", "args", "_key", "maybeNode", "maybeAppearing", "_this$resolveArgument", "appearing", "_this$resolveArgument2", "type", "_this$resolveArgument3", "_this$resolveArgument4", "_this$resolveArgument5", "_this$resolveArgument6", "classNames", "isStringClassNames", "prefix", "baseClassName", "activeClassName", "doneClassName", "_proto", "phase", "className", "_this$getClassNames", "forceReflow", "_this$appliedClasses$", "_this$props", "_", "props", "_objectWithoutPropertiesLoose", "Rn", "Transition_default", "_extends", "CSSTransition_default", "ObservingBoardHistory", "React_lazy", "BoardPage", "observer", "is_drawer_open", "set_is_drawer_open", "d", "open_drawer", "q", "ui_actions", "y", "profiler", "board", "display_version", "current_board_uid", "x", "BoardContext", "close_drawer", "on_drawer_open", "board_info", "board_style", "board_info_resource", "permissions", "current_user", "is_dashboard", "board_uid_type", "document_title", "ui_state", "i18n", "Page", "board_name", "num_changed_user_boards", "top_app_bar", "_", "TopAppBar", "TopToolbarItems", "classNames", "GlobalBackdrop", "bottom_app_bar_shown", "running_on_mobile_device", "bottom_app_bar", "BottomAppBar", "BottomMobileToolbarItems", "drawer", "css_transition_enter_class", "BoardBackground", "CSSTransition_default", "BoardContainer", "BottomDesktopToolbars", "init_compat_module", "Debug", "observer", "mode", "set_mode", "d", "maximize", "q", "minimize", "copy", "range", "pre_error", "selection", "current_user", "_", "debug_state", "IconButton", "offline", "num_errors", "init_compat_module", "TaskEditDialog", "React_lazy", "SendToBoardDialog", "CheckoutDialog", "QuotaLimitExceededDialog", "AccountSettingsDialog", "ProFeatureTeaserDialog", "ClingProTeaser", "BoardSettingsDialogContainer", "ShareBoardDialog", "StartConversationDialog", "ImportDataDialog", "DiagnosticsDialog", "TeamsDialog", "PromptContainer", "CopyBoardDialog", "AddBoardDialog", "ReportAbuseDialog", "DialogContainer", "observer", "dialog", "ui_state", "_", "ui_actions", "React_suspense", "import_buffer", "_port", "send_message_to_worker", "msg", "_port", "__name", "OrganizationsPage", "React_lazy", "AddOrganizationPage", "DragAndDropGhost", "Meet", "x", "VideoPlayerContainer", "ShareTargetPage", "EmailMarkupPage", "CheckoutPage", "_App", "props", "__publicField", "running_on_mobile_device", "suppress_context_menu", "__name", "listener", "e", "target", "is_elm_inside_an_active_rich_text_editor", "reaction", "ui_state", "highlighted_card_state", "board", "board_resource", "ui_actions", "dispose", "error", "report_error", "fatal_error_url", "error_to_string", "log", "_", "k", "BoardContext", "PublicBoardWithCustomURI", "BoardOrCardPage", "BoardPage", "DialogContainer", "ObservingSnackbar", "LazyVideoPlayerContainer", "Debug", "SimpleTooltipContainer", "App", "vanity_text_and_uid", "card_uid", "open_comments", "set_ui_state_current_board_uid", "q", "props_board_uid", "props_card_uid", "props_open_comments", "board_uid", "is_BoardUID", "board_type", "board_uid_type", "derive_dashboard_uid", "current_user", "categorize_error", "as_BoardUID", "goto_dashboard", "sensors", "runInAction", "board_history_state", "prev_uid", "set_prev_uid", "d", "uid", "y", "cur_board_uid", "BoardUID_prefix", "encode_b62", "useBoardChange", "LazyMeet", "observer", "meet_state", "_", "React_suspense", "Meet", "LazyVideoPlayerContainer", "video_player_state", "VideoPlayerContainer", "last_board_uid", "last_board_change_at", "useBoardChange", "__name", "y", "current_board_uid", "ui_state", "ui_actions", "board_resource", "board", "Snackbar", "report_user_event", "PageView", "error", "report_info", "ObservingSnackbar", "classNames", "NewVersionAvailableHint", "update_web_app", "q", "reason", "send_message_to_worker", "current_board", "x", "BoardContext", "StickySnackbar", "i18n", "stem_map", "i", "c", "word_characters", "valid_characters", "gap_expr", "supports_re_look_behind", "char_as_regex", "mapped_c", "escape_regex", "__name", "reverse_stemming", "s", "fuzzy_matcher", "search_term", "opts", "search_term_lower", "search_char_exprs", "x", "re", "mixed_search_term", "mixed_search_char_exprs", "compiled", "text", "result", "match", "ignored", "full_match", "is_full_match", "match_end_index", "score", "at_word_start", "markup_split", "indices", "start_index", "searchable_text_fields", "_BoardSearch", "board_info", "board_setting", "principals", "me_account_uid", "__publicField", "x", "Board", "uid", "regular_cards", "board_archived", "board_acl_all", "items", "card", "comment", "board_uid", "y", "search_item", "query", "opts", "prepared_principals", "Account", "full_name", "result", "field_expressions", "assert_never", "search_items", "text_expressions", "text_expression", "search_term_matches", "matcher", "fuzzy_matcher", "text_field", "text", "final_text", "matches", "key", "res", "score", "fast_string_hash", "flatten", "order", "limit_cards", "a", "b", "sort_order", "order_value_fn", "__name", "v", "num_cards", "i", "principal_uids_cache", "match_principal_uids", "expr_term", "principal_uids", "is_AccountUID", "is_TeamUID", "board_search_items", "archived", "keep", "keep_archived", "board_matched_explicitely", "expr", "from", "to", "board", "source", "texts", "obj", "Card", "target_board_uid", "extract_linked_board_and_card_uid", "escape_html", "modified_at", "last_comment", "Comment", "BoardSearch", "inject_cling_hp_code", "cling_hp_info_page", "board", "board_resource", "ui_state", "pro_card", "x", "team_card", "report_error", "set_user_currency", "adapt_info_board", "remove_all_but_first_column", "__name", "config_card", "report_info", "first_column", "not_null", "runInAction", "title", "found", "report_user_event_queue", "pLimit", "start_public_board", "safe_session_storage", "parse_source_campaign", "user_locale", "query_param", "is_cling_hp", "cling_hp_info_page", "session_uid", "create_SessionUID", "set_fatal_error_url_params", "CLING_ANONYMOUS", "frontend_only", "dev", "init_dev", "misc_init", "set_global_css_classes", "load_js", "goto_board", "init_frontend_only", "await_before_render", "preload_assets", "current_user", "CurrentUser", "CLING_ANONYMOUS_FULL_ACCOUNT", "AccountAnalytics", "init", "client", "running_on_mobile_device", "__name", "nop", "user_event", "browser_env", "board_info", "board_info_resource", "board_name", "SourceCampaign", "call_function", "ReportUserEventRequest", "report_error", "ui_state", "init_log_event_reporting", "faas_trace_provider", "req", "caches", "request_sync", "board", "request_sync_factory", "uid", "type", "board_search", "BoardSearch", "board_uid", "account_resource", "query", "assert", "thumbnail_ext", "is_avif_supported", "is_webp_supported", "args", "not_null", "inject_cling_hp_code", "D", "_", "App", "ui_actions", "content", "board_buf", "from_buffer", "Board", "to_buffer", "x", "buf", "account", "Account", "media_info", "MediaInfo", "url_info", "URLInfo", "derive_URLUID", "log", "SyncEntityType", "data", "init", "start_public_board", "report_error"]
}