{"version":3,"sources":["../../src/condo/types.ts","../../src/condo/api.ts","../../src/condo/avatar.tsx","../../src/condo/scroller.tsx","../../src/condo/gates.ts","../../src/condo/identity.ts","../../src/condo/labels.ts","../../src/condo/community.tsx","../../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/shared/src/utils.ts","../../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/defaultAttributes.ts","../../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/Icon.ts","../../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/createLucideIcon.ts","../../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/circle-question-mark.ts","../../node_modules/.pnpm/lucide-react@0.560.0_react@19.2.8/node_modules/lucide-react/src/icons/message-circle.ts","../../src/condo/overlay.tsx"],"names":["useState","useEffect","jsx","useRef","useCallback","useLayoutEffect","jsxs","Fragment","useMemo","forwardRef","createElement","__iconNode"],"mappings":"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","file":"index.cjs","sourcesContent":["export const COMMUNITY_TYPES = [\"comment\", \"question\"] as const;\nexport type CommunityType = (typeof COMMUNITY_TYPES)[number];\n\nexport const COMMUNITY_TARGET_KINDS = [\"stream\", \"vod\"] as const;\nexport type CommunityTargetKind = (typeof COMMUNITY_TARGET_KINDS)[number];\n\nexport type StreamCommunityFlags = {\n\tcommentsEnabled: boolean;\n\tcommentsAfterEnd: boolean;\n\tcommentsOpen: boolean;\n\tqaEnabled: boolean;\n\tqaOpen: boolean;\n};\n\nexport type VodCommunityFlags = {\n\tcommentsEnabled: boolean;\n\tcommentsOpen: boolean;\n};\n\nexport type CommunityFlags = StreamCommunityFlags | VodCommunityFlags;\n\nexport type CommunityAnswer = {\n\tbody: string;\n\tdisplayName: string | null;\n\tpicture: string | null;\n\tansweredAt: number;\n};\n\nexport type CommunityItem = {\n\tid: string;\n\ttype: CommunityType;\n\tparentId: string | null;\n\tbody: string;\n\tdisplayName: string;\n\tpicture: string | null;\n\tguestId: string;\n\tupvoteCount: number;\n\tpinnedAt: number | null;\n\thighlightedAt: number | null;\n\thiddenAt?: number | null;\n\tdismissedAt?: number | null;\n\tanswer: CommunityAnswer | null;\n\tcreatedAt: number;\n\tupdatedAt: number;\n\treplies?: CommunityItem[];\n};\n\nexport type CommunityList = {\n\titems: CommunityItem[];\n\tnextCursor: string | null;\n};\n\nexport type CommunityCreateInput = {\n\ttype: CommunityType;\n\tbody: string;\n\tdisplayName?: string;\n\tpicture?: string | null;\n\tguestId?: string;\n\tparentId?: string;\n};\n\nexport type CommunityPatchInput = {\n\thidden?: boolean;\n\tpinned?: boolean;\n\thighlighted?: boolean;\n\tdismissed?: boolean;\n\tdeleted?: boolean;\n\tanswer?: {\n\t\tbody: string;\n\t\tdisplayName?: string;\n\t\tpicture?: string | null;\n\t} | null;\n};\n\nexport type CommunitySettingsPatch = {\n\tcommentsEnabled?: boolean;\n\tcommentsAfterEnd?: boolean;\n\tqaEnabled?: boolean;\n};\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction asString(value: unknown): string | null {\n\treturn typeof value === \"string\" ? value : null;\n}\n\nfunction asNumber(value: unknown): number | null {\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: \"stream\",\n): StreamCommunityFlags | null;\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: \"vod\",\n): VodCommunityFlags | null;\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: CommunityTargetKind,\n): CommunityFlags | null;\nexport function parseCommunityFlags(\n\tvalue: unknown,\n\tkind: CommunityTargetKind,\n): CommunityFlags | null {\n\tif (!isRecord(value)) return null;\n\tif (kind === \"vod\") {\n\t\tif (typeof value.commentsEnabled !== \"boolean\") return null;\n\t\treturn {\n\t\t\tcommentsEnabled: value.commentsEnabled,\n\t\t\tcommentsOpen:\n\t\t\t\ttypeof value.commentsOpen === \"boolean\"\n\t\t\t\t\t? value.commentsOpen\n\t\t\t\t\t: value.commentsEnabled,\n\t\t};\n\t}\n\tif (\n\t\ttypeof value.commentsEnabled !== \"boolean\" ||\n\t\ttypeof value.commentsAfterEnd !== \"boolean\" ||\n\t\ttypeof value.qaEnabled !== \"boolean\"\n\t) {\n\t\treturn null;\n\t}\n\treturn {\n\t\tcommentsEnabled: value.commentsEnabled,\n\t\tcommentsAfterEnd: value.commentsAfterEnd,\n\t\tcommentsOpen:\n\t\t\ttypeof value.commentsOpen === \"boolean\"\n\t\t\t\t? value.commentsOpen\n\t\t\t\t: value.commentsEnabled,\n\t\tqaEnabled: value.qaEnabled,\n\t\tqaOpen: typeof value.qaOpen === \"boolean\" ? value.qaOpen : false,\n\t};\n}\n\nfunction parseAnswer(value: unknown): CommunityAnswer | null {\n\tif (!isRecord(value)) return null;\n\tconst body = asString(value.body);\n\tconst answeredAt = asNumber(value.answeredAt);\n\tif (!body || answeredAt == null) return null;\n\treturn {\n\t\tbody,\n\t\tdisplayName: asString(value.displayName),\n\t\tpicture: asString(value.picture),\n\t\tansweredAt,\n\t};\n}\n\nexport function parseCommunityItem(value: unknown): CommunityItem | null {\n\tif (!isRecord(value)) return null;\n\tconst id = asString(value.id);\n\tconst body = asString(value.body);\n\tconst displayName = asString(value.displayName);\n\tconst guestId = asString(value.guestId);\n\tconst type = value.type === \"question\" ? \"question\" : \"comment\";\n\tconst createdAt = asNumber(value.createdAt);\n\tif (!id || !body || !displayName || !guestId || createdAt == null) {\n\t\treturn null;\n\t}\n\tconst replies = Array.isArray(value.replies)\n\t\t? value.replies\n\t\t\t\t.map((row) => parseCommunityItem(row))\n\t\t\t\t.filter((row): row is CommunityItem => row != null)\n\t\t: [];\n\treturn {\n\t\tid,\n\t\ttype,\n\t\tparentId: asString(value.parentId),\n\t\tbody,\n\t\tdisplayName,\n\t\tpicture: asString(value.picture),\n\t\tguestId,\n\t\tupvoteCount: asNumber(value.upvoteCount) ?? 0,\n\t\tpinnedAt: asNumber(value.pinnedAt),\n\t\thighlightedAt: asNumber(value.highlightedAt),\n\t\thiddenAt: asNumber(value.hiddenAt),\n\t\tdismissedAt: asNumber(value.dismissedAt),\n\t\tanswer: parseAnswer(value.answer),\n\t\tcreatedAt,\n\t\tupdatedAt: asNumber(value.updatedAt) ?? createdAt,\n\t\treplies,\n\t};\n}\n\nexport function parseCommunityList(value: unknown): CommunityList {\n\tif (!isRecord(value) || !Array.isArray(value.items)) {\n\t\treturn { items: [], nextCursor: null };\n\t}\n\treturn {\n\t\titems: value.items\n\t\t\t.map((row) => parseCommunityItem(row))\n\t\t\t.filter((row): row is CommunityItem => row != null),\n\t\tnextCursor: asString(value.nextCursor),\n\t};\n}\n\nexport function hasQa(flags: CommunityFlags): flags is StreamCommunityFlags {\n\treturn \"qaEnabled\" in flags;\n}\n","import {\n\tparseCommunityFlags,\n\tparseCommunityItem,\n\tparseCommunityList,\n\ttype CommunityCreateInput,\n\ttype CommunityFlags,\n\ttype CommunityItem,\n\ttype CommunityList,\n\ttype CommunityPatchInput,\n\ttype CommunitySettingsPatch,\n\ttype CommunityTargetKind,\n\ttype CommunityType,\n} from \"./types\";\n\nexport class CommunityApiError extends Error {\n\treadonly status: number;\n\treadonly body: unknown;\n\n\tconstructor(status: number, message: string, body: unknown) {\n\t\tsuper(message);\n\t\tthis.name = \"CommunityApiError\";\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n}\n\nexport type CommunityClientOptions = {\n\tapiUrl: string;\n\ttargetKind: CommunityTargetKind;\n\ttargetId: string;\n\tmode?: \"viewer\" | \"control\";\n\tfetchFn?: typeof fetch;\n\theaders?: Record<string, string>;\n};\n\nfunction collectionPath(\n\tkind: CommunityTargetKind,\n\tid: string,\n\tmode: \"viewer\" | \"control\",\n): string {\n\tconst plural = kind === \"stream\" ? \"streams\" : \"vods\";\n\tconst prefix = mode === \"viewer\" ? \"/public\" : \"\";\n\treturn `${prefix}/${plural}/${encodeURIComponent(id)}/community`;\n}\n\nexport function createCommunityClient(options: CommunityClientOptions) {\n\tconst apiUrl = options.apiUrl.replace(/\\/$/, \"\");\n\tconst fetchFn = options.fetchFn ?? fetch;\n\tconst mode = options.mode ?? \"viewer\";\n\tconst base = collectionPath(options.targetKind, options.targetId, mode);\n\n\tasync function request<T>(\n\t\tpath: string,\n\t\tinit: RequestInit = {},\n\t\tparse: (value: unknown) => T,\n\t): Promise<T> {\n\t\tconst headers = new Headers(init.headers);\n\t\tfor (const [key, value] of Object.entries(options.headers ?? {})) {\n\t\t\theaders.set(key, value);\n\t\t}\n\t\theaders.set(\"accept\", \"application/json\");\n\t\tif (init.body && !headers.has(\"content-type\")) {\n\t\t\theaders.set(\"content-type\", \"application/json\");\n\t\t}\n\t\tconst res = await fetchFn(`${apiUrl}${path}`, { ...init, headers });\n\t\tconst body: unknown = await res.json().catch(() => ({}));\n\t\tif (!res.ok) {\n\t\t\tconst error =\n\t\t\t\ttypeof body === \"object\" &&\n\t\t\t\tbody !== null &&\n\t\t\t\t\"error\" in body &&\n\t\t\t\ttypeof (body as { error: unknown }).error === \"string\"\n\t\t\t\t\t? (body as { error: string }).error\n\t\t\t\t\t: `Livo community ${res.status}`;\n\t\t\tthrow new CommunityApiError(res.status, error, body);\n\t\t}\n\t\treturn parse(body);\n\t}\n\n\treturn {\n\t\tlist(input: { type?: CommunityType; q?: string; cursor?: string } = {}) {\n\t\t\tconst params = new URLSearchParams();\n\t\t\tif (input.type) params.set(\"type\", input.type);\n\t\t\tif (input.q) params.set(\"q\", input.q);\n\t\t\tif (input.cursor) params.set(\"cursor\", input.cursor);\n\t\t\tconst query = params.toString();\n\t\t\treturn request(`${base}${query ? `?${query}` : \"\"}`, {}, (value) =>\n\t\t\t\tparseCommunityList(value),\n\t\t\t);\n\t\t},\n\t\tcreate(input: CommunityCreateInput) {\n\t\t\treturn request(\n\t\t\t\tbase,\n\t\t\t\t{ method: \"POST\", body: JSON.stringify(input) },\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tpatch(itemId: string, input: CommunityPatchInput) {\n\t\t\treturn request(\n\t\t\t\t`${base}/${encodeURIComponent(itemId)}`,\n\t\t\t\t{ method: \"PATCH\", body: JSON.stringify(input) },\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tupvote(itemId: string, guestId: string) {\n\t\t\treturn request(\n\t\t\t\t`${base}/${encodeURIComponent(itemId)}/upvote`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\tbody: JSON.stringify({ guestId }),\n\t\t\t\t},\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tanswer(\n\t\t\titemId: string,\n\t\t\tinput: {\n\t\t\t\tbody: string;\n\t\t\t\tdisplayName: string;\n\t\t\t\tpicture?: string | null;\n\t\t\t\tguestId: string;\n\t\t\t},\n\t\t) {\n\t\t\treturn request(\n\t\t\t\t`${base}/${encodeURIComponent(itemId)}/answer`,\n\t\t\t\t{ method: \"POST\", body: JSON.stringify(input) },\n\t\t\t\t(value) => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null && \"item\" in value\n\t\t\t\t\t\t\t? (value as { item: unknown }).item\n\t\t\t\t\t\t\t: value;\n\t\t\t\t\tconst item = parseCommunityItem(record);\n\t\t\t\t\tif (!item) throw new CommunityApiError(500, \"Invalid item\", value);\n\t\t\t\t\treturn item;\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tcanAnswer(guestId: string) {\n\t\t\tconst params = new URLSearchParams({ guestId });\n\t\t\treturn request(\n\t\t\t\t`${base}/can-answer?${params.toString()}`,\n\t\t\t\t{},\n\t\t\t\t(value): { canAnswer: boolean } => {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\"canAnswer\" in value &&\n\t\t\t\t\t\ttypeof (value as { canAnswer: unknown }).canAnswer === \"boolean\"\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn { canAnswer: (value as { canAnswer: boolean }).canAnswer };\n\t\t\t\t\t}\n\t\t\t\t\treturn { canAnswer: false };\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t\tpatchSettings(input: CommunitySettingsPatch) {\n\t\t\tconst plural = options.targetKind === \"stream\" ? \"streams\" : \"vods\";\n\t\t\treturn request(\n\t\t\t\t`/${plural}/${encodeURIComponent(options.targetId)}`,\n\t\t\t\t{ method: \"PATCH\", body: JSON.stringify(input) },\n\t\t\t\t(value): CommunityFlags | null => {\n\t\t\t\t\tconst record =\n\t\t\t\t\t\ttypeof value === \"object\" && value !== null\n\t\t\t\t\t\t\t? (value as Record<string, unknown>)\n\t\t\t\t\t\t\t: null;\n\t\t\t\t\tconst nested =\n\t\t\t\t\t\trecord && typeof record.stream === \"object\" && record.stream\n\t\t\t\t\t\t\t? (record.stream as Record<string, unknown>).community\n\t\t\t\t\t\t\t: record && typeof record.vod === \"object\" && record.vod\n\t\t\t\t\t\t\t\t? (record.vod as Record<string, unknown>).community\n\t\t\t\t\t\t\t\t: record?.community;\n\t\t\t\t\treturn parseCommunityFlags(nested, options.targetKind);\n\t\t\t\t},\n\t\t\t);\n\t\t},\n\t};\n}\n\nexport type CommunityClient = ReturnType<typeof createCommunityClient>;\nexport type { CommunityList, CommunityItem };\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\nexport function communityAvatarInitial(name: string): string {\n\tconst trimmed = name.trim();\n\treturn (trimmed[0] ?? \"?\").toUpperCase();\n}\n\nexport function CommunityAvatar({\n\tname,\n\tsrc,\n\tclassName,\n}: {\n\tname: string;\n\tsrc?: string | null;\n\tclassName?: string;\n}) {\n\tconst [failed, setFailed] = useState(false);\n\tconst url = src?.trim() || null;\n\n\tuseEffect(() => {\n\t\tsetFailed(false);\n\t}, [url]);\n\n\tconst showImage = Boolean(url) && !failed;\n\tconst classes = [\"livo-condo-avatar\", className].filter(Boolean).join(\" \");\n\n\treturn (\n\t\t<span\n\t\t\taria-hidden\n\t\t\tclassName={showImage ? classes : `${classes} livo-condo-avatar--fallback`}\n\t\t\tdata-community-avatar={showImage ? \"image\" : \"fallback\"}\n\t\t>\n\t\t\t{showImage ? (\n\t\t\t\t<img\n\t\t\t\t\tsrc={url ?? undefined}\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tonError={() => {\n\t\t\t\t\t\tif (!url) return;\n\t\t\t\t\t\tconsole.warn(`Community avatar failed to load: ${url}`);\n\t\t\t\t\t\tsetFailed(true);\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\tcommunityAvatarInitial(name)\n\t\t\t)}\n\t\t</span>\n\t);\n}\n","\"use client\";\n\nimport {\n\tuseCallback,\n\tuseLayoutEffect,\n\tuseRef,\n\tuseState,\n\ttype ReactNode,\n} from \"react\";\n\nconst BOTTOM_THRESHOLD_PX = 48;\n\nexport function CommunityMessageScroller({\n\tchildren,\n\tfollowKey,\n\tjumpLabel,\n\tempty = false,\n\tclassName,\n}: {\n\tchildren: ReactNode;\n\tfollowKey: string | number;\n\tjumpLabel: string;\n\tempty?: boolean;\n\tclassName?: string;\n}) {\n\tconst viewportRef = useRef<HTMLDivElement>(null);\n\tconst pinnedRef = useRef(true);\n\tconst [pinned, setPinned] = useState(true);\n\n\tconst scrollToEnd = useCallback(() => {\n\t\tconst el = viewportRef.current;\n\t\tif (!el) return;\n\t\tel.scrollTop = el.scrollHeight;\n\t\tpinnedRef.current = true;\n\t\tsetPinned(true);\n\t}, []);\n\n\tuseLayoutEffect(() => {\n\t\tif (pinnedRef.current) scrollToEnd();\n\t}, [followKey, scrollToEnd]);\n\n\tfunction onScroll() {\n\t\tconst el = viewportRef.current;\n\t\tif (!el) return;\n\t\tconst next =\n\t\t\tel.scrollHeight - el.scrollTop - el.clientHeight <= BOTTOM_THRESHOLD_PX;\n\t\tpinnedRef.current = next;\n\t\tsetPinned(next);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={[\"livo-condo-scroller\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-slot=\"message-scroller\"\n\t\t>\n\t\t\t<div\n\t\t\t\tref={viewportRef}\n\t\t\t\trole=\"log\"\n\t\t\t\taria-live=\"polite\"\n\t\t\t\tclassName=\"livo-condo-scroller__viewport\"\n\t\t\t\tdata-slot=\"message-scroller-viewport\"\n\t\t\t\tonScroll={onScroll}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"livo-condo-scroller__content\"\n\t\t\t\t\tdata-slot=\"message-scroller-content\"\n\t\t\t\t\tdata-empty={empty ? \"true\" : undefined}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t{empty || pinned ? null : (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tclassName=\"livo-condo-jump\"\n\t\t\t\t\tdata-slot=\"message-scroller-button\"\n\t\t\t\t\tonClick={scrollToEnd}\n\t\t\t\t>\n\t\t\t\t\t{jumpLabel}\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n","import type { CommunityFlags, CommunityType } from \"./types\";\nimport { hasQa } from \"./types\";\n\nexport function commentsOpen(flags: CommunityFlags): boolean {\n\treturn flags.commentsOpen;\n}\n\nexport function qaOpen(flags: CommunityFlags): boolean {\n\treturn hasQa(flags) && flags.qaOpen;\n}\n\nexport function canPost(flags: CommunityFlags, type: CommunityType): boolean {\n\tif (type === \"question\") return qaOpen(flags);\n\treturn commentsOpen(flags);\n}\n\nexport function showQaTab(flags: CommunityFlags): boolean {\n\treturn hasQa(flags) && flags.qaEnabled;\n}\n\nexport function communityFeedEnabled(\n\tflags: CommunityFlags,\n\ttype: CommunityType,\n): boolean {\n\tswitch (type) {\n\t\tcase \"comment\":\n\t\t\treturn flags.commentsEnabled;\n\t\tcase \"question\":\n\t\t\treturn showQaTab(flags);\n\t\tdefault: {\n\t\t\tconst _never: never = type;\n\t\t\treturn _never;\n\t\t}\n\t}\n}\n","const GUEST_STORAGE_KEY = \"livo-community-guest-id\";\nexport const COMMUNITY_IDENTITY_KEY = \"livo-community-identity\";\nexport const DISPLAY_NAME_MAX = 80;\nexport const PICTURE_URL_MAX = 500;\n\nexport type CommunityViewerIdentity = {\n\tdisplayName: string;\n\tpicture: string | null;\n};\n\nfunction randomGuestId(): string {\n\tif (typeof crypto !== \"undefined\" && \"randomUUID\" in crypto) {\n\t\treturn crypto.randomUUID();\n\t}\n\treturn `guest-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction storageOrUndefined(\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): Pick<Storage, \"getItem\" | \"setItem\"> | undefined {\n\tif (storage) return storage;\n\tif (typeof localStorage === \"undefined\") return undefined;\n\treturn localStorage;\n}\n\nexport function communityGuestId(\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): string {\n\tconst store = storageOrUndefined(storage);\n\tif (!store) return randomGuestId();\n\tconst existing = store.getItem(GUEST_STORAGE_KEY)?.trim();\n\tif (existing) return existing;\n\tconst created = randomGuestId();\n\tstore.setItem(GUEST_STORAGE_KEY, created);\n\treturn created;\n}\n\nexport function sanitizeDisplayName(value: string | null | undefined): string {\n\treturn (value ?? \"\").trim().slice(0, DISPLAY_NAME_MAX);\n}\n\nexport function sanitizePictureUrl(\n\tvalue: string | null | undefined,\n): string | null {\n\tconst trimmed = (value ?? \"\").trim();\n\tif (!trimmed || trimmed.length > PICTURE_URL_MAX) return null;\n\ttry {\n\t\tconst url = new URL(trimmed);\n\t\tif (url.protocol !== \"http:\" && url.protocol !== \"https:\") return null;\n\t\treturn url.href;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function loadStoredCommunityIdentity(\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): CommunityViewerIdentity | null {\n\tconst store = storageOrUndefined(storage);\n\tconst raw = store?.getItem(COMMUNITY_IDENTITY_KEY);\n\tif (!raw) return null;\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(raw);\n\t\tif (\n\t\t\ttypeof parsed !== \"object\" ||\n\t\t\tparsed === null ||\n\t\t\tArray.isArray(parsed)\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\tconst record = parsed as Record<string, unknown>;\n\t\tconst displayName = sanitizeDisplayName(\n\t\t\ttypeof record.displayName === \"string\" ? record.displayName : \"\",\n\t\t);\n\t\tif (!displayName) return null;\n\t\treturn {\n\t\t\tdisplayName,\n\t\t\tpicture: sanitizePictureUrl(\n\t\t\t\ttypeof record.picture === \"string\" ? record.picture : null,\n\t\t\t),\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nexport function saveStoredCommunityIdentity(\n\tidentity: CommunityViewerIdentity,\n\tstorage?: Pick<Storage, \"getItem\" | \"setItem\">,\n): CommunityViewerIdentity | null {\n\tconst displayName = sanitizeDisplayName(identity.displayName);\n\tif (!displayName) return null;\n\tconst next = {\n\t\tdisplayName,\n\t\tpicture: sanitizePictureUrl(identity.picture),\n\t};\n\tstorageOrUndefined(storage)?.setItem(\n\t\tCOMMUNITY_IDENTITY_KEY,\n\t\tJSON.stringify(next),\n\t);\n\treturn next;\n}\n","export type CommunityLabels = {\n\tcomments: string;\n\tqa: string;\n\tcomposer: string;\n\tquestionComposer: string;\n\treply: string;\n\tsend: string;\n\tname: string;\n\tnamePlaceholder: string;\n\tpostingAs: string;\n\teditName: string;\n\tsaveName: string;\n\tclosed: string;\n\tqaClosed: string;\n\temptyComments: string;\n\temptyQuestions: string;\n\tjumpToLatest: string;\n\tpinned: string;\n\tlive: string;\n\tpin: string;\n\tunpin: string;\n\thide: string;\n\tunhide: string;\n\tremove: string;\n\thighlight: string;\n\tdismiss: string;\n\tanswer: string;\n\tupvote: string;\n\tsettings: string;\n\tcommentsEnabled: string;\n\tcommentsAfterEnd: string;\n\tqaEnabled: string;\n\tcommentsHelp: string;\n\tcommentsAfterEndHelp: string;\n\tqaHelp: string;\n};\n\nexport const communityLabels: CommunityLabels = {\n\tcomments: \"Comments\",\n\tqa: \"Q&A\",\n\tcomposer: \"Write a comment\",\n\tquestionComposer: \"Ask a question\",\n\treply: \"Reply\",\n\tsend: \"Send\",\n\tname: \"Display name\",\n\tnamePlaceholder: \"Your name\",\n\tpostingAs: \"Posting as {name}\",\n\teditName: \"Edit name\",\n\tsaveName: \"Save\",\n\tclosed: \"Comments are closed\",\n\tqaClosed: \"Q&A is closed\",\n\temptyComments: \"No comments yet\",\n\temptyQuestions: \"No questions yet\",\n\tjumpToLatest: \"Jump to latest\",\n\tpinned: \"Pinned\",\n\tlive: \"Live\",\n\tpin: \"Pin\",\n\tunpin: \"Unpin\",\n\thide: \"Hide\",\n\tunhide: \"Unhide\",\n\tremove: \"Delete\",\n\thighlight: \"Highlight\",\n\tdismiss: \"Dismiss\",\n\tanswer: \"Answer\",\n\tupvote: \"Upvote\",\n\tsettings: \"Community\",\n\tcommentsEnabled: \"Comments\",\n\tcommentsAfterEnd: \"Keep comments open after the event\",\n\tqaEnabled: \"Live Q&A\",\n\tcommentsHelp: \"Viewers can comment on this video.\",\n\tcommentsAfterEndHelp:\n\t\t\"When off, comments close as soon as the live event ends.\",\n\tqaHelp: \"Questions are only accepted while the event is live.\",\n};\n","\"use client\";\n\nimport {\n\tuseCallback,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\ttype FormEvent,\n} from \"react\";\nimport { CommunityApiError, createCommunityClient } from \"./api\";\nimport { CommunityAvatar } from \"./avatar\";\nimport { CommunityMessageScroller } from \"./scroller\";\nimport {\n\tcanPost,\n\tcommentsOpen,\n\tcommunityFeedEnabled,\n\tqaOpen,\n\tshowQaTab,\n} from \"./gates\";\nimport {\n\tcommunityGuestId,\n\tloadStoredCommunityIdentity,\n\tsanitizeDisplayName,\n\tsanitizePictureUrl,\n\tsaveStoredCommunityIdentity,\n} from \"./identity\";\nimport { communityLabels, type CommunityLabels } from \"./labels\";\nimport {\n\thasQa,\n\ttype CommunityFlags,\n\ttype CommunityItem,\n\ttype CommunitySettingsPatch,\n\ttype CommunityTargetKind,\n\ttype CommunityType,\n} from \"./types\";\n\nexport type LivoCommunityProps = {\n\tapiUrl: string;\n\ttargetKind: CommunityTargetKind;\n\ttargetId: string;\n\tflags: CommunityFlags;\n\tmode?: \"viewer\" | \"control\";\n\tfetchFn?: typeof fetch;\n\theaders?: Record<string, string>;\n\tdisplayName?: string;\n\tpicture?: string | null;\n\tguestId?: string;\n\tpollMs?: number;\n\tlabels?: Partial<CommunityLabels>;\n\tclassName?: string;\n\tonFlagsChange?: (flags: CommunityFlags) => void;\n\t/** Lock to one feed (no Comments/Q&A tabs). Use for in-player drawers or a custom split layout. */\n\ttype?: CommunityType;\n};\n\nfunction mergeLabels(partial?: Partial<CommunityLabels>): CommunityLabels {\n\treturn { ...communityLabels, ...partial };\n}\n\nfunction ItemRow({\n\titem,\n\tmode,\n\tlabels,\n\tonReply,\n\tonPatch,\n\tonUpvote,\n}: {\n\titem: CommunityItem;\n\tmode: \"viewer\" | \"control\";\n\tlabels: CommunityLabels;\n\tonReply?: (parentId: string) => void;\n\tonPatch: (\n\t\titemId: string,\n\t\tpatch: Parameters<ReturnType<typeof createCommunityClient>[\"patch\"]>[1],\n\t) => void;\n\tonUpvote?: (itemId: string) => void;\n}) {\n\tconst [answer, setAnswer] = useState(\"\");\n\treturn (\n\t\t<article\n\t\t\tclassName=\"livo-condo-message\"\n\t\t\tdata-slot=\"message\"\n\t\t\tdata-highlighted={item.highlightedAt ? \"true\" : undefined}\n\t\t\tdata-hidden={item.hiddenAt ? \"true\" : undefined}\n\t\t>\n\t\t\t<CommunityAvatar name={item.displayName} src={item.picture} />\n\t\t\t<div className=\"livo-condo-message__content\">\n\t\t\t\t<header className=\"livo-condo-message__header\">\n\t\t\t\t\t<strong>{item.displayName}</strong>\n\t\t\t\t\t{item.pinnedAt ? (\n\t\t\t\t\t\t<span className=\"livo-condo-chip\">{labels.pinned}</span>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{item.highlightedAt ? (\n\t\t\t\t\t\t<span className=\"livo-condo-chip\">{labels.live}</span>\n\t\t\t\t\t) : null}\n\t\t\t\t</header>\n\t\t\t\t<p className=\"livo-condo-bubble\">{item.body}</p>\n\t\t\t\t{item.answer ? (\n\t\t\t\t\t<p className=\"livo-condo-bubble livo-condo-bubble--answer\">\n\t\t\t\t\t\t<span className=\"livo-condo-bubble__caption\">\n\t\t\t\t\t\t\t{item.answer.displayName ?? \"Host\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{item.answer.body}\n\t\t\t\t\t</p>\n\t\t\t\t) : null}\n\t\t\t\t<div className=\"livo-condo-item__actions\">\n\t\t\t\t\t{item.type === \"question\" && onUpvote ? (\n\t\t\t\t\t\t<button type=\"button\" onClick={() => onUpvote(item.id)}>\n\t\t\t\t\t\t\t{labels.upvote} {item.upvoteCount}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{item.type === \"comment\" && !item.parentId && onReply ? (\n\t\t\t\t\t\t<button type=\"button\" onClick={() => onReply(item.id)}>\n\t\t\t\t\t\t\t{labels.reply}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mode === \"control\" && item.type === \"comment\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { pinned: item.pinnedAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.pinnedAt ? labels.unpin : labels.pin}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { hidden: item.hiddenAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.hiddenAt ? labels.unhide : labels.hide}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() => onPatch(item.id, { deleted: true })}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{labels.remove}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{mode === \"control\" && item.type === \"question\" ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { highlighted: item.highlightedAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{labels.highlight}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonClick={() =>\n\t\t\t\t\t\t\t\t\tonPatch(item.id, { dismissed: item.dismissedAt == null })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{labels.dismiss}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t\t{mode === \"control\" && item.type === \"question\" ? (\n\t\t\t\t\t<form\n\t\t\t\t\t\tclassName=\"livo-condo-answer-form\"\n\t\t\t\t\t\tonSubmit={(event) => {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tconst body = answer.trim();\n\t\t\t\t\t\t\tif (!body) return;\n\t\t\t\t\t\t\tonPatch(item.id, { answer: { body } });\n\t\t\t\t\t\t\tsetAnswer(\"\");\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\tvalue={answer}\n\t\t\t\t\t\t\tonChange={(event) => setAnswer(event.target.value)}\n\t\t\t\t\t\t\tplaceholder={labels.answer}\n\t\t\t\t\t\t\taria-label={labels.answer}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<button type=\"submit\">{labels.send}</button>\n\t\t\t\t\t</form>\n\t\t\t\t) : null}\n\t\t\t\t{item.replies?.map((reply) => (\n\t\t\t\t\t<ItemRow\n\t\t\t\t\t\tkey={reply.id}\n\t\t\t\t\t\titem={reply}\n\t\t\t\t\t\tmode={mode}\n\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\tonPatch={onPatch}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</article>\n\t);\n}\n\nexport function LivoCommunity({\n\tapiUrl,\n\ttargetKind,\n\ttargetId,\n\tflags,\n\tmode = \"viewer\",\n\tfetchFn,\n\theaders,\n\tdisplayName: displayNameProp,\n\tpicture,\n\tguestId: guestIdProp,\n\tpollMs = 5000,\n\tlabels: labelsProp,\n\tclassName,\n\tonFlagsChange,\n\ttype: lockedType,\n}: LivoCommunityProps) {\n\tconst labels = useMemo(() => mergeLabels(labelsProp), [labelsProp]);\n\tconst client = useMemo(\n\t\t() =>\n\t\t\tcreateCommunityClient({\n\t\t\t\tapiUrl,\n\t\t\t\ttargetKind,\n\t\t\t\ttargetId,\n\t\t\t\tmode,\n\t\t\t\tfetchFn,\n\t\t\t\theaders,\n\t\t\t}),\n\t\t[apiUrl, fetchFn, headers, mode, targetId, targetKind],\n\t);\n\tconst guestId = guestIdProp ?? communityGuestId();\n\tconst suppliedName = sanitizeDisplayName(displayNameProp);\n\tconst locked = suppliedName.length > 0;\n\tconst [tab, setTab] = useState<CommunityType>(lockedType ?? \"comment\");\n\tconst [items, setItems] = useState<CommunityItem[]>([]);\n\tconst [body, setBody] = useState(\"\");\n\tconst [name, setName] = useState(suppliedName);\n\tconst [pictureUrl, setPictureUrl] = useState(\n\t\tsanitizePictureUrl(picture) ?? null,\n\t);\n\tconst [editingName, setEditingName] = useState(!locked && !suppliedName);\n\tconst [hasStoredName, setHasStoredName] = useState(locked);\n\tconst [identityReady, setIdentityReady] = useState(locked);\n\tconst [replyTo, setReplyTo] = useState<string | null>(null);\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [settings, setSettings] = useState(flags);\n\n\tuseEffect(() => {\n\t\tsetSettings(flags);\n\t}, [flags]);\n\n\tuseEffect(() => {\n\t\tif (locked) {\n\t\t\tsetName(suppliedName);\n\t\t\tsetPictureUrl(sanitizePictureUrl(picture) ?? null);\n\t\t\tsetEditingName(false);\n\t\t\tsetHasStoredName(true);\n\t\t\tsetIdentityReady(true);\n\t\t\treturn;\n\t\t}\n\t\tconst stored = loadStoredCommunityIdentity();\n\t\tconst nextName = suppliedName || stored?.displayName || \"\";\n\t\tsetName(nextName);\n\t\tsetPictureUrl(sanitizePictureUrl(picture) ?? stored?.picture ?? null);\n\t\tsetEditingName(!nextName);\n\t\tsetHasStoredName(Boolean(nextName));\n\t\tsetIdentityReady(true);\n\t}, [locked, picture, suppliedName]);\n\n\tuseEffect(() => {\n\t\tif (lockedType) {\n\t\t\tsetTab(lockedType);\n\t\t\treturn;\n\t\t}\n\t\tif (!showQaTab(settings) && tab === \"question\") setTab(\"comment\");\n\t}, [lockedType, settings, tab]);\n\n\tconst load = useCallback(async () => {\n\t\tconst listed = await client.list({\n\t\t\ttype: lockedType ?? (showQaTab(settings) ? tab : \"comment\"),\n\t\t});\n\t\tsetItems(listed.items);\n\t}, [client, lockedType, settings, tab]);\n\n\tuseEffect(() => {\n\t\tlet cancelled = false;\n\t\tconst tick = async () => {\n\t\t\ttry {\n\t\t\t\tawait load();\n\t\t\t\tif (!cancelled) setError(null);\n\t\t\t} catch (err) {\n\t\t\t\tif (!cancelled) {\n\t\t\t\t\tsetError(err instanceof Error ? err.message : \"Failed to load\");\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvoid tick();\n\t\tif (pollMs <= 0) return;\n\t\tconst id = window.setInterval(() => void tick(), pollMs);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [load, pollMs]);\n\n\tconst activeType = lockedType ?? tab;\n\tif (lockedType && !communityFeedEnabled(settings, lockedType)) return null;\n\tconst open =\n\t\tactiveType === \"question\" ? qaOpen(settings) : commentsOpen(settings);\n\tconst showNameField = identityReady && !locked && editingName;\n\tconst showPostingAs =\n\t\tidentityReady && !editingName && sanitizeDisplayName(name).length > 0;\n\n\tfunction persistIdentity(nextName: string, nextPicture: string | null) {\n\t\tconst saved = saveStoredCommunityIdentity({\n\t\t\tdisplayName: nextName,\n\t\t\tpicture: nextPicture,\n\t\t});\n\t\tif (!saved) return null;\n\t\tsetName(saved.displayName);\n\t\tsetPictureUrl(saved.picture);\n\t\tsetEditingName(false);\n\t\tsetHasStoredName(true);\n\t\treturn saved;\n\t}\n\n\tasync function submit(event: FormEvent) {\n\t\tevent.preventDefault();\n\t\tconst text = body.trim();\n\t\tconst displayName = sanitizeDisplayName(name);\n\t\tif (!text || !displayName) return;\n\t\tconst saved = persistIdentity(displayName, pictureUrl);\n\t\ttry {\n\t\t\tawait client.create({\n\t\t\t\ttype: activeType,\n\t\t\t\tbody: text,\n\t\t\t\tdisplayName,\n\t\t\t\tpicture: saved?.picture ?? pictureUrl ?? undefined,\n\t\t\t\tguestId,\n\t\t\t\tparentId: activeType === \"comment\" ? (replyTo ?? undefined) : undefined,\n\t\t\t});\n\t\t\tsetBody(\"\");\n\t\t\tsetReplyTo(null);\n\t\t\tawait load();\n\t\t\tsetError(null);\n\t\t} catch (err) {\n\t\t\tsetError(\n\t\t\t\terr instanceof CommunityApiError ? err.message : \"Could not post\",\n\t\t\t);\n\t\t}\n\t}\n\n\tasync function handlePatch(\n\t\titemId: string,\n\t\tpatch: Parameters<(typeof client)[\"patch\"]>[1],\n\t) {\n\t\ttry {\n\t\t\tawait client.patch(itemId, patch);\n\t\t\tawait load();\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : \"Could not update\");\n\t\t}\n\t}\n\n\tasync function handleUpvote(itemId: string) {\n\t\ttry {\n\t\t\tawait client.upvote(itemId, guestId);\n\t\t\tawait load();\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : \"Could not upvote\");\n\t\t}\n\t}\n\n\tasync function updateSetting(patch: CommunitySettingsPatch) {\n\t\ttry {\n\t\t\tconst parsed = await client.patchSettings(patch);\n\t\t\tconst next = parsed ?? { ...settings, ...patch };\n\t\t\tsetSettings(next);\n\t\t\tonFlagsChange?.(next);\n\t\t} catch (err) {\n\t\t\tsetError(err instanceof Error ? err.message : \"Could not save\");\n\t\t}\n\t}\n\n\treturn (\n\t\t<section className={[\"livo-condo\", className].filter(Boolean).join(\" \")}>\n\t\t\t{mode === \"control\" ? (\n\t\t\t\t<div className=\"livo-condo-settings\">\n\t\t\t\t\t<h2>{labels.settings}</h2>\n\t\t\t\t\t<label>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tchecked={settings.commentsEnabled}\n\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\tvoid updateSetting({ commentsEnabled: event.target.checked })\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t<strong>{labels.commentsEnabled}</strong>\n\t\t\t\t\t\t\t<small>{labels.commentsHelp}</small>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>\n\t\t\t\t\t{hasQa(settings) ? (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\tchecked={settings.commentsAfterEnd}\n\t\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\t\tvoid updateSetting({\n\t\t\t\t\t\t\t\t\t\t\tcommentsAfterEnd: event.target.checked,\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<strong>{labels.commentsAfterEnd}</strong>\n\t\t\t\t\t\t\t\t\t<small>{labels.commentsAfterEndHelp}</small>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t<label>\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\t\t\tchecked={settings.qaEnabled}\n\t\t\t\t\t\t\t\t\tonChange={(event) =>\n\t\t\t\t\t\t\t\t\t\tvoid updateSetting({ qaEnabled: event.target.checked })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<strong>{labels.qaEnabled}</strong>\n\t\t\t\t\t\t\t\t\t<small>{labels.qaHelp}</small>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t</>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t) : null}\n\n\t\t\t{lockedType ? (\n\t\t\t\t<h2 className=\"livo-condo-title\">\n\t\t\t\t\t{lockedType === \"question\" ? labels.qa : labels.comments}\n\t\t\t\t</h2>\n\t\t\t) : showQaTab(settings) ? (\n\t\t\t\t<div className=\"livo-condo-tabs\" role=\"tablist\">\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\taria-selected={tab === \"comment\"}\n\t\t\t\t\t\tonClick={() => setTab(\"comment\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.comments}\n\t\t\t\t\t</button>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\trole=\"tab\"\n\t\t\t\t\t\taria-selected={tab === \"question\"}\n\t\t\t\t\t\tonClick={() => setTab(\"question\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t{labels.qa}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<h2 className=\"livo-condo-title\">{labels.comments}</h2>\n\t\t\t)}\n\n\t\t\t<CommunityMessageScroller\n\t\t\t\tfollowKey={`${activeType}:${items.at(-1)?.id ?? \"empty\"}:${items.length}`}\n\t\t\t\tjumpLabel={labels.jumpToLatest}\n\t\t\t\tempty={items.length === 0}\n\t\t\t>\n\t\t\t\t{items.length === 0 ? (\n\t\t\t\t\t<p className=\"livo-condo-empty\">\n\t\t\t\t\t\t{activeType === \"question\"\n\t\t\t\t\t\t\t? labels.emptyQuestions\n\t\t\t\t\t\t\t: labels.emptyComments}\n\t\t\t\t\t</p>\n\t\t\t\t) : (\n\t\t\t\t\titems.map((item) => (\n\t\t\t\t\t\t<ItemRow\n\t\t\t\t\t\t\tkey={item.id}\n\t\t\t\t\t\t\titem={item}\n\t\t\t\t\t\t\tmode={mode}\n\t\t\t\t\t\t\tlabels={labels}\n\t\t\t\t\t\t\tonReply={canPost(settings, \"comment\") ? setReplyTo : undefined}\n\t\t\t\t\t\t\tonPatch={handlePatch}\n\t\t\t\t\t\t\tonUpvote={activeType === \"question\" ? handleUpvote : undefined}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))\n\t\t\t\t)}\n\t\t\t</CommunityMessageScroller>\n\n\t\t\t{open ? (\n\t\t\t\t<form\n\t\t\t\t\tclassName=\"livo-condo-composer\"\n\t\t\t\t\tonSubmit={(event) => void submit(event)}\n\t\t\t\t>\n\t\t\t\t\t{showNameField ? (\n\t\t\t\t\t\t<label className=\"livo-condo-identity-field\">\n\t\t\t\t\t\t\t<CommunityAvatar name={name} src={pictureUrl} />\n\t\t\t\t\t\t\t<span className=\"livo-sr-only\">{labels.name}</span>\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\tvalue={name}\n\t\t\t\t\t\t\t\tonChange={(event) => setName(event.target.value)}\n\t\t\t\t\t\t\t\tplaceholder={labels.namePlaceholder}\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\tmaxLength={80}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{hasStoredName ? (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tpersistIdentity(name, pictureUrl);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{labels.saveName}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</label>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{showPostingAs ? (\n\t\t\t\t\t\t<div className=\"livo-condo-identity\">\n\t\t\t\t\t\t\t<CommunityAvatar name={name} src={pictureUrl} />\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{labels.postingAs.replace(\"{name}\", sanitizeDisplayName(name))}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{locked ? null : (\n\t\t\t\t\t\t\t\t<button type=\"button\" onClick={() => setEditingName(true)}>\n\t\t\t\t\t\t\t\t\t{labels.editName}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t\t{replyTo ? (\n\t\t\t\t\t\t<p className=\"livo-condo-replying\">\n\t\t\t\t\t\t\t{labels.reply}\n\t\t\t\t\t\t\t<button type=\"button\" onClick={() => setReplyTo(null)}>\n\t\t\t\t\t\t\t\t×\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t) : null}\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={body}\n\t\t\t\t\t\tonChange={(event) => setBody(event.target.value)}\n\t\t\t\t\t\tplaceholder={\n\t\t\t\t\t\t\tactiveType === \"question\"\n\t\t\t\t\t\t\t\t? labels.questionComposer\n\t\t\t\t\t\t\t\t: labels.composer\n\t\t\t\t\t\t}\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tmaxLength={2000}\n\t\t\t\t\t\trows={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<button type=\"submit\">{labels.send}</button>\n\t\t\t\t</form>\n\t\t\t) : (\n\t\t\t\t<p className=\"livo-condo-closed\" role=\"status\">\n\t\t\t\t\t{activeType === \"question\" ? labels.qaClosed : labels.closed}\n\t\t\t\t</p>\n\t\t\t)}\n\t\t\t{error ? (\n\t\t\t\t<p className=\"livo-condo-error\" role=\"alert\">\n\t\t\t\t\t{error}\n\t\t\t\t</p>\n\t\t\t) : null}\n\t\t</section>\n\t);\n}\n","import { CamelToPascal } from './utility-types';\n\n/**\n * Converts string to kebab case\n *\n * @param {string} string\n * @returns {string} A kebabized string\n */\nexport const toKebabCase = (string: string) =>\n  string.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n\n/**\n * Converts string to camel case\n *\n * @param {string} string\n * @returns {string} A camelized string\n */\nexport const toCamelCase = <T extends string>(string: T) =>\n  string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2) =>\n    p2 ? p2.toUpperCase() : p1.toLowerCase(),\n  );\n\n/**\n * Converts string to pascal case\n *\n * @param {string} string\n * @returns {string} A pascalized string\n */\nexport const toPascalCase = <T extends string>(string: T): CamelToPascal<T> => {\n  const camelCase = toCamelCase(string);\n\n  return (camelCase.charAt(0).toUpperCase() + camelCase.slice(1)) as CamelToPascal<T>;\n};\n\n/**\n * Merges classes into a single string\n *\n * @param {array} classes\n * @returns {string} A string of classes\n */\nexport const mergeClasses = <ClassType = string | undefined | null>(...classes: ClassType[]) =>\n  classes\n    .filter((className, index, array) => {\n      return (\n        Boolean(className) &&\n        (className as string).trim() !== '' &&\n        array.indexOf(className) === index\n      );\n    })\n    .join(' ')\n    .trim();\n\n/**\n * Is empty string\n *\n * @param {unknown} value\n * @returns {boolean} Whether the value is an empty string\n */\nexport const isEmptyString = (value: unknown): boolean => value === '';\n\n/**\n * Check if a component has an accessibility prop\n *\n * @param {object} props\n * @returns {boolean} Whether the component has an accessibility prop\n */\nexport const hasA11yProp = (props: Record<string, any>) => {\n  for (const prop in props) {\n    if (prop.startsWith('aria-') || prop === 'role' || prop === 'title') {\n      return true;\n    }\n  }\n};\n","export default {\n  xmlns: 'http://www.w3.org/2000/svg',\n  width: 24,\n  height: 24,\n  viewBox: '0 0 24 24',\n  fill: 'none',\n  stroke: 'currentColor',\n  strokeWidth: 2,\n  strokeLinecap: 'round',\n  strokeLinejoin: 'round',\n};\n","import { createElement, forwardRef } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport { IconNode, LucideProps } from './types';\nimport { mergeClasses, hasA11yProp } from '@lucide/shared';\n\ninterface IconComponentProps extends LucideProps {\n  iconNode: IconNode;\n}\n\n/**\n * Lucide icon component\n *\n * @component Icon\n * @param {object} props\n * @param {string} props.color - The color of the icon\n * @param {number} props.size - The size of the icon\n * @param {number} props.strokeWidth - The stroke width of the icon\n * @param {boolean} props.absoluteStrokeWidth - Whether to use absolute stroke width\n * @param {string} props.className - The class name of the icon\n * @param {IconNode} props.children - The children of the icon\n * @param {IconNode} props.iconNode - The icon node of the icon\n *\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst Icon = forwardRef<SVGSVGElement, IconComponentProps>(\n  (\n    {\n      color = 'currentColor',\n      size = 24,\n      strokeWidth = 2,\n      absoluteStrokeWidth,\n      className = '',\n      children,\n      iconNode,\n      ...rest\n    },\n    ref,\n  ) =>\n    createElement(\n      'svg',\n      {\n        ref,\n        ...defaultAttributes,\n        width: size,\n        height: size,\n        stroke: color,\n        strokeWidth: absoluteStrokeWidth ? (Number(strokeWidth) * 24) / Number(size) : strokeWidth,\n        className: mergeClasses('lucide', className),\n        ...(!children && !hasA11yProp(rest) && { 'aria-hidden': 'true' }),\n        ...rest,\n      },\n      [\n        ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n        ...(Array.isArray(children) ? children : [children]),\n      ],\n    ),\n);\n\nexport default Icon;\n","import { createElement, forwardRef } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from '@lucide/shared';\nimport { IconNode, LucideProps } from './types';\nimport Icon from './Icon';\n\n/**\n * Create a Lucide icon component\n * @param {string} iconName\n * @param {array} iconNode\n * @returns {ForwardRefExoticComponent} LucideIcon\n */\nconst createLucideIcon = (iconName: string, iconNode: IconNode) => {\n  const Component = forwardRef<SVGSVGElement, LucideProps>(({ className, ...props }, ref) =>\n    createElement(Icon, {\n      ref,\n      iconNode,\n      className: mergeClasses(\n        `lucide-${toKebabCase(toPascalCase(iconName))}`,\n        `lucide-${iconName}`,\n        className,\n      ),\n      ...props,\n    }),\n  );\n\n  Component.displayName = toPascalCase(iconName);\n\n  return Component;\n};\n\nexport default createLucideIcon;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n  ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n  ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n];\n\n/**\n * @component @name CircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIgLz4KICA8cGF0aCBkPSJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIC8+CiAgPHBhdGggZD0iTTEyIDE3aC4wMSIgLz4KPC9zdmc+Cg==) - https://lucide.dev/icons/circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CircleQuestionMark = createLucideIcon('circle-question-mark', __iconNode);\n\nexport default CircleQuestionMark;\n","import createLucideIcon from '../createLucideIcon';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [\n  [\n    'path',\n    {\n      d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n      key: '1sd12s',\n    },\n  ],\n];\n\n/**\n * @component @name MessageCircle\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogIHdpZHRoPSIyNCIKICBoZWlnaHQ9IjI0IgogIHZpZXdCb3g9IjAgMCAyNCAyNCIKICBmaWxsPSJub25lIgogIHN0cm9rZT0iIzAwMCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNmZmY7IGJvcmRlci1yYWRpdXM6IDJweCIKICBzdHJva2Utd2lkdGg9IjIiCiAgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIgogIHN0cm9rZS1saW5lam9pbj0icm91bmQiCj4KICA8cGF0aCBkPSJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiIC8+Cjwvc3ZnPgo=) - https://lucide.dev/icons/message-circle\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircle = createLucideIcon('message-circle', __iconNode);\n\nexport default MessageCircle;\n","\"use client\";\n\nimport { CircleHelp, MessageCircle } from \"lucide-react\";\nimport { useEffect, useRef, useState, type RefObject } from \"react\";\nimport { createCommunityClient } from \"./api\";\nimport { LivoCommunity, type LivoCommunityProps } from \"./community\";\nimport { communityFeedEnabled } from \"./gates\";\nimport { communityLabels, type CommunityLabels } from \"./labels\";\nimport type { CommunityType } from \"./types\";\n\nconst COMPACT_WIDTH_PX = 640;\nconst COMPACT_HEIGHT_PX = 420;\n\nexport type LivoCommunityOverlayProps = Omit<\n\tLivoCommunityProps,\n\t\"type\" | \"className\"\n> & {\n\tclassName?: string;\n};\n\n/** Badge only once a feed has more than one item. */\nfunction countBadgeLabel(count: number): string | null {\n\tif (count <= 1) return null;\n\treturn count > 99 ? \"99+\" : String(count);\n}\n\nfunction drawerTitle(type: CommunityType, labels: CommunityLabels): string {\n\tswitch (type) {\n\t\tcase \"comment\":\n\t\t\treturn labels.comments;\n\t\tcase \"question\":\n\t\t\treturn labels.qa;\n\t\tdefault: {\n\t\t\tconst _never: never = type;\n\t\t\treturn _never;\n\t\t}\n\t}\n}\n\nfunction useCompactOverlay(ref: RefObject<HTMLElement | null>): boolean {\n\tconst [compact, setCompact] = useState(true);\n\tuseEffect(() => {\n\t\tconst el = ref.current;\n\t\tif (!el) return;\n\t\tconst update = (width: number, height: number) => {\n\t\t\tsetCompact(width < COMPACT_WIDTH_PX || height < COMPACT_HEIGHT_PX);\n\t\t};\n\t\tupdate(el.clientWidth, el.clientHeight);\n\t\tif (typeof ResizeObserver === \"undefined\") return;\n\t\tconst observer = new ResizeObserver((entries) => {\n\t\t\tconst box = entries[0]?.contentRect;\n\t\t\tif (!box) return;\n\t\t\tupdate(box.width, box.height);\n\t\t});\n\t\tobserver.observe(el);\n\t\treturn () => observer.disconnect();\n\t}, [ref]);\n\treturn compact;\n}\n\nexport function LivoCommunityOverlay({\n\tclassName,\n\tlabels: labelsProp,\n\tflags,\n\tapiUrl,\n\ttargetKind,\n\ttargetId,\n\tmode,\n\tfetchFn,\n\theaders,\n\tpollMs = 5000,\n\t...rest\n}: LivoCommunityOverlayProps) {\n\tconst labels = { ...communityLabels, ...labelsProp };\n\tconst rootRef = useRef<HTMLDivElement>(null);\n\tconst compact = useCompactOverlay(rootRef);\n\tconst [open, setOpen] = useState<CommunityType | null>(null);\n\tconst [counts, setCounts] = useState({ comment: 0, question: 0 });\n\tconst comments = communityFeedEnabled(flags, \"comment\");\n\tconst questions = communityFeedEnabled(flags, \"question\");\n\n\tuseEffect(() => {\n\t\tif (!comments && !questions) return;\n\t\tlet cancelled = false;\n\t\tconst client = createCommunityClient({\n\t\t\tapiUrl,\n\t\t\ttargetKind,\n\t\t\ttargetId,\n\t\t\tmode,\n\t\t\tfetchFn,\n\t\t\theaders,\n\t\t});\n\t\tconst tick = async () => {\n\t\t\tconst next = { comment: 0, question: 0 };\n\t\t\ttry {\n\t\t\t\tif (comments) {\n\t\t\t\t\tnext.comment = (await client.list({ type: \"comment\" })).items.length;\n\t\t\t\t}\n\t\t\t\tif (questions) {\n\t\t\t\t\tnext.question = (\n\t\t\t\t\t\tawait client.list({ type: \"question\" })\n\t\t\t\t\t).items.length;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!cancelled) setCounts(next);\n\t\t};\n\t\tvoid tick();\n\t\tif (pollMs <= 0) {\n\t\t\treturn () => {\n\t\t\t\tcancelled = true;\n\t\t\t};\n\t\t}\n\t\tconst id = window.setInterval(() => void tick(), pollMs);\n\t\treturn () => {\n\t\t\tcancelled = true;\n\t\t\twindow.clearInterval(id);\n\t\t};\n\t}, [\n\t\tapiUrl,\n\t\tcomments,\n\t\tfetchFn,\n\t\theaders,\n\t\tmode,\n\t\tpollMs,\n\t\tquestions,\n\t\ttargetId,\n\t\ttargetKind,\n\t]);\n\n\tif (!comments && !questions) return null;\n\n\tfunction toggle(type: CommunityType) {\n\t\tsetOpen((current) => (current === type ? null : type));\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={rootRef}\n\t\t\tclassName={[\"livo-condo-overlay\", className].filter(Boolean).join(\" \")}\n\t\t\tdata-compact={compact ? \"true\" : \"false\"}\n\t\t\tdata-open={open ?? \"off\"}\n\t\t>\n\t\t\t{open ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"livo-condo-drawer\"\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\taria-modal=\"true\"\n\t\t\t\t\taria-label={drawerTitle(open, labels)}\n\t\t\t\t>\n\t\t\t\t\t<header className=\"livo-condo-drawer__header\">\n\t\t\t\t\t\t<h2>{drawerTitle(open, labels)}</h2>\n\t\t\t\t\t\t<button type=\"button\" onClick={() => setOpen(null)}>\n\t\t\t\t\t\t\t{labels.hide}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</header>\n\t\t\t\t\t<LivoCommunity\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\tapiUrl={apiUrl}\n\t\t\t\t\t\ttargetKind={targetKind}\n\t\t\t\t\t\ttargetId={targetId}\n\t\t\t\t\t\tmode={mode}\n\t\t\t\t\t\tfetchFn={fetchFn}\n\t\t\t\t\t\theaders={headers}\n\t\t\t\t\t\tpollMs={pollMs}\n\t\t\t\t\t\tflags={flags}\n\t\t\t\t\t\tlabels={labelsProp}\n\t\t\t\t\t\ttype={open}\n\t\t\t\t\t\tclassName=\"livo-condo-drawer__body\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<div className=\"livo-condo-overlay__toggles\">\n\t\t\t\t{comments ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={labels.comments}\n\t\t\t\t\t\taria-pressed={open === \"comment\"}\n\t\t\t\t\t\ttitle={labels.comments}\n\t\t\t\t\t\tonClick={() => toggle(\"comment\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MessageCircle aria-hidden=\"true\" />\n\t\t\t\t\t\t{countBadgeLabel(counts.comment) ? (\n\t\t\t\t\t\t\t<span className=\"livo-condo-count\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{countBadgeLabel(counts.comment)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t\t{questions ? (\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label={labels.qa}\n\t\t\t\t\t\taria-pressed={open === \"question\"}\n\t\t\t\t\t\ttitle={labels.qa}\n\t\t\t\t\t\tonClick={() => toggle(\"question\")}\n\t\t\t\t\t>\n\t\t\t\t\t\t<CircleHelp aria-hidden=\"true\" />\n\t\t\t\t\t\t{countBadgeLabel(counts.question) ? (\n\t\t\t\t\t\t\t<span className=\"livo-condo-count\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t{countBadgeLabel(counts.question)}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t</button>\n\t\t\t\t) : null}\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}