{"version":3,"file":"create-room-CGHjv9dT.js","names":[],"sources":["../../src/app/components/create-room/CreateRoomTypeSelector.tsx","../../src/app/features/create-room/CreateRoom.tsx","../../src/app/pages/client/create-room/CreateRoomPage.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Box, Text, config } from 'folds';\nimport { Check, sizedIcon } from '$components/icons/phosphor';\nimport { SequenceCard } from '$components/sequence-card';\nimport { SettingTile } from '$components/setting-tile';\nimport { BetaNoticeBadge } from '$components/BetaNoticeBadge';\nimport { CreateRoomType } from './types';\n\ntype CreateRoomTypeSelectorProps = {\n  value?: CreateRoomType;\n  onSelect: (value: CreateRoomType) => void;\n  disabled?: boolean;\n  getIcon: (type: CreateRoomType) => ReactNode;\n};\nexport function CreateRoomTypeSelector({\n  value,\n  onSelect,\n  disabled,\n  getIcon,\n}: CreateRoomTypeSelectorProps) {\n  return (\n    <Box shrink=\"No\" direction=\"Column\" gap=\"100\">\n      <SequenceCard\n        style={{ padding: config.space.S300 }}\n        variant={value === CreateRoomType.TextRoom ? 'Primary' : 'SurfaceVariant'}\n        direction=\"Column\"\n        gap=\"100\"\n        as=\"button\"\n        type=\"button\"\n        aria-pressed={value === CreateRoomType.TextRoom}\n        onClick={() => onSelect(CreateRoomType.TextRoom)}\n        disabled={disabled}\n      >\n        <SettingTile\n          before={getIcon(CreateRoomType.TextRoom)}\n          after={value === CreateRoomType.TextRoom && sizedIcon(Check)}\n        >\n          <Box gap=\"200\" alignItems=\"Baseline\">\n            <Text size=\"H6\" style={{ flexShrink: 0 }}>\n              Chat Room\n            </Text>\n            <Text size=\"T300\" priority=\"300\" truncate>\n              - Messages, photos, and videos.\n            </Text>\n          </Box>\n        </SettingTile>\n      </SequenceCard>\n      <SequenceCard\n        style={{ padding: config.space.S300 }}\n        variant={value === CreateRoomType.VoiceRoom ? 'Primary' : 'SurfaceVariant'}\n        direction=\"Column\"\n        gap=\"100\"\n        as=\"button\"\n        type=\"button\"\n        aria-pressed={value === CreateRoomType.VoiceRoom}\n        onClick={() => onSelect(CreateRoomType.VoiceRoom)}\n        disabled={disabled}\n      >\n        <SettingTile\n          before={getIcon(CreateRoomType.VoiceRoom)}\n          after={value === CreateRoomType.VoiceRoom && sizedIcon(Check)}\n        >\n          <Box gap=\"200\" alignItems=\"Baseline\">\n            <Text size=\"H6\" style={{ flexShrink: 0 }}>\n              Voice Room\n            </Text>\n            <Text size=\"T300\" priority=\"300\" truncate>\n              - Live audio and video conversations.\n            </Text>\n            <BetaNoticeBadge />\n          </Box>\n        </SettingTile>\n      </SequenceCard>\n      <SequenceCard\n        style={{ padding: config.space.S300 }}\n        variant={value === CreateRoomType.ForumRoom ? 'Primary' : 'SurfaceVariant'}\n        direction=\"Column\"\n        gap=\"100\"\n        as=\"button\"\n        type=\"button\"\n        aria-pressed={value === CreateRoomType.ForumRoom}\n        onClick={() => onSelect(CreateRoomType.ForumRoom)}\n        disabled={disabled}\n      >\n        <SettingTile\n          before={getIcon(CreateRoomType.ForumRoom)}\n          after={value === CreateRoomType.ForumRoom && sizedIcon(Check)}\n        >\n          <Box gap=\"200\" alignItems=\"Baseline\">\n            <Text size=\"H6\" style={{ flexShrink: 0 }}>\n              Forum Room\n            </Text>\n            <Text size=\"T300\" priority=\"300\" truncate>\n              - Conversations split in topics.\n            </Text>\n            <BetaNoticeBadge />\n          </Box>\n        </SettingTile>\n      </SequenceCard>\n    </Box>\n  );\n}\n","import type { ReactNode, FormEventHandler } from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport type { Room } from '$types/matrix-sdk';\nimport { MatrixError, JoinRule, RoomType } from '$types/matrix-sdk';\nimport { Box, Chip, color, config, Input, Switch, Text, TextArea } from 'folds';\nimport { SettingTile } from '$components/setting-tile';\nimport { SequenceCard } from '$components/sequence-card';\nimport { useMatrixClient } from '$hooks/useMatrixClient';\nimport { millisecondsToMinutes, replaceSpaceWithDash } from '$utils/common';\nimport { AsyncStatus, useAsyncCallback } from '$hooks/useAsyncCallback';\nimport { useCapabilities } from '$hooks/useCapabilities';\nimport { useAlive } from '$hooks/useAlive';\nimport type { CreateRoomData } from '$components/create-room';\nimport {\n  AdditionalCreatorInput,\n  createRoom,\n  CreateRoomAliasInput,\n  CreateRoomAccess,\n  CreateRoomAccessSelector,\n  RoomVersionSelector,\n  useAdditionalCreators,\n  CreateRoomType,\n} from '$components/create-room';\n\nimport { CreateRoomTypeSelector } from '$components/create-room/CreateRoomTypeSelector';\nimport { getRoomStandaloneIconComponent } from '$components/icons/roomIcons';\nimport {\n  CaretDown,\n  CaretUp,\n  Chats,\n  Hash,\n  sizedIcon,\n  SpeakerHigh,\n  Warning,\n  type IconSizeToken,\n} from '$components/icons/phosphor';\nimport { CustomRoomType } from '$types/matrix/room';\nimport { createDebugLogger } from '$utils/debugLogger';\nimport {\n  restrictedSupported,\n  creatorsSupported,\n  knockSupported,\n  knockRestrictedSupported,\n} from '$utils/roomSupport';\nimport { ErrorCode } from '../../cs-errorcode';\nimport { Button } from '$components/button';\n\nconst debugLog = createDebugLogger('CreateRoom');\n\nconst getCreateRoomAccessToIcon = (\n  access: CreateRoomAccess,\n  type?: CreateRoomType,\n  size: IconSizeToken = '400'\n): ReactNode => {\n  let roomType: string | undefined;\n  if (type === CreateRoomType.VoiceRoom) roomType = RoomType.UnstableCall;\n  if (type === CreateRoomType.ForumRoom) roomType = CustomRoomType.Forum;\n\n  let joinRule: JoinRule = JoinRule.Public;\n  if (access === CreateRoomAccess.Restricted) joinRule = JoinRule.Restricted;\n  if (access === CreateRoomAccess.Private) joinRule = JoinRule.Knock;\n\n  return sizedIcon(getRoomStandaloneIconComponent(roomType, joinRule), size);\n};\n\nconst getCreateRoomTypeToIcon = (type: CreateRoomType): ReactNode => {\n  if (type === CreateRoomType.VoiceRoom) return sizedIcon(SpeakerHigh, '400');\n  if (type === CreateRoomType.ForumRoom) return sizedIcon(Chats, '400');\n  return sizedIcon(Hash, '400');\n};\n\ntype CreateRoomFormProps = {\n  defaultAccess?: CreateRoomAccess;\n  defaultType?: CreateRoomType;\n  space?: Room;\n  onCreate?: (roomId: string) => void;\n};\nexport function CreateRoomForm({\n  defaultAccess,\n  defaultType,\n  space,\n  onCreate,\n}: CreateRoomFormProps) {\n  const mx = useMatrixClient();\n  const alive = useAlive();\n\n  const capabilities = useCapabilities();\n  const roomVersions = capabilities['m.room_versions'];\n  const [selectedRoomVersion, selectRoomVersion] = useState(roomVersions?.default ?? '1');\n  useEffect(() => {\n    // capabilities load async\n    selectRoomVersion(roomVersions?.default ?? '1');\n  }, [roomVersions?.default]);\n\n  const allowRestricted = space && restrictedSupported(selectedRoomVersion);\n\n  const [type, setType] = useState(defaultType ?? CreateRoomType.TextRoom);\n  const [access, setAccess] = useState(\n    defaultAccess ?? (allowRestricted ? CreateRoomAccess.Restricted : CreateRoomAccess.Private)\n  );\n  const allowAdditionalCreators = creatorsSupported(selectedRoomVersion);\n  const { additionalCreators, addAdditionalCreator, removeAdditionalCreator } =\n    useAdditionalCreators();\n  const [federation, setFederation] = useState(true);\n  const [encryption, setEncryption] = useState(false);\n  const [knock, setKnock] = useState(false);\n  const [advance, setAdvance] = useState(false);\n\n  const allowKnock = access === CreateRoomAccess.Private && knockSupported(selectedRoomVersion);\n  const allowKnockRestricted =\n    access === CreateRoomAccess.Restricted && knockRestrictedSupported(selectedRoomVersion);\n\n  const handleRoomVersionChange = (version: string) => {\n    if (!restrictedSupported(version)) {\n      setAccess(CreateRoomAccess.Private);\n    }\n    selectRoomVersion(version);\n  };\n\n  const [createState, create] = useAsyncCallback<string, Error | MatrixError, [CreateRoomData]>(\n    useCallback((data) => createRoom(mx, data), [mx])\n  );\n  const loading = createState.status === AsyncStatus.Loading;\n  const error = createState.status === AsyncStatus.Error ? createState.error : undefined;\n  const disabled = createState.status === AsyncStatus.Loading;\n\n  const handleSubmit: FormEventHandler<HTMLFormElement> = (evt) => {\n    evt.preventDefault();\n    if (disabled) return;\n    const form = evt.currentTarget;\n\n    const nameInput = form.nameInput as HTMLInputElement | undefined;\n    const topicTextArea = form.topicTextAria as HTMLTextAreaElement | undefined;\n    const aliasInput = form.aliasInput as HTMLInputElement | undefined;\n    const roomName = nameInput?.value.trim();\n    const roomTopic = topicTextArea?.value.trim();\n    const aliasLocalPart =\n      aliasInput && aliasInput.value ? replaceSpaceWithDash(aliasInput.value) : undefined;\n\n    if (!roomName) return;\n    const publicRoom = access === CreateRoomAccess.Public;\n    let roomKnock = false;\n    if (allowKnock && access === CreateRoomAccess.Private) {\n      roomKnock = knock;\n    }\n    if (allowKnockRestricted && access === CreateRoomAccess.Restricted) {\n      roomKnock = knock;\n    }\n\n    let roomType: RoomType | CustomRoomType | undefined;\n    if (type === CreateRoomType.VoiceRoom) roomType = RoomType.UnstableCall;\n    if (type === CreateRoomType.ForumRoom) roomType = CustomRoomType.Forum;\n\n    debugLog.info('ui', 'Create room button clicked', {\n      roomName,\n      access,\n      type,\n      publicRoom,\n      encryption,\n      hasParent: !!space,\n      parentRoomId: space?.roomId,\n    });\n\n    create({\n      version: selectedRoomVersion,\n      type: roomType,\n      parent: space,\n      access,\n      name: roomName,\n      topic: roomTopic || undefined,\n      aliasLocalPart: publicRoom ? aliasLocalPart : undefined,\n      encryption: publicRoom ? false : encryption,\n      knock: roomKnock,\n      allowFederation: federation,\n      additionalCreators: allowAdditionalCreators ? additionalCreators : undefined,\n    }).then((roomId) => {\n      debugLog.info('ui', 'Room created successfully', {\n        roomId,\n        roomName,\n        access,\n        type,\n      });\n      if (alive()) {\n        onCreate?.(roomId);\n      }\n    });\n  };\n\n  return (\n    <Box as=\"form\" onSubmit={handleSubmit} grow=\"Yes\" direction=\"Column\" gap=\"500\">\n      <Box direction=\"Column\" gap=\"100\">\n        <Text size=\"L400\">Type</Text>\n        <CreateRoomTypeSelector\n          value={type}\n          onSelect={setType}\n          disabled={disabled}\n          getIcon={getCreateRoomTypeToIcon}\n        />\n      </Box>\n      <Box direction=\"Column\" gap=\"100\">\n        <Text size=\"L400\">Access</Text>\n        <CreateRoomAccessSelector\n          value={access}\n          onSelect={setAccess}\n          canRestrict={allowRestricted}\n          disabled={disabled}\n          getIcon={(roomAccess) => getCreateRoomAccessToIcon(roomAccess, type)}\n        />\n      </Box>\n      <Box shrink=\"No\" direction=\"Column\" gap=\"100\">\n        <Text size=\"L400\">Name</Text>\n        <Input\n          required\n          before={getCreateRoomAccessToIcon(access, type, '100')}\n          name=\"nameInput\"\n          size=\"500\"\n          variant=\"SurfaceVariant\"\n          radii=\"400\"\n          autoComplete=\"off\"\n          disabled={disabled}\n        />\n      </Box>\n      <Box shrink=\"No\" direction=\"Column\" gap=\"100\">\n        <Text size=\"L400\">Topic (Optional)</Text>\n        <TextArea\n          name=\"topicTextAria\"\n          size=\"500\"\n          variant=\"SurfaceVariant\"\n          radii=\"400\"\n          disabled={disabled}\n        />\n      </Box>\n\n      {access === CreateRoomAccess.Public && <CreateRoomAliasInput disabled={disabled} />}\n\n      <Box shrink=\"No\" direction=\"Column\" gap=\"100\">\n        <Box gap=\"200\" alignItems=\"End\">\n          <Text size=\"L400\">Options</Text>\n          <Box grow=\"Yes\" justifyContent=\"End\">\n            <Chip\n              radii=\"Pill\"\n              before={sizedIcon(advance ? CaretUp : CaretDown, '50')}\n              onClick={() => setAdvance(!advance)}\n              type=\"button\"\n            >\n              <Text size=\"T200\">Advanced Options</Text>\n            </Chip>\n          </Box>\n        </Box>\n        {allowAdditionalCreators && (\n          <SequenceCard\n            style={{ padding: config.space.S300 }}\n            variant=\"SurfaceVariant\"\n            direction=\"Column\"\n            gap=\"500\"\n          >\n            <AdditionalCreatorInput\n              additionalCreators={additionalCreators}\n              onSelect={addAdditionalCreator}\n              onRemove={removeAdditionalCreator}\n            />\n          </SequenceCard>\n        )}\n        {access !== CreateRoomAccess.Public && (\n          <>\n            <SequenceCard\n              style={{ padding: config.space.S300 }}\n              variant=\"SurfaceVariant\"\n              direction=\"Column\"\n              gap=\"500\"\n            >\n              <SettingTile\n                title=\"End-to-End Encryption\"\n                description=\"Once this feature is enabled, it can't be disabled after the room is created.\"\n                after={\n                  <Switch\n                    variant=\"Primary\"\n                    value={encryption}\n                    onChange={setEncryption}\n                    disabled={disabled}\n                  />\n                }\n              />\n            </SequenceCard>\n            {advance && (allowKnock || allowKnockRestricted) && (\n              <SequenceCard\n                style={{ padding: config.space.S300 }}\n                variant=\"SurfaceVariant\"\n                direction=\"Column\"\n                gap=\"500\"\n              >\n                <SettingTile\n                  title=\"Knock to Join\"\n                  description=\"Anyone can send request to join this room.\"\n                  after={\n                    <Switch\n                      variant=\"Primary\"\n                      value={knock}\n                      onChange={setKnock}\n                      disabled={disabled}\n                    />\n                  }\n                />\n              </SequenceCard>\n            )}\n          </>\n        )}\n\n        <SequenceCard\n          style={{ padding: config.space.S300 }}\n          variant=\"SurfaceVariant\"\n          direction=\"Column\"\n          gap=\"500\"\n        >\n          <SettingTile\n            title=\"Allow Federation\"\n            description=\"Users from other servers can join.\"\n            after={\n              <Switch\n                variant=\"Primary\"\n                value={federation}\n                onChange={setFederation}\n                disabled={disabled}\n              />\n            }\n          />\n        </SequenceCard>\n        {advance && (\n          <RoomVersionSelector\n            versions={roomVersions?.available ? Object.keys(roomVersions.available) : ['1']}\n            value={selectedRoomVersion}\n            onChange={handleRoomVersionChange}\n            disabled={disabled}\n          />\n        )}\n      </Box>\n\n      {error && (\n        <Box style={{ color: color.Critical.Main }} alignItems=\"Center\" gap=\"200\">\n          {sizedIcon(Warning, '100', { filled: true })}\n          <Text size=\"T300\" style={{ color: color.Critical.Main }}>\n            <b>\n              {error instanceof MatrixError && error.name === (ErrorCode.M_LIMIT_EXCEEDED as string)\n                ? `Server rate-limited your request for ${millisecondsToMinutes(\n                    (error.data.retry_after_ms as number | undefined) ?? 0\n                  )} minutes!`\n                : error.message}\n            </b>\n          </Text>\n        </Box>\n      )}\n      <Box shrink=\"No\" direction=\"Column\" gap=\"200\">\n        <Button\n          type=\"submit\"\n          size=\"500\"\n          variant=\"Primary\"\n          radii=\"400\"\n          disabled={disabled}\n          loading={loading}\n          spinnerVariant=\"Primary\"\n          spinnerSize=\"200\"\n        >\n          <Text size=\"B400\">Create Room</Text>\n        </Button>\n      </Box>\n    </Box>\n  );\n}\n","import { useSearchParams } from 'react-router';\nimport { RouteSurface } from '$components/page/RouteSurface';\nimport { CreateRoomType } from '$components/create-room/types';\nimport { CreateRoomForm } from '$features/create-room/CreateRoom';\nimport { useRoomNavigate } from '$hooks/useRoomNavigate';\nimport { SpaceProvider } from '$hooks/useSpace';\nimport { useAllJoinedRoomsSet, useGetRoom } from '$hooks/useGetRoom';\n\nexport function CreateRoomPage() {\n  const { navigateRoom } = useRoomNavigate();\n\n  const [searchParams] = useSearchParams();\n  const spaceId = searchParams.get('spaceId') ?? undefined;\n  const typeParam = searchParams.get('type');\n  const type =\n    typeParam === CreateRoomType.TextRoom ||\n    typeParam === CreateRoomType.VoiceRoom ||\n    typeParam === CreateRoomType.ForumRoom\n      ? typeParam\n      : undefined;\n\n  const allJoinedRooms = useAllJoinedRoomsSet();\n  const getRoom = useGetRoom(allJoinedRooms);\n  const space = spaceId ? getRoom(spaceId) : undefined;\n\n  return (\n    <RouteSurface\n      title=\"New Room\"\n      subTitle=\"Build a room for real-time conversations.\"\n      closeLabel=\"Close create room\"\n    >\n      <SpaceProvider value={space ?? null}>\n        <CreateRoomForm space={space} onCreate={navigateRoom} defaultType={type} />\n      </SpaceProvider>\n    </RouteSurface>\n  );\n}\n"],"mappings":"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"}