@dxos/shell 0.8.2-main.5ca3450 → 0.8.2-main.600d381
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/shell.js +3771 -3730
- package/dist/bundle/shell.js.map +1 -1
- package/dist/bundle/shell.umd.cjs +28 -28
- package/dist/bundle/shell.umd.cjs.map +1 -1
- package/dist/bundle/style.css +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react.mjs +36 -33
- package/dist/lib/browser/react.mjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react.cjs +32 -29
- package/dist/lib/node/react.cjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react.mjs +36 -33
- package/dist/lib/node-esm/react.mjs.map +3 -3
- package/dist/types/src/components/AgentConfig.d.ts.map +1 -1
- package/dist/types/src/components/AgentConfig.js +4 -9
- package/dist/types/src/components/AgentConfig.js.map +1 -1
- package/dist/types/src/components/InvitationList/InvitationList.stories.js +1 -1
- package/dist/types/src/components/InvitationList/InvitationList.stories.js.map +1 -1
- package/dist/types/src/components/InvitationList/InvitationListItem.d.ts.map +1 -1
- package/dist/types/src/components/InvitationList/InvitationListItem.js +8 -18
- package/dist/types/src/components/InvitationList/InvitationListItem.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +8 -18
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
- package/dist/types/src/stories/Invitations.e2e-stories.d.ts.map +1 -1
- package/dist/types/src/stories/Invitations.e2e-stories.js +1 -5
- package/dist/types/src/stories/Invitations.e2e-stories.js.map +1 -1
- package/dist/types/src/translations/locales/en-US.d.ts +2 -0
- package/dist/types/src/translations/locales/en-US.d.ts.map +1 -1
- package/dist/types/src/translations/locales/en-US.js +2 -0
- package/dist/types/src/translations/locales/en-US.js.map +1 -1
- package/package.json +26 -26
- package/src/components/AgentConfig.tsx +14 -18
- package/src/components/InvitationList/InvitationList.stories.tsx +1 -1
- package/src/components/InvitationList/InvitationListItem.tsx +30 -40
- package/src/panels/IdentityPanel/IdentityPanel.tsx +14 -32
- package/src/stories/Invitations.e2e-stories.tsx +1 -5
- package/src/translations/locales/en-US.ts +2 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/AgentConfig.tsx", "../../../src/components/CompoundButton/CompoundButton.tsx", "../../../src/components/IdentityList/IdentityListItem.tsx", "../../../src/components/IdentityList/SpaceMemberList.tsx", "../../../src/components/DeviceList/DeviceList.tsx", "../../../src/components/DeviceList/DeviceListItem.tsx", "../../../src/components/InvitationList/InvitationListItem.tsx", "../../../src/components/AuthCode.tsx", "../../../src/components/InvitationList/InvitationListContainer.tsx", "../../../src/components/InvitationList/InvitationList.tsx", "../../../src/components/Panel/Action.tsx", "../../../src/components/Panel/Actions.tsx", "../../../src/components/Panel/CloseButton.tsx", "../../../src/components/Panel/Emoji.tsx", "../../../src/components/Panel/Heading.tsx", "../../../src/components/Panel/Label.tsx", "../../../src/components/Panel/Input.tsx", "../../../src/components/Panel/StepHeading.tsx", "../../../src/components/Viewport/Viewport.tsx", "../../../src/components/SpaceListItem.tsx", "../../../src/composites/IdentityDialog/IdentityDialog.tsx", "../../../src/panels/IdentityPanel/IdentityPanel.tsx", "../../../src/panels/IdentityPanel/identityMachine.ts", "../../../src/panels/IdentityPanel/steps/IdentityActionChooser.tsx", "../../../src/panels/IdentityPanel/steps/ProfileForm.tsx", "../../../src/panels/IdentityPanel/useAgentHandlers.ts", "../../../src/panels/IdentityPanel/useEdgeAgentsHandlers.ts", "../../../src/panels/IdentityPanel/useKubeAgentHandlers.ts", "../../../src/steps/InvitationManager.tsx", "../../../src/util/invitationStatusValue.ts", "../../../src/steps/ConfirmReset.tsx", "../../../src/panels/JoinPanel/JoinPanel.tsx", "../../../src/panels/JoinPanel/JoinHeading.tsx", "../../../src/panels/JoinPanel/joinMachine.ts", "../../../src/panels/JoinPanel/steps/AdditionMethodChooser.tsx", "../../../src/panels/JoinPanel/steps/IdentityAdded.tsx", "../../../src/panels/JoinPanel/steps/IdentityInput.tsx", "../../../src/panels/JoinPanel/steps/InvitationAccepted.tsx", "../../../src/panels/JoinPanel/steps/InvitationInput.tsx", "../../../src/panels/JoinPanel/steps/InvitationRescuer.tsx", "../../../src/panels/JoinPanel/steps/InvitationAuthenticator.tsx", "../../../src/styles/panelStyles.ts", "../../../src/styles/invitationStatusStyles.ts", "../../../src/panels/SpacePanel/SpacePanel.tsx", "../../../src/panels/SpacePanel/spaceMachine.ts", "../../../src/panels/SpacePanel/steps/SpaceManager.tsx", "../../../src/panels/StatusPanel/StatusPanel.tsx", "../../../src/composites/JoinDialog/JoinDialog.tsx", "../../../src/composites/Shell/run-shell.tsx", "../../../src/composites/Shell/Shell.tsx", "../../../src/composites/SpaceDialog/SpaceDialog.tsx", "../../../src/composites/StatusDialog/StatusDialog.tsx", "../../../src/composites/Shell/shell-runtime.ts", "../../../src/translations/locales/en-US.ts", "../../../src/translations/index.ts", "../../../src/composites/Shell/ShellContext.tsx", "../../../src/composites/Shell/memory-shell-runtime.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowsClockwise, Plus, Power } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { Avatar, Button, Link, Tooltip, Trans, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx, valenceColorText } from '@dxos/react-ui-theme';\n\nimport { type AgentFormProps } from './DeviceList';\n\nexport const AgentConfig = ({\n agentStatus,\n validationMessage,\n onAgentDestroy,\n onAgentCreate,\n onAgentRefresh,\n}: Omit<AgentFormProps, 'agentHostingEnabled'>) => {\n const { t } = useTranslation('os');\n return (\n <div role='none' className='p-1'>\n <h2 className={mx(descriptionText, 'text-center mbs-2')}>{t('agent heading')}</h2>\n {validationMessage && (\n <p role='alert' className={mx(valenceColorText('error'), 'mlb-2')}>\n {validationMessage}\n </p>\n )}\n {agentStatus === 'created' ||\n agentStatus === 'creating' ||\n agentStatus === 'getting' ||\n agentStatus === 'destroying' ? (\n <>\n <div\n role='group'\n className='mlb-2 flex gap-2 items-center'\n aria-describedby='devices-panel.create-agent.description'\n >\n <Avatar.Root>\n <Avatar.Content\n status={agentStatus === 'created' ? 'warning' : 'inactive'}\n variant='square'\n classNames={['place-self-center', agentStatus !== 'created' && 'opactiy-50']}\n icon='ph--database--duotone'\n />\n <Avatar.Label classNames='flex-1 text-sm truncate'>\n {t(\n agentStatus === 'created'\n ? 'agent requested label'\n : agentStatus === 'creating'\n ? 'creating agent label'\n : agentStatus === 'destroying'\n ? 'destroying agent label'\n : 'getting agent label',\n )}\n </Avatar.Label>\n </Avatar.Root>\n {agentStatus === 'created' && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n classNames='pli-0 is-[--rail-action] bs-[--rail-action]'\n data-testid='agent.destroy'\n onClick={onAgentDestroy}\n >\n <span className='sr-only'>{t('destroy agent label')}</span>\n <Power className={getSize(5)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>{t('destroy agent label')}</Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </div>\n {agentStatus === 'created' && (\n <p id='devices-panel.create-agent.description' className={mx(descriptionText, 'mlb-2')}>\n {t('agent requested description')}\n </p>\n )}\n </>\n ) : (\n <>\n <Button\n variant='ghost'\n classNames='mlb-2 is-full justify-start gap-2 pis-0 pie-3'\n data-testid={agentStatus === 'creatable' ? 'devices-panel.create-agent' : 'devices-panel.agent-error'}\n onClick={agentStatus === 'creatable' ? onAgentCreate : onAgentRefresh}\n aria-describedby='devices-panel.create-agent.description'\n >\n <div role='img' className={mx(getSize(8), 'm-1 rounded-sm bg-input grid place-items-center')}>\n {agentStatus === 'creatable' ? (\n <Plus weight='light' className={getSize(6)} />\n ) : (\n <ArrowsClockwise weight='light' className={getSize(6)} />\n )}\n </div>\n <span className='grow font-medium text-start'>\n {t(agentStatus === 'creatable' ? 'create agent label' : '')}\n </span>\n </Button>\n {agentStatus === 'creatable' && (\n <div role='none' className='space-y-2' id='devices-panel.create-agent.description'>\n <p className={descriptionText}>\n <Trans\n {...{\n t,\n i18nKey: 'create agent clickwrap',\n components: {\n tosLink: <Link target='_blank' rel='noreferrer' />,\n },\n }}\n />\n </p>\n <p className={descriptionText}>{t('create agent description')}</p>\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, type ReactNode } from 'react';\n\nimport { useId, useThemeContext, type ButtonProps, useElevationContext } from '@dxos/react-ui';\nimport { descriptionText, descriptionTextPrimary, mx } from '@dxos/react-ui-theme';\n\nexport interface CompoundButtonSlots {\n root: ComponentPropsWithoutRef<'button'>;\n middle: ComponentPropsWithoutRef<'div'>;\n label: ComponentPropsWithoutRef<'p'>;\n description: ComponentPropsWithoutRef<'p'>;\n}\n\nexport interface CompoundButtonProps extends ButtonProps {\n children?: ReactNode;\n description?: ReactNode;\n before?: ReactNode;\n after?: ReactNode;\n slots?: Partial<CompoundButtonSlots>;\n}\n\nexport const CompoundButton = ({\n children,\n description,\n before,\n after,\n variant = 'default',\n elevation: propsElevation,\n slots = {},\n ...buttonProps\n}: Omit<CompoundButtonProps, 'density'>) => {\n const labelId = useId('compoundButton-label');\n const descriptionId = useId('compoundButton-description');\n const { tx } = useThemeContext();\n const elevation = useElevationContext(propsElevation);\n const styleProps = { ...buttonProps, variant, elevation, textWrap: true };\n const buttonClassName = tx(\n 'button.root',\n 'button button--compound',\n styleProps,\n 'flex items-center gap-4 plb-2.5',\n slots.root?.className,\n );\n return (\n <button\n {...buttonProps}\n {...slots.root}\n className={buttonClassName}\n aria-labelledby={labelId}\n {...(description && { 'aria-describedby': descriptionId })}\n >\n {before && (\n <div role='none' className='grow-0'>\n {before}\n </div>\n )}\n <div\n role='none'\n {...slots.middle}\n className={mx('grow whitespace-normal flex flex-col gap-1 text-left', slots.middle?.className)}\n >\n <p {...slots.label} id={labelId} className={mx(slots.label?.className)}>\n {children}\n </p>\n {description && (\n <p\n id={descriptionId}\n {...slots.description}\n className={mx(\n 'text-xs mbe-1 font-normal',\n variant === 'primary' ? descriptionTextPrimary : descriptionText,\n slots.description?.className,\n )}\n >\n {description}\n </p>\n )}\n </div>\n {after && (\n <div role='none' className='grow-0'>\n {after}\n </div>\n )}\n </button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport { SpaceMember } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { ListItem, Avatar, useId, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { keyToFallback } from '@dxos/util';\n\ntype IdentityListItemProps = {\n identity: Identity;\n presence?: SpaceMember['presence'];\n onClick?: () => void;\n};\n\nexport const IdentityListItem = forwardRef<\n HTMLLIElement,\n ThemedClassName<ComponentPropsWithoutRef<'li'>> & IdentityListItemProps\n>(({ identity, presence, onClick, classNames, ...props }, forwardedRef) => {\n const fallbackValue = keyToFallback(identity.identityKey);\n const labelId = useId('identityListItem__label');\n const displayName = identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n return (\n <ListItem.Root\n {...props}\n classNames={mx('flex gap-2 pis-3 pie-1 items-center', onClick && 'cursor-pointer', classNames)}\n onClick={() => onClick?.()}\n data-testid='identity-list-item'\n labelId={labelId}\n ref={forwardedRef}\n >\n <Avatar.Root labelId={labelId}>\n <Avatar.Content\n status={presence === SpaceMember.PresenceState.ONLINE ? 'active' : 'inactive'}\n hue={identity.profile?.data?.hue || fallbackValue.hue}\n fallback={identity.profile?.data?.emoji || fallbackValue.emoji}\n classNames='place-self-center'\n />\n <Avatar.Label classNames='text-sm truncate pli-2'>{displayName}</Avatar.Label>\n </Avatar.Root>\n </ListItem.Root>\n );\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type PublicKey, useClient } from '@dxos/react-client';\nimport type { SpaceMember } from '@dxos/react-client/echo';\nimport { useMembers } from '@dxos/react-client/echo';\nimport { useTranslation, List } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { IdentityListItem } from './IdentityListItem';\n\n// TODO(burdon): Consolidate into single component?\n\nexport interface SpaceMemberListImplProps {\n members: SpaceMember[];\n onSelect?: (member: SpaceMember) => void;\n}\n\nexport interface SpaceMemberListProps extends Partial<SpaceMemberListImplProps> {\n spaceKey: PublicKey;\n includeSelf?: boolean;\n}\n\nexport const SpaceMemberList = ({ spaceKey, includeSelf, onSelect }: SpaceMemberListProps) => {\n const client = useClient();\n const allUnsortedMembers = useMembers(spaceKey);\n const members = useMemo(\n () =>\n includeSelf\n ? allUnsortedMembers.sort((member) =>\n member.identity.identityKey.equals(client.halo.identity.get()!.identityKey) ? -1 : 1,\n )\n : allUnsortedMembers.filter(\n (member) => !member.identity.identityKey.equals(client.halo.identity.get()!.identityKey),\n ),\n [allUnsortedMembers],\n );\n return <SpaceMemberListImpl members={members} onSelect={onSelect} />;\n};\n\nexport const SpaceMemberListImpl = ({ members, onSelect }: SpaceMemberListImplProps) => {\n const { t } = useTranslation('os');\n const visibleMembers = members.filter((member) => member.identity);\n return visibleMembers.length > 0 ? (\n <List classNames='flex flex-col gap-2' data-testid='space-members-list'>\n {visibleMembers.map((member) => {\n return (\n <IdentityListItem\n key={member.identity.identityKey.toHex()}\n identity={member.identity}\n presence={member.presence}\n onClick={onSelect && (() => onSelect(member))}\n />\n );\n })}\n </List>\n ) : (\n <div role='none' className='grow flex items-center p-2'>\n <p className={mx(descriptionText, 'text-center is-full mlb-2')}>{t('empty space members message')}</p>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretRight, Plus } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { type Device } from '@dxos/react-client/halo';\nimport { Button, List, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\n\nimport { DeviceListItem } from './DeviceListItem';\nimport { type AgentFormProps, type DeviceListProps } from './DeviceListProps';\n\nexport const DeviceList = ({\n devices,\n connectionState,\n onClickAdd,\n onClickEdit,\n onClickReset,\n onClickRecover,\n onClickJoinExisting,\n onAgentDestroy,\n}: DeviceListProps & Partial<Pick<AgentFormProps, 'onAgentDestroy'>>) => {\n const { t } = useTranslation('os');\n return (\n <div role='none' className='p-1'>\n <h2 className={mx(descriptionText, 'text-center mbs-2')}>{t('devices heading')}</h2>\n {devices.length > 0 && (\n <List>\n {devices.map((device: Device) => {\n return (\n <DeviceListItem\n key={device.deviceKey.toHex()}\n device={device}\n onClickEdit={() => onClickEdit?.(device)}\n {...{ onClickReset, onClickRecover, onClickJoinExisting, connectionState, onAgentDestroy }}\n />\n );\n })}\n </List>\n )}\n <Button\n variant='ghost'\n classNames='justify-start gap-2 pis-0 pie-3 is-full'\n data-testid='devices-panel.create-invitation'\n onClick={onClickAdd}\n >\n <div role='img' className={mx(getSize(8), 'm-1 rounded-sm bg-input grid place-items-center')}>\n <Plus weight='light' className={getSize(6)} />\n </div>\n <span className='grow font-medium text-start'>{t('choose add device label')}</span>\n <CaretRight weight='bold' className={getSize(4)} />\n </Button>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DotsThree, ShareFat, Power, FirstAidKit } from '@phosphor-icons/react';\nimport React, { type ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport { Device, DeviceType, DeviceKind } from '@dxos/react-client/halo';\nimport { ConnectionState } from '@dxos/react-client/mesh';\nimport {\n ListItem,\n Avatar,\n useId,\n type ThemedClassName,\n Tag,\n useTranslation,\n DropdownMenu,\n Button,\n} from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\nimport { keyToFallback } from '@dxos/util';\n\nimport { type AgentFormProps, type DeviceListItemProps } from './DeviceListProps';\n\nexport const DeviceListItem = forwardRef<\n HTMLLIElement,\n ThemedClassName<ComponentPropsWithoutRef<'li'>> &\n DeviceListItemProps &\n Partial<Pick<AgentFormProps, 'onAgentDestroy'>>\n>(\n (\n {\n device,\n onClickAdd,\n onClickEdit,\n onClickReset,\n onClickRecover,\n onClickJoinExisting,\n classNames,\n connectionState,\n onAgentDestroy: _,\n ...props\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation('os');\n const fallbackValue = keyToFallback(device.deviceKey);\n const labelId = useId('identityListItem__label');\n const displayName = device.profile\n ? t('device name placeholder', { os: device.profile.os, platform: device.profile.platform })\n : generateName(device.deviceKey.toHex());\n const isCurrent = device.kind === DeviceKind.CURRENT;\n return (\n <ListItem.Root\n {...props}\n classNames={['flex gap-2 items-center mlb-2', classNames]}\n data-testid={`device-list-item${isCurrent ? '-current' : ''}`}\n labelId={labelId}\n ref={forwardedRef}\n >\n <Avatar.Root labelId={labelId}>\n <Avatar.Content\n status={\n isCurrent && connectionState === ConnectionState.OFFLINE\n ? 'error'\n : device.presence === Device.PresenceState.ONLINE\n ? 'active'\n : 'inactive'\n }\n hue={fallbackValue.hue}\n variant='square'\n classNames='place-self-center'\n {...(device.profile?.type\n ? {\n icon:\n device.profile.type === DeviceType.AGENT_MANAGED\n ? 'ph--database--regular'\n : device.profile.type === DeviceType.BROWSER\n ? 'ph--compass--regular'\n : device.profile.type === DeviceType.NATIVE\n ? 'ph--desktop--regular'\n : [DeviceType.AGENT, DeviceType.AGENT_MANAGED].includes(device.profile.type)\n ? 'ph--robot--regular'\n : device.profile.type === DeviceType.MOBILE\n ? 'ph--device-mobile--regular'\n : 'ph--devices--regular',\n }\n : { fallback: fallbackValue.emoji })}\n />\n <Avatar.Label classNames='flex-1 text-sm truncate'>{displayName}</Avatar.Label>\n {isCurrent && <Tag color='primary'>{t('current device tag label')}</Tag>}\n {/* TODO(wittjosiah): EDGE agents cannot current be turned off. */}\n {/* {device.profile?.type === DeviceType.AGENT_MANAGED && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n classNames='pli-0 is-[--rail-action] bs-[--rail-action]'\n data-testid='agent.destroy'\n onClick={onAgentDestroy}\n >\n <span className='sr-only'>{t('destroy agent label')}</span>\n <Power className={getSize(5)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom' classNames='z-50'>\n {t('destroy agent label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )} */}\n {device.kind === DeviceKind.CURRENT && (onClickJoinExisting || onClickRecover || onClickReset) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n variant='ghost'\n classNames='pli-0 is-[--rail-action] bs-[--rail-action]'\n data-testid={`device-list-item${isCurrent ? '-current' : ''}.options`}\n >\n <span className='sr-only'>{t('more options label')}</span>\n <DotsThree className={getSize(5)} />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {/* <DropdownMenu.Item disabled onClick={onClickEdit}> */}\n {/* <PencilSimpleLine className={getSize(5)} /> */}\n {/* {t('edit device label')} */}\n {/* </DropdownMenu.Item> */}\n {onClickJoinExisting && (\n <DropdownMenu.Item\n data-testid='device-list-item-current.join-existing'\n onClick={onClickJoinExisting}\n >\n <ShareFat className={getSize(5)} />\n {t('choose join new identity label')}\n </DropdownMenu.Item>\n )}\n {onClickRecover && (\n <DropdownMenu.Item data-testid='device-list-item-current.recover' onClick={onClickRecover}>\n <FirstAidKit className={getSize(5)} />\n {t('choose recover identity label')}\n </DropdownMenu.Item>\n )}\n {onClickReset && (\n <DropdownMenu.Item data-testid='device-list-item-current.reset' onClick={onClickReset}>\n <Power className={getSize(5)} />\n {t('reset device label')}\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Viewport>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Avatar.Root>\n </ListItem.Root>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { X } from '@phosphor-icons/react';\nimport { formatDistanceToNow } from 'date-fns';\nimport React, { type ComponentPropsWithoutRef, useCallback } from 'react';\n\nimport {\n type CancellableInvitationObservable,\n Invitation,\n type InvitationStatus,\n useInvitationStatus,\n} from '@dxos/react-client/invitations';\nimport {\n Button,\n Clipboard,\n ListItem,\n useTranslation,\n Avatar,\n useThemeContext,\n Tooltip,\n type ThemedClassName,\n type AvatarContentProps,\n} from '@dxos/react-ui';\nimport { focusRing, getSize, mx } from '@dxos/react-ui-theme';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { type SharedInvitationListProps } from './InvitationListProps';\nimport { AuthCode } from '../AuthCode';\n\nexport type InvitationListItemProps = SharedInvitationListProps & {\n invitation: CancellableInvitationObservable;\n onClickRemove?: (invitation: CancellableInvitationObservable) => void;\n reverseEffects?: boolean;\n} & ThemedClassName<ComponentPropsWithoutRef<'li'>>;\n\nexport type InvitationListItemImplProps = InvitationListItemProps & {\n invitationStatus: InvitationStatus;\n};\n\nexport const InvitationListItem = (props: InvitationListItemProps) => {\n const { invitation } = props;\n const invitationStatus = useInvitationStatus(invitation);\n return <InvitationListItemImpl {...props} invitationStatus={invitationStatus} />;\n};\n\nconst avatarProps: Pick<AvatarContentProps, 'size' | 'variant'> = { size: 10, variant: 'circle' };\n\nconst AvatarStackEffect = ({\n animation,\n status,\n reverseEffects,\n}: Pick<AvatarContentProps, 'status' | 'animation'> & Pick<InvitationListItemProps, 'reverseEffects'>) => {\n const { tx } = useThemeContext();\n return (\n <>\n <span\n role='none'\n className={mx(\n 'absolute inline-end-auto opacity-20',\n reverseEffects ? 'inline-start-3' : 'inline-start-1',\n getSize(avatarProps.size!),\n )}\n >\n <span\n role='none'\n className={tx('avatar.ring', 'avatar__ring', { ...avatarProps, status, animation })}\n style={{ animationDelay: '400ms' }}\n />\n </span>\n <span\n role='none'\n className={mx(\n 'absolute inline-end-auto opacity-50',\n reverseEffects ? 'inline-start-2' : 'inline-start-2',\n getSize(avatarProps.size!),\n )}\n >\n <span\n role='none'\n className={tx('avatar.ring', 'avatar__ring', { ...avatarProps, status, animation })}\n style={{ animationDelay: '200ms' }}\n />\n </span>\n </>\n );\n};\n\nexport const InvitationListItemImpl = ({\n invitation,\n invitationStatus: propsInvitationStatus,\n send,\n onClickRemove,\n createInvitationUrl,\n reverseEffects,\n ...props\n}: InvitationListItemImplProps) => {\n const { t } = useTranslation('os');\n const { cancel, status: invitationStatus, invitationCode, authCode, multiUse, shareable } = propsInvitationStatus;\n\n const isCancellable = !(\n [Invitation.State.ERROR, Invitation.State.TIMEOUT, Invitation.State.CANCELLED].indexOf(invitationStatus) >= 0\n );\n\n const showShare =\n shareable &&\n (multiUse ||\n [Invitation.State.INIT, Invitation.State.CONNECTING, Invitation.State.CONNECTED].indexOf(invitationStatus) >= 0);\n\n const showAuthCode = invitationStatus === Invitation.State.READY_FOR_AUTHENTICATION;\n\n const handleClickRemove = useCallback(() => onClickRemove?.(invitation), [invitation, onClickRemove]);\n\n const invitationUrl = invitationCode && createInvitationUrl(invitationCode);\n const invitationId = invitation?.get().invitationId;\n const invitationHasLifetime = invitation?.get().lifetime;\n const invitationTimeLeft = invitation?.expiry\n ? formatDistanceToNow(invitation?.expiry, { addSuffix: true })\n : undefined;\n\n const avatarAnimation = [\n Invitation.State.INIT,\n Invitation.State.CONNECTING,\n Invitation.State.CONNECTED,\n Invitation.State.READY_FOR_AUTHENTICATION,\n Invitation.State.AUTHENTICATING,\n ].includes(invitationStatus)\n ? 'pulse'\n : 'none';\n\n const avatarError = [Invitation.State.ERROR, Invitation.State.TIMEOUT, Invitation.State.CANCELLED].includes(\n invitationStatus,\n );\n\n const avatarGreen = [\n Invitation.State.CONNECTED,\n Invitation.State.READY_FOR_AUTHENTICATION,\n Invitation.State.AUTHENTICATING,\n Invitation.State.SUCCESS,\n ].includes(invitationStatus);\n\n const avatarStatus = avatarError ? 'error' : avatarGreen ? 'active' : 'inactive';\n\n return (\n <ListItem.Root\n id={invitationCode}\n {...props}\n classNames={['flex gap-2 pis-3 pie-1 items-center relative', props.classNames]}\n >\n <ListItem.Heading classNames='sr-only'>\n {t(multiUse ? 'invite many list item label' : 'invite one list item label')}\n </ListItem.Heading>\n {multiUse && (\n <AvatarStackEffect status={avatarStatus} animation={avatarAnimation} reverseEffects={reverseEffects} />\n )}\n <Tooltip.Root>\n <Avatar.Root>\n <Tooltip.Trigger asChild>\n <Avatar.Content\n {...avatarProps}\n animation={avatarAnimation}\n status={avatarStatus}\n fallback={hexToEmoji(invitationId)}\n tabIndex={0}\n classNames={[focusRing, 'relative rounded-full place-self-center']}\n />\n </Tooltip.Trigger>\n </Avatar.Root>\n <Tooltip.Portal>\n <Tooltip.Content side='left'>\n {t(multiUse ? 'invite many qr label' : 'invite one qr label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n {showShare && invitationUrl ? (\n <Tooltip.Root>\n <>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n classNames='grow justify-start font-medium'\n onClick={() => send({ type: 'selectInvitation', invitation })}\n data-testid='show-qrcode'\n >\n <span>{t('open share panel label')}</span>\n </Button>\n </Tooltip.Trigger>\n <Clipboard.IconButton variant='ghost' value={invitationUrl} />\n </>\n <Tooltip.Portal>\n <Tooltip.Content side='left'>\n {invitationHasLifetime && <span>Expires {invitationTimeLeft}</span>}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n ) : showAuthCode ? (\n <AuthCode code={authCode} classNames='grow' />\n ) : invitationStatus === Invitation.State.CONNECTING ? (\n <span className='pli-2 grow text-neutral-500'>Connecting...</span>\n ) : invitationStatus === Invitation.State.AUTHENTICATING ? (\n <span className='pli-2 grow text-neutral-500'>Authenticating...</span>\n ) : invitationStatus === Invitation.State.ERROR || invitationStatus === Invitation.State.TIMEOUT ? (\n <span className='pli-2 grow text-neutral-500'>Failed</span>\n ) : invitationStatus === Invitation.State.CANCELLED ? (\n <span className='pli-2 grow text-neutral-500'>Cancelled</span>\n ) : invitationStatus === Invitation.State.SUCCESS ? (\n <span className='pli-2 grow truncate'>User joined</span>\n ) : !shareable ? (\n <span className='pli-2 grow text-neutral-500'>Pending Invitation</span>\n ) : (\n <span className='grow'> </span>\n )}\n {isCancellable ? (\n <Button variant='ghost' classNames='flex gap-1 pli-0' onClick={cancel} data-testid='cancel-invitation'>\n <span className='sr-only'>{t('cancel invitation label')}</span>\n <X className={getSize(4)} />\n </Button>\n ) : (\n <Button\n variant='ghost'\n classNames='flex gap-1 pli-0'\n onClick={handleClickRemove}\n data-testid='remove-invitation'\n >\n <span className='sr-only'>{t('remove invitation label')}</span>\n <X className={getSize(4)} />\n </Button>\n )}\n </ListItem.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n//\n\nimport React, { type ComponentPropsWithoutRef, type PropsWithChildren, useRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type AuthCodeProps = ThemedClassName<ComponentPropsWithoutRef<'span'>> & {\n code?: string;\n large?: boolean;\n};\n\nexport const AuthCode = (props: PropsWithChildren<AuthCodeProps>) => {\n const { code, large, classNames } = props;\n const l = code?.length ?? 0;\n const left = code?.slice(0, l / 2);\n const right = code?.slice(l / 2);\n const codeRef = useRef<HTMLSpanElement | null>(null);\n const handleClick = () => {\n if (codeRef.current) {\n const selection = window.getSelection();\n selection?.removeAllRanges();\n const range = document.createRange();\n range.selectNodeContents(codeRef.current);\n selection?.addRange(range);\n }\n void navigator.clipboard.writeText(code ?? '');\n };\n return (\n <span\n className={mx(large ? 'text-6xl' : 'text-2xl', 'font-mono pli-2.5 rounded cursor-pointer', classNames)}\n onClick={handleClick}\n ref={codeRef}\n >\n <span className='mie-[0.4em]'>{left}</span>\n <span>{right}</span>\n </span>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\nimport React, { useCallback } from 'react';\n\nimport { type PublicKey } from '@dxos/react-client';\nimport { useSpace, useSpaceInvitations } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\n\nimport { InvitationList } from './InvitationList';\nimport { type SharedInvitationListProps } from './InvitationListProps';\n\nexport interface InvitationListContainerProps extends SharedInvitationListProps {\n spaceKey: PublicKey;\n}\n\nexport const InvitationListContainer = ({ spaceKey, createInvitationUrl, send }: InvitationListContainerProps) => {\n const space = useSpace(spaceKey);\n const invitations = useSpaceInvitations(spaceKey);\n const handleClickRemove = useCallback(\n (invitation: CancellableInvitationObservable) => {\n void invitation.cancel();\n },\n [space],\n );\n\n return (\n <InvitationList invitations={invitations} {...{ onClickRemove: handleClickRemove, createInvitationUrl, send }} />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\nimport React, { type ComponentType } from 'react';\n\nimport type { CancellableInvitationObservable } from '@dxos/react-client/invitations';\nimport { List } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { InvitationListItem, type InvitationListItemProps } from './InvitationListItem';\nimport { type SharedInvitationListProps } from './InvitationListProps';\n\nexport interface InvitationListProps\n extends Omit<InvitationListItemProps, 'invitation' | 'value'>,\n Pick<SharedInvitationListProps, 'send'> {\n invitations: CancellableInvitationObservable[];\n InvitationListItem?: ComponentType<InvitationListItemProps>;\n className?: string;\n}\n\nexport const InvitationList = ({ invitations, send, ...invitationProps }: InvitationListProps) => {\n const { className, InvitationListItem: Item = InvitationListItem } = invitationProps;\n return (\n <List classNames={mx('flex flex-col gap-2', className)}>\n {invitations.map((invitation) => {\n const value = invitation.get().invitationId;\n return <Item key={value} send={send} invitation={invitation} {...invitationProps} />;\n })}\n </List>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretDown, Check, type IconProps, Placeholder } from '@phosphor-icons/react';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type Dispatch, type FC, forwardRef, type SetStateAction } from 'react';\n\nimport { type ButtonProps, Button, DropdownMenu, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\n\nexport type LargeButtonProps = ButtonProps & {\n isFull?: boolean;\n};\n\nexport type ActionMenuItem = {\n label: string;\n description: string;\n icon: FC<IconProps>;\n testId?: string;\n} & Pick<ButtonProps, 'onClick'>;\n\nexport type BifurcatedActionProps = {\n actions: Record<string, ActionMenuItem>;\n activeAction?: string;\n onChangeActiveAction?: Dispatch<SetStateAction<string>>;\n defaultActiveAction?: string;\n 'data-testid'?: string;\n} & Omit<LargeButtonProps, 'children' | 'onClick'>;\n\nconst defaultActions = {\n noopAction: {\n label: 'No-op',\n description: '',\n icon: Placeholder,\n onClick: () => {},\n },\n} as Record<string, ActionMenuItem>;\n\nexport const BifurcatedAction = forwardRef<HTMLButtonElement, BifurcatedActionProps>((props, forwardedRef) => {\n const {\n classNames,\n variant,\n isFull = true,\n actions = defaultActions,\n activeAction: propsActiveAction,\n onChangeActiveAction,\n defaultActiveAction,\n 'data-testid': testId,\n ...rest\n } = props;\n\n const dropdownTestId = testId && `${testId}.more`;\n\n const [activeActionKey = Object.keys(actions)[0], setActiveAction] = useControllableState({\n prop: propsActiveAction,\n onChange: onChangeActiveAction,\n defaultProp: defaultActiveAction,\n });\n\n const activeAction = actions[activeActionKey as string] ?? {};\n\n const { t } = useTranslation('os');\n\n return (\n <div role='none' className={mx('mbs-2 flex gap-px items-center', isFull && 'is-full')}>\n <Button\n {...rest}\n classNames={['bs-11 flex-1 min-is-0 flex gap-2 rounded-ie-none', classNames]}\n ref={forwardedRef}\n variant={variant}\n data-testid={testId}\n onClick={activeAction.onClick}\n >\n {activeAction.icon && <activeAction.icon className={getSize(5)} />}\n <span>{activeAction.label}</span>\n </Button>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button classNames={['bs-11 flex-none rounded-is-none', classNames]} data-testid={dropdownTestId}>\n <span className='sr-only'>{t('invite options label')}</span>\n <CaretDown className={getSize(4)} />\n </Button>\n </DropdownMenu.Trigger>\n {/* TODO(thure): Putting `DropdownMenu.Portal` here breaks highlighting and focus. Why? */}\n <DropdownMenu.Portal>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {Object.entries(actions).map(([id, action]) => {\n return (\n <DropdownMenu.CheckboxItem\n key={id}\n aria-labelledby={`${id}__label`}\n aria-describedby={`${id}__description`}\n checked={activeActionKey === id}\n onCheckedChange={(checked) => checked && setActiveAction(id)}\n classNames='gap-2'\n data-testid={action.testId}\n >\n {action.icon && <action.icon className={getSize(5)} />}\n <div role='none' className='flex-1 min-is-0 space-b-1'>\n <p id={`${id}__label`}>{action.label}</p>\n {action.description && (\n <p id={`${id}__description`} className={descriptionText}>\n {action.description}\n </p>\n )}\n </div>\n <DropdownMenu.ItemIndicator asChild>\n <Check weight='bold' className={getSize(4)} />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.CheckboxItem>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n );\n});\n\nexport const Action = forwardRef<HTMLButtonElement, LargeButtonProps>((props, forwardedRef) => {\n const { children, classNames, variant, isFull = true, ...rest } = props;\n return (\n <Button\n {...rest}\n classNames={[isFull && 'is-full', 'bs-11 flex gap-2 mbs-2', classNames]}\n ref={forwardedRef}\n variant={variant}\n >\n {children}\n </Button>\n );\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, forwardRef, type ReactNode } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\ntype ActionsProps = Omit<ThemedClassName<ComponentPropsWithoutRef<'div'>>, 'children'> & {\n children: ReactNode | ReactNode[];\n};\n\nconst Actions = forwardRef<HTMLDivElement, ActionsProps>(({ classNames, children, ...props }, forwardedRef) => {\n return (\n <div\n {...props}\n className={mx(\n 'flex flex-col gap-2 mbs-2',\n Array.isArray(children) && children.length > 1 ? 'justify-between' : 'justify-center',\n classNames,\n )}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n});\n\nexport { Actions };\nexport type { ActionsProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { X } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { Button, type ButtonProps, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nexport const CloseButton = ({ onDone, ...props }: Omit<ButtonProps, 'onClick'> & { onDone?: () => void }) => {\n const { t } = useTranslation('os');\n return (\n <Button\n variant='ghost'\n classNames={mx('plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]')}\n onClick={() => onDone?.()}\n {...props}\n >\n <X weight='bold' className={getSize(4)} />\n <span className='sr-only'>{t('exit label')}</span>\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx, getSize } from '@dxos/react-ui-theme';\n\nexport const Emoji = ({ text, className }: { text?: string; className?: string }) => {\n const size = 14;\n return (\n <div role='none' className={mx(getSize(size), 'rounded relative pointer-events-none', className)}>\n <svg viewBox={`0 0 ${size * 4} ${size * 4}`} width={size * 4} height={size * 4}>\n <text\n x='50%'\n y='50%'\n textAnchor='middle'\n dominantBaseline='middle'\n baselineShift={'-0.25rem'}\n fontSize={'2.25rem'}\n >\n {text}\n </text>\n </svg>\n </div>\n );\n};\n\nexport const Centered = (props: PropsWithChildren) => {\n const { children } = props;\n return (\n <div role='none' className='absolute inset-0 flex items-center justify-center'>\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, type PropsWithChildren, type ReactNode } from 'react';\n\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nexport type PanelHeadingProps = PropsWithChildren<{\n titleId: string;\n title: string;\n titleSrOnly?: boolean;\n corner?: ReactNode;\n}>;\n\nexport const Heading = forwardRef<HTMLDivElement, PanelHeadingProps>(\n ({ titleId, title, titleSrOnly, children, corner }, forwardedRef) => {\n return (\n <div role='none' className='pbe-2 relative' ref={forwardedRef}>\n {corner}\n <h1\n {...(!titleSrOnly && { id: titleId })}\n className={mx(descriptionText, 'text-center mlb-2', titleSrOnly && 'invisible')}\n >\n {title}\n </h1>\n {titleSrOnly && <span id={titleId}>{title}</span>}\n {children}\n </div>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nexport type LabelProps = PropsWithChildren<{}>;\n\nexport const Label = (props: LabelProps) => {\n const { children } = props;\n return <span className={mx(descriptionText, 'text-center mli-6 whitespace-normal')}>{children}</span>;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ChangeEventHandler, type ReactNode } from 'react';\n\nimport { Input as UiInput, type TextInputProps } from '@dxos/react-ui';\n\nexport type LargeInputProps = TextInputProps & {\n validationMessage?: string;\n label?: ReactNode;\n disabled?: boolean;\n placeholder?: string;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n};\n\nexport const Input = ({ validationMessage, label, ...props }: LargeInputProps) => {\n return (\n <UiInput.Root>\n <UiInput.Label>{label}</UiInput.Label>\n <UiInput.TextInput {...props} classNames='plb-3 mbs-2 text-center' />\n <UiInput.DescriptionAndValidation>\n {validationMessage && <UiInput.Validation>{validationMessage}</UiInput.Validation>}\n </UiInput.DescriptionAndValidation>\n </UiInput.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ComponentPropsWithRef, forwardRef } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const StepHeading = forwardRef<HTMLHeadingElement, ComponentPropsWithRef<'h2'>>(\n ({ children, className, ...props }, forwardedRef) => {\n return (\n <h2 {...props} className={mx('font-normal text-sm mbe-4 mli-1 text-center', className)} ref={forwardedRef}>\n {children}\n </h2>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { createContextScope, type Scope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, {\n type ComponentPropsWithRef,\n type Dispatch,\n type ReactNode,\n type SetStateAction,\n forwardRef,\n useEffect,\n} from 'react';\n\nimport { type ThemedClassName, useForwardedRef } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst VIEWPORT_NAME = 'Viewport';\nconst VIEWS_NAME = 'ViewportViews';\nconst VIEW_NAME = 'ViewportView';\n\ntype ViewportContextValue = {\n focusManaged: boolean;\n activeView: string;\n setActiveView: Dispatch<SetStateAction<string | undefined>>;\n};\n\ntype ViewportScopedProps<P> = P & { __viewportScope?: Scope };\n\nconst [createViewportContext, createViewportScope] = createContextScope(VIEWPORT_NAME, []);\n\nconst [ViewportProvider, useViewportContext] = createViewportContext<ViewportContextValue>(VIEWPORT_NAME);\n\ntype ViewportRootProps = ThemedClassName<ComponentPropsWithRef<'div'>> &\n Partial<{\n focusManaged: boolean;\n defaultActiveView: string;\n activeView: string;\n onActiveViewChange: Dispatch<SetStateAction<string>>;\n }>;\n\nconst ViewportRoot = ({\n __viewportScope,\n classNames,\n children,\n defaultActiveView,\n activeView: propsActiveView,\n focusManaged = false,\n onActiveViewChange,\n ...props\n}: ViewportScopedProps<ViewportRootProps>) => {\n const [activeView = 'never', setActiveView] = useControllableState({\n prop: propsActiveView,\n defaultProp: defaultActiveView,\n onChange: onActiveViewChange,\n });\n return (\n <ViewportProvider\n focusManaged={focusManaged}\n activeView={activeView}\n setActiveView={setActiveView}\n scope={__viewportScope}\n >\n <div role='region' aria-live='polite' {...props} className={mx('is-full overflow-hidden', classNames)}>\n {children}\n </div>\n </ViewportProvider>\n );\n};\n\nViewportRoot.displayName = VIEWPORT_NAME;\n\ntype ViewportViewsProps = ThemedClassName<Omit<ComponentPropsWithRef<'div'>, 'children'>> & { children: ReactNode[] };\n\nconst ViewportViews = ({ classNames, children, ...props }: ViewportViewsProps) => {\n const size = { inlineSize: `${Math.ceil(children.length) * 100}%` };\n return (\n <div role='none' style={size} {...props} className={mx('flex', classNames)}>\n {children}\n </div>\n );\n};\n\nViewportViews.displayName = VIEWS_NAME;\n\ntype ViewportViewProps = ThemedClassName<Omit<ComponentPropsWithRef<'div'>, 'id'>> & {\n id: string;\n};\n\nconst ViewportView = forwardRef<HTMLDivElement, ViewportScopedProps<ViewportViewProps>>(\n ({ __viewportScope, classNames, children, id, ...props }, forwardedRef) => {\n const { activeView, focusManaged }: ViewportContextValue = useViewportContext(VIEW_NAME, __viewportScope);\n const isActive = id === activeView;\n const ref = useForwardedRef(forwardedRef);\n const { findFirstFocusable } = useFocusFinders();\n useEffect(() => {\n if (!focusManaged && isActive && document.body.hasAttribute('data-is-keyboard') && ref.current) {\n findFirstFocusable(ref.current)?.focus();\n }\n }, [focusManaged, ref.current, isActive]);\n\n return (\n <section\n {...props}\n {...(!isActive && { 'aria-hidden': true })}\n className={mx('min-is-0 flex-1 flex flex-col', isActive ? 'order-2' : 'order-4 invisible', classNames)}\n ref={ref}\n >\n {children}\n </section>\n );\n },\n);\n\nViewportView.displayName = VIEW_NAME;\n\nexport const Viewport = { Root: ViewportRoot, Views: ViewportViews, View: ViewportView };\nexport { useViewportContext, createViewportScope };\nexport type { ViewportRootProps, ViewportViewsProps, ViewportViewProps, ViewportScopedProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ForwardedRef, forwardRef } from 'react';\n\nimport type { Space } from '@dxos/react-client/echo';\nimport { Avatar, useId } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { humanize, keyToEmoji } from '@dxos/util';\n\nexport const SpaceListItem = forwardRef(\n ({ space, onClick }: { space: Space; onClick?: () => void }, ref: ForwardedRef<HTMLLIElement>) => {\n const fallbackValue = keyToEmoji(space.key);\n const labelId = useId('identityListItem__label');\n const displayName = space.properties.name ?? humanize(space.key.toHex());\n\n return (\n <li\n className={mx('flex gap-2 items-center mbe-2', onClick && 'cursor-pointer')}\n onClick={() => onClick?.()}\n ref={ref}\n data-testid='space-list-item'\n >\n <Avatar.Root labelId={labelId}>\n <Avatar.Content fallback={fallbackValue} />\n <Avatar.Label classNames='text-sm truncate'>{displayName}</Avatar.Label>\n </Avatar.Root>\n </li>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Clipboard, type DialogContentProps, Dialog, useId } from '@dxos/react-ui';\n\nimport { IdentityPanel, type IdentityPanelProps } from '../../panels';\n\nexport interface IdentityDialogProps\n extends Omit<DialogContentProps, 'children'>,\n Omit<IdentityPanelProps, 'doneActionParent'> {\n onDone: () => void;\n}\n\nexport const IdentityDialog = (props: IdentityDialogProps) => {\n const titleId = useId('identityDialog__title', props.title);\n return (\n <Dialog.Root defaultOpen onOpenChange={(open) => open || props.onDone?.()}>\n <Dialog.Portal>\n <Dialog.Overlay>\n <Dialog.Content aria-labelledby={titleId} onOpenAutoFocus={(ev) => ev.preventDefault()}>\n <Clipboard.Provider>\n <IdentityPanel\n {...{\n ...props,\n titleId,\n doneActionParent: <Dialog.Close asChild />,\n }}\n />\n </Clipboard.Provider>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { IdentificationCard, Plugs, PlugsConnected } from '@phosphor-icons/react';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { generateName } from '@dxos/display-name';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { type Identity, useIdentity, useDevices, useHaloInvitations } from '@dxos/react-client/halo';\nimport { useInvitationStatus } from '@dxos/react-client/invitations';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\nimport { useNetworkStatus, ConnectionState } from '@dxos/react-client/mesh';\nimport { Avatar, Clipboard, Input, Toolbar, Tooltip, useId, useTranslation } from '@dxos/react-ui';\nimport { EmojiPickerToolbarButton, HuePicker } from '@dxos/react-ui-pickers';\nimport { errorText, getSize } from '@dxos/react-ui-theme';\nimport { hexToEmoji, hexToHue, keyToFallback } from '@dxos/util';\n\nimport {\n type IdentityPanelHeadingProps,\n type IdentityPanelImplProps,\n type IdentityPanelProps,\n} from './IdentityPanelProps';\nimport { useIdentityMachine } from './identityMachine';\nimport { IdentityActionChooser } from './steps';\nimport { useAgentHandlers } from './useAgentHandlers';\nimport { Viewport, CloseButton, Heading } from '../../components';\nimport { ConfirmReset, InvitationManager } from '../../steps';\n\nconst viewStyles = 'pbs-1 pbe-3 pli-3';\n\n// TODO(thure): Factor out?\nconst getHueValue = (identity?: Identity) =>\n identity?.profile?.data?.hue || hexToHue(identity?.identityKey.toHex() ?? '0');\nconst getEmojiValue = (identity?: Identity) =>\n identity?.profile?.data?.emoji || hexToEmoji(identity?.identityKey.toHex() ?? '0');\n\nconst IdentityHeading = ({\n titleId,\n title,\n identity,\n onDone,\n onUpdateProfile,\n connectionState,\n onChangeConnectionState,\n onManageCredentials,\n}: IdentityPanelHeadingProps) => {\n const fallbackValue = keyToFallback(identity.identityKey);\n const { t } = useTranslation('os');\n const [displayName, setDisplayNameDirectly] = useState(identity.profile?.displayName ?? '');\n const [emoji, setEmojiDirectly] = useState<string>(getEmojiValue(identity));\n const [hue, setHueDirectly] = useState<string | undefined>(getHueValue(identity));\n\n const updateDisplayName = useMemo(\n () =>\n debounce(\n (nextDisplayName: string) => onUpdateProfile?.({ ...identity.profile, displayName: nextDisplayName }),\n 3_000,\n ),\n [onUpdateProfile, identity.profile],\n );\n\n const setDisplayName = (nextDisplayName: string) => {\n setDisplayNameDirectly(nextDisplayName);\n updateDisplayName(nextDisplayName);\n };\n\n const setEmoji = (nextEmoji: string) => {\n setEmojiDirectly(nextEmoji);\n void onUpdateProfile?.({ ...identity.profile, data: { ...identity.profile?.data, emoji: nextEmoji } });\n };\n\n const setHue = (nextHue: string | undefined) => {\n setHueDirectly(nextHue);\n void onUpdateProfile?.({ ...identity.profile, data: { ...identity.profile?.data, hue: nextHue } });\n };\n\n const isConnected = connectionState === ConnectionState.ONLINE;\n\n return (\n <Heading titleId={titleId} title={title} corner={<CloseButton onDone={onDone} />}>\n <Avatar.Root>\n <Toolbar.Root classNames='flex justify-center'>\n <Avatar.Content\n size={16}\n variant='circle'\n status={isConnected ? 'active' : 'error'}\n hue={hue || fallbackValue.hue}\n fallback={emoji || fallbackValue.emoji}\n classNames='relative z-[2] -mli-4 chromatic-ignore'\n />\n </Toolbar.Root>\n\n <Avatar.Label classNames='sr-only' data-testid='identityHeading.displayName'>\n {identity.profile?.displayName ?? generateName(identity.identityKey.toHex())}\n </Avatar.Label>\n\n <Input.Root>\n <Input.Label srOnly>{t('display name input label')}</Input.Label>\n <Input.TextInput\n variant='subdued'\n data-testid='display-name-input'\n placeholder={t('display name input placeholder')}\n classNames='mbs-2 text-center font-light text-xl'\n value={displayName}\n onChange={({ target: { value } }) => setDisplayName(value)}\n />\n </Input.Root>\n\n <Toolbar.Root classNames='flex justify-center items-center gap-1 pt-3'>\n <EmojiPickerToolbarButton emoji={emoji} onChangeEmoji={setEmoji} classNames='bs-[--rail-action]' />\n <HuePicker\n value={hue}\n onChange={setHue}\n onReset={() => setHue(undefined)}\n classNames='bs-[--rail-action]'\n rootVariant='toolbar-button'\n />\n <Clipboard.IconButton\n classNames='bs-[--rail-action]'\n data-testid='update-profile-form-copy-key'\n label={t('copy self did label')}\n value={identity.did}\n />\n {onManageCredentials && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Toolbar.Button classNames='bs-[--rail-action]' onClick={onManageCredentials}>\n <span className='sr-only'>{t('manage credentials label')}</span>\n <IdentificationCard className={getSize(5)} />\n </Toolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n {t('manage credentials label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Toolbar.Button\n classNames={['bs-[--rail-action]', !isConnected && errorText]}\n onClick={() =>\n onChangeConnectionState?.(isConnected ? ConnectionState.OFFLINE : ConnectionState.ONLINE)\n }\n >\n <span className='sr-only'>{t(isConnected ? 'disconnect label' : 'connect label')}</span>\n {isConnected ? <PlugsConnected className={getSize(5)} /> : <Plugs className={getSize(5)} />}\n </Toolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom'>\n {t(isConnected ? 'disconnect label' : 'connect label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Toolbar.Root>\n </Avatar.Root>\n </Heading>\n );\n};\n\nexport const IdentityPanelImpl = (props: IdentityPanelImplProps) => {\n const {\n identity,\n titleId,\n activeView,\n onUpdateProfile,\n onResetStorage,\n onRecover,\n onJoinNewIdentity,\n IdentityActionChooser: IdentityActionChooserComponent = IdentityActionChooser,\n InvitationManager: InvitationManagerComponent = InvitationManager,\n connectionState,\n onChangeConnectionState,\n onDone,\n onManageCredentials,\n ...rest\n } = props;\n const { t } = useTranslation('os');\n const title = useMemo(() => {\n switch (activeView) {\n case 'device invitation manager':\n return t('choose add device label');\n default:\n return t('identity heading');\n }\n }, [activeView, t]);\n\n const onCancelReset = () => rest.send?.('unchooseAction');\n const hideRecover = rest.agentStatus !== 'created';\n\n return (\n <>\n <IdentityHeading\n {...{\n identity,\n titleId,\n title,\n hideRecover,\n onDone,\n onUpdateProfile,\n connectionState,\n onChangeConnectionState,\n onManageCredentials,\n }}\n />\n <Viewport.Root activeView={activeView}>\n <Viewport.Views>\n <Viewport.View id='identity action chooser' classNames={viewStyles}>\n <IdentityActionChooserComponent\n active={activeView === 'identity action chooser'}\n {...rest}\n connectionState={connectionState}\n />\n </Viewport.View>\n <Viewport.View id='device invitation manager' classNames={viewStyles}>\n <InvitationManagerComponent\n active={activeView === 'device invitation manager'}\n {...rest}\n invitationUrl={rest.createInvitationUrl(rest.invitationCode!)}\n />\n </Viewport.View>\n <Viewport.View classNames={viewStyles} id='confirm join new identity'>\n <ConfirmReset\n active={activeView === 'confirm join new identity'}\n {...rest}\n mode='join new identity'\n onConfirm={onJoinNewIdentity}\n onCancel={onCancelReset}\n />\n </Viewport.View>\n <Viewport.View classNames={viewStyles} id='confirm recover'>\n <ConfirmReset\n active={activeView === 'confirm recover'}\n {...rest}\n mode='recover'\n onConfirm={onRecover}\n onCancel={onCancelReset}\n />\n </Viewport.View>\n <Viewport.View classNames={viewStyles} id='confirm reset storage'>\n <ConfirmReset\n active={activeView === 'confirm reset storage'}\n {...rest}\n mode='reset storage'\n onConfirm={onResetStorage}\n onCancel={onCancelReset}\n />\n </Viewport.View>\n </Viewport.Views>\n </Viewport.Root>\n </>\n );\n};\n\nconst IdentityPanelWithInvitationImpl = ({\n invitation,\n ...props\n}: IdentityPanelImplProps & { invitation: CancellableInvitationObservable }) => {\n const invitationStatus = useInvitationStatus(invitation);\n return <IdentityPanelImpl {...props} {...invitationStatus} />;\n};\n\nexport const IdentityPanel = ({\n titleId: propsTitleId,\n createInvitationUrl = (code) => code,\n initialDisposition = 'default',\n ...props\n}: IdentityPanelProps) => {\n const titleId = useId('identityPanel__heading', propsTitleId);\n const client = useClient();\n const devices = useDevices();\n const identity = useIdentity();\n const invitations = useHaloInvitations();\n const agentProps = useAgentHandlers({ identity, invitations });\n if (!identity) {\n log.error('IdentityPanel rendered with no active identity.');\n return null;\n }\n const [identityState, identitySend, identityService] = useIdentityMachine(client, {\n context: { initialDisposition },\n });\n\n const { swarm: connectionState } = useNetworkStatus();\n\n const handleChangeConnectionState = async (nextState: ConnectionState) => client?.mesh.updateConfig(nextState);\n\n useEffect(() => {\n const subscription = identityService.subscribe((state) => {\n log('[state]', state);\n });\n\n return subscription.unsubscribe;\n }, [identityService]);\n\n const activeView = useMemo(() => {\n switch (true) {\n case identityState.matches('choosingAction'):\n return 'identity action chooser';\n case identityState.matches('managingDeviceInvitation'):\n return 'device invitation manager';\n case identityState.matches('confirmingResetStorage'):\n return 'confirm reset storage';\n case identityState.matches('confirmingRecover'):\n return 'confirm recover';\n case identityState.matches('confirmingJoinNewIdentity'):\n return 'confirm join new identity';\n default:\n return 'identity action chooser';\n }\n }, [identityState]);\n\n const onUpdateProfile = async (profile: NonNullable<Identity['profile']>) => {\n identitySend({ type: 'updateProfile' });\n await client.halo.updateProfile(profile);\n };\n\n const implProps = {\n ...props,\n identity,\n devices,\n activeView,\n send: identitySend,\n titleId,\n createInvitationUrl,\n onUpdateProfile,\n connectionState,\n onChangeConnectionState: handleChangeConnectionState,\n ...agentProps,\n } satisfies IdentityPanelImplProps;\n\n return identityState.context.invitation ? (\n <IdentityPanelWithInvitationImpl {...implProps} invitation={identityState.context.invitation} />\n ) : (\n <IdentityPanelImpl {...implProps} />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMachine } from '@xstate/react';\nimport { assign, createMachine, type InterpreterFrom, type StateFrom, type Subscribable } from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Client } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\n\nimport { type IdentityPanelInitialDisposition } from './IdentityPanelProps';\nimport { type StepEvent } from '../../steps';\n\ntype IdentityMachineContext = {\n initialDisposition?: IdentityPanelInitialDisposition;\n invitation?: CancellableInvitationObservable;\n identity: Identity | null;\n identitySubscribable: Subscribable<SetIdentityEvent> | null;\n};\n\ntype IdentityChooseActionEvent = {\n type: 'chooseResetStorage' | 'chooseRecoverIdentity' | 'chooseJoinNewIdentity' | 'unchooseAction';\n};\n\ntype IdentitySelectDeviceInvitationEvent = {\n type: 'selectInvitation';\n invitation: CancellableInvitationObservable;\n};\n\nexport type SetIdentityEvent = {\n type: 'setIdentity';\n identity: Identity | null;\n};\n\nexport type UpdateProfileEvent = {\n type: 'updateProfile';\n};\n\ntype IdentityEvent =\n | SetIdentityEvent\n | UpdateProfileEvent\n | IdentitySelectDeviceInvitationEvent\n | IdentityChooseActionEvent\n | StepEvent;\n\nconst identityMachine = createMachine<IdentityMachineContext, IdentityEvent>(\n {\n id: 'identity',\n predictableActionArguments: true,\n context: {\n identity: null,\n identitySubscribable: null,\n },\n initial: 'choosingAction',\n invoke: {\n src: (context) => context.identitySubscribable!,\n },\n states: {\n unknown: {\n always: [\n { cond: 'initiallyManagingDeviceInvitation', target: 'managingDeviceInvitation', actions: 'log' },\n { target: 'choosingAction', actions: 'log' },\n ],\n },\n choosingAction: {},\n managingDeviceInvitation: {},\n confirmingResetStorage: {},\n confirmingRecover: {},\n confirmingJoinNewIdentity: {},\n },\n on: {\n unchooseAction: { target: '.choosingAction', actions: ['unsetInvitation', 'log'] },\n deselectInvitation: { target: '.choosingAction', actions: ['unsetInvitation', 'log'] },\n selectInvitation: { target: '.managingDeviceInvitation', actions: ['setInvitation', 'log'] },\n chooseJoinNewIdentity: { target: '.confirmingJoinNewIdentity', actions: 'log' },\n chooseRecoverIdentity: { target: '.confirmingRecover', actions: 'log' },\n chooseResetStorage: { target: '.confirmingResetStorage', actions: 'log' },\n },\n },\n {\n guards: {\n initiallyManagingDeviceInvitation: ({ initialDisposition }, _event) =>\n initialDisposition === 'manage-device-invitation',\n },\n actions: {\n setIdentity: assign<IdentityMachineContext, IdentityEvent>({\n identity: (context, event) => (event as SetIdentityEvent)?.identity ?? null,\n }),\n setInvitation: assign<IdentityMachineContext, IdentityEvent>({\n invitation: (context, event) => (event as IdentitySelectDeviceInvitationEvent)?.invitation ?? null,\n }),\n unsetInvitation: assign<IdentityMachineContext, IdentityEvent>({\n invitation: () => undefined,\n }),\n log: (context, event) => {\n log('[transition]', {\n event,\n context,\n });\n },\n },\n },\n);\n\ntype IdentityMachine = typeof identityMachine;\n\ntype IdentityState = StateFrom<IdentityMachine>;\ntype IdentitySend = InterpreterFrom<IdentityMachine>['send'];\n\nconst useIdentityMachine = (client: Client, options?: Parameters<typeof useMachine<IdentityMachine>>[1]) => {\n return useMachine(identityMachine, {\n ...options,\n context: {\n ...options?.context,\n identity: client.halo.identity.get(),\n identitySubscribable: client.halo.identity.map((identity) => ({\n type: 'setIdentity',\n identity,\n })) satisfies Subscribable<SetIdentityEvent>,\n },\n });\n};\n\nexport type {\n IdentityMachine,\n IdentityEvent,\n IdentityMachineContext,\n IdentityChooseActionEvent,\n IdentityState,\n IdentitySend,\n};\nexport { identityMachine, useIdentityMachine };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { useHaloInvitations, DeviceType } from '@dxos/react-client/halo';\nimport { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\n\nimport { AgentConfig, type AgentFormProps, DeviceList, type DeviceListProps } from '../../../components';\nimport { type IdentityPanelStepProps } from '../IdentityPanelProps';\n\nexport type IdentityActionChooserProps = IdentityPanelStepProps;\n\nexport const IdentityActionChooser = (props: IdentityPanelStepProps) => {\n const { send } = props;\n const client = useClient();\n const invitations = useHaloInvitations();\n const createInvitation = () => {\n invitations.forEach((invitation) => invitation.cancel());\n // TODO(nf): allow user to make invitations non-persistent?\n const invitation = client.halo.share();\n if (client.config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription = invitation.subscribe((invitation: Invitation) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n subscription.unsubscribe();\n }\n });\n }\n send?.({ type: 'selectInvitation', invitation });\n };\n const isProduction = client.config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production';\n return (\n <IdentityActionChooserImpl\n {...props}\n onClickAdd={createInvitation}\n onClickJoinExisting={() => send?.({ type: 'chooseJoinNewIdentity' })}\n onClickRecover={isProduction ? undefined : () => send?.({ type: 'chooseRecoverIdentity' })}\n onClickReset={() => send?.({ type: 'chooseResetStorage' })}\n />\n );\n};\n\nexport type IdentityActionChooserImplProps = IdentityActionChooserProps &\n Partial<AgentFormProps> &\n Pick<DeviceListProps, 'onClickAdd' | 'onClickJoinExisting' | 'onClickRecover' | 'onClickReset'>;\n\nexport const IdentityActionChooserImpl = ({\n devices,\n connectionState,\n agentHostingEnabled,\n onClickAdd,\n onClickJoinExisting,\n onClickRecover,\n onClickReset,\n ...agentProps\n}: IdentityActionChooserImplProps) => {\n const edgeDeviceAvailable = devices.find(\n (device) => device.profile?.type === DeviceType.AGENT_MANAGED && device.profile?.os?.toUpperCase() === 'EDGE',\n );\n return (\n <div role='none' className='bs-40 grow overflow-y-auto'>\n <DeviceList\n devices={devices}\n connectionState={connectionState}\n onClickAdd={onClickAdd}\n onClickJoinExisting={onClickJoinExisting}\n onClickRecover={agentProps.agentStatus === 'created' ? onClickRecover : undefined}\n onClickReset={onClickReset}\n onAgentDestroy={agentProps.onAgentDestroy!}\n />\n {!edgeDeviceAvailable && agentHostingEnabled && <AgentConfig {...(agentProps as AgentFormProps)} />}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\nimport { type Event, type SingleOrArray } from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { useClipboard, useTranslation } from '@dxos/react-ui';\nimport { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';\nimport { hexToEmoji, hexToHue } from '@dxos/util';\n\nimport { Action, Actions, StepHeading, Input } from '../../../components';\nimport { type IdentityPanelStepProps } from '../IdentityPanelProps';\nimport { type IdentityEvent } from '../identityMachine';\n\nexport interface ProfileFormProps extends Omit<IdentityPanelStepProps, 'send' | 'devices'> {\n send?: (event: SingleOrArray<Event<IdentityEvent>>) => void;\n onUpdateProfile?: (profile: NonNullable<Identity['profile']>) => Promise<void>;\n identity?: Identity;\n}\n\nexport type ProfileFormImplProps = ProfileFormProps & {\n validationMessage?: string;\n};\n\nexport const ProfileForm = (props: ProfileFormProps) => {\n const { onUpdateProfile } = props;\n const { t } = useTranslation('os');\n const [validationMessage, setValidationMessage] = useState('');\n const handleUpdateProfile = async (profile: NonNullable<Identity['profile']>) => {\n await onUpdateProfile?.(profile).catch((error) => {\n log.catch(error);\n setValidationMessage(t('failed to update profile message'));\n });\n };\n return <ProfileFormImpl {...props} onUpdateProfile={handleUpdateProfile} validationMessage={validationMessage} />;\n};\n\nconst getHueValue = (identity?: Identity) =>\n identity?.profile?.data?.hue || hexToHue(identity?.identityKey.toHex() ?? '0');\nconst getEmojiValue = (identity?: Identity) =>\n identity?.profile?.data?.emoji || hexToEmoji(identity?.identityKey.toHex() ?? '0');\n\n// TODO(zhenyasav): impl shouldn't need send()\nconst ProfileFormImpl = (props: ProfileFormImplProps) => {\n const { active, identity, send, onUpdateProfile, validationMessage } = props;\n const profile = identity?.profile;\n const disabled = !active;\n const { t } = useTranslation('os');\n const [displayName, setDisplayName] = useState(profile?.displayName ?? '');\n const [hue, setHue] = useState<string>(getHueValue(identity));\n const [emoji, setEmoji] = useState<string>(getEmojiValue(identity));\n const { textValue, setTextValue } = useClipboard();\n const identityHex = identity?.identityKey.toHex();\n const copied = textValue === identityHex;\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <Input\n {...{ validationMessage }}\n label={<StepHeading className='m-0'>{t('display name input label')}</StepHeading>}\n disabled={disabled}\n data-testid='display-name-input'\n placeholder={t('display name input placeholder')}\n value={displayName}\n onChange={({ target: { value } }) => setDisplayName(value)}\n />\n <StepHeading className='mbe-2'>{t('emoji and color label')}</StepHeading>\n <div role='none' className='grid grid-cols-[1fr_min-content] gap-y-2'>\n <EmojiPickerBlock\n emoji={emoji}\n onChangeEmoji={setEmoji}\n disabled={disabled}\n onClickClear={() => setEmoji(getEmojiValue(identity))}\n />\n <HuePicker disabled={disabled} value={hue} onChange={setHue} onReset={() => setHue(getHueValue(identity))} />\n </div>\n </div>\n <Actions>\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => {\n if (identityHex) {\n void setTextValue(identityHex);\n }\n }}\n data-testid='update-profile-form-copy-key'\n >\n {t(copied ? 'copy success label' : 'copy self public key label')}\n </Action>\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => send?.({ type: 'unchooseAction' })}\n data-testid='update-profile-form-back'\n >\n {t('back label')}\n </Action>\n <Action\n variant='primary'\n disabled={disabled}\n onClick={() =>\n onUpdateProfile?.({\n ...(displayName && { displayName }),\n ...((emoji || hue) && { data: { ...(emoji && { emoji }), ...(hue && { hue }) } }),\n })\n }\n data-testid='update-profile-form-continue'\n >\n {t('done label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type CancellableInvitation } from '@dxos/client-protocol';\nimport { useClient } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\n\nimport { useEdgeAgentHandlers } from './useEdgeAgentsHandlers';\nimport { useKubeAgentHandlers } from './useKubeAgentHandlers';\nimport { type AgentFormProps } from '../../components';\n\nexport const useAgentHandlers = (params: {\n invitations: CancellableInvitation[];\n identity: Identity | null;\n}): AgentFormProps => {\n const client = useClient();\n if (client.config.values?.runtime?.client?.edgeFeatures?.agents) {\n return useEdgeAgentHandlers(params);\n } else {\n return useKubeAgentHandlers(params);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type CancellableInvitation } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { QueryAgentStatusResponse } from '@dxos/protocols/proto/dxos/client/services';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\n\nimport { type AgentFormProps } from '../../components';\n\nexport const useEdgeAgentHandlers = ({\n identity,\n}: {\n invitations: CancellableInvitation[];\n identity: Identity | null;\n}): AgentFormProps => {\n const [validationMessage, setValidationMessage] = useState('');\n const [lastReceivedStatus, setLastReceivedStatus] = useState<QueryAgentStatusResponse.AgentStatus>(\n QueryAgentStatusResponse.AgentStatus.UNKNOWN,\n );\n const [agentStatus, setAgentStatus] = useState<AgentFormProps['agentStatus']>('getting');\n const client = useClient();\n // TODO(wittjosiah): This should be based on HALO credentials.\n const agentHostingEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.agents);\n\n const handleStatus = (status: QueryAgentStatusResponse.AgentStatus) => {\n switch (status) {\n case QueryAgentStatusResponse.AgentStatus.ACTIVE:\n case QueryAgentStatusResponse.AgentStatus.INACTIVE:\n setAgentStatus('created');\n break;\n case QueryAgentStatusResponse.AgentStatus.NOT_FOUND:\n setAgentStatus('creatable');\n break;\n case QueryAgentStatusResponse.AgentStatus.UNKNOWN:\n setAgentStatus('getting');\n break;\n }\n };\n\n useEffect(() => {\n const stream = client.services.services.EdgeAgentService?.queryAgentStatus();\n stream?.subscribe(({ status }) => {\n setLastReceivedStatus(status);\n handleStatus(status);\n });\n return () => {\n void stream?.close().catch(() => {});\n };\n }, []);\n\n const onAgentCreate = async () => {\n invariant(identity, 'Identity not found');\n const service = client.services.services.EdgeAgentService;\n if (!service) {\n setAgentStatus('error');\n setValidationMessage('Agent service not initialized.');\n return;\n }\n if (!agentHostingEnabled) {\n setAgentStatus('error');\n setValidationMessage('Edge agents are disabled in config.');\n return;\n }\n setAgentStatus('creating');\n setValidationMessage('');\n try {\n await service.createAgent(null as any, { timeout: 7_500 });\n await Promise.all(\n client.spaces\n .get()\n .map((space) => space?.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED)),\n );\n setAgentStatus('created');\n } catch (err: any) {\n log.catch(err);\n setAgentStatus('error');\n setValidationMessage(`Error creating an agent: ${err.message}`);\n }\n };\n\n const onAgentDestroy = async () => {\n setValidationMessage('Agents are non-destructible.');\n };\n\n const onAgentRefresh = async () => {\n setValidationMessage('');\n handleStatus(lastReceivedStatus);\n };\n\n return {\n onAgentCreate,\n onAgentDestroy,\n onAgentRefresh,\n validationMessage,\n agentStatus,\n agentHostingEnabled,\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { type CancellableInvitation } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { useClient, useAgentHostingClient } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\n\nimport { type AgentFormProps } from '../../components';\n\nexport const useKubeAgentHandlers = ({\n invitations,\n identity,\n}: {\n invitations: CancellableInvitation[];\n identity: Identity | null;\n}): AgentFormProps => {\n const [validationMessage, setValidationMessage] = useState('');\n const [agentStatus, setAgentStatus] = useState<AgentFormProps['agentStatus']>('getting');\n const agentHostingProviderClient = useAgentHostingClient();\n const client = useClient();\n\n const updateAgentStatus = async () => {\n // TODO(nf): if agent exists, subscribe to updates instead of oneshot status\n if (agentHostingProviderClient) {\n setAgentStatus('getting');\n try {\n const agentId = await agentHostingProviderClient?.getAgent(identity?.identityKey.truncate() ?? 'never');\n if (agentId) {\n setAgentStatus('created');\n } else {\n setAgentStatus('creatable');\n }\n } catch (err: any) {\n setAgentStatus('error');\n setValidationMessage(`Couldn’t check agent status: ${err.message}`);\n }\n } else {\n setAgentStatus('error');\n setValidationMessage('No agent provider configured.');\n }\n };\n\n const createAgent = async (invitationCode: string) => {\n invariant(identity, 'Identity not found');\n if (agentHostingProviderClient) {\n setAgentStatus('creating');\n setValidationMessage('');\n try {\n const agentId = await agentHostingProviderClient?.createAgent(invitationCode, identity.identityKey.truncate());\n if (agentId) {\n setAgentStatus('created');\n } else {\n setAgentStatus('creatable');\n setValidationMessage('Error creating agent.');\n }\n } catch (err: any) {\n setValidationMessage(`Error creating agent: ${err.message}`);\n return updateAgentStatus();\n }\n } else {\n setAgentStatus('error');\n setValidationMessage('No agent provider configured.');\n }\n };\n\n const destroyAgent = async () => {\n invariant(identity, 'Identity not found');\n if (agentHostingProviderClient) {\n setAgentStatus('destroying');\n setValidationMessage('');\n try {\n await agentHostingProviderClient?.destroyAgent(identity.identityKey.truncate());\n setAgentStatus('creatable');\n } catch (err: any) {\n setValidationMessage(`Error destroying agent: ${err.message}`);\n return updateAgentStatus();\n }\n } else {\n setAgentStatus('error');\n setValidationMessage('No agent provider configured.');\n }\n };\n\n useEffect(() => {\n void updateAgentStatus();\n }, []);\n\n const handleAgentCreate = useCallback(async (invitation: Invitation) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n return createAgent(invitationCode);\n }\n }, []);\n\n const onAgentCreate = async () => {\n invitations.forEach((invitation) => invitation.cancel());\n\n // TODO(nf): do this work in the hosting provider client?\n const invitation = client.halo.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n invitation.subscribe(handleAgentCreate);\n };\n\n const onAgentRefresh = async () => {\n setValidationMessage('');\n await updateAgentStatus();\n };\n\n return {\n onAgentCreate,\n onAgentDestroy: destroyAgent,\n onAgentRefresh,\n validationMessage,\n agentStatus,\n agentHostingEnabled: !!agentHostingProviderClient,\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Check, X } from '@phosphor-icons/react';\nimport React, { useMemo } from 'react';\nimport { QR } from 'react-qr-rounded';\n\nimport { type InvitationStatus } from '@dxos/react-client/invitations';\nimport { Clipboard, useId, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { type StepProps } from './StepProps';\nimport { Actions, Action, AuthCode, Emoji, Label, Viewport, type ViewportViewProps, Centered } from '../components';\nimport { invitationStatusValue } from '../util';\n\nexport type InvitationManagerProps = StepProps &\n Partial<InvitationStatus> & {\n invitationUrl?: string;\n };\n\nconst InvitationManagerView = ({ children, ...props }: ViewportViewProps & { emoji?: string }) => {\n return (\n <Viewport.View {...props} classNames='grow flex flex-col justify-around items-center'>\n {children}\n </Viewport.View>\n );\n};\n\nexport const InvitationManager = ({\n invitationUrl,\n active,\n send,\n status,\n multiUse,\n authCode,\n id = '0',\n}: InvitationManagerProps) => {\n const { t } = useTranslation('os');\n const qrLabel = useId('invitation-manager__qr-code');\n const statusValue = multiUse ? 0 : invitationStatusValue.get(status!) ?? 0;\n const showAuthCode = statusValue === 3;\n const emoji = hexToEmoji(id);\n const activeView = useMemo(() => {\n if (multiUse) {\n return 'showing qr';\n }\n switch (true) {\n case statusValue === 5:\n case statusValue < 0:\n return 'showing final';\n case statusValue === 3:\n return 'showing auth code';\n default:\n return 'showing qr';\n }\n }, [statusValue]);\n return (\n <>\n <Viewport.Root activeView={activeView} classNames='grow plb-1'>\n <Viewport.Views>\n <InvitationManagerView id='showing qr' emoji={emoji}>\n <p className='text-sm mlb-1 font-normal text-center'>\n {t(multiUse ? 'invite many qr label' : 'invite one qr label')}\n </p>\n <div role='none' className={mx(descriptionText, 'is-full max-is-[14rem] relative')}>\n <QR\n rounding={100}\n backgroundColor='transparent'\n color='currentColor'\n className={mx('is-full bs-full p-2', showAuthCode && 'invisible')}\n aria-labelledby={qrLabel}\n errorCorrectionLevel='Q'\n cutout={true}\n >\n {invitationUrl ?? 'never'}\n </QR>\n <Centered>\n <Emoji text={emoji} />\n </Centered>\n </div>\n <span id={qrLabel} className='sr-only'>\n {t('qr label')}\n </span>\n <Clipboard.Button variant='ghost' value={invitationUrl ?? 'never'} />\n </InvitationManagerView>\n <InvitationManagerView id='showing auth code'>\n <Label>{t('auth code message')}</Label>\n <AuthCode code={authCode} large classNames='text-black dark:text-white' />\n <Label>{t('auth other device emoji message')}</Label>\n {emoji && <Emoji text={emoji} />}\n </InvitationManagerView>\n <InvitationManagerView id='showing final'>\n {statusValue > 0 ? (\n <Check className={mx('m-1.5', getSize(6))} />\n ) : (\n <X className={mx('m-1.5', getSize(6))} />\n )}\n </InvitationManagerView>\n </Viewport.Views>\n </Viewport.Root>\n <Actions classNames='mbs-4'>\n <Action disabled={!active} onClick={() => send?.({ type: 'deselectInvitation' })}>\n {t('back label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Invitation } from '@dxos/react-client/invitations';\n\n/**\n * This map assigns a numeric value to invitation states to facilitate\n * more terse code which uses combinations of `>`, `<`, and `=` instead of\n * longer sequences of `===` and `||` predicates.\n */\nexport const invitationStatusValue = new Map<Invitation.State, number>([\n [Invitation.State.ERROR, -3],\n [Invitation.State.TIMEOUT, -2],\n [Invitation.State.CANCELLED, -1],\n [Invitation.State.INIT, 0],\n [Invitation.State.CONNECTING, 1],\n [Invitation.State.CONNECTED, 2],\n [Invitation.State.READY_FOR_AUTHENTICATION, 3],\n [Invitation.State.AUTHENTICATING, 4],\n [Invitation.State.SUCCESS, 5],\n]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Warning } from '@phosphor-icons/react';\nimport React, { useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { Message, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { type StepProps } from './StepProps';\nimport { Action, Actions, StepHeading, Input } from '../components';\n\ntype ConfirmResetOptions = Partial<{\n onCancel: () => void;\n onConfirm: () => Promise<void>;\n mode: 'join new identity' | 'recover' | 'reset storage';\n}>;\n\nexport type ConfirmResetProps = StepProps & ConfirmResetOptions;\n\nexport type ConfirmResetImplProps = ConfirmResetOptions & {\n disabled?: boolean;\n pending?: boolean;\n validationMessage?: string;\n};\n\nexport const ConfirmReset = ({ active, onCancel, onConfirm, mode }: ConfirmResetProps) => {\n const { t } = useTranslation('os');\n const [validationMessage, setValidationMessage] = useState('');\n const [pending, setPending] = useState(false);\n const processReset = async () => {\n setPending(true);\n return onConfirm?.().then(\n () => setPending(false),\n (error) => {\n log.catch(error);\n setValidationMessage(t('failed to reset identity message'));\n setPending(false);\n },\n );\n };\n return (\n <ConfirmResetImpl\n disabled={!active}\n pending={pending}\n validationMessage={validationMessage}\n onConfirm={processReset}\n onCancel={onCancel}\n mode={mode}\n />\n );\n};\n\nexport const ConfirmResetImpl = ({\n disabled,\n pending,\n validationMessage,\n onConfirm,\n onCancel,\n mode,\n}: ConfirmResetImplProps) => {\n const { t } = useTranslation('os');\n const confirmationValue = t('confirmation value');\n const [inputValue, setInputValue] = useState('');\n const testIdAffix =\n mode === 'join new identity' ? 'join-new-identity' : mode === 'recover' ? 'recover' : 'reset-storage';\n return (\n <>\n <div role='none' className='grow flex flex-col gap-2 justify-center'>\n <Message.Root valence='error'>\n <Message.Title>\n <Warning className={mx(getSize(6), 'inline mie-2')} />\n {t('sign out chooser title')}\n </Message.Title>\n <Message.Body>{t('sign out chooser message')}</Message.Body>\n </Message.Root>\n <Input\n {...{ validationMessage }}\n label={\n <StepHeading className='text-start mlb-2'>\n {t(\n mode === 'join new identity'\n ? 'join new identity input label'\n : mode === 'recover'\n ? 'recover reset input label'\n : 'reset storage input label',\n {\n confirmationValue,\n },\n )}\n </StepHeading>\n }\n disabled={disabled}\n data-testid={`${testIdAffix}.reset-identity-input`}\n placeholder={t('confirmation placeholder', { confirmationValue })}\n onChange={({ target: { value } }) => setInputValue(value)}\n />\n </div>\n <Actions>\n {onCancel && (\n <Action disabled={disabled} onClick={onCancel} data-testid={`${testIdAffix}.reset-identity-cancel`}>\n {t('cancel label')}\n </Action>\n )}\n {onConfirm && (\n <Action\n variant='destructive'\n disabled={disabled || pending || inputValue !== confirmationValue}\n onClick={onConfirm}\n data-testid={`${testIdAffix}.reset-identity-confirm`}\n >\n {pending ? t('reset in progress label') : t('reset device label')}\n </Action>\n )}\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient, useMulticastObservable } from '@dxos/react-client';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useId, useThemeContext } from '@dxos/react-ui';\n\nimport { JoinHeading } from './JoinHeading';\nimport { type JoinPanelImplProps, type JoinPanelProps } from './JoinPanelProps';\nimport { useJoinMachine } from './joinMachine';\nimport {\n AdditionMethodChooser,\n IdentityAdded,\n IdentityInput,\n InvitationAuthenticator,\n InvitationInput,\n InvitationRescuer,\n} from './steps';\nimport { Viewport } from '../../components';\nimport { ConfirmReset } from '../../steps';\nimport { stepStyles } from '../../styles';\n\nexport const JoinPanelImpl = (props: JoinPanelImplProps) => {\n const {\n titleId,\n send,\n activeView,\n failed,\n mode,\n unredeemedCodes,\n invitationIds,\n invitationStates,\n invitationAuthMethods,\n succeededKeys,\n failReasons,\n onExit,\n onHaloDone,\n // onSpaceDone,\n exitActionParent,\n doneActionParent,\n onHaloInvitationCancel,\n onSpaceInvitationCancel,\n onHaloInvitationAuthenticate,\n onSpaceInvitationAuthenticate,\n onCancelResetStorage,\n onConfirmResetStorage,\n IdentityInput: IdentityInputComponent = IdentityInput,\n ConfirmReset: ConfirmResetComponent = ConfirmReset,\n } = props;\n return (\n <>\n {mode !== 'halo-only' && <JoinHeading {...{ titleId, mode, onExit, exitActionParent }} />}\n <Viewport.Root focusManaged activeView={activeView}>\n <Viewport.Views>\n <Viewport.View classNames={stepStyles} id='addition method chooser'>\n <AdditionMethodChooser send={send} active={activeView === 'addition method chooser'} />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='reset storage confirmation'>\n <ConfirmResetComponent\n send={send}\n active={activeView === 'reset storage confirmation'}\n onCancel={onCancelResetStorage}\n onConfirm={onConfirmResetStorage}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='create identity input'>\n <IdentityInputComponent\n send={send}\n method='create identity'\n active={activeView === 'create identity input'}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='recover identity input'>\n <IdentityInputComponent\n send={send}\n method='recover identity'\n active={activeView === 'recover identity input'}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='halo invitation input'>\n <InvitationInput\n send={send}\n Kind='Halo'\n active={activeView === 'halo invitation input'}\n {...(unredeemedCodes?.Halo && { unredeemedCode: unredeemedCodes.Halo })}\n {...(succeededKeys?.Halo && { succeededKeys: succeededKeys.Halo })}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='halo invitation rescuer'>\n <InvitationRescuer\n send={send}\n Kind='Halo'\n active={activeView === 'halo invitation rescuer'}\n invitationState={invitationStates?.Halo}\n onInvitationCancel={onHaloInvitationCancel}\n failReason={failReasons?.Halo}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='halo invitation authenticator'>\n <InvitationAuthenticator\n send={send}\n Kind='Halo'\n invitationId={invitationIds?.Halo}\n authMethod={invitationAuthMethods?.Halo}\n active={activeView === 'halo invitation authenticator'}\n onInvitationCancel={onHaloInvitationCancel}\n onInvitationAuthenticate={onHaloInvitationAuthenticate}\n {...(failed.has('Halo') && { failed: true })}\n />\n </Viewport.View>\n {/* <Viewport.View classNames={stepStyles} id='halo invitation accepted'>\n <InvitationAccepted\n {...{\n send,\n Kind: 'Halo',\n active: activeView === 'halo invitation accepted',\n doneActionParent,\n onDone: onHaloDone,\n }}\n />\n </Viewport.View> */}\n <Viewport.View classNames={stepStyles} id='identity added'>\n <IdentityAdded\n {...{ send, mode, active: activeView === 'identity added', doneActionParent, onDone: onHaloDone }}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='space invitation input'>\n <InvitationInput\n send={send}\n Kind='Space'\n active={activeView === 'space invitation input'}\n {...(unredeemedCodes?.Space && { unredeemedCode: unredeemedCodes.Space })}\n {...(succeededKeys?.Space && { succeededKeys: succeededKeys.Space })}\n onExit={onExit}\n exitActionParent={exitActionParent}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='space invitation rescuer'>\n <InvitationRescuer\n send={send}\n Kind='Space'\n active={activeView === 'space invitation rescuer'}\n invitationState={invitationStates?.Space}\n onInvitationCancel={onSpaceInvitationCancel}\n failReason={failReasons?.Space}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='space invitation authenticator'>\n <InvitationAuthenticator\n send={send}\n Kind='Space'\n invitationId={invitationIds?.Space}\n authMethod={invitationAuthMethods?.Space}\n active={activeView === 'space invitation authenticator'}\n onInvitationCancel={onSpaceInvitationCancel}\n onInvitationAuthenticate={onSpaceInvitationAuthenticate}\n {...(failed.has('Space') && { failed: true })}\n />\n </Viewport.View>\n {/* <Viewport.View classNames={stepStyles} id='space invitation accepted'>\n <InvitationAccepted\n {...{\n send,\n Kind: 'Space',\n active: activeView === 'space invitation accepted',\n doneActionParent,\n onDone: onSpaceDone,\n }}\n />\n </Viewport.View> */}\n </Viewport.Views>\n </Viewport.Root>\n </>\n );\n};\n\nexport const JoinPanel = ({\n titleId: propsTitleId,\n mode = 'default',\n initialDisposition = 'default',\n initialInvitationCode,\n exitActionParent,\n onExit,\n doneActionParent,\n onDone: propsOnDone,\n onCancelResetStorage,\n}: JoinPanelProps) => {\n const client = useClient();\n const identity = useIdentity();\n const { hasIosKeyboard } = useThemeContext();\n const titleId = useId('joinPanel__heading', propsTitleId);\n\n const [joinState, joinSend, joinService] = useJoinMachine(client, {\n context: {\n mode,\n initialDisposition,\n identity,\n ...(initialInvitationCode && {\n [mode === 'halo-only' ? 'halo' : 'space']: { unredeemedCode: initialInvitationCode },\n }),\n },\n });\n\n useEffect(() => {\n const subscription = joinService.subscribe((state) => {\n log('[state]', state);\n });\n\n return subscription.unsubscribe;\n }, [joinService]);\n\n useEffect(() => {\n const stateStack = joinState.configuration[0].id.split('.');\n const innermostState = stateStack[stateStack.length - 1];\n const autoFocusValue = innermostState === 'finishingJoining' ? 'successSpaceInvitation' : innermostState;\n const $nextAutofocus: HTMLElement | null = document.querySelector(`[data-autofocus~=\"${autoFocusValue}\"]`);\n if ($nextAutofocus && !(hasIosKeyboard && $nextAutofocus.hasAttribute('data-prevent-ios-autofocus'))) {\n $nextAutofocus.focus();\n }\n }, [joinState.value, hasIosKeyboard]);\n\n const activeView = useMemo(() => {\n switch (true) {\n case joinState.matches({ choosingIdentity: 'choosingAuthMethod' }):\n return 'addition method chooser';\n case joinState.matches('resettingIdentity'):\n return 'reset storage confirmation';\n case joinState.matches({ choosingIdentity: 'creatingIdentity' }):\n return 'create identity input';\n case joinState.matches({ choosingIdentity: 'recoveringIdentity' }):\n return 'recover identity input';\n case joinState.matches({\n choosingIdentity: { acceptingHaloInvitation: 'inputtingHaloInvitationCode' },\n }):\n return 'halo invitation input';\n case [\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'connectingHaloInvitation' },\n },\n },\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'failingHaloInvitation' },\n },\n },\n ].some(joinState.matches):\n return 'halo invitation rescuer';\n case [\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'inputtingHaloVerificationCode' },\n },\n },\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'authenticatingHaloVerificationCode' },\n },\n },\n {\n choosingIdentity: {\n acceptingHaloInvitation: {\n acceptingRedeemedHaloInvitation: 'authenticationFailingHaloVerificationCode',\n },\n },\n },\n ].some(joinState.matches):\n return 'halo invitation authenticator';\n case [\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'successHaloInvitation' },\n },\n },\n 'finishingJoiningHalo',\n ].some(joinState.matches):\n return 'halo invitation accepted';\n case joinState.matches({\n choosingIdentity: 'confirmingAddedIdentity',\n }):\n return 'identity added';\n case joinState.matches({\n acceptingSpaceInvitation: 'inputtingSpaceInvitationCode',\n }):\n return 'space invitation input';\n case [\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'connectingSpaceInvitation' },\n },\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'failingSpaceInvitation' },\n },\n ].some(joinState.matches):\n return 'space invitation rescuer';\n case [\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'inputtingSpaceVerificationCode' },\n },\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'authenticatingSpaceVerificationCode' },\n },\n {\n acceptingSpaceInvitation: {\n acceptingRedeemedSpaceInvitation: 'authenticationFailingSpaceVerificationCode',\n },\n },\n ].some(joinState.matches):\n return 'space invitation authenticator';\n case joinState.matches('finishingJoiningSpace'):\n return 'space invitation accepted';\n default:\n return 'never';\n }\n }, [joinState]);\n\n useEffect(() => {\n switch (activeView) {\n case 'halo invitation accepted':\n onHaloDone();\n break;\n case 'space invitation accepted':\n onSpaceDone();\n break;\n }\n }, [activeView]);\n\n const failed = useMemo(() => {\n const result: JoinPanelImplProps['failed'] = new Set();\n switch (true) {\n case joinState.matches({\n choosingIdentity: {\n acceptingHaloInvitation: {\n acceptingRedeemedHaloInvitation: 'authenticationFailingHaloVerificationCode',\n },\n },\n }):\n result.add('Halo');\n break;\n case joinState.matches({\n acceptingSpaceInvitation: {\n acceptingRedeemedSpaceInvitation: 'authenticationFailingSpaceVerificationCode',\n },\n }):\n result.add('Space');\n break;\n }\n return result;\n }, [joinState]);\n\n const unredeemedCodes = useMemo(\n () => ({\n Halo: joinState.context.halo.unredeemedCode,\n Space: joinState.context.space.unredeemedCode,\n }),\n [joinState],\n );\n\n const spaces = useMulticastObservable(client.spaces);\n\n const succeededKeys = useMemo(\n () => ({\n Space: spaces ? new Set(spaces.map(({ key }) => key.toHex())) : undefined,\n }),\n [spaces],\n );\n\n const invitationStates = useMemo(\n () => ({\n Halo: joinState.context.halo.invitationObservable?.get().state,\n Space: joinState.context.space.invitationObservable?.get().state,\n }),\n [joinState],\n );\n\n const invitationAuthMethods = useMemo(\n () => ({\n Halo: joinState.context.halo.invitationObservable?.get().authMethod,\n Space: joinState.context.space.invitationObservable?.get().authMethod,\n }),\n [joinState],\n );\n\n const invitationIds = useMemo(\n () => ({\n Halo: joinState.context.halo.invitationObservable?.get().invitationId,\n Space: joinState.context.space.invitationObservable?.get().invitationId,\n }),\n [joinState],\n );\n\n const failReasons = useMemo(\n () => ({\n Halo: joinState.context.halo.failReason,\n Space: joinState.context.space.failReason,\n }),\n [joinState],\n );\n\n const onHaloDone = useCallback(() => {\n propsOnDone?.({\n identityKey: joinState.context.identity?.identityKey ?? joinState.context.halo.invitation?.identityKey ?? null,\n swarmKey: joinState.context.halo.invitation?.swarmKey ?? null,\n spaceKey: joinState.context.identity?.spaceKey ?? joinState.context.halo.invitation?.spaceKey ?? null,\n target: joinState.context.halo.invitation?.target ?? null,\n });\n }, [joinState, propsOnDone]);\n\n const onSpaceDone = useCallback(() => {\n propsOnDone?.({\n identityKey: joinState.context.space.invitation?.identityKey ?? null,\n swarmKey: joinState.context.space.invitation?.swarmKey ?? null,\n spaceKey: joinState.context.space.invitation?.spaceKey ?? null,\n target: joinState.context.space.invitation?.target ?? null,\n });\n }, [joinState, propsOnDone]);\n\n const onConfirmResetStorage = useCallback(\n () =>\n client.reset().then(() => {\n joinSend({ type: 'resetIdentity' });\n }),\n [client, joinSend],\n );\n\n return (\n <JoinPanelImpl\n {...{\n titleId,\n mode,\n send: joinSend,\n activeView,\n failed,\n failReasons,\n pending: ['connecting', 'authenticating'].some((str) => joinState?.configuration[0].id.includes(str)),\n unredeemedCodes,\n invitationIds,\n invitationStates,\n invitationAuthMethods,\n succeededKeys,\n identity,\n onExit,\n exitActionParent,\n doneActionParent,\n onHaloDone,\n onSpaceDone,\n onHaloInvitationCancel: () => joinState.context.halo.invitationObservable?.cancel(),\n onSpaceInvitationCancel: () => joinState.context.space.invitationObservable?.cancel(),\n onHaloInvitationAuthenticate: (authCode: string) => {\n // todo(thure): Is this necessary? Shouldn’t the observable emit this?\n joinSend({ type: 'authenticateHaloVerificationCode' });\n return joinState.context.halo.invitationObservable?.authenticate(authCode);\n },\n onSpaceInvitationAuthenticate: (authCode: string) => {\n joinSend({ type: 'authenticateSpaceVerificationCode' });\n return joinState.context.space.invitationObservable?.authenticate(authCode);\n },\n onConfirmResetStorage,\n onCancelResetStorage,\n }}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { X } from '@phosphor-icons/react';\nimport React, { cloneElement, type ForwardedRef, forwardRef } from 'react';\n\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\n\nimport { type JoinPanelMode } from './JoinPanelProps';\nimport { Heading } from '../../components';\n\nexport interface JoinSpaceHeadingProps {\n mode?: JoinPanelMode;\n titleId: string;\n exitActionParent?: Parameters<typeof cloneElement>[0];\n onExit?: () => void;\n}\n\n// TODO(wittjosiah): Accesses the space properties directly which will trigger ECHO warnings without observer.\nexport const JoinHeading = forwardRef(\n ({ mode, titleId, exitActionParent, onExit }: JoinSpaceHeadingProps, forwardedRef: ForwardedRef<HTMLDivElement>) => {\n const { t } = useTranslation('os');\n\n const exitButton = (\n <Button\n variant='ghost'\n {...(onExit && { onClick: onExit })}\n classNames={mx(descriptionText, 'plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]')}\n data-testid='join-exit'\n >\n <X weight='bold' className={getSize(4)} />\n <span className='sr-only'>{t('exit label')}</span>\n </Button>\n );\n\n return (\n <Heading\n ref={forwardedRef}\n titleId={titleId}\n title={t(mode === 'halo-only' ? 'selecting identity heading' : 'joining space heading')}\n {...(mode === 'halo-only'\n ? { titleSrOnly: true }\n : { corner: exitActionParent ? cloneElement(exitActionParent, {}, exitButton) : exitButton })}\n titleSrOnly={mode === 'halo-only'}\n />\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMachine } from '@xstate/react';\nimport { useCallback } from 'react';\nimport {\n assign,\n createMachine,\n type InterpreterFrom,\n type StateFrom,\n type StateNodeConfig,\n type Subscribable,\n type Subscription,\n} from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Client, AlreadyJoinedError } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type AuthenticatingInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\n\nimport { type JoinPanelInitialDisposition, type JoinPanelMode } from './JoinPanelProps';\nimport { type FailReason } from '../../types';\n\ntype InvitationKindContext = Partial<{\n failReason: FailReason | null;\n unredeemedCode: string;\n invitationObservable: AuthenticatingInvitationObservable;\n invitation: Invitation;\n invitationSubscribable: Subscribable<InvitationEvent>;\n succeededKeys: Set<string>;\n}>;\n\ntype JoinMachineContext = {\n mode: JoinPanelMode;\n initialDisposition: JoinPanelInitialDisposition;\n identity: Identity | null;\n halo: InvitationKindContext;\n space: InvitationKindContext;\n};\n\ntype SelectIdentityEvent = {\n type: 'selectIdentity';\n identity: Identity;\n};\n\ntype SetInvitationCodeEvent = {\n type: 'setHaloInvitationCode' | 'setSpaceInvitationCode';\n code: string;\n succeededKeys?: Set<string>;\n};\n\ntype SetInvitationEvent = {\n type:\n | 'authenticatingHaloInvitation'\n | 'authenticatingSpaceInvitation'\n | 'readyForAuthenticationHaloInvitation'\n | 'readyForAuthenticationSpaceInvitation'\n | 'connectingHaloInvitation'\n | 'connectingSpaceInvitation'\n | 'connectedHaloInvitation'\n | 'connectedSpaceInvitation'\n | 'successHaloInvitation'\n | 'successSpaceInvitation';\n invitation: Invitation;\n};\n\ntype FailInvitationEvent = {\n type: 'failHaloInvitation' | 'failSpaceInvitation';\n reason: FailReason;\n};\n\ntype EmptyInvitationEvent = {\n type:\n | 'authenticateHaloVerificationCode'\n | 'authenticateSpaceVerificationCode'\n | 'resetHaloInvitation'\n | 'resetSpaceInvitation'\n | 'deselectInvitation';\n};\n\ntype InvitationEvent = FailInvitationEvent | SetInvitationCodeEvent | SetInvitationEvent | EmptyInvitationEvent;\n\ntype Kind = 'Space' | 'Halo';\n\nconst getInvitationSubscribable = (\n Kind: Kind,\n invitation: AuthenticatingInvitationObservable,\n): Subscribable<InvitationEvent> => {\n log('[subscribing to invitation]', invitation);\n return {\n subscribe: (\n next: (value: InvitationEvent) => void,\n onError?: (error: any) => void,\n complete?: () => void,\n ): Subscription =>\n invitation.subscribe(\n (invitation: Invitation) => {\n switch (invitation.state) {\n case Invitation.State.CONNECTING: {\n log('[invitation connecting]', { Kind, invitation });\n return next({ type: `connecting${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.CONNECTED: {\n log('[invitation connected]', { Kind, invitation });\n return next({ type: `connected${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n log('[invitation ready for authentication]', { Kind, invitation });\n return next({ type: `readyForAuthentication${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.AUTHENTICATING: {\n log('[invitation authenticating]', { Kind, invitation });\n return next({ type: `authenticating${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.SUCCESS: {\n log('[invitation success]', { Kind, invitation });\n next({ type: `success${Kind}Invitation`, invitation });\n return complete?.();\n }\n\n case Invitation.State.CANCELLED: {\n log.warn('[invitation cancelled]', { Kind });\n return next({ type: `fail${Kind}Invitation`, reason: 'cancelled' } as FailInvitationEvent);\n }\n\n case Invitation.State.TIMEOUT: {\n log.error('[invitation timeout]', { Kind });\n return next({ type: `fail${Kind}Invitation`, reason: 'timeout' } as FailInvitationEvent);\n }\n }\n },\n (error: any) => {\n if (error instanceof AlreadyJoinedError) {\n log('[already joined]', { Kind, error });\n next({ type: `success${Kind}Invitation`, invitation: invitation.get() });\n return complete?.();\n }\n\n log.error('[invitation errored]', { Kind, error });\n next({ type: `fail${Kind}Invitation`, reason: 'error' });\n return onError?.(error);\n },\n ),\n } as Subscribable<InvitationEvent>;\n};\n\nconst acceptingInvitationTemplate = (Kind: Kind, successTarget: string) => {\n const config: StateNodeConfig<JoinMachineContext, any, InvitationEvent> = {\n initial: `unknown${Kind}`,\n states: {\n [`unknown${Kind}`]: {\n always: [\n {\n cond: ({ mode }) => mode === 'halo-only' && Kind === 'Space',\n target: '#join.finishingJoiningHalo',\n },\n {\n cond: (context) => !!context[Kind.toLowerCase() as Lowercase<typeof Kind>].unredeemedCode,\n target: `acceptingRedeemed${Kind}Invitation`,\n actions: [`redeem${Kind}InvitationCode`, `invalidate${Kind}InvitationCode`, 'log'],\n },\n {\n target: `inputting${Kind}InvitationCode`,\n actions: 'log',\n },\n ],\n },\n [`inputting${Kind}InvitationCode`]: {},\n [`acceptingRedeemed${Kind}Invitation`]: {\n invoke: {\n src: (context) => context[Kind.toLowerCase() as Lowercase<Kind>].invitationSubscribable!,\n },\n initial: `unknown${Kind}Invitation`,\n states: {\n [`unknown${Kind}Invitation`]: {\n always: [\n {\n cond: (context) => {\n if (Kind !== 'Space') {\n return false;\n } else {\n const spaceKey = context.space.invitation?.spaceKey?.toHex();\n const succeededKeys = context.space.succeededKeys;\n return spaceKey ? !!succeededKeys?.has(spaceKey) : false;\n }\n },\n target: successTarget,\n actions: 'log',\n },\n {\n cond: (context) => {\n const invitation = context[Kind.toLowerCase() as Lowercase<Kind>].invitation;\n return !invitation || invitation?.state === Invitation.State.CONNECTING;\n },\n target: `connecting${Kind}Invitation`,\n actions: 'log',\n },\n {\n target: `inputting${Kind}VerificationCode`,\n actions: 'log',\n },\n ],\n },\n [`connecting${Kind}Invitation`]: {},\n [`inputting${Kind}VerificationCode`]: {},\n [`authenticating${Kind}VerificationCode`]: {\n on: {\n [`readyForAuthentication${Kind}Invitation`]: {\n target: `authenticationFailing${Kind}VerificationCode`,\n actions: ['setInvitation', 'log'],\n },\n },\n },\n [`authenticationFailing${Kind}VerificationCode`]: {},\n [`failing${Kind}Invitation`]: {},\n [`success${Kind}Invitation`]: {},\n },\n on: {\n [`reset${Kind}Invitation`]: {\n target: `#join${Kind === 'Halo' ? '.choosingIdentity' : ''}.accepting${Kind}Invitation.unknown${Kind}`,\n actions: ['resetInvitation', 'log'],\n },\n [`connecting${Kind}Invitation`]: {\n target: `.connecting${Kind}Invitation`,\n actions: ['setInvitation', 'log'],\n },\n [`connected${Kind}Invitation`]: {\n target: `.connecting${Kind}Invitation`,\n actions: ['setInvitation', 'log'],\n },\n [`readyForAuthentication${Kind}Invitation`]: {\n target: `.inputting${Kind}VerificationCode`,\n actions: ['setInvitation', 'log'],\n },\n [`authenticating${Kind}Invitation`]: {\n target: `.authenticating${Kind}VerificationCode`,\n actions: ['setInvitation', 'log'],\n },\n [`success${Kind}Invitation`]: { target: successTarget, actions: ['setInvitation', 'log'] },\n [`fail${Kind}Invitation`]: {\n target: `.failing${Kind}Invitation`,\n actions: [\n assign({\n [Kind.toLowerCase()]: (context: JoinMachineContext, event: FailInvitationEvent) => ({\n ...context[Kind.toLowerCase() as Lowercase<Kind>],\n failReason: event.reason,\n }),\n }),\n 'log',\n ],\n },\n },\n },\n },\n on: {\n [`set${Kind}InvitationCode`]: {\n target: `.acceptingRedeemed${Kind}Invitation`,\n actions: [\n assign({\n [Kind.toLowerCase()]: (context: JoinMachineContext, event: SetInvitationCodeEvent) => ({\n ...context[Kind.toLowerCase() as Lowercase<Kind>],\n unredeemedCode: event.code,\n succeededKeys: event.succeededKeys,\n }),\n }),\n `redeem${Kind}InvitationCode`,\n `invalidate${Kind}InvitationCode`,\n 'log',\n ],\n },\n },\n };\n return config as StateNodeConfig<JoinMachineContext, typeof config, JoinEvent>;\n};\n\ntype EmptyJoinEvent = {\n type:\n | 'resetIdentity'\n | 'recoverIdentity'\n | 'createIdentity'\n | 'acceptHaloInvitation'\n | 'addIdentity'\n | 'selectIdentity'\n | 'deselectAuthMethod';\n};\n\ntype JoinEvent = InvitationEvent | SelectIdentityEvent | EmptyJoinEvent;\n\nconst joinMachine = createMachine<JoinMachineContext, JoinEvent>(\n {\n id: 'join',\n predictableActionArguments: true,\n context: {\n initialDisposition: 'default',\n mode: 'default',\n identity: null,\n halo: {},\n space: {},\n },\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n { cond: 'existingIdentity', target: 'resettingIdentity', actions: 'log' },\n {\n cond: 'initiallyAcceptingHaloInvitation',\n target: '#join.choosingIdentity.acceptingHaloInvitation',\n actions: 'log',\n },\n {\n cond: 'initiallyRecoveringIdentity',\n target: '#join.choosingIdentity.recoveringIdentity',\n actions: 'log',\n },\n { cond: 'noSelectedIdentity', target: 'choosingIdentity', actions: 'log' },\n { target: 'acceptingSpaceInvitation', actions: 'log' },\n ],\n },\n // TODO(wittjosiah): Remove.\n choosingIdentity: {\n initial: 'unknownAuthMethod',\n states: {\n unknownAuthMethod: {\n always: [\n { cond: 'hasHaloUnredeemedCode', target: 'acceptingHaloInvitation', actions: 'log' },\n { target: 'choosingAuthMethod', actions: 'log' },\n ],\n },\n choosingAuthMethod: {},\n recoveringIdentity: {},\n creatingIdentity: {},\n acceptingHaloInvitation: acceptingInvitationTemplate('Halo', '#join.acceptingSpaceInvitation'),\n confirmingAddedIdentity: {},\n },\n on: {\n recoverIdentity: { target: '.recoveringIdentity', actions: 'log' },\n createIdentity: { target: '.creatingIdentity', actions: 'log' },\n acceptHaloInvitation: { target: '.acceptingHaloInvitation', actions: 'log' },\n addIdentity: { target: '.confirmingAddedIdentity', actions: 'log' },\n selectIdentity: {\n target: 'acceptingSpaceInvitation',\n actions: ['setIdentity', 'log'],\n },\n deselectAuthMethod: { target: '.choosingAuthMethod', actions: 'log' },\n },\n },\n // TODO(wittjosiah): Factor out to a machine handling recovery and device invitations.\n resettingIdentity: {},\n acceptingSpaceInvitation: acceptingInvitationTemplate('Space', '#join.finishingJoiningSpace'),\n finishingJoiningSpace: {\n type: 'final',\n },\n finishingJoiningHalo: {\n type: 'final',\n },\n },\n on: {\n resetIdentity: { target: 'choosingIdentity', actions: 'unsetIdentity' },\n },\n },\n {\n guards: {\n existingIdentity: ({ identity, mode }, _event) => mode === 'halo-only' && !!identity,\n noSelectedIdentity: ({ identity }, _event) => !identity,\n initiallyAcceptingHaloInvitation: ({ identity, initialDisposition }, _event) =>\n !identity && initialDisposition === 'accept-halo-invitation',\n initiallyRecoveringIdentity: ({ identity, initialDisposition }, _event) =>\n !identity && initialDisposition === 'recover-identity',\n hasHaloUnredeemedCode: ({ halo }, _event) => !!halo.unredeemedCode,\n noSpaceInvitation: ({ space }, _event) => !space.invitation && !space.unredeemedCode,\n },\n actions: {\n setIdentity: assign<JoinMachineContext, SelectIdentityEvent>({\n identity: (context, event) => event.identity,\n }),\n unsetIdentity: assign<JoinMachineContext>({\n identity: () => null,\n }),\n resetInvitation: assign<JoinMachineContext, EmptyInvitationEvent>({\n halo: (context, event) => {\n if (event.type !== 'resetHaloInvitation') {\n return context.halo;\n }\n\n if (context.halo.invitationObservable) {\n void context.halo.invitationObservable.cancel();\n }\n\n return {\n ...context.halo,\n invitation: undefined,\n invitationObservable: undefined,\n invitationSubscribable: undefined,\n };\n },\n space: (context, event) => {\n if (event.type !== 'resetSpaceInvitation') {\n return context.space;\n }\n\n if (context.space.invitationObservable) {\n void context.space.invitationObservable.cancel();\n }\n\n return {\n ...context.space,\n invitation: undefined,\n invitationObservable: undefined,\n invitationSubscribable: undefined,\n };\n },\n }),\n setInvitation: assign<JoinMachineContext, SetInvitationEvent>({\n halo: (context, event) =>\n event.type.includes('Halo') ? { ...context.halo, invitation: event.invitation } : context.halo,\n space: (context, event) =>\n event.type.includes('Space') ? { ...context.space, invitation: event.invitation } : context.space,\n }),\n log: (context, event) => {\n log('[transition]', {\n event,\n haloInvitation: context.halo.invitation,\n spaceInvitation: context.space.invitation,\n });\n },\n },\n },\n);\n\ntype JoinMachine = typeof joinMachine;\n\ntype JoinState = StateFrom<JoinMachine>;\ntype JoinSendVoid = (...params: Parameters<InterpreterFrom<JoinMachine>['send']>) => void;\ntype JoinSend = InterpreterFrom<JoinMachine>['send'] | JoinSendVoid;\n\nexport const defaultCodeFromUrl = (invitationType: 'halo' | 'space', text: string) => {\n try {\n const searchParams = new URLSearchParams(text.substring(text.lastIndexOf('?')));\n return (\n searchParams.get(`${invitationType}InvitationCode`) ??\n searchParams.get(`${invitationType}Invitation`) ??\n searchParams.get('invitationCode') ??\n searchParams.get('invitation') ??\n text\n );\n } catch (err) {\n log.catch(err);\n return text;\n }\n};\n\nconst useJoinMachine = (\n client: Client,\n options?: Parameters<typeof useMachine<JoinMachine>>[1] & { onInvalidateInvitationCode?: (code: string) => void },\n) => {\n const redeemHaloInvitationCode = useCallback(\n ({ halo }: JoinMachineContext) => {\n if (halo.unredeemedCode) {\n try {\n const invitation = InvitationEncoder.decode(defaultCodeFromUrl('halo', halo.unredeemedCode));\n const invitationObservable = client.halo.join(invitation);\n return {\n ...halo,\n invitationObservable,\n invitationSubscribable: getInvitationSubscribable('Halo', invitationObservable),\n };\n } catch (err) {\n log.error('Could not redeem device invitation code', err);\n return halo;\n }\n } else {\n return halo;\n }\n },\n [client],\n );\n\n const redeemSpaceInvitationCode = useCallback(\n ({ space }: JoinMachineContext) => {\n if (space.unredeemedCode) {\n try {\n const invitation = InvitationEncoder.decode(defaultCodeFromUrl('space', space.unredeemedCode));\n const invitationObservable = client.spaces.join(invitation);\n return {\n ...space,\n invitationObservable,\n invitationSubscribable: getInvitationSubscribable('Space', invitationObservable),\n };\n } catch (err) {\n log.error('Could not redeem space invitation code', err);\n return space;\n }\n } else {\n return space;\n }\n },\n [client],\n );\n\n const invalidateHaloInvitationCode = useCallback(\n ({ halo }: JoinMachineContext) => {\n if (halo.unredeemedCode) {\n options?.onInvalidateInvitationCode?.(halo.unredeemedCode);\n return {\n ...halo,\n unredeemedCode: undefined,\n };\n } else {\n return halo;\n }\n },\n [options?.onInvalidateInvitationCode],\n );\n\n const invalidateSpaceInvitationCode = useCallback(\n ({ space }: JoinMachineContext) => {\n if (space.unredeemedCode) {\n options?.onInvalidateInvitationCode?.(space.unredeemedCode);\n return {\n ...space,\n unredeemedCode: undefined,\n };\n } else {\n return space;\n }\n },\n [options?.onInvalidateInvitationCode],\n );\n\n return useMachine(joinMachine, {\n ...options,\n actions: {\n ...options?.actions,\n redeemHaloInvitationCode: assign<JoinMachineContext>({ halo: redeemHaloInvitationCode }),\n redeemSpaceInvitationCode: assign<JoinMachineContext>({ space: redeemSpaceInvitationCode }),\n invalidateHaloInvitationCode: assign<JoinMachineContext>({\n halo: invalidateHaloInvitationCode,\n }),\n invalidateSpaceInvitationCode: assign<JoinMachineContext>({\n space: invalidateSpaceInvitationCode,\n }),\n },\n });\n};\n\nexport type { JoinMachine, JoinState, JoinSend, JoinEvent, JoinMachineContext };\nexport { joinMachine, useJoinMachine };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretRight, Plus, QrCode, Textbox } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { CompoundButton, StepHeading } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport type AdditionMethodChooserProps = JoinStepProps;\n\nexport const AdditionMethodChooser = (viewStateProps: AdditionMethodChooserProps) => {\n const disabled = !viewStateProps.active;\n const { send } = viewStateProps;\n\n const { t } = useTranslation('os');\n\n const sharedButtonProps = {\n disabled,\n after: <CaretRight className={getSize(4)} weight='bold' />,\n slots: { label: { className: 'text-sm' } },\n };\n\n return (\n <>\n <StepHeading>{t('addition method chooser title')}</StepHeading>\n <div role='none' className='flex flex-col gap-1 grow'>\n <CompoundButton\n {...sharedButtonProps}\n description={t('create identity description')}\n before={<Plus className={getSize(6)} />}\n onClick={() => send({ type: 'createIdentity' })}\n data-autofocus='choosingAuthMethod'\n data-testid='identity-chooser.create-identity'\n >\n {t('create identity label')}\n </CompoundButton>\n <CompoundButton\n {...sharedButtonProps}\n description={t('join identity description')}\n before={<QrCode className={getSize(6)} />}\n onClick={() => send({ type: 'acceptHaloInvitation' })}\n data-testid='identity-chooser.join-identity'\n >\n {t('join identity label')}\n </CompoundButton>\n <CompoundButton\n {...sharedButtonProps}\n description={t('recover identity description')}\n before={<Textbox className={getSize(6)} />}\n onClick={() => send({ type: 'recoverIdentity' })}\n data-testid='identity-chooser.recover-identity'\n >\n {t('recover identity label')}\n </CompoundButton>\n </div>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { cloneElement } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport type { Identity } from '@dxos/react-client/halo';\nimport { Avatar, useId, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { hexToFallback } from '@dxos/util';\n\nimport { Action, Actions, StepHeading } from '../../../components';\nimport { type JoinPanelMode, type JoinStepProps } from '../JoinPanelProps';\n\nexport interface IdentityAddedProps extends JoinStepProps {\n mode?: JoinPanelMode;\n addedIdentity?: Identity;\n}\n\nexport const IdentityAdded = (props: IdentityAddedProps) => {\n const { mode, addedIdentity, active, send, onDone, doneActionParent } = props;\n const disabled = !active;\n const { t } = useTranslation('os');\n\n const addedIdentityHex = addedIdentity?.identityKey.toHex() ?? '0';\n const fallbackValue = hexToFallback(addedIdentityHex);\n const labelId = useId('identityListItem__label');\n const displayName = addedIdentity?.profile?.displayName ?? (addedIdentity && generateName(addedIdentityHex));\n\n const doneAction = (\n <Action\n {...(onDone && { onClick: () => onDone(null) })}\n disabled={disabled}\n data-autofocus='confirmingAddedIdentity'\n data-testid='identity-added-done'\n >\n <span>{t('done label')}</span>\n </Action>\n );\n\n return (\n <>\n <StepHeading>{t('identity added label')}</StepHeading>\n <div role='none' className='grow flex flex-col items-center justify-center text-center gap-2'>\n <Avatar.Root labelId={labelId}>\n <Avatar.Content\n status='active'\n hue={addedIdentity?.profile?.data?.hue || fallbackValue.hue}\n fallback={addedIdentity?.profile?.data?.emoji || fallbackValue.emoji}\n />\n <Avatar.Label classNames={mx('text-lg truncate', !addedIdentity?.profile?.displayName && 'font-mono')}>\n {displayName}\n </Avatar.Label>\n </Avatar.Root>\n </div>\n <Actions>\n {mode === 'halo-only' ? (\n doneActionParent ? (\n cloneElement(doneActionParent, {}, doneAction)\n ) : (\n doneAction\n )\n ) : (\n <Action\n variant='primary'\n disabled={disabled || !addedIdentity}\n onClick={() => addedIdentity && send({ type: 'selectIdentity', identity: addedIdentity })}\n data-autofocus='confirmingAddedIdentity'\n >\n {t('continue label')}\n </Action>\n )}\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { Action, Actions, StepHeading, Input } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport interface IdentityCreatorProps extends JoinStepProps {\n method: 'recover identity' | 'create identity';\n}\n\nexport type IdentityInputProps = IdentityCreatorProps;\n\nexport type IdentityInputImplProps = IdentityCreatorProps & {\n onConfirm?: (value: string) => MaybePromise<void>;\n validationMessage?: string;\n};\n\nexport const IdentityInput = (props: IdentityInputProps) => {\n const { send, method } = props;\n const isRecover = method === 'recover identity';\n const client = useClient();\n const { t } = useTranslation('os');\n const [validationMessage, setValidationMessage] = useState('');\n const handleConfirm = async (value: string) => {\n if (isRecover) {\n await client.halo.recoverIdentity({ recoveryCode: value }).then(\n (identity) => {\n send?.({ type: 'selectIdentity' as const, identity });\n },\n (error) => {\n log.catch(error);\n setValidationMessage(t('failed to recover identity message'));\n },\n );\n } else {\n await client.halo.createIdentity({ displayName: value }).then(\n (identity) => {\n send?.({ type: 'selectIdentity' as const, identity });\n },\n (error) => {\n log.catch(error);\n setValidationMessage(t('failed to create identity message'));\n },\n );\n }\n };\n return <IdentityInputImpl {...props} onConfirm={handleConfirm} validationMessage={validationMessage} />;\n};\n\n// TODO(zhenyasav): impl shouldn't need send()\nexport const IdentityInputImpl = (props: IdentityInputImplProps) => {\n const { method, active, onConfirm, validationMessage } = props;\n const { t } = useTranslation('os');\n const [inputValue, setInputValue] = useState('');\n const [pending, setPending] = useState(false);\n const disabled = !active || pending;\n const isRecover = method === 'recover identity';\n\n const handleConfirm = useCallback(async () => {\n setPending(true);\n await onConfirm?.(inputValue);\n setPending(false);\n }, [onConfirm, inputValue]);\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <Input\n {...{ validationMessage }}\n label={\n <StepHeading>{t(isRecover ? 'recover identity input label' : 'new identity input label')}</StepHeading>\n }\n disabled={disabled}\n data-testid='identity-input'\n placeholder={isRecover ? t('recovery code placeholder') : t('display name placeholder')}\n onChange={({ target: { value } }) => setInputValue(value)}\n />\n </div>\n <Actions>\n {/* TODO(wittjosiah): This disables returning to deprecated identity creation flow.\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => send?.({ type: 'deselectAuthMethod' })}\n data-testid={`${method === 'recover identity' ? 'recover' : 'create'}-identity-input-back`}\n >\n {t('back label')}\n </Action> */}\n <Action\n variant='primary'\n disabled={disabled || inputValue.trim().length === 0}\n onClick={handleConfirm}\n data-testid={`${method === 'recover identity' ? 'recover' : 'create'}-identity-input-continue`}\n >\n {pending ? t('pending label') : t('continue label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { cloneElement } from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { Actions, Action } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport interface InvitationAcceptedProps extends JoinStepProps {\n Kind: 'Space' | 'Halo';\n doneActionParent?: Parameters<typeof cloneElement>[0];\n onDone?: () => void;\n}\n\nexport const InvitationAccepted = (props: InvitationAcceptedProps) => {\n const { active, Kind, doneActionParent, onDone } = props;\n const disabled = !active;\n const { t } = useTranslation('os');\n\n const doneAction = (\n <Action\n variant='primary'\n onClick={onDone}\n disabled={disabled}\n data-autofocus={`success${Kind}Invitation finishingJoining${Kind}`}\n data-testid={`${Kind.toLowerCase()}-invitation-accepted-done`}\n >\n {t('done label')}\n </Action>\n );\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <p className='text-center text-sm font-normal'>{t('welcome message')}</p>\n </div>\n <Actions>{doneActionParent ? cloneElement(doneActionParent, {}, doneAction) : doneAction}</Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState, useEffect, cloneElement } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { Actions, StepHeading, Action, Input } from '../../../components';\nimport { type JoinPanelProps, type JoinStepProps } from '../JoinPanelProps';\n\nexport interface InvitationInputProps extends JoinStepProps, Pick<JoinPanelProps, 'onExit' | 'exitActionParent'> {\n Kind: 'Space' | 'Halo';\n unredeemedCode?: string;\n succeededKeys?: Set<string>;\n}\n\nconst invitationCodeFromUrl = (text: string) => {\n try {\n const searchParams = new URLSearchParams(text.substring(text.lastIndexOf('?')));\n const invitation = searchParams.get('spaceInvitationCode') ?? searchParams.get('deviceInvitationCode');\n return invitation ?? text;\n } catch (err) {\n log.catch(err);\n return text;\n }\n};\n\nexport const InvitationInput = (props: InvitationInputProps) => {\n const { Kind, active, send, unredeemedCode, onExit, exitActionParent, onDone, doneActionParent, succeededKeys } =\n props;\n const disabled = !active;\n const { t } = useTranslation('os');\n\n const [inputValue, setInputValue] = useState(unredeemedCode ?? '');\n\n useEffect(() => {\n unredeemedCode && setInputValue(unredeemedCode ?? '');\n }, [unredeemedCode]);\n\n const handleNext = () => {\n if (inputValue.trim().length === 0) {\n return;\n }\n\n send({\n type: `set${Kind}InvitationCode`,\n code: invitationCodeFromUrl(inputValue),\n ...(Kind === 'Space' && { succeededKeys }),\n });\n };\n\n const exitAction = (\n <Action\n variant='ghost'\n disabled={disabled}\n {...(onExit ? { onClick: () => onExit() } : { onClick: () => onDone?.(null) })}\n data-testid='join-exit'\n >\n {t('cancel label')}\n </Action>\n );\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <Input\n label={<StepHeading>{t('invitation input label')}</StepHeading>}\n placeholder={t('invitation input placeholder')}\n disabled={disabled}\n value={inputValue}\n onChange={({ target: { value } }) => setInputValue(value)}\n data-autofocus={`inputting${Kind}InvitationCode`}\n data-testid={`${Kind.toLowerCase()}-invitation-input`}\n onKeyUp={({ key }) => key === 'Enter' && handleNext()}\n />\n </div>\n <Actions>\n {/* TODO(wittjosiah): This disables returning to deprecated identity creation flow. */}\n {Kind === 'Halo'\n ? null\n : exitActionParent\n ? cloneElement(exitActionParent, {}, exitAction)\n : doneActionParent\n ? cloneElement(doneActionParent, {}, exitAction)\n : exitAction}\n <Action\n variant='primary'\n disabled={disabled || inputValue.trim().length === 0}\n onClick={handleNext}\n data-testid={`${Kind.toLowerCase()}-invitation-input-continue`}\n >\n {t('continue label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Invitation } from '@dxos/react-client/invitations';\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionText } from '@dxos/react-ui-theme';\n\nimport { Action, Actions, StepHeading } from '../../../components';\nimport { type FailReason } from '../../../types';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport interface InvitationRescuerProps extends JoinStepProps {\n Kind: 'Space' | 'Halo';\n invitationState?: Invitation.State;\n onInvitationCancel?: () => Promise<void> | undefined;\n failReason?: FailReason | null;\n}\n\nconst InvitationActions = ({\n // `invitationState` does report correct state, but here we evaluate whether `failReason` is a better source of truth\n // for the UI in particular.\n invitationState,\n onInvitationCancel,\n active,\n send,\n Kind,\n failReason,\n}: InvitationRescuerProps) => {\n const { t } = useTranslation('os');\n\n if (failReason) {\n return (\n <>\n <StepHeading className={descriptionText}>\n {t(\n failReason === 'timeout'\n ? 'timeout status label'\n : failReason === 'cancelled'\n ? 'cancelled status label'\n : 'error status label',\n )}\n </StepHeading>\n <div role='none' className='grow' />\n <Actions>\n <Action\n disabled={!active}\n onClick={() => send({ type: `reset${Kind}Invitation` })}\n data-testid='invitation-rescuer-reset'\n >\n {t('reset label')}\n </Action>\n </Actions>\n </>\n );\n } else {\n return (\n <>\n <StepHeading className={descriptionText}>{t('connecting status label')}</StepHeading>\n <div role='none' className='grow' />\n <Actions>\n <Action disabled classNames='order-2' data-testid='next'>\n {t('next label')}\n </Action>\n <Action disabled={!active} onClick={onInvitationCancel} data-testid='invitation-rescuer-cancel'>\n {t('cancel label')}\n </Action>\n </Actions>\n </>\n );\n }\n};\n\nexport const InvitationRescuer = (props: InvitationRescuerProps) => {\n const { Kind, invitationState, active, send } = props;\n const { t } = useTranslation('os');\n\n return (\n <>\n {typeof invitationState === 'undefined' ? (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <StepHeading className={descriptionText}>There was a problem joining the space</StepHeading>\n </div>\n <Actions>\n <Action\n disabled={!active}\n data-testid='invitation-rescuer-blank-reset'\n onClick={() => send({ type: `reset${Kind}Invitation` })}\n >\n {t('reset label')}\n </Action>\n </Actions>\n </>\n ) : (\n <InvitationActions {...props} />\n )}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ChangeEvent, useState } from 'react';\n\nimport { Invitation } from '@dxos/react-client/invitations';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { descriptionText } from '@dxos/react-ui-theme';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { Actions, Action, Emoji, StepHeading, Label } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nconst pinLength = 6;\n\nexport interface InvitationAuthenticatorProps extends JoinStepProps {\n Kind: 'Space' | 'Halo';\n authMethod?: Invitation.AuthMethod;\n failed?: boolean;\n pending?: boolean;\n invitationId?: string;\n onInvitationCancel?: () => Promise<void> | undefined;\n onInvitationAuthenticate?: (authCode: string) => Promise<void> | undefined;\n}\n\nexport const InvitationAuthenticator = ({\n failed,\n Kind,\n authMethod,\n active,\n pending,\n invitationId,\n onInvitationAuthenticate,\n onInvitationCancel,\n}: InvitationAuthenticatorProps) => {\n const disabled = !active || pending;\n const { t } = useTranslation('os');\n const invitationType = Kind.toLowerCase() as 'space' | 'halo';\n const [authCode, setAuthCode] = useState('');\n\n const onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => {\n setAuthCode(value);\n if (value.length === pinLength) {\n (document.querySelector(`[data-autofocus-pinlength=\"${invitationType}\"]`) as HTMLElement | null)?.focus();\n }\n };\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center gap-4'>\n <Input.Root\n {...(failed && {\n validationValence: 'error',\n })}\n >\n <Input.Label asChild>\n {authMethod === Invitation.AuthMethod.SHARED_SECRET ? (\n <StepHeading>{t('auth code input label')}</StepHeading>\n ) : (\n <>\n <StepHeading className={descriptionText}>{t('authenticating label')}</StepHeading>\n <div role='none' className='grow' />\n </>\n )}\n </Input.Label>\n {authMethod === Invitation.AuthMethod.SHARED_SECRET && (\n <Input.PinInput\n {...{\n disabled,\n length: pinLength,\n onChange,\n inputMode: 'numeric',\n autoComplete: 'off',\n pattern: '\\\\d*',\n 'data-autofocus': `connecting${Kind}Invitation inputting${Kind}VerificationCode authenticationFailing${Kind}VerificationCode authenticating${Kind}VerificationCode`,\n 'data-prevent-ios-autofocus': true,\n 'data-testid': `${invitationType}-auth-code-input`,\n 'data-1p-ignore': true,\n }}\n />\n )}\n {failed && (\n <Input.DescriptionAndValidation classNames='text-center'>\n <Input.Validation>{t('failed to authenticate message')}</Input.Validation>\n </Input.DescriptionAndValidation>\n )}\n </Input.Root>\n\n {invitationId && authMethod === Invitation.AuthMethod.SHARED_SECRET && (\n <>\n <Label>{t('auth other device emoji message')}</Label>\n <div className='flex justify-center'>\n <Emoji text={hexToEmoji(invitationId)} />\n </div>\n </>\n )}\n </div>\n <Actions>\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => onInvitationCancel?.()}\n data-testid={`${invitationType}-invitation-authenticator-cancel`}\n >\n {t('cancel label')}\n </Action>\n <Action\n variant='primary'\n disabled={disabled}\n onClick={() => onInvitationAuthenticate?.(authCode)}\n data-autofocus-pinlength={invitationType}\n data-testid={`${invitationType}-invitation-authenticator-next`}\n >\n {t('next label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const stepStyles = 'pbs-1 pbe-3 pli-3';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Invitation } from '@dxos/react-client/invitations';\n\nexport const inactiveBgColor = 'bg-neutral-100 dark:bg-neutral-600';\nexport const activeBgColor = 'bg-primary-500 dark:bg-primary-400';\nexport const successBgColor = 'bg-success-500 dark:bg-success-400';\nexport const errorBgColor = 'bg-error-500 dark:bg-error-400';\nexport const cancelledBgColor = 'bg-warning-500 dark:bg-warning-400';\n\nexport const inactiveTextColor = 'text-neutral-100 dark:text-neutral-600';\nexport const activeTextColor = 'text-primary-400 dark:text-primary-500';\nexport const successTextColor = 'text-success-400 dark:text-success-500';\nexport const errorTextColor = 'text-error-400 dark:text-error-500';\nexport const cancelledTextColor = 'text-warning-400 dark:text-warning-500';\n\nexport const inactiveStrokeColor = 'stroke-neutral-100 dark:stroke-neutral-700';\nexport const activeStrokeColor = 'stroke-primary-400 dark:stroke-primary-150';\nexport const successStrokeColor = 'stroke-success-300 dark:stroke-primary-400';\nexport const errorStrokeColor = 'stroke-error-300 dark:stroke-error-500';\nexport const cancelledStrokeColor = 'stroke-warning-300 dark:stroke-warning-500';\n\nexport const resolvedStrokeColor = (status: Invitation.State) =>\n status === Invitation.State.ERROR\n ? errorStrokeColor\n : status === Invitation.State.CANCELLED || status === Invitation.State.TIMEOUT\n ? cancelledStrokeColor\n : successStrokeColor;\n\nexport const resolvedBgColor = (status: Invitation.State) =>\n status === Invitation.State.ERROR\n ? errorBgColor\n : status === Invitation.State.CANCELLED || status === Invitation.State.TIMEOUT\n ? cancelledBgColor\n : successBgColor;\n\nexport const resolvedTextColor = (status: Invitation.State) =>\n status === Invitation.State.ERROR\n ? errorTextColor\n : status === Invitation.State.CANCELLED || status === Invitation.State.TIMEOUT\n ? cancelledTextColor\n : successTextColor;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Planet } from '@phosphor-icons/react';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useInvitationStatus } from '@dxos/react-client/invitations';\nimport type { CancellableInvitationObservable } from '@dxos/react-client/invitations';\nimport { useId, useTranslation } from '@dxos/react-ui';\n\nimport { type SpacePanelHeadingProps, type SpacePanelImplProps, type SpacePanelProps } from './SpacePanelProps';\nimport { useSpaceMachine } from './spaceMachine';\nimport { SpaceManager } from './steps';\nimport { Heading, CloseButton, Viewport } from '../../components';\nimport { InvitationManager } from '../../steps';\nimport { stepStyles } from '../../styles';\n\nconst SpacePanelHeading = ({ titleId, space, onDone }: SpacePanelHeadingProps) => {\n const { t } = useTranslation('os');\n const name = space.properties.name;\n return (\n <Heading\n titleId={titleId}\n title={t('space panel heading')}\n corner={<CloseButton data-testid='identity-panel-done' onDone={onDone} />}\n >\n <div role='none' className='flex gap-4 items-center justify-center mlb-4'>\n <Planet size={32} weight='light' />\n <div className='block text-start font-light text-xl'>{name ?? space.key.truncate()}</div>\n </div>\n </Heading>\n );\n};\n\nexport const SpacePanelImpl = (props: SpacePanelImplProps) => {\n const {\n titleId,\n activeView,\n space,\n hideHeading,\n target,\n SpaceManager: SpaceManagerComponent = SpaceManager,\n InvitationManager: InvitationManagerComponent = InvitationManager,\n ...rest\n } = props;\n\n return (\n <>\n {!hideHeading && <SpacePanelHeading {...rest} {...{ titleId, space }} />}\n <Viewport.Root activeView={activeView}>\n <Viewport.Views>\n <Viewport.View id='space manager' classNames={stepStyles}>\n <SpaceManagerComponent active={activeView === 'space manager'} space={space} target={target} {...rest} />\n </Viewport.View>\n <Viewport.View id='space invitation manager' classNames={stepStyles}>\n <InvitationManagerComponent\n active={activeView === 'space invitation manager'}\n {...rest}\n invitationUrl={props.invitationUrl}\n />\n </Viewport.View>\n </Viewport.Views>\n </Viewport.Root>\n </>\n );\n};\n\nconst SpacePanelWithInvitationImpl = ({\n invitation,\n ...props\n}: SpacePanelImplProps & { invitation: CancellableInvitationObservable }) => {\n const invitationStatus = useInvitationStatus(invitation);\n return (\n <SpacePanelImpl\n {...props}\n {...invitationStatus}\n invitationUrl={props.createInvitationUrl(invitationStatus.invitationCode!)}\n />\n );\n};\n\nexport const SpacePanel = ({\n titleId: propsTitleId,\n createInvitationUrl = (code) => code,\n ...props\n}: SpacePanelProps) => {\n const titleId = useId('spacePanel__heading', propsTitleId);\n\n const [spaceState, spaceSend, spaceService] = useSpaceMachine({ context: { space: props.space } });\n\n useEffect(() => {\n const subscription = spaceService.subscribe((state) => {\n log('[state]', state);\n });\n\n return subscription.unsubscribe;\n }, [spaceService]);\n\n const activeView = useMemo(() => {\n switch (true) {\n case spaceState.matches('managingSpace'):\n return 'space manager';\n case spaceState.matches('managingSpaceInvitation'):\n return 'space invitation manager';\n default:\n return 'never';\n }\n }, [spaceState]);\n\n const implProps = {\n ...props,\n activeView,\n send: spaceSend,\n titleId,\n createInvitationUrl,\n };\n\n return spaceState.context.invitation ? (\n // TODO(wittjosiah): Unused? Remove?\n <SpacePanelWithInvitationImpl {...implProps} invitation={spaceState.context.invitation} />\n ) : (\n <SpacePanelImpl {...implProps} />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMachine } from '@xstate/react';\nimport { assign, createMachine, type InterpreterFrom, type StateFrom } from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\n\nimport { type ErsatzSpace } from './SpacePanelProps';\nimport { type StepEvent } from '../../steps';\n\ntype SpaceMachineContext = {\n invitation?: CancellableInvitationObservable;\n space: ErsatzSpace | Space | null;\n};\n\ntype SpaceSelectInvitationEvent = {\n type: 'selectInvitation';\n invitation: CancellableInvitationObservable;\n};\n\ntype SpaceEvent = SpaceSelectInvitationEvent | StepEvent;\n\nconst spaceMachine = createMachine<SpaceMachineContext, SpaceEvent>(\n {\n id: 'space',\n predictableActionArguments: true,\n context: {\n space: null,\n },\n initial: 'managingSpace',\n states: {\n managingSpace: {},\n managingSpaceInvitation: {},\n },\n on: {\n deselectInvitation: { target: '.managingSpace', actions: ['unsetInvitation', 'log'] },\n selectInvitation: { target: '.managingSpaceInvitation', actions: ['setInvitation', 'log'] },\n },\n },\n {\n actions: {\n setInvitation: assign<SpaceMachineContext, SpaceEvent>({\n invitation: (context, event) => (event as SpaceSelectInvitationEvent)?.invitation ?? null,\n }),\n unsetInvitation: assign<SpaceMachineContext, SpaceEvent>({\n invitation: () => undefined,\n }),\n log: (context, event) => {\n log('[transition]', {\n event,\n context,\n });\n },\n },\n },\n);\n\ntype SpaceMachine = typeof spaceMachine;\n\ntype SpaceState = StateFrom<SpaceMachine>;\ntype SpaceSend = InterpreterFrom<SpaceMachine>['send'];\n\nconst useSpaceMachine = (options?: Parameters<typeof useMachine<SpaceMachine>>[1]) => {\n return useMachine(spaceMachine, { ...options, context: { ...options?.context } });\n};\n\nexport type { SpaceMachine, SpaceEvent, SpaceMachineContext, SpaceState, SpaceSend };\nexport { spaceMachine, useSpaceMachine };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Placeholder, UserPlus, UsersThree } from '@phosphor-icons/react';\nimport React, { type Dispatch, type FC, type SetStateAction, useCallback, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useConfig } from '@dxos/react-client';\nimport { useSpaceInvitations } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { ScrollArea, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport {\n Actions,\n type ActionMenuItem,\n BifurcatedAction,\n InvitationList,\n type InvitationListProps,\n SpaceMemberList,\n type SpaceMemberListProps,\n} from '../../../components';\nimport { type SpacePanelStepProps } from '../SpacePanelProps';\n\nexport type SpaceManagerImplProps = SpacePanelStepProps & {\n target?: string;\n invitations?: CancellableInvitationObservable[];\n showInactiveInvitations?: boolean;\n inviteActions?: Record<string, ActionMenuItem>;\n SpaceMemberList?: FC<SpaceMemberListProps>;\n InvitationList?: FC<InvitationListProps>;\n};\n\nconst activeActionKey = 'dxos:react-shell/space-manager/active-action';\n\nconst handleInvitationEvent = (invitation: Invitation, subscription: ZenObservable.Subscription) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n subscription.unsubscribe();\n }\n};\n\nexport type SpaceManagerProps = SpaceManagerImplProps & {};\n\nexport const SpaceManager = (props: SpaceManagerProps) => {\n const { space, target } = props;\n const { t } = useTranslation('os');\n const config = useConfig();\n\n const invitations = useSpaceInvitations(space?.key);\n\n const inviteActions = {\n inviteOne: {\n label: t('invite one label'),\n description: t('invite one description'),\n icon: UserPlus,\n testId: 'spaces-panel.invite-one',\n onClick: useCallback(() => {\n const invitation = space.share?.({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.SHARED_SECRET,\n multiUse: false,\n target,\n });\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>\n handleInvitationEvent(invitation, subscription),\n );\n }\n }, [space, target]),\n },\n inviteMany: {\n label: t('invite many label'),\n description: t('invite many description'),\n icon: UsersThree,\n testId: 'spaces-panel.invite-many',\n onClick: useCallback(() => {\n const invitation = space.share?.({\n type: Invitation.Type.DELEGATED,\n authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,\n multiUse: true,\n target,\n });\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>\n handleInvitationEvent(invitation, subscription),\n );\n }\n }, [space, target]),\n },\n };\n\n return <SpaceManagerImpl {...props} invitations={invitations} inviteActions={inviteActions} />;\n};\n\nconst headingFragment = 'pis-3 pie-1 plb-1 mbe-1 font-medium';\n\nexport const SpaceManagerImpl = (props: SpaceManagerImplProps) => {\n const {\n active,\n space,\n createInvitationUrl,\n send,\n inviteActions: propsInviteActions,\n invitations,\n showInactiveInvitations,\n SpaceMemberList: SpaceMemberListComponent = SpaceMemberList,\n InvitationList: InvitationListComponent = InvitationList,\n } = props;\n const { t } = useTranslation('os');\n\n const inviteActions =\n propsInviteActions ??\n ({\n noopInvite: {\n label: t('create space invitation label'),\n description: '',\n icon: Placeholder,\n onClick: () => {},\n },\n } as Record<string, ActionMenuItem>);\n\n const [activeAction, setInternalActiveAction] = useState(localStorage.getItem(activeActionKey) ?? 'inviteMany');\n\n const setActiveAction = (nextAction: string) => {\n setInternalActiveAction(nextAction);\n localStorage.setItem(activeActionKey, nextAction);\n };\n\n const visibleInvitations = showInactiveInvitations\n ? invitations\n : invitations?.filter((invitation) => ![Invitation.State.CANCELLED].includes(invitation.get().state));\n\n return (\n <>\n <ScrollArea.Root classNames='grow shrink basis-28 -mli-2'>\n <ScrollArea.Viewport classNames='is-full pie-2'>\n {!!visibleInvitations?.length && (\n <>\n <h3 className={mx(headingFragment, descriptionText)}>{t('invitation list heading')}</h3>\n <InvitationListComponent\n className='mb-2'\n send={send}\n invitations={visibleInvitations ?? []}\n onClickRemove={(invitation) => invitation.cancel()}\n createInvitationUrl={createInvitationUrl}\n />\n <h3 className={mx(headingFragment, descriptionText, 'mbs-2')}>{t('space member list heading')}</h3>\n </>\n )}\n <SpaceMemberListComponent spaceKey={space.key} includeSelf />\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n <Actions>\n <BifurcatedAction\n disabled={!active}\n actions={inviteActions}\n activeAction={activeAction}\n onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}\n data-testid='spaces-panel.create-invitation'\n />\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Status, useTranslation } from '@dxos/react-ui';\n\nexport const StatusPanel = ({ titleId }: { titleId?: string }) => {\n const { t } = useTranslation('os');\n return (\n <div className='grid place-items-center p-2 gap-2'>\n <p id={titleId} className='font-medium text-center'>\n {t('resetting message')}\n </p>\n <Status indeterminate>{t('resetting message')}</Status>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { AlertDialog, type AlertDialogContentProps, useId, useVisualViewport } from '@dxos/react-ui';\n\nimport { JoinPanel, type JoinPanelProps } from '../../panels';\n\nexport interface JoinDialogProps\n extends Omit<AlertDialogContentProps, 'children'>,\n Omit<JoinPanelProps, 'exitActionParent' | 'doneActionParent'> {}\n\nexport const JoinDialog = (joinPanelProps: JoinDialogProps) => {\n const titleId = useId('joinDialog__title');\n // todo(thure): This doesn’t work within an iframe on iOS Safari.\n const { height } = useVisualViewport();\n return (\n <AlertDialog.Root\n defaultOpen\n onOpenChange={(open) => open || (joinPanelProps.onExit ? joinPanelProps.onExit() : joinPanelProps.onDone?.(null))}\n >\n <AlertDialog.Portal>\n <AlertDialog.Overlay classNames='backdrop-blur' {...(height && { style: { blockSize: `${height}px` } })}>\n <AlertDialog.Content aria-labelledby={titleId}>\n <JoinPanel\n {...{\n ...joinPanelProps,\n titleId,\n exitActionParent: <AlertDialog.Cancel asChild />,\n doneActionParent: <AlertDialog.Action asChild />,\n }}\n />\n </AlertDialog.Content>\n </AlertDialog.Overlay>\n </AlertDialog.Portal>\n </AlertDialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { DEFAULT_CLIENT_CHANNEL, DEFAULT_SHELL_CHANNEL } from '@dxos/client-protocol';\nimport { AgentHostingProvider, ClientProvider, ClientServicesProxy, Config, ShellDisplay } from '@dxos/react-client';\nimport { Button, Clipboard, Dialog, ThemeProvider, Tooltip, useTranslation } from '@dxos/react-ui';\nimport { defaultTx } from '@dxos/react-ui-theme';\nimport { createIFramePort } from '@dxos/rpc-tunnel';\n\nimport { Shell } from './Shell';\nimport { ShellRuntimeImpl } from './shell-runtime';\nimport { osTranslations } from '../../translations';\n\nexport const runShell = async (config: Config = new Config()) => {\n // If runtime fails to open then the shell will not be openable.\n const runtime = new ShellRuntimeImpl(createIFramePort({ channel: DEFAULT_SHELL_CHANNEL }));\n await runtime.open();\n\n try {\n const services = new ClientServicesProxy(createIFramePort({ channel: DEFAULT_CLIENT_CHANNEL }));\n\n createRoot(document.getElementById('root')!).render(\n <StrictMode>\n <ThemeProvider tx={defaultTx} resourceExtensions={[osTranslations]}>\n <ClientProvider config={config} services={services} noBanner>\n <Clipboard.Provider>\n <Tooltip.Provider>\n <AgentHostingProvider>\n <Shell runtime={runtime} />\n </AgentHostingProvider>\n </Tooltip.Provider>\n </Clipboard.Provider>\n </ClientProvider>\n </ThemeProvider>\n </StrictMode>,\n );\n } catch {\n // If shell's client fails to initialize, ensure that the shell is still closeable.\n createRoot(document.getElementById('root')!).render(\n <StrictMode>\n <ThemeProvider tx={defaultTx} resourceExtensions={[osTranslations]}>\n <Fallback onClose={() => runtime.setAppContext({ display: ShellDisplay.NONE })} />\n </ThemeProvider>\n </StrictMode>,\n );\n }\n};\n\nconst Fallback = ({ onClose }: { onClose?: () => void }) => {\n const { t } = useTranslation('os');\n\n return (\n <Dialog.Root modal open onOpenChange={() => onClose?.()}>\n <Dialog.Overlay>\n <Dialog.Content>\n <Dialog.Title>{t('shell fallback title')}</Dialog.Title>\n <Dialog.Close asChild onClick={() => onClose?.()}>\n <Button variant='primary'>{t('close label')}</Button>\n </Dialog.Close>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport {\n ShellDisplay,\n ShellLayout,\n type InvitationUrlRequest,\n type LayoutRequest,\n type ShellRuntime,\n} from '@dxos/react-client';\nimport { useSpace } from '@dxos/react-client/echo';\n\nimport { IdentityDialog } from '../IdentityDialog';\nimport { JoinDialog } from '../JoinDialog';\nimport { SpaceDialog } from '../SpaceDialog';\nimport { StatusDialog } from '../StatusDialog';\n\nconst blurActiveElement = () => (document.activeElement as HTMLElement | undefined)?.blur?.();\n\nexport const Shell = ({ runtime }: { runtime: ShellRuntime }) => {\n const [{ layout, invitationCode, spaceKey, spaceId, target }, setLayout] = useState<LayoutRequest>({\n layout: runtime.layout,\n invitationCode: runtime.invitationCode,\n spaceKey: runtime.spaceKey,\n spaceId: runtime.spaceId,\n target: runtime.target,\n });\n const [{ invitationUrl, deviceInvitationParam, spaceInvitationParam }, setInvitationUrl] =\n useState<InvitationUrlRequest>({\n invitationUrl: runtime.invitationUrl,\n deviceInvitationParam: runtime.deviceInvitationParam,\n spaceInvitationParam: runtime.spaceInvitationParam,\n });\n\n const client = useClient();\n const space = useSpace(spaceId ?? spaceKey);\n\n const createDeviceInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationUrl);\n baseUrl.searchParams.set(deviceInvitationParam, invitationCode);\n return baseUrl.toString();\n };\n\n const createSpaceInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationUrl);\n baseUrl.searchParams.set(spaceInvitationParam, invitationCode);\n return baseUrl.toString();\n };\n\n useEffect(() => {\n const unsubscribeLayout = runtime.layoutUpdate.on((request) => setLayout(request));\n const unsubscribeInvitationUrl = runtime.invitationUrlUpdate.on((request) => setInvitationUrl(request));\n\n return () => {\n unsubscribeLayout();\n unsubscribeInvitationUrl();\n };\n }, [runtime]);\n\n useEffect(() => {\n if (layout === ShellLayout.SPACE && !space) {\n log.warn('No space found for shell space invitations.');\n\n const timeout = setTimeout(async () => {\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n });\n\n return () => clearTimeout(timeout);\n }\n }, [runtime, layout, space]);\n\n switch (layout) {\n case ShellLayout.STATUS:\n return <StatusDialog />;\n case ShellLayout.INITIALIZE_IDENTITY:\n case ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION:\n case ShellLayout.INITIALIZE_IDENTITY_FROM_RECOVERY:\n return (\n <JoinDialog\n mode='halo-only'\n initialDisposition={\n layout === ShellLayout.INITIALIZE_IDENTITY_FROM_RECOVERY\n ? 'recover-identity'\n : layout === ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION\n ? 'accept-halo-invitation'\n : 'default'\n }\n initialInvitationCode={invitationCode}\n onCancelResetStorage={() => runtime.setLayout({ layout: ShellLayout.IDENTITY })}\n onDone={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n />\n );\n\n case ShellLayout.IDENTITY:\n case ShellLayout.SHARE_IDENTITY:\n case ShellLayout.EDIT_PROFILE:\n return (\n <IdentityDialog\n createInvitationUrl={createDeviceInvitationUrl}\n onResetStorage={async () => {\n runtime.setLayout({ layout: ShellLayout.STATUS });\n await client.reset();\n return runtime.setAppContext({ display: ShellDisplay.NONE, reset: true });\n }}\n onRecover={async () => {\n runtime.setLayout({ layout: ShellLayout.STATUS });\n await client.reset();\n // TODO(wittjosiah): Enter join flow without reloading.\n return runtime.setAppContext({ display: ShellDisplay.NONE, reset: true, target: 'recoverIdentity' });\n }}\n onJoinNewIdentity={async () => {\n runtime.setLayout({ layout: ShellLayout.STATUS });\n await client.reset();\n // TODO(wittjosiah): Enter join flow without reloading.\n return runtime.setAppContext({ display: ShellDisplay.NONE, reset: true, target: 'deviceInvitation' });\n }}\n onDone={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n initialDisposition={layout === ShellLayout.SHARE_IDENTITY ? 'manage-device-invitation' : 'default'}\n />\n );\n\n case ShellLayout.SPACE:\n return space ? (\n <SpaceDialog\n space={space}\n target={target}\n createInvitationUrl={createSpaceInvitationUrl}\n onDone={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n />\n ) : null;\n\n case ShellLayout.JOIN_SPACE:\n return (\n <JoinDialog\n initialInvitationCode={invitationCode}\n onDone={async (result) => {\n blurActiveElement();\n const target = result?.target ?? undefined;\n await runtime.setAppContext({\n display: ShellDisplay.NONE,\n spaceKey: result?.spaceKey ?? undefined,\n target,\n });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n onExit={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n />\n );\n\n default:\n return null;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Clipboard, Dialog, type DialogContentProps, useId } from '@dxos/react-ui';\n\nimport { SpacePanel, type SpacePanelProps } from '../../panels';\n\nexport interface SpaceDialogProps\n extends Omit<DialogContentProps, 'children'>,\n Omit<SpacePanelProps, 'doneActionParent'> {}\n\nexport const SpaceDialog = (spacePanelProps: SpaceDialogProps) => {\n const titleId = useId('spaceDialog__title');\n return (\n <Dialog.Root defaultOpen onOpenChange={(open) => open || spacePanelProps.onDone?.()}>\n <Dialog.Portal>\n <Dialog.Overlay>\n <Dialog.Content aria-labelledby={titleId}>\n <Clipboard.Provider>\n <SpacePanel\n {...{\n ...spacePanelProps,\n titleId,\n doneActionParent: <Dialog.Close asChild />,\n }}\n />\n </Clipboard.Provider>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { AlertDialog, useId } from '@dxos/react-ui';\n\nimport { StatusPanel } from '../../panels';\n\nexport const StatusDialog = () => {\n const titleId = useId('statusDialog__title');\n return (\n <AlertDialog.Root open>\n <AlertDialog.Portal>\n <AlertDialog.Overlay>\n <AlertDialog.Content aria-labelledby={titleId}>\n <StatusPanel titleId={titleId} />\n </AlertDialog.Content>\n </AlertDialog.Overlay>\n </AlertDialog.Portal>\n </AlertDialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport {\n type AppContextRequest,\n type LayoutRequest,\n ShellLayout,\n type InvitationUrlRequest,\n} from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\n\n/**\n * Endpoint that handles shell services.\n */\nexport class ShellRuntimeImpl implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n readonly invitationUrlUpdate = new Event<InvitationUrlRequest>();\n\n private _appRpc?: ProtoRpcPeer<AppServiceBundle>;\n private _layout = ShellLayout.DEFAULT;\n private _spaceKey?: PublicKey;\n private _spaceId?: string;\n\n private _invitationCode?: string;\n private _invitationUrl? = typeof window !== 'undefined' ? window.location.origin : undefined;\n\n // TODO(burdon): Change to using underscores (coordinate with @dxos/web-auth).\n private _deviceInvitationParam = 'deviceInvitationCode'; // TODO(burdon): device_invitation_code\n private _spaceInvitationParam = 'spaceInvitationCode'; // TODO(burdon): space_invitation_code\n\n constructor(private readonly _port: RpcPort) {}\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n /** @deprecated Use spaceId. */\n get spaceKey() {\n return this._spaceKey;\n }\n\n get spaceId() {\n return this._spaceId;\n }\n\n get invitationUrl() {\n return this._invitationUrl!;\n }\n\n get deviceInvitationParam() {\n return this._deviceInvitationParam;\n }\n\n get spaceInvitationParam() {\n return this._spaceInvitationParam;\n }\n\n setLayout({ layout, invitationCode, spaceKey, spaceId }: LayoutRequest) {\n this._layout = layout;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this._spaceId = spaceId;\n this.layoutUpdate.emit({ layout, invitationCode, spaceKey, spaceId });\n }\n\n setInvitationUrl({ invitationUrl, deviceInvitationParam, spaceInvitationParam }: InvitationUrlRequest) {\n this._invitationUrl = invitationUrl;\n this._deviceInvitationParam = deviceInvitationParam;\n this._spaceInvitationParam = spaceInvitationParam;\n this.invitationUrlUpdate.emit({ invitationUrl, deviceInvitationParam, spaceInvitationParam });\n }\n\n async setAppContext(context: AppContextRequest) {\n invariant(this._appRpc, 'runtime not open');\n\n await this._appRpc.rpc.AppService.setContext(context);\n }\n\n async open() {\n this._appRpc = createProtoRpcPeer({\n requested: appServiceBundle,\n exposed: shellServiceBundle,\n handlers: {\n ShellService: {\n setLayout: async (request) => {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this._spaceId = request.spaceId;\n this.layoutUpdate.emit(request);\n },\n setInvitationUrl: async (request) => {\n this._invitationUrl = request.invitationUrl;\n this._deviceInvitationParam = request.deviceInvitationParam;\n this._spaceInvitationParam = request.spaceInvitationParam;\n this.invitationUrlUpdate.emit(request);\n },\n },\n },\n port: this._port,\n });\n\n await this._appRpc.open();\n }\n\n async close() {\n await this._appRpc?.close();\n this._appRpc = undefined;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nexport const os = {\n 'manage profile label': 'Manage identity',\n 'identity offline description': 'Offline',\n 'sidebar label': 'DXOS sidebar',\n 'copy invitation code label': 'Copy URL',\n 'copy success label': 'Copied',\n 'copy self did label': 'Copy DID',\n 'open share panel label': 'View QR code',\n 'manage credentials label': 'Manage credentials',\n 'joining space heading': 'Joining space',\n 'join space heading': 'Enter space invitation',\n 'halo heading': 'Initialize device identity',\n 'exit label': 'Exit',\n 'identity selector title': 'Join as',\n 'identity radio group title': 'Select an identity you’ve associated with this device already',\n 'add identity label': 'Add',\n 'continue label': 'Continue',\n 'pending label': 'Pending',\n 'back label': 'Back',\n 'next label': 'Next',\n 'close label': 'Close',\n 'auth choices label': 'Choose an identity',\n 'create identity label': 'Create an identity',\n 'create identity description': 'Create a new identity.',\n 'recover identity label': 'Use a recovery code',\n 'recover identity description': 'Enter your recovery code to log in manually.',\n 'invitation input placeholder': 'Invitation code',\n 'recovery code placeholder': 'Recovery code',\n 'display name placeholder': 'Display name',\n 'join identity label': 'Use another device',\n 'join identity description': 'Add this device to an identity you’re already logged into on another device.',\n 'deselect identity label': 'Back to identities',\n 'addition method chooser title': 'An identity is required to continue',\n 'new identity input label': 'Set display name',\n 'recover identity input label': 'Type or paste your recovery code',\n 'failed to create identity message': 'Failed to create an identity.',\n 'failed to recover identity message': 'Failed to recover an identity from the provided recovery code.',\n 'failed to authenticate message': 'Incorrect code.',\n 'identity added label': 'Created identity & added to this device:',\n 'join space as identity heading': '<part>as </part><part><icon/><label>{{labelValue}}</label></part>',\n 'error status label': 'Failed',\n 'timeout status label': 'Timed out',\n 'cancelled status label': 'Cancelled',\n 'init status label': 'Ready to connect',\n 'connecting status label': 'Connecting…',\n 'connected status label': 'Enter authentication code',\n 'authenticating status label': 'Enter authentication code',\n 'success status label': 'Success',\n 'cancel label': 'Cancel',\n 'done label': 'Done',\n 'reset label': 'Start over',\n 'auth code input label': 'Enter the verification code',\n 'invitation input label': 'Paste an invitation code or URL',\n 'create device invitation label': 'Add device',\n 'create space invitation label': 'Invite',\n 'qr label': 'Scan to accept invitation',\n 'empty invitations message': 'No pending invitations',\n 'empty device list message': 'No devices authenticated other than this device.',\n 'show all spaces label': 'All spaces',\n 'all spaces label': 'All spaces',\n 'create space label': 'Create a new space',\n 'join space label': 'Join a space',\n 'show current space label': 'Current space',\n 'view space invitations label': 'View space invitations',\n 'toggle sidebar label': 'Open/close sidebar',\n 'open sidebar label': 'Open sidebar',\n 'close sidebar label': 'Close sidebar',\n 'welcome message': 'Welcome',\n 'selecting identity heading': 'Selecting identity',\n 'devices heading': 'Devices',\n 'identity heading': 'Profile settings',\n 'choose add device label': 'Add device',\n 'choose devices label': 'Manage devices',\n 'choose profile label': 'Edit profile',\n 'choose sign out label': 'Reset storage',\n 'choose join new identity label': 'Join existing device',\n 'empty space members message': 'There is nobody in this space yet.',\n 'back to all invitations label': 'Back to all invitations',\n 'invitation heading': 'Invitation',\n 'invitation list heading': 'Invitations',\n 'device invitation list heading': 'Pending device invitations',\n 'space invitation list heading': 'Pending invitations',\n 'device list heading': 'Devices',\n 'space member list heading': 'Members',\n 'space panel heading': 'Space membership',\n 'auth code message': 'Enter the following auth code on the joining device. Click the code to copy it.',\n 'auth other device emoji message': 'Be sure the other device shows the following emoji.',\n 'display name input label': 'Display name',\n 'display name input placeholder': 'Enter a display name',\n 'invite one label': 'Create single-use invitation',\n 'invite one description': 'Only one user may join.',\n 'invite one qr label': 'Single-use invitation',\n 'invite one list item label': 'Active single-use invitation',\n 'invite many label': 'Create multi-use invitation',\n 'invite many description': 'Anyone with the link can join.',\n 'invite many qr label': 'Multi-use invitation',\n 'invite many list item label': 'Active multi-use invitation',\n 'invite options label': 'Change the active invite option.',\n 'reset in progress label': 'Resetting...',\n 'confirm label': 'Confirm',\n 'reset storage input label':\n 'WARNING: This will delete all data on this device. Type {{confirmationValue}} to continue.',\n 'join new identity input label':\n 'WARNING: To join an existing device all data on this device will be deleted. Type {{confirmationValue}} to continue.',\n 'failed to reset identity message': 'Failed to reset identity.',\n 'confirmation value': 'RESET',\n 'confirmation placeholder': 'Enter {{confirmationValue}} to continue.',\n 'sign out chooser title': 'Danger zone',\n 'sign out chooser message': 'Proceeding with the action below will erase all data on this device.',\n 'join new identity label': 'Join an existing identity',\n 'reset device label': 'Reset storage',\n 'reset device confirm message': 'Are you sure you want to reset your device? All data will be lost.',\n 'emoji and color label': 'Emoji and color',\n 'clear label': 'Use default',\n 'select emoji label': 'Avatar emoji',\n 'select hue label': 'Avatar background color',\n 'resetting message': 'One moment while the device is reset…',\n\n // TODO(burdon): Factor out.\n 'red label': 'Red',\n 'orange label': 'Orange',\n 'amber label': 'Amber',\n 'yellow label': 'Yellow',\n 'lime label': 'Lime',\n 'green label': 'Green',\n 'emerald label': 'Emerald',\n 'teal label': 'Teal',\n 'cyan label': 'Cyan',\n 'sky label': 'Sky',\n 'blue label': 'Blue',\n 'indigo label': 'Indigo',\n 'violet label': 'Violet',\n 'purple label': 'Purple',\n 'fuchsia label': 'Fuchsia',\n 'pink label': 'Pink',\n 'rose label': 'Rose',\n\n 'select a hue label': 'Select color',\n 'hue label': 'Hue',\n 'icon label': 'Icon',\n 'current device tag label': 'This device',\n 'device name placeholder': '{{platform}} on {{os}}',\n 'more options label': 'More options',\n 'disconnect label': 'Go offline',\n 'connect label': 'Go online',\n 'edit device label': 'Edit device name & avatar',\n 'agent heading': 'Agent',\n 'create agent clickwrap':\n 'By creating an agent, you agree to our <tosLink href=\"https://dxos.org/tos\">Terms of Service</tosLink>.',\n 'create agent description':\n 'Creating an agent helps keep your devices and peers in-sync. An agent is like any other device, but since it’s always online your changes will sync even when all your physical devices are asleep.',\n 'create agent label': 'Start an agent',\n 'destroy agent label': 'Shut down agent',\n 'agent device label': 'Your agent',\n 'shell fallback title': 'Shell failed to connect',\n 'creating agent label': 'Starting agent…',\n 'destroying agent label': 'Stopping agent…',\n 'getting agent label': 'Checking agent status…',\n 'agent requested label': 'Agent requested',\n 'agent requested description':\n 'The agent service is creating an agent for you. Once the agent connects, it will display in the devices list.',\n 'authenticating label': 'Authenticating…',\n 'create recovery code label': 'Create recovery code',\n 'choose recover identity label': 'Recover identity',\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as enUS from './locales/en-US';\n\nexport const osTranslations = { 'en-US': enUS };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, {\n type Context,\n createContext,\n type PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { type PublicKey, useClient, ShellDisplay, ShellLayout, type LayoutRequest } from '@dxos/react-client';\nimport type { Space } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Shell } from './Shell';\nimport { MemoryShellRuntime } from './memory-shell-runtime';\n\nexport type ShellContextProps = {\n runtime?: MemoryShellRuntime;\n setDisplay?: (display: ShellDisplay) => void;\n};\n\nexport const ShellContext: Context<ShellContextProps> = createContext<ShellContextProps>({});\n\ntype SetLayout = (layout: ShellLayout, options?: Omit<LayoutRequest, 'layout'>) => void;\n\n/**\n * @deprecated\n */\nexport const useShell = (): { setLayout: SetLayout } => {\n const client = useClient();\n const { runtime, setDisplay } = useContext(ShellContext);\n\n const setLayout: SetLayout = async (layout, options) => {\n if (runtime) {\n if (layout === ShellLayout.DEFAULT) {\n setDisplay?.(ShellDisplay.NONE);\n } else {\n setDisplay?.(ShellDisplay.FULLSCREEN);\n }\n\n runtime.setLayout({ layout, ...options });\n }\n\n await client.shell.open(layout, options);\n };\n\n return {\n setLayout,\n };\n};\n\nexport type ShellProviderProps = PropsWithChildren<{\n space?: Space;\n deviceInvitationCode?: string | null;\n spaceInvitationCode?: string | null;\n onJoinedSpace?: (spaceKey?: PublicKey) => void;\n}>;\n\n/**\n * Renders the DXOS shell and provides a way to set the layout of the shell from the rest of the app.\n *\n * @deprecated\n */\n// TODO(wittjosiah): Remove? Is MemoryShellRuntime needed? We now can use shell with monolithic client.\nexport const ShellProvider = ({\n space,\n deviceInvitationCode,\n spaceInvitationCode,\n onJoinedSpace,\n children,\n}: ShellProviderProps) => {\n const client = useClient();\n\n //\n // Component Shell\n //\n\n const identity = useIdentity();\n const [display, setDisplay] = useState(\n !identity || spaceInvitationCode || deviceInvitationCode ? ShellDisplay.FULLSCREEN : ShellDisplay.NONE,\n );\n\n const shellRuntime = useMemo(() => {\n if (client.config.get('runtime.app.env.DX_VAULT') !== 'false') {\n return;\n }\n\n if (spaceInvitationCode) {\n return new MemoryShellRuntime({\n layout: ShellLayout.JOIN_SPACE,\n invitationCode: spaceInvitationCode,\n });\n }\n\n if (deviceInvitationCode) {\n return new MemoryShellRuntime({\n layout: ShellLayout.INITIALIZE_IDENTITY,\n invitationCode: deviceInvitationCode,\n });\n }\n\n return new MemoryShellRuntime({ layout: identity ? ShellLayout.DEFAULT : ShellLayout.INITIALIZE_IDENTITY });\n }, [client, identity, spaceInvitationCode, deviceInvitationCode]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!space || !shellRuntime) {\n return;\n }\n\n const modifier = event.ctrlKey || event.metaKey;\n if (event.key === '>' && event.shiftKey && modifier) {\n shellRuntime.setLayout({ layout: ShellLayout.SHARE_IDENTITY });\n setDisplay(ShellDisplay.FULLSCREEN);\n } else if (event.key === '.' && modifier) {\n shellRuntime.setLayout({ layout: ShellLayout.SPACE, spaceKey: space.key });\n setDisplay(ShellDisplay.FULLSCREEN);\n }\n },\n [space, shellRuntime],\n );\n\n useEffect(() => {\n if (!shellRuntime) {\n return;\n }\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [shellRuntime, handleKeyDown]);\n\n useEffect(() => {\n if (!shellRuntime) {\n return;\n }\n\n return shellRuntime.contextUpdate.on(({ display, spaceKey }) => {\n if (display) {\n setDisplay(display);\n }\n onJoinedSpace?.(spaceKey);\n });\n }, [shellRuntime]);\n\n return (\n <>\n {shellRuntime && (\n <div className={mx(display === ShellDisplay.NONE ? 'hidden' : '')}>\n <Shell runtime={shellRuntime} />\n </div>\n )}\n\n <ShellContext.Provider value={{ runtime: shellRuntime, setDisplay }}>{children}</ShellContext.Provider>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport {\n ShellLayout,\n type AppContextRequest,\n type InvitationUrlRequest,\n type LayoutRequest,\n type PublicKey,\n type ShellRuntime,\n} from '@dxos/react-client';\n\n// TODO(wittjosiah): Remove?\nexport class MemoryShellRuntime implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n readonly invitationUrlUpdate = new Event<InvitationUrlRequest>();\n readonly contextUpdate = new Event<AppContextRequest>();\n private _layout: ShellLayout;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n private _invitationUrl: string;\n private _deviceInvitationParam: string;\n private _spaceInvitationParam: string;\n\n constructor({\n layout,\n invitationCode,\n spaceKey,\n invitationUrl,\n deviceInvitationParam,\n spaceInvitationParam,\n }: Partial<LayoutRequest> & Partial<AppContextRequest> & Partial<InvitationUrlRequest> = {}) {\n this._layout = layout ?? ShellLayout.DEFAULT;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this._invitationUrl = invitationUrl ?? window.location.origin;\n this._deviceInvitationParam = deviceInvitationParam ?? 'deviceInvitationCode';\n this._spaceInvitationParam = spaceInvitationParam ?? 'spaceInvitationCode';\n }\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n get spaceKey() {\n return this._spaceKey;\n }\n\n get invitationUrl() {\n return this._invitationUrl;\n }\n\n get deviceInvitationParam() {\n return this._deviceInvitationParam;\n }\n\n get spaceInvitationParam() {\n return this._spaceInvitationParam;\n }\n\n setLayout(request: LayoutRequest) {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this.layoutUpdate.emit(request);\n }\n\n setInvitationUrl(request: InvitationUrlRequest) {\n this._invitationUrl = request.invitationUrl;\n this._deviceInvitationParam = request.deviceInvitationParam;\n this._spaceInvitationParam = request.spaceInvitationParam;\n this.invitationUrlUpdate.emit(request);\n }\n\n async setAppContext(context: AppContextRequest) {\n this.contextUpdate.emit(context);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ArrowsClockwise", "Plus", "Power", "React", "Avatar", "Button", "Link", "Tooltip", "Trans", "useTranslation", "descriptionText", "getSize", "mx", "valenceColorText", "AgentConfig", "agentStatus", "validationMessage", "onAgentDestroy", "onAgentCreate", "onAgentRefresh", "t", "useTranslation", "div", "role", "className", "h2", "mx", "descriptionText", "p", "valenceColorText", "aria-describedby", "Avatar", "Root", "Content", "status", "variant", "classNames", "icon", "Label", "Tooltip", "Trigger", "asChild", "Button", "data-testid", "onClick", "span", "Power", "getSize", "Portal", "side", "id", "Plus", "weight", "ArrowsClockwise", "Trans", "i18nKey", "components", "tosLink", "Link", "target", "rel", "React", "useId", "useThemeContext", "useElevationContext", "descriptionText", "descriptionTextPrimary", "mx", "CompoundButton", "children", "description", "before", "after", "variant", "elevation", "propsElevation", "slots", "buttonProps", "labelId", "useId", "descriptionId", "tx", "useThemeContext", "useElevationContext", "styleProps", "textWrap", "buttonClassName", "root", "className", "React", "button", "aria-labelledby", "div", "role", "middle", "mx", "p", "label", "id", "descriptionTextPrimary", "descriptionText", "React", "forwardRef", "generateName", "SpaceMember", "ListItem", "Avatar", "useId", "mx", "keyToFallback", "IdentityListItem", "forwardRef", "identity", "presence", "onClick", "classNames", "props", "forwardedRef", "fallbackValue", "keyToFallback", "identityKey", "labelId", "useId", "displayName", "profile", "generateName", "toHex", "React", "ListItem", "Root", "mx", "data-testid", "ref", "Avatar", "Content", "status", "SpaceMember", "PresenceState", "ONLINE", "hue", "data", "fallback", "emoji", "Label", "React", "useMemo", "useClient", "useMembers", "useTranslation", "List", "descriptionText", "mx", "SpaceMemberList", "spaceKey", "includeSelf", "onSelect", "client", "useClient", "allUnsortedMembers", "useMembers", "members", "useMemo", "sort", "member", "identity", "identityKey", "equals", "halo", "get", "filter", "React", "SpaceMemberListImpl", "t", "useTranslation", "visibleMembers", "length", "List", "classNames", "data-testid", "map", "IdentityListItem", "key", "toHex", "presence", "onClick", "div", "role", "className", "p", "mx", "descriptionText", "CaretRight", "Plus", "React", "Button", "List", "useTranslation", "descriptionText", "getSize", "mx", "DotsThree", "ShareFat", "Power", "FirstAidKit", "React", "forwardRef", "generateName", "Device", "DeviceType", "DeviceKind", "ConnectionState", "ListItem", "Avatar", "useId", "Tag", "useTranslation", "DropdownMenu", "Button", "getSize", "keyToFallback", "DeviceListItem", "forwardRef", "device", "onClickAdd", "onClickEdit", "onClickReset", "onClickRecover", "onClickJoinExisting", "classNames", "connectionState", "onAgentDestroy", "_", "props", "forwardedRef", "t", "useTranslation", "fallbackValue", "keyToFallback", "deviceKey", "labelId", "useId", "displayName", "profile", "os", "platform", "generateName", "toHex", "isCurrent", "kind", "DeviceKind", "CURRENT", "React", "ListItem", "Root", "data-testid", "ref", "Avatar", "Content", "status", "ConnectionState", "OFFLINE", "presence", "Device", "PresenceState", "ONLINE", "hue", "variant", "type", "icon", "DeviceType", "AGENT_MANAGED", "BROWSER", "NATIVE", "AGENT", "includes", "MOBILE", "fallback", "emoji", "Label", "Tag", "color", "DropdownMenu", "Trigger", "asChild", "Button", "span", "className", "DotsThree", "getSize", "Viewport", "Item", "onClick", "ShareFat", "FirstAidKit", "Power", "DeviceList", "devices", "connectionState", "onClickAdd", "onClickEdit", "onClickReset", "onClickRecover", "onClickJoinExisting", "onAgentDestroy", "t", "useTranslation", "React", "div", "role", "className", "h2", "mx", "descriptionText", "length", "List", "map", "device", "DeviceListItem", "key", "deviceKey", "toHex", "Button", "variant", "classNames", "data-testid", "onClick", "getSize", "Plus", "weight", "span", "CaretRight", "X", "formatDistanceToNow", "React", "useCallback", "Invitation", "useInvitationStatus", "Button", "Clipboard", "ListItem", "useTranslation", "Avatar", "useThemeContext", "Tooltip", "focusRing", "getSize", "mx", "hexToEmoji", "React", "useRef", "mx", "AuthCode", "props", "code", "large", "classNames", "l", "length", "left", "slice", "right", "codeRef", "useRef", "handleClick", "current", "selection", "window", "getSelection", "removeAllRanges", "range", "document", "createRange", "selectNodeContents", "addRange", "navigator", "clipboard", "writeText", "React", "span", "className", "mx", "onClick", "ref", "InvitationListItem", "props", "invitation", "invitationStatus", "useInvitationStatus", "React", "InvitationListItemImpl", "avatarProps", "size", "variant", "AvatarStackEffect", "animation", "status", "reverseEffects", "tx", "useThemeContext", "span", "role", "className", "mx", "getSize", "style", "animationDelay", "propsInvitationStatus", "send", "onClickRemove", "createInvitationUrl", "t", "useTranslation", "cancel", "invitationCode", "authCode", "multiUse", "shareable", "isCancellable", "Invitation", "State", "ERROR", "TIMEOUT", "CANCELLED", "indexOf", "showShare", "INIT", "CONNECTING", "CONNECTED", "showAuthCode", "READY_FOR_AUTHENTICATION", "handleClickRemove", "useCallback", "invitationUrl", "invitationId", "get", "invitationHasLifetime", "lifetime", "invitationTimeLeft", "expiry", "formatDistanceToNow", "addSuffix", "undefined", "avatarAnimation", "AUTHENTICATING", "includes", "avatarError", "avatarGreen", "SUCCESS", "avatarStatus", "ListItem", "Root", "id", "classNames", "Heading", "Tooltip", "Avatar", "Trigger", "asChild", "Content", "fallback", "hexToEmoji", "tabIndex", "focusRing", "Portal", "side", "Arrow", "Button", "onClick", "type", "data-testid", "Clipboard", "IconButton", "value", "AuthCode", "code", "X", "React", "useCallback", "useSpace", "useSpaceInvitations", "React", "List", "mx", "InvitationList", "invitations", "send", "invitationProps", "className", "InvitationListItem", "Item", "React", "List", "classNames", "mx", "map", "invitation", "value", "get", "invitationId", "key", "InvitationListContainer", "spaceKey", "createInvitationUrl", "send", "space", "useSpace", "invitations", "useSpaceInvitations", "handleClickRemove", "useCallback", "invitation", "cancel", "React", "InvitationList", "onClickRemove", "CaretDown", "Check", "Placeholder", "useControllableState", "React", "forwardRef", "Button", "DropdownMenu", "useTranslation", "descriptionText", "getSize", "mx", "defaultActions", "noopAction", "label", "description", "icon", "Placeholder", "onClick", "BifurcatedAction", "forwardRef", "props", "forwardedRef", "classNames", "variant", "isFull", "actions", "activeAction", "propsActiveAction", "onChangeActiveAction", "defaultActiveAction", "testId", "rest", "dropdownTestId", "activeActionKey", "Object", "keys", "setActiveAction", "useControllableState", "prop", "onChange", "defaultProp", "t", "useTranslation", "React", "div", "role", "className", "mx", "Button", "ref", "data-testid", "getSize", "span", "DropdownMenu", "Root", "Trigger", "asChild", "CaretDown", "Portal", "Content", "Viewport", "entries", "map", "id", "action", "CheckboxItem", "key", "aria-labelledby", "aria-describedby", "checked", "onCheckedChange", "p", "descriptionText", "ItemIndicator", "Check", "weight", "Arrow", "Action", "children", "React", "forwardRef", "mx", "Actions", "forwardRef", "classNames", "children", "props", "forwardedRef", "React", "div", "className", "mx", "Array", "isArray", "length", "ref", "X", "React", "Button", "useTranslation", "getSize", "mx", "CloseButton", "onDone", "props", "t", "useTranslation", "React", "Button", "variant", "classNames", "mx", "onClick", "X", "weight", "className", "getSize", "span", "React", "mx", "getSize", "Emoji", "text", "className", "size", "React", "div", "role", "mx", "getSize", "svg", "viewBox", "width", "height", "x", "y", "textAnchor", "dominantBaseline", "baselineShift", "fontSize", "Centered", "props", "children", "React", "forwardRef", "descriptionText", "mx", "Heading", "forwardRef", "titleId", "title", "titleSrOnly", "children", "corner", "forwardedRef", "React", "div", "role", "className", "ref", "h1", "id", "mx", "descriptionText", "span", "React", "descriptionText", "mx", "Label", "props", "children", "React", "span", "className", "mx", "descriptionText", "React", "Input", "UiInput", "Input", "validationMessage", "label", "props", "React", "UiInput", "Root", "Label", "TextInput", "classNames", "DescriptionAndValidation", "Validation", "React", "forwardRef", "mx", "StepHeading", "forwardRef", "children", "className", "props", "forwardedRef", "React", "h2", "mx", "ref", "useFocusFinders", "createContextScope", "useControllableState", "React", "forwardRef", "useEffect", "useForwardedRef", "mx", "VIEWPORT_NAME", "VIEWS_NAME", "VIEW_NAME", "createViewportContext", "createViewportScope", "createContextScope", "ViewportProvider", "useViewportContext", "ViewportRoot", "__viewportScope", "classNames", "children", "defaultActiveView", "activeView", "propsActiveView", "focusManaged", "onActiveViewChange", "props", "setActiveView", "useControllableState", "prop", "defaultProp", "onChange", "React", "scope", "div", "role", "aria-live", "className", "mx", "displayName", "ViewportViews", "size", "inlineSize", "Math", "ceil", "length", "style", "ViewportView", "forwardRef", "id", "forwardedRef", "isActive", "ref", "useForwardedRef", "findFirstFocusable", "useFocusFinders", "useEffect", "document", "body", "hasAttribute", "current", "focus", "section", "Viewport", "Root", "Views", "View", "React", "forwardRef", "Avatar", "useId", "mx", "humanize", "keyToEmoji", "SpaceListItem", "forwardRef", "space", "onClick", "ref", "fallbackValue", "keyToEmoji", "key", "labelId", "useId", "displayName", "properties", "name", "humanize", "toHex", "React", "li", "className", "mx", "data-testid", "Avatar", "Root", "Content", "fallback", "Label", "classNames", "React", "Clipboard", "Dialog", "useId", "IdentificationCard", "Plugs", "PlugsConnected", "React", "useEffect", "useMemo", "useState", "debounce", "generateName", "log", "useClient", "useIdentity", "useDevices", "useHaloInvitations", "useInvitationStatus", "useNetworkStatus", "ConnectionState", "Avatar", "Clipboard", "Input", "Toolbar", "Tooltip", "useId", "useTranslation", "EmojiPickerToolbarButton", "HuePicker", "errorText", "getSize", "hexToEmoji", "hexToHue", "keyToFallback", "useMachine", "assign", "createMachine", "log", "identityMachine", "id", "predictableActionArguments", "context", "identity", "identitySubscribable", "initial", "invoke", "src", "states", "unknown", "always", "cond", "target", "actions", "choosingAction", "managingDeviceInvitation", "confirmingResetStorage", "confirmingRecover", "confirmingJoinNewIdentity", "on", "unchooseAction", "deselectInvitation", "selectInvitation", "chooseJoinNewIdentity", "chooseRecoverIdentity", "chooseResetStorage", "guards", "initiallyManagingDeviceInvitation", "initialDisposition", "_event", "setIdentity", "event", "setInvitation", "invitation", "unsetInvitation", "undefined", "useIdentityMachine", "client", "options", "halo", "get", "map", "type", "React", "log", "useClient", "useHaloInvitations", "DeviceType", "Invitation", "InvitationEncoder", "IdentityActionChooser", "props", "send", "client", "useClient", "invitations", "useHaloInvitations", "createInvitation", "forEach", "invitation", "cancel", "halo", "share", "config", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "subscription", "subscribe", "invitationCode", "InvitationEncoder", "encode", "state", "Invitation", "State", "CONNECTING", "log", "info", "JSON", "stringify", "authCode", "unsubscribe", "type", "isProduction", "React", "IdentityActionChooserImpl", "onClickAdd", "onClickJoinExisting", "onClickRecover", "undefined", "onClickReset", "devices", "connectionState", "agentHostingEnabled", "agentProps", "edgeDeviceAvailable", "find", "device", "profile", "DeviceType", "AGENT_MANAGED", "os", "toUpperCase", "div", "role", "className", "DeviceList", "agentStatus", "onAgentDestroy", "AgentConfig", "React", "useState", "log", "useClipboard", "useTranslation", "EmojiPickerBlock", "HuePicker", "hexToEmoji", "hexToHue", "useClient", "useEffect", "useState", "invariant", "log", "QueryAgentStatusResponse", "EdgeReplicationSetting", "useClient", "useEdgeAgentHandlers", "identity", "validationMessage", "setValidationMessage", "lastReceivedStatus", "setLastReceivedStatus", "AgentStatus", "UNKNOWN", "agentStatus", "setAgentStatus", "client", "agentHostingEnabled", "Boolean", "config", "values", "runtime", "edgeFeatures", "agents", "handleStatus", "status", "ACTIVE", "INACTIVE", "NOT_FOUND", "stream", "services", "EdgeAgentService", "queryAgentStatus", "subscribe", "close", "catch", "onAgentCreate", "service", "createAgent", "timeout", "Promise", "all", "spaces", "get", "map", "space", "internal", "setEdgeReplicationPreference", "ENABLED", "err", "message", "onAgentDestroy", "onAgentRefresh", "useCallback", "useEffect", "useState", "invariant", "log", "useClient", "useAgentHostingClient", "Invitation", "InvitationEncoder", "useKubeAgentHandlers", "invitations", "identity", "validationMessage", "setValidationMessage", "agentStatus", "setAgentStatus", "agentHostingProviderClient", "client", "updateAgentStatus", "agentId", "getAgent", "identityKey", "truncate", "err", "message", "createAgent", "invitationCode", "destroyAgent", "handleAgentCreate", "invitation", "encode", "state", "State", "CONNECTING", "info", "JSON", "stringify", "authCode", "onAgentCreate", "forEach", "cancel", "halo", "share", "type", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "NONE", "multiUse", "subscribe", "onAgentRefresh", "onAgentDestroy", "agentHostingEnabled", "useAgentHandlers", "params", "client", "useClient", "config", "values", "runtime", "edgeFeatures", "agents", "useEdgeAgentHandlers", "useKubeAgentHandlers", "Check", "X", "React", "useMemo", "QR", "Clipboard", "useId", "useTranslation", "descriptionText", "getSize", "mx", "hexToEmoji", "Invitation", "invitationStatusValue", "Map", "Invitation", "State", "ERROR", "TIMEOUT", "CANCELLED", "INIT", "CONNECTING", "CONNECTED", "READY_FOR_AUTHENTICATION", "AUTHENTICATING", "SUCCESS", "InvitationManagerView", "children", "props", "React", "Viewport", "View", "classNames", "InvitationManager", "invitationUrl", "active", "send", "status", "multiUse", "authCode", "id", "t", "useTranslation", "qrLabel", "useId", "statusValue", "invitationStatusValue", "get", "showAuthCode", "emoji", "hexToEmoji", "activeView", "useMemo", "Root", "Views", "p", "className", "div", "role", "mx", "descriptionText", "QR", "rounding", "backgroundColor", "color", "aria-labelledby", "errorCorrectionLevel", "cutout", "Centered", "Emoji", "text", "span", "Clipboard", "Button", "variant", "value", "Label", "AuthCode", "code", "large", "Check", "getSize", "X", "Actions", "Action", "disabled", "onClick", "type", "Warning", "React", "useState", "log", "Message", "useTranslation", "getSize", "mx", "ConfirmReset", "active", "onCancel", "onConfirm", "mode", "t", "useTranslation", "validationMessage", "setValidationMessage", "useState", "pending", "setPending", "processReset", "then", "error", "log", "catch", "React", "ConfirmResetImpl", "disabled", "confirmationValue", "inputValue", "setInputValue", "testIdAffix", "div", "role", "className", "Message", "Root", "valence", "Title", "Warning", "mx", "getSize", "Body", "Input", "label", "StepHeading", "data-testid", "placeholder", "onChange", "target", "value", "Actions", "Action", "onClick", "variant", "viewStyles", "getHueValue", "identity", "profile", "data", "hue", "hexToHue", "identityKey", "toHex", "getEmojiValue", "emoji", "hexToEmoji", "IdentityHeading", "titleId", "title", "onDone", "onUpdateProfile", "connectionState", "onChangeConnectionState", "onManageCredentials", "fallbackValue", "keyToFallback", "t", "useTranslation", "displayName", "setDisplayNameDirectly", "useState", "setEmojiDirectly", "setHueDirectly", "updateDisplayName", "useMemo", "debounce", "nextDisplayName", "setDisplayName", "setEmoji", "nextEmoji", "setHue", "nextHue", "isConnected", "ConnectionState", "ONLINE", "React", "Heading", "corner", "CloseButton", "Avatar", "Root", "Toolbar", "classNames", "Content", "size", "variant", "status", "fallback", "Label", "data-testid", "generateName", "Input", "srOnly", "TextInput", "placeholder", "value", "onChange", "target", "EmojiPickerToolbarButton", "onChangeEmoji", "HuePicker", "onReset", "undefined", "rootVariant", "Clipboard", "IconButton", "label", "did", "Tooltip", "Trigger", "asChild", "Button", "onClick", "span", "className", "IdentificationCard", "getSize", "Portal", "side", "Arrow", "errorText", "OFFLINE", "PlugsConnected", "Plugs", "IdentityPanelImpl", "props", "activeView", "onResetStorage", "onRecover", "onJoinNewIdentity", "IdentityActionChooser", "IdentityActionChooserComponent", "InvitationManager", "InvitationManagerComponent", "rest", "onCancelReset", "send", "hideRecover", "agentStatus", "Viewport", "Views", "View", "id", "active", "invitationUrl", "createInvitationUrl", "invitationCode", "ConfirmReset", "mode", "onConfirm", "onCancel", "IdentityPanelWithInvitationImpl", "invitation", "invitationStatus", "useInvitationStatus", "IdentityPanel", "propsTitleId", "code", "initialDisposition", "useId", "client", "useClient", "devices", "useDevices", "useIdentity", "invitations", "useHaloInvitations", "agentProps", "useAgentHandlers", "log", "error", "identityState", "identitySend", "identityService", "useIdentityMachine", "context", "swarm", "useNetworkStatus", "handleChangeConnectionState", "nextState", "mesh", "updateConfig", "useEffect", "subscription", "subscribe", "state", "unsubscribe", "matches", "type", "halo", "updateProfile", "implProps", "React", "useCallback", "useEffect", "useMemo", "log", "useClient", "useMulticastObservable", "useIdentity", "useId", "useThemeContext", "X", "React", "cloneElement", "forwardRef", "Button", "useTranslation", "descriptionText", "getSize", "mx", "JoinHeading", "forwardRef", "mode", "titleId", "exitActionParent", "onExit", "forwardedRef", "t", "useTranslation", "exitButton", "React", "Button", "variant", "onClick", "classNames", "mx", "descriptionText", "data-testid", "X", "weight", "className", "getSize", "span", "Heading", "ref", "title", "titleSrOnly", "corner", "cloneElement", "useMachine", "useCallback", "assign", "createMachine", "log", "AlreadyJoinedError", "Invitation", "InvitationEncoder", "getInvitationSubscribable", "Kind", "invitation", "subscribe", "next", "onError", "complete", "state", "State", "CONNECTING", "type", "CONNECTED", "READY_FOR_AUTHENTICATION", "AUTHENTICATING", "SUCCESS", "CANCELLED", "warn", "reason", "TIMEOUT", "error", "get", "acceptingInvitationTemplate", "successTarget", "config", "initial", "states", "always", "cond", "mode", "target", "context", "toLowerCase", "unredeemedCode", "actions", "invoke", "src", "invitationSubscribable", "spaceKey", "space", "toHex", "succeededKeys", "has", "on", "event", "failReason", "code", "joinMachine", "id", "predictableActionArguments", "initialDisposition", "identity", "halo", "unknown", "choosingIdentity", "unknownAuthMethod", "choosingAuthMethod", "recoveringIdentity", "creatingIdentity", "acceptingHaloInvitation", "confirmingAddedIdentity", "recoverIdentity", "createIdentity", "acceptHaloInvitation", "addIdentity", "selectIdentity", "deselectAuthMethod", "resettingIdentity", "acceptingSpaceInvitation", "finishingJoiningSpace", "finishingJoiningHalo", "resetIdentity", "guards", "existingIdentity", "_event", "noSelectedIdentity", "initiallyAcceptingHaloInvitation", "initiallyRecoveringIdentity", "hasHaloUnredeemedCode", "noSpaceInvitation", "setIdentity", "unsetIdentity", "resetInvitation", "invitationObservable", "cancel", "undefined", "setInvitation", "includes", "haloInvitation", "spaceInvitation", "defaultCodeFromUrl", "invitationType", "text", "searchParams", "URLSearchParams", "substring", "lastIndexOf", "err", "catch", "useJoinMachine", "client", "options", "redeemHaloInvitationCode", "decode", "join", "redeemSpaceInvitationCode", "spaces", "invalidateHaloInvitationCode", "onInvalidateInvitationCode", "invalidateSpaceInvitationCode", "CaretRight", "Plus", "QrCode", "Textbox", "React", "useTranslation", "getSize", "AdditionMethodChooser", "viewStateProps", "disabled", "active", "send", "t", "useTranslation", "sharedButtonProps", "after", "React", "CaretRight", "className", "getSize", "weight", "slots", "label", "StepHeading", "div", "role", "CompoundButton", "description", "before", "Plus", "onClick", "type", "data-autofocus", "data-testid", "QrCode", "Textbox", "React", "cloneElement", "generateName", "Avatar", "useId", "useTranslation", "mx", "hexToFallback", "IdentityAdded", "props", "mode", "addedIdentity", "active", "send", "onDone", "doneActionParent", "disabled", "t", "useTranslation", "addedIdentityHex", "identityKey", "toHex", "fallbackValue", "hexToFallback", "labelId", "useId", "displayName", "profile", "generateName", "doneAction", "React", "Action", "onClick", "data-autofocus", "data-testid", "span", "StepHeading", "div", "role", "className", "Avatar", "Root", "Content", "status", "hue", "data", "fallback", "emoji", "Label", "classNames", "mx", "Actions", "cloneElement", "variant", "type", "identity", "React", "useCallback", "useState", "log", "useClient", "useTranslation", "IdentityInput", "props", "send", "method", "isRecover", "client", "useClient", "t", "useTranslation", "validationMessage", "setValidationMessage", "useState", "handleConfirm", "value", "halo", "recoverIdentity", "recoveryCode", "then", "identity", "type", "error", "log", "catch", "createIdentity", "displayName", "React", "IdentityInputImpl", "onConfirm", "active", "inputValue", "setInputValue", "pending", "setPending", "disabled", "useCallback", "div", "role", "className", "Input", "label", "StepHeading", "data-testid", "placeholder", "onChange", "target", "Actions", "Action", "variant", "trim", "length", "onClick", "React", "cloneElement", "useTranslation", "React", "useState", "useEffect", "cloneElement", "log", "useTranslation", "invitationCodeFromUrl", "text", "searchParams", "URLSearchParams", "substring", "lastIndexOf", "invitation", "get", "err", "log", "catch", "InvitationInput", "props", "Kind", "active", "send", "unredeemedCode", "onExit", "exitActionParent", "onDone", "doneActionParent", "succeededKeys", "disabled", "t", "useTranslation", "inputValue", "setInputValue", "useState", "useEffect", "handleNext", "trim", "length", "type", "code", "exitAction", "React", "Action", "variant", "onClick", "data-testid", "div", "role", "className", "Input", "label", "StepHeading", "placeholder", "value", "onChange", "target", "data-autofocus", "toLowerCase", "onKeyUp", "key", "Actions", "cloneElement", "React", "useTranslation", "descriptionText", "InvitationActions", "invitationState", "onInvitationCancel", "active", "send", "Kind", "failReason", "t", "useTranslation", "React", "StepHeading", "className", "descriptionText", "div", "role", "Actions", "Action", "disabled", "onClick", "type", "data-testid", "classNames", "InvitationRescuer", "props", "React", "useState", "Invitation", "Input", "useTranslation", "descriptionText", "hexToEmoji", "pinLength", "InvitationAuthenticator", "failed", "Kind", "authMethod", "active", "pending", "invitationId", "onInvitationAuthenticate", "onInvitationCancel", "disabled", "t", "useTranslation", "invitationType", "toLowerCase", "authCode", "setAuthCode", "useState", "onChange", "target", "value", "length", "document", "querySelector", "focus", "React", "div", "role", "className", "Input", "Root", "validationValence", "Label", "asChild", "Invitation", "AuthMethod", "SHARED_SECRET", "StepHeading", "descriptionText", "PinInput", "inputMode", "autoComplete", "pattern", "DescriptionAndValidation", "classNames", "Validation", "Emoji", "text", "hexToEmoji", "Actions", "Action", "variant", "onClick", "data-testid", "data-autofocus-pinlength", "stepStyles", "Invitation", "inactiveBgColor", "activeBgColor", "successBgColor", "errorBgColor", "cancelledBgColor", "inactiveTextColor", "activeTextColor", "successTextColor", "errorTextColor", "cancelledTextColor", "inactiveStrokeColor", "activeStrokeColor", "successStrokeColor", "errorStrokeColor", "cancelledStrokeColor", "resolvedStrokeColor", "status", "Invitation", "State", "ERROR", "CANCELLED", "TIMEOUT", "resolvedBgColor", "resolvedTextColor", "JoinPanelImpl", "props", "titleId", "send", "activeView", "failed", "mode", "unredeemedCodes", "invitationIds", "invitationStates", "invitationAuthMethods", "succeededKeys", "failReasons", "onExit", "onHaloDone", "exitActionParent", "doneActionParent", "onHaloInvitationCancel", "onSpaceInvitationCancel", "onHaloInvitationAuthenticate", "onSpaceInvitationAuthenticate", "onCancelResetStorage", "onConfirmResetStorage", "IdentityInput", "IdentityInputComponent", "ConfirmReset", "ConfirmResetComponent", "React", "JoinHeading", "Viewport", "Root", "focusManaged", "Views", "View", "classNames", "stepStyles", "id", "AdditionMethodChooser", "active", "onCancel", "onConfirm", "method", "InvitationInput", "Kind", "Halo", "unredeemedCode", "InvitationRescuer", "invitationState", "onInvitationCancel", "failReason", "InvitationAuthenticator", "invitationId", "authMethod", "onInvitationAuthenticate", "has", "IdentityAdded", "onDone", "Space", "JoinPanel", "propsTitleId", "initialDisposition", "initialInvitationCode", "propsOnDone", "client", "useClient", "identity", "useIdentity", "hasIosKeyboard", "useThemeContext", "useId", "joinState", "joinSend", "joinService", "useJoinMachine", "context", "useEffect", "subscription", "subscribe", "state", "log", "unsubscribe", "stateStack", "configuration", "split", "innermostState", "length", "autoFocusValue", "$nextAutofocus", "document", "querySelector", "hasAttribute", "focus", "value", "useMemo", "matches", "choosingIdentity", "acceptingHaloInvitation", "acceptingRedeemedHaloInvitation", "some", "acceptingSpaceInvitation", "acceptingRedeemedSpaceInvitation", "onSpaceDone", "result", "Set", "add", "halo", "space", "spaces", "useMulticastObservable", "map", "key", "toHex", "undefined", "invitationObservable", "get", "useCallback", "identityKey", "invitation", "swarmKey", "spaceKey", "target", "reset", "then", "type", "pending", "str", "includes", "cancel", "authCode", "authenticate", "Planet", "React", "useEffect", "useMemo", "log", "useInvitationStatus", "useId", "useTranslation", "useMachine", "assign", "createMachine", "log", "spaceMachine", "id", "predictableActionArguments", "context", "space", "initial", "states", "managingSpace", "managingSpaceInvitation", "on", "deselectInvitation", "target", "actions", "selectInvitation", "setInvitation", "invitation", "event", "unsetInvitation", "undefined", "useSpaceMachine", "options", "Placeholder", "UserPlus", "UsersThree", "React", "useCallback", "useState", "log", "useConfig", "useSpaceInvitations", "Invitation", "InvitationEncoder", "ScrollArea", "useTranslation", "descriptionText", "mx", "activeActionKey", "handleInvitationEvent", "invitation", "subscription", "invitationCode", "InvitationEncoder", "encode", "state", "Invitation", "State", "CONNECTING", "log", "info", "JSON", "stringify", "authCode", "unsubscribe", "SpaceManager", "props", "space", "target", "t", "useTranslation", "config", "useConfig", "invitations", "useSpaceInvitations", "key", "inviteActions", "inviteOne", "label", "description", "icon", "UserPlus", "testId", "onClick", "useCallback", "share", "type", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "SHARED_SECRET", "multiUse", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "subscribe", "inviteMany", "UsersThree", "DELEGATED", "KNOWN_PUBLIC_KEY", "React", "SpaceManagerImpl", "headingFragment", "active", "createInvitationUrl", "send", "propsInviteActions", "showInactiveInvitations", "SpaceMemberList", "SpaceMemberListComponent", "InvitationList", "InvitationListComponent", "noopInvite", "Placeholder", "activeAction", "setInternalActiveAction", "useState", "localStorage", "getItem", "setActiveAction", "nextAction", "setItem", "visibleInvitations", "filter", "CANCELLED", "includes", "get", "ScrollArea", "Root", "classNames", "Viewport", "length", "h3", "className", "mx", "descriptionText", "onClickRemove", "cancel", "spaceKey", "includeSelf", "Scrollbar", "orientation", "Thumb", "Actions", "BifurcatedAction", "disabled", "actions", "onChangeActiveAction", "data-testid", "SpacePanelHeading", "titleId", "space", "onDone", "t", "useTranslation", "name", "properties", "React", "Heading", "title", "corner", "CloseButton", "data-testid", "div", "role", "className", "Planet", "size", "weight", "key", "truncate", "SpacePanelImpl", "props", "activeView", "hideHeading", "target", "SpaceManager", "SpaceManagerComponent", "InvitationManager", "InvitationManagerComponent", "rest", "Viewport", "Root", "Views", "View", "id", "classNames", "stepStyles", "active", "invitationUrl", "SpacePanelWithInvitationImpl", "invitation", "invitationStatus", "useInvitationStatus", "createInvitationUrl", "invitationCode", "SpacePanel", "propsTitleId", "code", "useId", "spaceState", "spaceSend", "spaceService", "useSpaceMachine", "context", "useEffect", "subscription", "subscribe", "state", "log", "unsubscribe", "useMemo", "matches", "implProps", "send", "React", "Status", "useTranslation", "StatusPanel", "titleId", "t", "useTranslation", "React", "div", "className", "p", "id", "Status", "indeterminate", "IdentityDialog", "props", "titleId", "useId", "title", "React", "Dialog", "Root", "defaultOpen", "onOpenChange", "open", "onDone", "Portal", "Overlay", "Content", "aria-labelledby", "onOpenAutoFocus", "ev", "preventDefault", "Clipboard", "Provider", "IdentityPanel", "doneActionParent", "Close", "asChild", "React", "AlertDialog", "useId", "useVisualViewport", "JoinDialog", "joinPanelProps", "titleId", "useId", "height", "useVisualViewport", "React", "AlertDialog", "Root", "defaultOpen", "onOpenChange", "open", "onExit", "onDone", "Portal", "Overlay", "classNames", "style", "blockSize", "Content", "aria-labelledby", "JoinPanel", "exitActionParent", "Cancel", "asChild", "doneActionParent", "Action", "React", "StrictMode", "createRoot", "DEFAULT_CLIENT_CHANNEL", "DEFAULT_SHELL_CHANNEL", "AgentHostingProvider", "ClientProvider", "ClientServicesProxy", "Config", "ShellDisplay", "Button", "Clipboard", "Dialog", "ThemeProvider", "Tooltip", "useTranslation", "defaultTx", "createIFramePort", "React", "useEffect", "useState", "log", "useClient", "ShellDisplay", "ShellLayout", "useSpace", "React", "Clipboard", "Dialog", "useId", "SpaceDialog", "spacePanelProps", "titleId", "useId", "React", "Dialog", "Root", "defaultOpen", "onOpenChange", "open", "onDone", "Portal", "Overlay", "Content", "aria-labelledby", "Clipboard", "Provider", "SpacePanel", "doneActionParent", "Close", "asChild", "React", "AlertDialog", "useId", "StatusDialog", "titleId", "useId", "React", "AlertDialog", "Root", "open", "Portal", "Overlay", "Content", "aria-labelledby", "StatusPanel", "blurActiveElement", "document", "activeElement", "blur", "Shell", "runtime", "layout", "invitationCode", "spaceKey", "spaceId", "target", "setLayout", "useState", "invitationUrl", "deviceInvitationParam", "spaceInvitationParam", "setInvitationUrl", "client", "useClient", "space", "useSpace", "createDeviceInvitationUrl", "baseUrl", "URL", "searchParams", "set", "toString", "createSpaceInvitationUrl", "useEffect", "unsubscribeLayout", "layoutUpdate", "on", "request", "unsubscribeInvitationUrl", "invitationUrlUpdate", "ShellLayout", "SPACE", "log", "warn", "timeout", "setTimeout", "setAppContext", "display", "ShellDisplay", "NONE", "DEFAULT", "clearTimeout", "STATUS", "React", "StatusDialog", "INITIALIZE_IDENTITY", "INITIALIZE_IDENTITY_FROM_INVITATION", "INITIALIZE_IDENTITY_FROM_RECOVERY", "JoinDialog", "mode", "initialDisposition", "initialInvitationCode", "onCancelResetStorage", "IDENTITY", "onDone", "SHARE_IDENTITY", "EDIT_PROFILE", "IdentityDialog", "createInvitationUrl", "onResetStorage", "reset", "onRecover", "onJoinNewIdentity", "SpaceDialog", "JOIN_SPACE", "result", "undefined", "onExit", "Event", "appServiceBundle", "shellServiceBundle", "invariant", "ShellLayout", "createProtoRpcPeer", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "invitationUrlUpdate", "_layout", "DEFAULT", "_invitationUrl", "window", "location", "origin", "undefined", "_deviceInvitationParam", "_spaceInvitationParam", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "spaceId", "_spaceId", "invitationUrl", "deviceInvitationParam", "spaceInvitationParam", "setLayout", "emit", "setInvitationUrl", "setAppContext", "context", "_appRpc", "rpc", "AppService", "setContext", "open", "requested", "exposed", "handlers", "ShellService", "request", "port", "close", "os", "osTranslations", "enUS", "runShell", "config", "Config", "runtime", "ShellRuntimeImpl", "createIFramePort", "channel", "DEFAULT_SHELL_CHANNEL", "open", "services", "ClientServicesProxy", "DEFAULT_CLIENT_CHANNEL", "createRoot", "document", "getElementById", "render", "React", "StrictMode", "ThemeProvider", "tx", "defaultTx", "resourceExtensions", "osTranslations", "ClientProvider", "noBanner", "Clipboard", "Provider", "Tooltip", "AgentHostingProvider", "Shell", "Fallback", "onClose", "setAppContext", "display", "ShellDisplay", "NONE", "t", "useTranslation", "Dialog", "Root", "modal", "onOpenChange", "Overlay", "Content", "Title", "Close", "asChild", "onClick", "Button", "variant", "React", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "useState", "useClient", "ShellDisplay", "ShellLayout", "useIdentity", "mx", "Event", "ShellLayout", "MemoryShellRuntime", "constructor", "layout", "invitationCode", "spaceKey", "invitationUrl", "deviceInvitationParam", "spaceInvitationParam", "layoutUpdate", "Event", "invitationUrlUpdate", "contextUpdate", "_layout", "ShellLayout", "DEFAULT", "_invitationCode", "_spaceKey", "_invitationUrl", "window", "location", "origin", "_deviceInvitationParam", "_spaceInvitationParam", "setLayout", "request", "emit", "setInvitationUrl", "setAppContext", "context", "ShellContext", "createContext", "useShell", "client", "useClient", "runtime", "setDisplay", "useContext", "setLayout", "layout", "options", "ShellLayout", "DEFAULT", "ShellDisplay", "NONE", "FULLSCREEN", "shell", "open", "ShellProvider", "space", "deviceInvitationCode", "spaceInvitationCode", "onJoinedSpace", "children", "identity", "useIdentity", "display", "useState", "shellRuntime", "useMemo", "config", "get", "MemoryShellRuntime", "JOIN_SPACE", "invitationCode", "INITIALIZE_IDENTITY", "handleKeyDown", "useCallback", "event", "modifier", "ctrlKey", "metaKey", "key", "shiftKey", "SHARE_IDENTITY", "SPACE", "spaceKey", "useEffect", "window", "addEventListener", "removeEventListener", "contextUpdate", "on", "React", "div", "className", "mx", "Shell", "Provider", "value"]
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowsClockwise, Plus } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { Avatar, Button, IconButton, Link, Tooltip, Trans, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx, valenceColorText } from '@dxos/react-ui-theme';\n\nimport { type AgentFormProps } from './DeviceList';\n\nexport const AgentConfig = ({\n agentStatus,\n validationMessage,\n onAgentDestroy,\n onAgentCreate,\n onAgentRefresh,\n}: Omit<AgentFormProps, 'agentHostingEnabled'>) => {\n const { t } = useTranslation('os');\n return (\n <div role='none' className='p-1'>\n <h2 className={mx(descriptionText, 'text-center mbs-2')}>{t('agent heading')}</h2>\n {validationMessage && (\n <p role='alert' className={mx(valenceColorText('error'), 'mlb-2')}>\n {validationMessage}\n </p>\n )}\n {agentStatus === 'created' ||\n agentStatus === 'creating' ||\n agentStatus === 'getting' ||\n agentStatus === 'destroying' ? (\n <>\n <div\n role='group'\n className='mlb-2 flex gap-2 items-center'\n aria-describedby='devices-panel.create-agent.description'\n >\n <Avatar.Root>\n <Avatar.Content\n status={agentStatus === 'created' ? 'warning' : 'inactive'}\n variant='square'\n classNames={['place-self-center', agentStatus !== 'created' && 'opactiy-50']}\n icon='ph--database--duotone'\n />\n <Avatar.Label classNames='flex-1 text-sm truncate'>\n {t(\n agentStatus === 'created'\n ? 'agent requested label'\n : agentStatus === 'creating'\n ? 'creating agent label'\n : agentStatus === 'destroying'\n ? 'destroying agent label'\n : 'getting agent label',\n )}\n </Avatar.Label>\n </Avatar.Root>\n {agentStatus === 'created' && (\n <Tooltip.Trigger asChild content={t('destroy agent label')} side='bottom'>\n <IconButton\n iconOnly\n variant='ghost'\n classNames='pli-0 is-[--rail-action] bs-[--rail-action]'\n data-testid='agent.destroy'\n label={t('destroy agent label')}\n icon='ph--power--regular'\n size={5}\n onClick={onAgentDestroy}\n />\n </Tooltip.Trigger>\n )}\n </div>\n {agentStatus === 'created' && (\n <p id='devices-panel.create-agent.description' className={mx(descriptionText, 'mlb-2')}>\n {t('agent requested description')}\n </p>\n )}\n </>\n ) : (\n <>\n <Button\n variant='ghost'\n classNames='mlb-2 is-full justify-start gap-2 pis-0 pie-3'\n data-testid={agentStatus === 'creatable' ? 'devices-panel.create-agent' : 'devices-panel.agent-error'}\n onClick={agentStatus === 'creatable' ? onAgentCreate : onAgentRefresh}\n aria-describedby='devices-panel.create-agent.description'\n >\n <div role='img' className={mx(getSize(8), 'm-1 rounded-sm bg-input grid place-items-center')}>\n {agentStatus === 'creatable' ? (\n <Plus weight='light' className={getSize(6)} />\n ) : (\n <ArrowsClockwise weight='light' className={getSize(6)} />\n )}\n </div>\n <span className='grow font-medium text-start'>\n {t(agentStatus === 'creatable' ? 'create agent label' : '')}\n </span>\n </Button>\n {agentStatus === 'creatable' && (\n <div role='none' className='space-y-2' id='devices-panel.create-agent.description'>\n <p className={descriptionText}>\n <Trans\n {...{\n t,\n i18nKey: 'create agent clickwrap',\n components: {\n tosLink: <Link target='_blank' rel='noreferrer' />,\n },\n }}\n />\n </p>\n <p className={descriptionText}>{t('create agent description')}</p>\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, type ReactNode } from 'react';\n\nimport { useId, useThemeContext, type ButtonProps, useElevationContext } from '@dxos/react-ui';\nimport { descriptionText, descriptionTextPrimary, mx } from '@dxos/react-ui-theme';\n\nexport interface CompoundButtonSlots {\n root: ComponentPropsWithoutRef<'button'>;\n middle: ComponentPropsWithoutRef<'div'>;\n label: ComponentPropsWithoutRef<'p'>;\n description: ComponentPropsWithoutRef<'p'>;\n}\n\nexport interface CompoundButtonProps extends ButtonProps {\n children?: ReactNode;\n description?: ReactNode;\n before?: ReactNode;\n after?: ReactNode;\n slots?: Partial<CompoundButtonSlots>;\n}\n\nexport const CompoundButton = ({\n children,\n description,\n before,\n after,\n variant = 'default',\n elevation: propsElevation,\n slots = {},\n ...buttonProps\n}: Omit<CompoundButtonProps, 'density'>) => {\n const labelId = useId('compoundButton-label');\n const descriptionId = useId('compoundButton-description');\n const { tx } = useThemeContext();\n const elevation = useElevationContext(propsElevation);\n const styleProps = { ...buttonProps, variant, elevation, textWrap: true };\n const buttonClassName = tx(\n 'button.root',\n 'button button--compound',\n styleProps,\n 'flex items-center gap-4 plb-2.5',\n slots.root?.className,\n );\n return (\n <button\n {...buttonProps}\n {...slots.root}\n className={buttonClassName}\n aria-labelledby={labelId}\n {...(description && { 'aria-describedby': descriptionId })}\n >\n {before && (\n <div role='none' className='grow-0'>\n {before}\n </div>\n )}\n <div\n role='none'\n {...slots.middle}\n className={mx('grow whitespace-normal flex flex-col gap-1 text-left', slots.middle?.className)}\n >\n <p {...slots.label} id={labelId} className={mx(slots.label?.className)}>\n {children}\n </p>\n {description && (\n <p\n id={descriptionId}\n {...slots.description}\n className={mx(\n 'text-xs mbe-1 font-normal',\n variant === 'primary' ? descriptionTextPrimary : descriptionText,\n slots.description?.className,\n )}\n >\n {description}\n </p>\n )}\n </div>\n {after && (\n <div role='none' className='grow-0'>\n {after}\n </div>\n )}\n </button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport { SpaceMember } from '@dxos/react-client/echo';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { ListItem, Avatar, useId, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { keyToFallback } from '@dxos/util';\n\ntype IdentityListItemProps = {\n identity: Identity;\n presence?: SpaceMember['presence'];\n onClick?: () => void;\n};\n\nexport const IdentityListItem = forwardRef<\n HTMLLIElement,\n ThemedClassName<ComponentPropsWithoutRef<'li'>> & IdentityListItemProps\n>(({ identity, presence, onClick, classNames, ...props }, forwardedRef) => {\n const fallbackValue = keyToFallback(identity.identityKey);\n const labelId = useId('identityListItem__label');\n const displayName = identity.profile?.displayName ?? generateName(identity.identityKey.toHex());\n return (\n <ListItem.Root\n {...props}\n classNames={mx('flex gap-2 pis-3 pie-1 items-center', onClick && 'cursor-pointer', classNames)}\n onClick={() => onClick?.()}\n data-testid='identity-list-item'\n labelId={labelId}\n ref={forwardedRef}\n >\n <Avatar.Root labelId={labelId}>\n <Avatar.Content\n status={presence === SpaceMember.PresenceState.ONLINE ? 'active' : 'inactive'}\n hue={identity.profile?.data?.hue || fallbackValue.hue}\n fallback={identity.profile?.data?.emoji || fallbackValue.emoji}\n classNames='place-self-center'\n />\n <Avatar.Label classNames='text-sm truncate pli-2'>{displayName}</Avatar.Label>\n </Avatar.Root>\n </ListItem.Root>\n );\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type PublicKey, useClient } from '@dxos/react-client';\nimport type { SpaceMember } from '@dxos/react-client/echo';\nimport { useMembers } from '@dxos/react-client/echo';\nimport { useTranslation, List } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { IdentityListItem } from './IdentityListItem';\n\n// TODO(burdon): Consolidate into single component?\n\nexport interface SpaceMemberListImplProps {\n members: SpaceMember[];\n onSelect?: (member: SpaceMember) => void;\n}\n\nexport interface SpaceMemberListProps extends Partial<SpaceMemberListImplProps> {\n spaceKey: PublicKey;\n includeSelf?: boolean;\n}\n\nexport const SpaceMemberList = ({ spaceKey, includeSelf, onSelect }: SpaceMemberListProps) => {\n const client = useClient();\n const allUnsortedMembers = useMembers(spaceKey);\n const members = useMemo(\n () =>\n includeSelf\n ? allUnsortedMembers.sort((member) =>\n member.identity.identityKey.equals(client.halo.identity.get()!.identityKey) ? -1 : 1,\n )\n : allUnsortedMembers.filter(\n (member) => !member.identity.identityKey.equals(client.halo.identity.get()!.identityKey),\n ),\n [allUnsortedMembers],\n );\n return <SpaceMemberListImpl members={members} onSelect={onSelect} />;\n};\n\nexport const SpaceMemberListImpl = ({ members, onSelect }: SpaceMemberListImplProps) => {\n const { t } = useTranslation('os');\n const visibleMembers = members.filter((member) => member.identity);\n return visibleMembers.length > 0 ? (\n <List classNames='flex flex-col gap-2' data-testid='space-members-list'>\n {visibleMembers.map((member) => {\n return (\n <IdentityListItem\n key={member.identity.identityKey.toHex()}\n identity={member.identity}\n presence={member.presence}\n onClick={onSelect && (() => onSelect(member))}\n />\n );\n })}\n </List>\n ) : (\n <div role='none' className='grow flex items-center p-2'>\n <p className={mx(descriptionText, 'text-center is-full mlb-2')}>{t('empty space members message')}</p>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretRight, Plus } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { type Device } from '@dxos/react-client/halo';\nimport { Button, List, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\n\nimport { DeviceListItem } from './DeviceListItem';\nimport { type AgentFormProps, type DeviceListProps } from './DeviceListProps';\n\nexport const DeviceList = ({\n devices,\n connectionState,\n onClickAdd,\n onClickEdit,\n onClickReset,\n onClickRecover,\n onClickJoinExisting,\n onAgentDestroy,\n}: DeviceListProps & Partial<Pick<AgentFormProps, 'onAgentDestroy'>>) => {\n const { t } = useTranslation('os');\n return (\n <div role='none' className='p-1'>\n <h2 className={mx(descriptionText, 'text-center mbs-2')}>{t('devices heading')}</h2>\n {devices.length > 0 && (\n <List>\n {devices.map((device: Device) => {\n return (\n <DeviceListItem\n key={device.deviceKey.toHex()}\n device={device}\n onClickEdit={() => onClickEdit?.(device)}\n {...{ onClickReset, onClickRecover, onClickJoinExisting, connectionState, onAgentDestroy }}\n />\n );\n })}\n </List>\n )}\n <Button\n variant='ghost'\n classNames='justify-start gap-2 pis-0 pie-3 is-full'\n data-testid='devices-panel.create-invitation'\n onClick={onClickAdd}\n >\n <div role='img' className={mx(getSize(8), 'm-1 rounded-sm bg-input grid place-items-center')}>\n <Plus weight='light' className={getSize(6)} />\n </div>\n <span className='grow font-medium text-start'>{t('choose add device label')}</span>\n <CaretRight weight='bold' className={getSize(4)} />\n </Button>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DotsThree, ShareFat, Power, FirstAidKit } from '@phosphor-icons/react';\nimport React, { type ComponentPropsWithoutRef, forwardRef } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport { Device, DeviceType, DeviceKind } from '@dxos/react-client/halo';\nimport { ConnectionState } from '@dxos/react-client/mesh';\nimport {\n ListItem,\n Avatar,\n useId,\n type ThemedClassName,\n Tag,\n useTranslation,\n DropdownMenu,\n Button,\n} from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\nimport { keyToFallback } from '@dxos/util';\n\nimport { type AgentFormProps, type DeviceListItemProps } from './DeviceListProps';\n\nexport const DeviceListItem = forwardRef<\n HTMLLIElement,\n ThemedClassName<ComponentPropsWithoutRef<'li'>> &\n DeviceListItemProps &\n Partial<Pick<AgentFormProps, 'onAgentDestroy'>>\n>(\n (\n {\n device,\n onClickAdd,\n onClickEdit,\n onClickReset,\n onClickRecover,\n onClickJoinExisting,\n classNames,\n connectionState,\n onAgentDestroy: _,\n ...props\n },\n forwardedRef,\n ) => {\n const { t } = useTranslation('os');\n const fallbackValue = keyToFallback(device.deviceKey);\n const labelId = useId('identityListItem__label');\n const displayName = device.profile\n ? t('device name placeholder', { os: device.profile.os, platform: device.profile.platform })\n : generateName(device.deviceKey.toHex());\n const isCurrent = device.kind === DeviceKind.CURRENT;\n return (\n <ListItem.Root\n {...props}\n classNames={['flex gap-2 items-center mlb-2', classNames]}\n data-testid={`device-list-item${isCurrent ? '-current' : ''}`}\n labelId={labelId}\n ref={forwardedRef}\n >\n <Avatar.Root labelId={labelId}>\n <Avatar.Content\n status={\n isCurrent && connectionState === ConnectionState.OFFLINE\n ? 'error'\n : device.presence === Device.PresenceState.ONLINE\n ? 'active'\n : 'inactive'\n }\n hue={fallbackValue.hue}\n variant='square'\n classNames='place-self-center'\n {...(device.profile?.type\n ? {\n icon:\n device.profile.type === DeviceType.AGENT_MANAGED\n ? 'ph--database--regular'\n : device.profile.type === DeviceType.BROWSER\n ? 'ph--compass--regular'\n : device.profile.type === DeviceType.NATIVE\n ? 'ph--desktop--regular'\n : [DeviceType.AGENT, DeviceType.AGENT_MANAGED].includes(device.profile.type)\n ? 'ph--robot--regular'\n : device.profile.type === DeviceType.MOBILE\n ? 'ph--device-mobile--regular'\n : 'ph--devices--regular',\n }\n : { fallback: fallbackValue.emoji })}\n />\n <Avatar.Label classNames='flex-1 text-sm truncate'>{displayName}</Avatar.Label>\n {isCurrent && <Tag color='primary'>{t('current device tag label')}</Tag>}\n {/* TODO(wittjosiah): EDGE agents cannot current be turned off. */}\n {/* {device.profile?.type === DeviceType.AGENT_MANAGED && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n classNames='pli-0 is-[--rail-action] bs-[--rail-action]'\n data-testid='agent.destroy'\n onClick={onAgentDestroy}\n >\n <span className='sr-only'>{t('destroy agent label')}</span>\n <Power className={getSize(5)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='bottom' classNames='z-50'>\n {t('destroy agent label')}\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )} */}\n {device.kind === DeviceKind.CURRENT && (onClickJoinExisting || onClickRecover || onClickReset) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button\n variant='ghost'\n classNames='pli-0 is-[--rail-action] bs-[--rail-action]'\n data-testid={`device-list-item${isCurrent ? '-current' : ''}.options`}\n >\n <span className='sr-only'>{t('more options label')}</span>\n <DotsThree className={getSize(5)} />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {/* <DropdownMenu.Item disabled onClick={onClickEdit}> */}\n {/* <PencilSimpleLine className={getSize(5)} /> */}\n {/* {t('edit device label')} */}\n {/* </DropdownMenu.Item> */}\n {onClickJoinExisting && (\n <DropdownMenu.Item\n data-testid='device-list-item-current.join-existing'\n onClick={onClickJoinExisting}\n >\n <ShareFat className={getSize(5)} />\n {t('choose join new identity label')}\n </DropdownMenu.Item>\n )}\n {onClickRecover && (\n <DropdownMenu.Item data-testid='device-list-item-current.recover' onClick={onClickRecover}>\n <FirstAidKit className={getSize(5)} />\n {t('choose recover identity label')}\n </DropdownMenu.Item>\n )}\n {onClickReset && (\n <DropdownMenu.Item data-testid='device-list-item-current.reset' onClick={onClickReset}>\n <Power className={getSize(5)} />\n {t('reset device label')}\n </DropdownMenu.Item>\n )}\n </DropdownMenu.Viewport>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Avatar.Root>\n </ListItem.Root>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { X } from '@phosphor-icons/react';\nimport { formatDistanceToNow } from 'date-fns';\nimport React, { type ComponentPropsWithoutRef, useCallback } from 'react';\n\nimport {\n type CancellableInvitationObservable,\n Invitation,\n type InvitationStatus,\n useInvitationStatus,\n} from '@dxos/react-client/invitations';\nimport {\n Button,\n Clipboard,\n ListItem,\n useTranslation,\n Avatar,\n useThemeContext,\n Tooltip,\n type ThemedClassName,\n type AvatarContentProps,\n} from '@dxos/react-ui';\nimport { focusRing, getSize, mx } from '@dxos/react-ui-theme';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { type SharedInvitationListProps } from './InvitationListProps';\nimport { AuthCode } from '../AuthCode';\n\nexport type InvitationListItemProps = SharedInvitationListProps & {\n invitation: CancellableInvitationObservable;\n onClickRemove?: (invitation: CancellableInvitationObservable) => void;\n reverseEffects?: boolean;\n} & ThemedClassName<ComponentPropsWithoutRef<'li'>>;\n\nexport type InvitationListItemImplProps = InvitationListItemProps & {\n invitationStatus: InvitationStatus;\n};\n\nexport const InvitationListItem = (props: InvitationListItemProps) => {\n const { invitation } = props;\n const invitationStatus = useInvitationStatus(invitation);\n return <InvitationListItemImpl {...props} invitationStatus={invitationStatus} />;\n};\n\nconst avatarProps: Pick<AvatarContentProps, 'size' | 'variant'> = { size: 10, variant: 'circle' };\n\nconst AvatarStackEffect = ({\n animation,\n status,\n reverseEffects,\n}: Pick<AvatarContentProps, 'status' | 'animation'> & Pick<InvitationListItemProps, 'reverseEffects'>) => {\n const { tx } = useThemeContext();\n return (\n <>\n <span\n role='none'\n className={mx(\n 'absolute inline-end-auto opacity-20',\n reverseEffects ? 'inline-start-3' : 'inline-start-1',\n getSize(avatarProps.size!),\n )}\n >\n <span\n role='none'\n className={tx('avatar.ring', 'avatar__ring', { ...avatarProps, status, animation })}\n style={{ animationDelay: '400ms' }}\n />\n </span>\n <span\n role='none'\n className={mx(\n 'absolute inline-end-auto opacity-50',\n reverseEffects ? 'inline-start-2' : 'inline-start-2',\n getSize(avatarProps.size!),\n )}\n >\n <span\n role='none'\n className={tx('avatar.ring', 'avatar__ring', { ...avatarProps, status, animation })}\n style={{ animationDelay: '200ms' }}\n />\n </span>\n </>\n );\n};\n\nexport const InvitationListItemImpl = ({\n invitation,\n invitationStatus: propsInvitationStatus,\n send,\n onClickRemove,\n createInvitationUrl,\n reverseEffects,\n ...props\n}: InvitationListItemImplProps) => {\n const { t } = useTranslation('os');\n const { cancel, status: invitationStatus, invitationCode, authCode, multiUse, shareable } = propsInvitationStatus;\n\n const isCancellable = !(\n [Invitation.State.ERROR, Invitation.State.TIMEOUT, Invitation.State.CANCELLED].indexOf(invitationStatus) >= 0\n );\n\n const showShare =\n shareable &&\n (multiUse ||\n [Invitation.State.INIT, Invitation.State.CONNECTING, Invitation.State.CONNECTED].indexOf(invitationStatus) >= 0);\n\n const showAuthCode = invitationStatus === Invitation.State.READY_FOR_AUTHENTICATION;\n\n const handleClickRemove = useCallback(() => onClickRemove?.(invitation), [invitation, onClickRemove]);\n\n const invitationUrl = invitationCode && createInvitationUrl(invitationCode);\n const invitationId = invitation?.get().invitationId;\n const invitationHasLifetime = invitation?.get().lifetime;\n const invitationTimeLeft = invitation?.expiry\n ? formatDistanceToNow(invitation?.expiry, { addSuffix: true })\n : undefined;\n\n const avatarAnimation = [\n Invitation.State.INIT,\n Invitation.State.CONNECTING,\n Invitation.State.CONNECTED,\n Invitation.State.READY_FOR_AUTHENTICATION,\n Invitation.State.AUTHENTICATING,\n ].includes(invitationStatus)\n ? 'pulse'\n : 'none';\n\n const avatarError = [Invitation.State.ERROR, Invitation.State.TIMEOUT, Invitation.State.CANCELLED].includes(\n invitationStatus,\n );\n\n const avatarGreen = [\n Invitation.State.CONNECTED,\n Invitation.State.READY_FOR_AUTHENTICATION,\n Invitation.State.AUTHENTICATING,\n Invitation.State.SUCCESS,\n ].includes(invitationStatus);\n\n const avatarStatus = avatarError ? 'error' : avatarGreen ? 'active' : 'inactive';\n\n return (\n <ListItem.Root\n id={invitationCode}\n {...props}\n classNames={['flex gap-2 pis-3 pie-1 items-center relative', props.classNames]}\n >\n <ListItem.Heading classNames='sr-only'>\n {t(multiUse ? 'invite many list item label' : 'invite one list item label')}\n </ListItem.Heading>\n {multiUse && (\n <AvatarStackEffect status={avatarStatus} animation={avatarAnimation} reverseEffects={reverseEffects} />\n )}\n <Avatar.Root>\n <Tooltip.Trigger asChild content={t(multiUse ? 'invite many qr label' : 'invite one qr label')} side='left'>\n <Avatar.Content\n {...avatarProps}\n animation={avatarAnimation}\n status={avatarStatus}\n fallback={hexToEmoji(invitationId)}\n tabIndex={0}\n classNames={[focusRing, 'relative rounded-full place-self-center']}\n />\n </Tooltip.Trigger>\n </Avatar.Root>\n {showShare && invitationUrl ? (\n <>\n <Tooltip.Trigger\n asChild\n content={\n invitationHasLifetime ? t('expires label', { timeLeft: invitationTimeLeft }) : t('no expiration label')\n }\n >\n <Button\n variant='ghost'\n classNames='grow justify-start font-medium'\n onClick={() => send({ type: 'selectInvitation', invitation })}\n data-testid='show-qrcode'\n >\n <span>{t('open share panel label')}</span>\n </Button>\n </Tooltip.Trigger>\n <Clipboard.IconButton variant='ghost' value={invitationUrl} />\n </>\n ) : showAuthCode ? (\n <AuthCode code={authCode} classNames='grow' />\n ) : invitationStatus === Invitation.State.CONNECTING ? (\n <span className='pli-2 grow text-neutral-500'>Connecting...</span>\n ) : invitationStatus === Invitation.State.AUTHENTICATING ? (\n <span className='pli-2 grow text-neutral-500'>Authenticating...</span>\n ) : invitationStatus === Invitation.State.ERROR || invitationStatus === Invitation.State.TIMEOUT ? (\n <span className='pli-2 grow text-neutral-500'>Failed</span>\n ) : invitationStatus === Invitation.State.CANCELLED ? (\n <span className='pli-2 grow text-neutral-500'>Cancelled</span>\n ) : invitationStatus === Invitation.State.SUCCESS ? (\n <span className='pli-2 grow truncate'>User joined</span>\n ) : !shareable ? (\n <span className='pli-2 grow text-neutral-500'>Pending Invitation</span>\n ) : (\n <span className='grow'> </span>\n )}\n {isCancellable ? (\n <Button variant='ghost' classNames='flex gap-1 pli-0' onClick={cancel} data-testid='cancel-invitation'>\n <span className='sr-only'>{t('cancel invitation label')}</span>\n <X className={getSize(4)} />\n </Button>\n ) : (\n <Button\n variant='ghost'\n classNames='flex gap-1 pli-0'\n onClick={handleClickRemove}\n data-testid='remove-invitation'\n >\n <span className='sr-only'>{t('remove invitation label')}</span>\n <X className={getSize(4)} />\n </Button>\n )}\n </ListItem.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n//\n\nimport React, { type ComponentPropsWithoutRef, type PropsWithChildren, useRef } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nexport type AuthCodeProps = ThemedClassName<ComponentPropsWithoutRef<'span'>> & {\n code?: string;\n large?: boolean;\n};\n\nexport const AuthCode = (props: PropsWithChildren<AuthCodeProps>) => {\n const { code, large, classNames } = props;\n const l = code?.length ?? 0;\n const left = code?.slice(0, l / 2);\n const right = code?.slice(l / 2);\n const codeRef = useRef<HTMLSpanElement | null>(null);\n const handleClick = () => {\n if (codeRef.current) {\n const selection = window.getSelection();\n selection?.removeAllRanges();\n const range = document.createRange();\n range.selectNodeContents(codeRef.current);\n selection?.addRange(range);\n }\n void navigator.clipboard.writeText(code ?? '');\n };\n return (\n <span\n className={mx(large ? 'text-6xl' : 'text-2xl', 'font-mono pli-2.5 rounded cursor-pointer', classNames)}\n onClick={handleClick}\n ref={codeRef}\n >\n <span className='mie-[0.4em]'>{left}</span>\n <span>{right}</span>\n </span>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\nimport React, { useCallback } from 'react';\n\nimport { type PublicKey } from '@dxos/react-client';\nimport { useSpace, useSpaceInvitations } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\n\nimport { InvitationList } from './InvitationList';\nimport { type SharedInvitationListProps } from './InvitationListProps';\n\nexport interface InvitationListContainerProps extends SharedInvitationListProps {\n spaceKey: PublicKey;\n}\n\nexport const InvitationListContainer = ({ spaceKey, createInvitationUrl, send }: InvitationListContainerProps) => {\n const space = useSpace(spaceKey);\n const invitations = useSpaceInvitations(spaceKey);\n const handleClickRemove = useCallback(\n (invitation: CancellableInvitationObservable) => {\n void invitation.cancel();\n },\n [space],\n );\n\n return (\n <InvitationList invitations={invitations} {...{ onClickRemove: handleClickRemove, createInvitationUrl, send }} />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\nimport React, { type ComponentType } from 'react';\n\nimport type { CancellableInvitationObservable } from '@dxos/react-client/invitations';\nimport { List } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { InvitationListItem, type InvitationListItemProps } from './InvitationListItem';\nimport { type SharedInvitationListProps } from './InvitationListProps';\n\nexport interface InvitationListProps\n extends Omit<InvitationListItemProps, 'invitation' | 'value'>,\n Pick<SharedInvitationListProps, 'send'> {\n invitations: CancellableInvitationObservable[];\n InvitationListItem?: ComponentType<InvitationListItemProps>;\n className?: string;\n}\n\nexport const InvitationList = ({ invitations, send, ...invitationProps }: InvitationListProps) => {\n const { className, InvitationListItem: Item = InvitationListItem } = invitationProps;\n return (\n <List classNames={mx('flex flex-col gap-2', className)}>\n {invitations.map((invitation) => {\n const value = invitation.get().invitationId;\n return <Item key={value} send={send} invitation={invitation} {...invitationProps} />;\n })}\n </List>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretDown, Check, type IconProps, Placeholder } from '@phosphor-icons/react';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type Dispatch, type FC, forwardRef, type SetStateAction } from 'react';\n\nimport { type ButtonProps, Button, DropdownMenu, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\n\nexport type LargeButtonProps = ButtonProps & {\n isFull?: boolean;\n};\n\nexport type ActionMenuItem = {\n label: string;\n description: string;\n icon: FC<IconProps>;\n testId?: string;\n} & Pick<ButtonProps, 'onClick'>;\n\nexport type BifurcatedActionProps = {\n actions: Record<string, ActionMenuItem>;\n activeAction?: string;\n onChangeActiveAction?: Dispatch<SetStateAction<string>>;\n defaultActiveAction?: string;\n 'data-testid'?: string;\n} & Omit<LargeButtonProps, 'children' | 'onClick'>;\n\nconst defaultActions = {\n noopAction: {\n label: 'No-op',\n description: '',\n icon: Placeholder,\n onClick: () => {},\n },\n} as Record<string, ActionMenuItem>;\n\nexport const BifurcatedAction = forwardRef<HTMLButtonElement, BifurcatedActionProps>((props, forwardedRef) => {\n const {\n classNames,\n variant,\n isFull = true,\n actions = defaultActions,\n activeAction: propsActiveAction,\n onChangeActiveAction,\n defaultActiveAction,\n 'data-testid': testId,\n ...rest\n } = props;\n\n const dropdownTestId = testId && `${testId}.more`;\n\n const [activeActionKey = Object.keys(actions)[0], setActiveAction] = useControllableState({\n prop: propsActiveAction,\n onChange: onChangeActiveAction,\n defaultProp: defaultActiveAction,\n });\n\n const activeAction = actions[activeActionKey as string] ?? {};\n\n const { t } = useTranslation('os');\n\n return (\n <div role='none' className={mx('mbs-2 flex gap-px items-center', isFull && 'is-full')}>\n <Button\n {...rest}\n classNames={['bs-11 flex-1 min-is-0 flex gap-2 rounded-ie-none', classNames]}\n ref={forwardedRef}\n variant={variant}\n data-testid={testId}\n onClick={activeAction.onClick}\n >\n {activeAction.icon && <activeAction.icon className={getSize(5)} />}\n <span>{activeAction.label}</span>\n </Button>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger asChild>\n <Button classNames={['bs-11 flex-none rounded-is-none', classNames]} data-testid={dropdownTestId}>\n <span className='sr-only'>{t('invite options label')}</span>\n <CaretDown className={getSize(4)} />\n </Button>\n </DropdownMenu.Trigger>\n {/* TODO(thure): Putting `DropdownMenu.Portal` here breaks highlighting and focus. Why? */}\n <DropdownMenu.Portal>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {Object.entries(actions).map(([id, action]) => {\n return (\n <DropdownMenu.CheckboxItem\n key={id}\n aria-labelledby={`${id}__label`}\n aria-describedby={`${id}__description`}\n checked={activeActionKey === id}\n onCheckedChange={(checked) => checked && setActiveAction(id)}\n classNames='gap-2'\n data-testid={action.testId}\n >\n {action.icon && <action.icon className={getSize(5)} />}\n <div role='none' className='flex-1 min-is-0 space-b-1'>\n <p id={`${id}__label`}>{action.label}</p>\n {action.description && (\n <p id={`${id}__description`} className={descriptionText}>\n {action.description}\n </p>\n )}\n </div>\n <DropdownMenu.ItemIndicator asChild>\n <Check weight='bold' className={getSize(4)} />\n </DropdownMenu.ItemIndicator>\n </DropdownMenu.CheckboxItem>\n );\n })}\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n </div>\n );\n});\n\nexport const Action = forwardRef<HTMLButtonElement, LargeButtonProps>((props, forwardedRef) => {\n const { children, classNames, variant, isFull = true, ...rest } = props;\n return (\n <Button\n {...rest}\n classNames={[isFull && 'is-full', 'bs-11 flex gap-2 mbs-2', classNames]}\n ref={forwardedRef}\n variant={variant}\n >\n {children}\n </Button>\n );\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ComponentPropsWithoutRef, forwardRef, type ReactNode } from 'react';\n\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\ntype ActionsProps = Omit<ThemedClassName<ComponentPropsWithoutRef<'div'>>, 'children'> & {\n children: ReactNode | ReactNode[];\n};\n\nconst Actions = forwardRef<HTMLDivElement, ActionsProps>(({ classNames, children, ...props }, forwardedRef) => {\n return (\n <div\n {...props}\n className={mx(\n 'flex flex-col gap-2 mbs-2',\n Array.isArray(children) && children.length > 1 ? 'justify-between' : 'justify-center',\n classNames,\n )}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n});\n\nexport { Actions };\nexport type { ActionsProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { X } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { Button, type ButtonProps, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nexport const CloseButton = ({ onDone, ...props }: Omit<ButtonProps, 'onClick'> & { onDone?: () => void }) => {\n const { t } = useTranslation('os');\n return (\n <Button\n variant='ghost'\n classNames={mx('plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]')}\n onClick={() => onDone?.()}\n {...props}\n >\n <X weight='bold' className={getSize(4)} />\n <span className='sr-only'>{t('exit label')}</span>\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { mx, getSize } from '@dxos/react-ui-theme';\n\nexport const Emoji = ({ text, className }: { text?: string; className?: string }) => {\n const size = 14;\n return (\n <div role='none' className={mx(getSize(size), 'rounded relative pointer-events-none', className)}>\n <svg viewBox={`0 0 ${size * 4} ${size * 4}`} width={size * 4} height={size * 4}>\n <text\n x='50%'\n y='50%'\n textAnchor='middle'\n dominantBaseline='middle'\n baselineShift={'-0.25rem'}\n fontSize={'2.25rem'}\n >\n {text}\n </text>\n </svg>\n </div>\n );\n};\n\nexport const Centered = (props: PropsWithChildren) => {\n const { children } = props;\n return (\n <div role='none' className='absolute inset-0 flex items-center justify-center'>\n {children}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { forwardRef, type PropsWithChildren, type ReactNode } from 'react';\n\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nexport type PanelHeadingProps = PropsWithChildren<{\n titleId: string;\n title: string;\n titleSrOnly?: boolean;\n corner?: ReactNode;\n}>;\n\nexport const Heading = forwardRef<HTMLDivElement, PanelHeadingProps>(\n ({ titleId, title, titleSrOnly, children, corner }, forwardedRef) => {\n return (\n <div role='none' className='pbe-2 relative' ref={forwardedRef}>\n {corner}\n <h1\n {...(!titleSrOnly && { id: titleId })}\n className={mx(descriptionText, 'text-center mlb-2', titleSrOnly && 'invisible')}\n >\n {title}\n </h1>\n {titleSrOnly && <span id={titleId}>{title}</span>}\n {children}\n </div>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren } from 'react';\n\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nexport type LabelProps = PropsWithChildren<{}>;\n\nexport const Label = (props: LabelProps) => {\n const { children } = props;\n return <span className={mx(descriptionText, 'text-center mli-6 whitespace-normal')}>{children}</span>;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ChangeEventHandler, type ReactNode } from 'react';\n\nimport { Input as UiInput, type TextInputProps } from '@dxos/react-ui';\n\nexport type LargeInputProps = TextInputProps & {\n validationMessage?: string;\n label?: ReactNode;\n disabled?: boolean;\n placeholder?: string;\n onChange?: ChangeEventHandler<HTMLInputElement>;\n};\n\nexport const Input = ({ validationMessage, label, ...props }: LargeInputProps) => {\n return (\n <UiInput.Root>\n <UiInput.Label>{label}</UiInput.Label>\n <UiInput.TextInput {...props} classNames='plb-3 mbs-2 text-center' />\n <UiInput.DescriptionAndValidation>\n {validationMessage && <UiInput.Validation>{validationMessage}</UiInput.Validation>}\n </UiInput.DescriptionAndValidation>\n </UiInput.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ComponentPropsWithRef, forwardRef } from 'react';\n\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const StepHeading = forwardRef<HTMLHeadingElement, ComponentPropsWithRef<'h2'>>(\n ({ children, className, ...props }, forwardedRef) => {\n return (\n <h2 {...props} className={mx('font-normal text-sm mbe-4 mli-1 text-center', className)} ref={forwardedRef}>\n {children}\n </h2>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { createContextScope, type Scope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, {\n type ComponentPropsWithRef,\n type Dispatch,\n type ReactNode,\n type SetStateAction,\n forwardRef,\n useEffect,\n} from 'react';\n\nimport { type ThemedClassName, useForwardedRef } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst VIEWPORT_NAME = 'Viewport';\nconst VIEWS_NAME = 'ViewportViews';\nconst VIEW_NAME = 'ViewportView';\n\ntype ViewportContextValue = {\n focusManaged: boolean;\n activeView: string;\n setActiveView: Dispatch<SetStateAction<string | undefined>>;\n};\n\ntype ViewportScopedProps<P> = P & { __viewportScope?: Scope };\n\nconst [createViewportContext, createViewportScope] = createContextScope(VIEWPORT_NAME, []);\n\nconst [ViewportProvider, useViewportContext] = createViewportContext<ViewportContextValue>(VIEWPORT_NAME);\n\ntype ViewportRootProps = ThemedClassName<ComponentPropsWithRef<'div'>> &\n Partial<{\n focusManaged: boolean;\n defaultActiveView: string;\n activeView: string;\n onActiveViewChange: Dispatch<SetStateAction<string>>;\n }>;\n\nconst ViewportRoot = ({\n __viewportScope,\n classNames,\n children,\n defaultActiveView,\n activeView: propsActiveView,\n focusManaged = false,\n onActiveViewChange,\n ...props\n}: ViewportScopedProps<ViewportRootProps>) => {\n const [activeView = 'never', setActiveView] = useControllableState({\n prop: propsActiveView,\n defaultProp: defaultActiveView,\n onChange: onActiveViewChange,\n });\n return (\n <ViewportProvider\n focusManaged={focusManaged}\n activeView={activeView}\n setActiveView={setActiveView}\n scope={__viewportScope}\n >\n <div role='region' aria-live='polite' {...props} className={mx('is-full overflow-hidden', classNames)}>\n {children}\n </div>\n </ViewportProvider>\n );\n};\n\nViewportRoot.displayName = VIEWPORT_NAME;\n\ntype ViewportViewsProps = ThemedClassName<Omit<ComponentPropsWithRef<'div'>, 'children'>> & { children: ReactNode[] };\n\nconst ViewportViews = ({ classNames, children, ...props }: ViewportViewsProps) => {\n const size = { inlineSize: `${Math.ceil(children.length) * 100}%` };\n return (\n <div role='none' style={size} {...props} className={mx('flex', classNames)}>\n {children}\n </div>\n );\n};\n\nViewportViews.displayName = VIEWS_NAME;\n\ntype ViewportViewProps = ThemedClassName<Omit<ComponentPropsWithRef<'div'>, 'id'>> & {\n id: string;\n};\n\nconst ViewportView = forwardRef<HTMLDivElement, ViewportScopedProps<ViewportViewProps>>(\n ({ __viewportScope, classNames, children, id, ...props }, forwardedRef) => {\n const { activeView, focusManaged }: ViewportContextValue = useViewportContext(VIEW_NAME, __viewportScope);\n const isActive = id === activeView;\n const ref = useForwardedRef(forwardedRef);\n const { findFirstFocusable } = useFocusFinders();\n useEffect(() => {\n if (!focusManaged && isActive && document.body.hasAttribute('data-is-keyboard') && ref.current) {\n findFirstFocusable(ref.current)?.focus();\n }\n }, [focusManaged, ref.current, isActive]);\n\n return (\n <section\n {...props}\n {...(!isActive && { 'aria-hidden': true })}\n className={mx('min-is-0 flex-1 flex flex-col', isActive ? 'order-2' : 'order-4 invisible', classNames)}\n ref={ref}\n >\n {children}\n </section>\n );\n },\n);\n\nViewportView.displayName = VIEW_NAME;\n\nexport const Viewport = { Root: ViewportRoot, Views: ViewportViews, View: ViewportView };\nexport { useViewportContext, createViewportScope };\nexport type { ViewportRootProps, ViewportViewsProps, ViewportViewProps, ViewportScopedProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ForwardedRef, forwardRef } from 'react';\n\nimport type { Space } from '@dxos/react-client/echo';\nimport { Avatar, useId } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { humanize, keyToEmoji } from '@dxos/util';\n\nexport const SpaceListItem = forwardRef(\n ({ space, onClick }: { space: Space; onClick?: () => void }, ref: ForwardedRef<HTMLLIElement>) => {\n const fallbackValue = keyToEmoji(space.key);\n const labelId = useId('identityListItem__label');\n const displayName = space.properties.name ?? humanize(space.key.toHex());\n\n return (\n <li\n className={mx('flex gap-2 items-center mbe-2', onClick && 'cursor-pointer')}\n onClick={() => onClick?.()}\n ref={ref}\n data-testid='space-list-item'\n >\n <Avatar.Root labelId={labelId}>\n <Avatar.Content fallback={fallbackValue} />\n <Avatar.Label classNames='text-sm truncate'>{displayName}</Avatar.Label>\n </Avatar.Root>\n </li>\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Clipboard, type DialogContentProps, Dialog, useId } from '@dxos/react-ui';\n\nimport { IdentityPanel, type IdentityPanelProps } from '../../panels';\n\nexport interface IdentityDialogProps\n extends Omit<DialogContentProps, 'children'>,\n Omit<IdentityPanelProps, 'doneActionParent'> {\n onDone: () => void;\n}\n\nexport const IdentityDialog = (props: IdentityDialogProps) => {\n const titleId = useId('identityDialog__title', props.title);\n return (\n <Dialog.Root defaultOpen onOpenChange={(open) => open || props.onDone?.()}>\n <Dialog.Portal>\n <Dialog.Overlay>\n <Dialog.Content aria-labelledby={titleId} onOpenAutoFocus={(ev) => ev.preventDefault()}>\n <Clipboard.Provider>\n <IdentityPanel\n {...{\n ...props,\n titleId,\n doneActionParent: <Dialog.Close asChild />,\n }}\n />\n </Clipboard.Provider>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { IdentificationCard, Plugs, PlugsConnected } from '@phosphor-icons/react';\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { generateName } from '@dxos/display-name';\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { type Identity, useIdentity, useDevices, useHaloInvitations } from '@dxos/react-client/halo';\nimport { useInvitationStatus } from '@dxos/react-client/invitations';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\nimport { useNetworkStatus, ConnectionState } from '@dxos/react-client/mesh';\nimport { Avatar, Clipboard, Input, Toolbar, Tooltip, useId, useTranslation } from '@dxos/react-ui';\nimport { EmojiPickerToolbarButton, HuePicker } from '@dxos/react-ui-pickers';\nimport { errorText, getSize } from '@dxos/react-ui-theme';\nimport { hexToEmoji, hexToHue, keyToFallback } from '@dxos/util';\n\nimport {\n type IdentityPanelHeadingProps,\n type IdentityPanelImplProps,\n type IdentityPanelProps,\n} from './IdentityPanelProps';\nimport { useIdentityMachine } from './identityMachine';\nimport { IdentityActionChooser } from './steps';\nimport { useAgentHandlers } from './useAgentHandlers';\nimport { Viewport, CloseButton, Heading } from '../../components';\nimport { ConfirmReset, InvitationManager } from '../../steps';\n\nconst viewStyles = 'pbs-1 pbe-3 pli-3';\n\n// TODO(thure): Factor out?\nconst getHueValue = (identity?: Identity) =>\n identity?.profile?.data?.hue || hexToHue(identity?.identityKey.toHex() ?? '0');\nconst getEmojiValue = (identity?: Identity) =>\n identity?.profile?.data?.emoji || hexToEmoji(identity?.identityKey.toHex() ?? '0');\n\nconst IdentityHeading = ({\n titleId,\n title,\n identity,\n onDone,\n onUpdateProfile,\n connectionState,\n onChangeConnectionState,\n onManageCredentials,\n}: IdentityPanelHeadingProps) => {\n const fallbackValue = keyToFallback(identity.identityKey);\n const { t } = useTranslation('os');\n const [displayName, setDisplayNameDirectly] = useState(identity.profile?.displayName ?? '');\n const [emoji, setEmojiDirectly] = useState<string>(getEmojiValue(identity));\n const [hue, setHueDirectly] = useState<string | undefined>(getHueValue(identity));\n\n const updateDisplayName = useMemo(\n () =>\n debounce(\n (nextDisplayName: string) => onUpdateProfile?.({ ...identity.profile, displayName: nextDisplayName }),\n 3_000,\n ),\n [onUpdateProfile, identity.profile],\n );\n\n const setDisplayName = (nextDisplayName: string) => {\n setDisplayNameDirectly(nextDisplayName);\n updateDisplayName(nextDisplayName);\n };\n\n const setEmoji = (nextEmoji: string) => {\n setEmojiDirectly(nextEmoji);\n void onUpdateProfile?.({ ...identity.profile, data: { ...identity.profile?.data, emoji: nextEmoji } });\n };\n\n const setHue = (nextHue: string | undefined) => {\n setHueDirectly(nextHue);\n void onUpdateProfile?.({ ...identity.profile, data: { ...identity.profile?.data, hue: nextHue } });\n };\n\n const isConnected = connectionState === ConnectionState.ONLINE;\n\n return (\n <Heading titleId={titleId} title={title} corner={<CloseButton onDone={onDone} />}>\n <Avatar.Root>\n <Toolbar.Root classNames='flex justify-center'>\n <Avatar.Content\n size={16}\n variant='circle'\n status={isConnected ? 'active' : 'error'}\n hue={hue || fallbackValue.hue}\n fallback={emoji || fallbackValue.emoji}\n classNames='relative z-[2] -mli-4 chromatic-ignore'\n />\n </Toolbar.Root>\n\n <Avatar.Label classNames='sr-only' data-testid='identityHeading.displayName'>\n {identity.profile?.displayName ?? generateName(identity.identityKey.toHex())}\n </Avatar.Label>\n\n <Input.Root>\n <Input.Label srOnly>{t('display name input label')}</Input.Label>\n <Input.TextInput\n variant='subdued'\n data-testid='display-name-input'\n placeholder={t('display name input placeholder')}\n classNames='mbs-2 text-center font-light text-xl'\n value={displayName}\n onChange={({ target: { value } }) => setDisplayName(value)}\n />\n </Input.Root>\n\n <Toolbar.Root classNames='flex justify-center items-center gap-1 pt-3'>\n <EmojiPickerToolbarButton emoji={emoji} onChangeEmoji={setEmoji} classNames='bs-[--rail-action]' />\n <HuePicker\n value={hue}\n onChange={setHue}\n onReset={() => setHue(undefined)}\n classNames='bs-[--rail-action]'\n rootVariant='toolbar-button'\n />\n <Clipboard.IconButton\n classNames='bs-[--rail-action]'\n data-testid='update-profile-form-copy-key'\n label={t('copy self did label')}\n value={identity.did}\n />\n {onManageCredentials && (\n <Tooltip.Trigger asChild content={t('manage credentials label')} side='bottom'>\n <Toolbar.Button classNames='bs-[--rail-action]' onClick={onManageCredentials}>\n <span className='sr-only'>{t('manage credentials label')}</span>\n <IdentificationCard className={getSize(5)} />\n </Toolbar.Button>\n </Tooltip.Trigger>\n )}\n <Tooltip.Trigger asChild content={t(isConnected ? 'disconnect label' : 'connect label')} side='bottom'>\n <Toolbar.Button\n classNames={['bs-[--rail-action]', !isConnected && errorText]}\n onClick={() => onChangeConnectionState?.(isConnected ? ConnectionState.OFFLINE : ConnectionState.ONLINE)}\n >\n <span className='sr-only'>{t(isConnected ? 'disconnect label' : 'connect label')}</span>\n {isConnected ? <PlugsConnected className={getSize(5)} /> : <Plugs className={getSize(5)} />}\n </Toolbar.Button>\n </Tooltip.Trigger>\n </Toolbar.Root>\n </Avatar.Root>\n </Heading>\n );\n};\n\nexport const IdentityPanelImpl = (props: IdentityPanelImplProps) => {\n const {\n identity,\n titleId,\n activeView,\n onUpdateProfile,\n onResetStorage,\n onRecover,\n onJoinNewIdentity,\n IdentityActionChooser: IdentityActionChooserComponent = IdentityActionChooser,\n InvitationManager: InvitationManagerComponent = InvitationManager,\n connectionState,\n onChangeConnectionState,\n onDone,\n onManageCredentials,\n ...rest\n } = props;\n const { t } = useTranslation('os');\n const title = useMemo(() => {\n switch (activeView) {\n case 'device invitation manager':\n return t('choose add device label');\n default:\n return t('identity heading');\n }\n }, [activeView, t]);\n\n const onCancelReset = () => rest.send?.('unchooseAction');\n const hideRecover = rest.agentStatus !== 'created';\n\n return (\n <>\n <IdentityHeading\n {...{\n identity,\n titleId,\n title,\n hideRecover,\n onDone,\n onUpdateProfile,\n connectionState,\n onChangeConnectionState,\n onManageCredentials,\n }}\n />\n <Viewport.Root activeView={activeView}>\n <Viewport.Views>\n <Viewport.View id='identity action chooser' classNames={viewStyles}>\n <IdentityActionChooserComponent\n active={activeView === 'identity action chooser'}\n {...rest}\n connectionState={connectionState}\n />\n </Viewport.View>\n <Viewport.View id='device invitation manager' classNames={viewStyles}>\n <InvitationManagerComponent\n active={activeView === 'device invitation manager'}\n {...rest}\n invitationUrl={rest.createInvitationUrl(rest.invitationCode!)}\n />\n </Viewport.View>\n <Viewport.View classNames={viewStyles} id='confirm join new identity'>\n <ConfirmReset\n active={activeView === 'confirm join new identity'}\n {...rest}\n mode='join new identity'\n onConfirm={onJoinNewIdentity}\n onCancel={onCancelReset}\n />\n </Viewport.View>\n <Viewport.View classNames={viewStyles} id='confirm recover'>\n <ConfirmReset\n active={activeView === 'confirm recover'}\n {...rest}\n mode='recover'\n onConfirm={onRecover}\n onCancel={onCancelReset}\n />\n </Viewport.View>\n <Viewport.View classNames={viewStyles} id='confirm reset storage'>\n <ConfirmReset\n active={activeView === 'confirm reset storage'}\n {...rest}\n mode='reset storage'\n onConfirm={onResetStorage}\n onCancel={onCancelReset}\n />\n </Viewport.View>\n </Viewport.Views>\n </Viewport.Root>\n </>\n );\n};\n\nconst IdentityPanelWithInvitationImpl = ({\n invitation,\n ...props\n}: IdentityPanelImplProps & { invitation: CancellableInvitationObservable }) => {\n const invitationStatus = useInvitationStatus(invitation);\n return <IdentityPanelImpl {...props} {...invitationStatus} />;\n};\n\nexport const IdentityPanel = ({\n titleId: propsTitleId,\n createInvitationUrl = (code) => code,\n initialDisposition = 'default',\n ...props\n}: IdentityPanelProps) => {\n const titleId = useId('identityPanel__heading', propsTitleId);\n const client = useClient();\n const devices = useDevices();\n const identity = useIdentity();\n const invitations = useHaloInvitations();\n const agentProps = useAgentHandlers({ identity, invitations });\n if (!identity) {\n log.error('IdentityPanel rendered with no active identity.');\n return null;\n }\n const [identityState, identitySend, identityService] = useIdentityMachine(client, {\n context: { initialDisposition },\n });\n\n const { swarm: connectionState } = useNetworkStatus();\n\n const handleChangeConnectionState = async (nextState: ConnectionState) => client?.mesh.updateConfig(nextState);\n\n useEffect(() => {\n const subscription = identityService.subscribe((state) => {\n log('[state]', state);\n });\n\n return subscription.unsubscribe;\n }, [identityService]);\n\n const activeView = useMemo(() => {\n switch (true) {\n case identityState.matches('choosingAction'):\n return 'identity action chooser';\n case identityState.matches('managingDeviceInvitation'):\n return 'device invitation manager';\n case identityState.matches('confirmingResetStorage'):\n return 'confirm reset storage';\n case identityState.matches('confirmingRecover'):\n return 'confirm recover';\n case identityState.matches('confirmingJoinNewIdentity'):\n return 'confirm join new identity';\n default:\n return 'identity action chooser';\n }\n }, [identityState]);\n\n const onUpdateProfile = async (profile: NonNullable<Identity['profile']>) => {\n identitySend({ type: 'updateProfile' });\n await client.halo.updateProfile(profile);\n };\n\n const implProps = {\n ...props,\n identity,\n devices,\n activeView,\n send: identitySend,\n titleId,\n createInvitationUrl,\n onUpdateProfile,\n connectionState,\n onChangeConnectionState: handleChangeConnectionState,\n ...agentProps,\n } satisfies IdentityPanelImplProps;\n\n return identityState.context.invitation ? (\n <IdentityPanelWithInvitationImpl {...implProps} invitation={identityState.context.invitation} />\n ) : (\n <IdentityPanelImpl {...implProps} />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMachine } from '@xstate/react';\nimport { assign, createMachine, type InterpreterFrom, type StateFrom, type Subscribable } from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Client } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\n\nimport { type IdentityPanelInitialDisposition } from './IdentityPanelProps';\nimport { type StepEvent } from '../../steps';\n\ntype IdentityMachineContext = {\n initialDisposition?: IdentityPanelInitialDisposition;\n invitation?: CancellableInvitationObservable;\n identity: Identity | null;\n identitySubscribable: Subscribable<SetIdentityEvent> | null;\n};\n\ntype IdentityChooseActionEvent = {\n type: 'chooseResetStorage' | 'chooseRecoverIdentity' | 'chooseJoinNewIdentity' | 'unchooseAction';\n};\n\ntype IdentitySelectDeviceInvitationEvent = {\n type: 'selectInvitation';\n invitation: CancellableInvitationObservable;\n};\n\nexport type SetIdentityEvent = {\n type: 'setIdentity';\n identity: Identity | null;\n};\n\nexport type UpdateProfileEvent = {\n type: 'updateProfile';\n};\n\ntype IdentityEvent =\n | SetIdentityEvent\n | UpdateProfileEvent\n | IdentitySelectDeviceInvitationEvent\n | IdentityChooseActionEvent\n | StepEvent;\n\nconst identityMachine = createMachine<IdentityMachineContext, IdentityEvent>(\n {\n id: 'identity',\n predictableActionArguments: true,\n context: {\n identity: null,\n identitySubscribable: null,\n },\n initial: 'choosingAction',\n invoke: {\n src: (context) => context.identitySubscribable!,\n },\n states: {\n unknown: {\n always: [\n { cond: 'initiallyManagingDeviceInvitation', target: 'managingDeviceInvitation', actions: 'log' },\n { target: 'choosingAction', actions: 'log' },\n ],\n },\n choosingAction: {},\n managingDeviceInvitation: {},\n confirmingResetStorage: {},\n confirmingRecover: {},\n confirmingJoinNewIdentity: {},\n },\n on: {\n unchooseAction: { target: '.choosingAction', actions: ['unsetInvitation', 'log'] },\n deselectInvitation: { target: '.choosingAction', actions: ['unsetInvitation', 'log'] },\n selectInvitation: { target: '.managingDeviceInvitation', actions: ['setInvitation', 'log'] },\n chooseJoinNewIdentity: { target: '.confirmingJoinNewIdentity', actions: 'log' },\n chooseRecoverIdentity: { target: '.confirmingRecover', actions: 'log' },\n chooseResetStorage: { target: '.confirmingResetStorage', actions: 'log' },\n },\n },\n {\n guards: {\n initiallyManagingDeviceInvitation: ({ initialDisposition }, _event) =>\n initialDisposition === 'manage-device-invitation',\n },\n actions: {\n setIdentity: assign<IdentityMachineContext, IdentityEvent>({\n identity: (context, event) => (event as SetIdentityEvent)?.identity ?? null,\n }),\n setInvitation: assign<IdentityMachineContext, IdentityEvent>({\n invitation: (context, event) => (event as IdentitySelectDeviceInvitationEvent)?.invitation ?? null,\n }),\n unsetInvitation: assign<IdentityMachineContext, IdentityEvent>({\n invitation: () => undefined,\n }),\n log: (context, event) => {\n log('[transition]', {\n event,\n context,\n });\n },\n },\n },\n);\n\ntype IdentityMachine = typeof identityMachine;\n\ntype IdentityState = StateFrom<IdentityMachine>;\ntype IdentitySend = InterpreterFrom<IdentityMachine>['send'];\n\nconst useIdentityMachine = (client: Client, options?: Parameters<typeof useMachine<IdentityMachine>>[1]) => {\n return useMachine(identityMachine, {\n ...options,\n context: {\n ...options?.context,\n identity: client.halo.identity.get(),\n identitySubscribable: client.halo.identity.map((identity) => ({\n type: 'setIdentity',\n identity,\n })) satisfies Subscribable<SetIdentityEvent>,\n },\n });\n};\n\nexport type {\n IdentityMachine,\n IdentityEvent,\n IdentityMachineContext,\n IdentityChooseActionEvent,\n IdentityState,\n IdentitySend,\n};\nexport { identityMachine, useIdentityMachine };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { useHaloInvitations, DeviceType } from '@dxos/react-client/halo';\nimport { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\n\nimport { AgentConfig, type AgentFormProps, DeviceList, type DeviceListProps } from '../../../components';\nimport { type IdentityPanelStepProps } from '../IdentityPanelProps';\n\nexport type IdentityActionChooserProps = IdentityPanelStepProps;\n\nexport const IdentityActionChooser = (props: IdentityPanelStepProps) => {\n const { send } = props;\n const client = useClient();\n const invitations = useHaloInvitations();\n const createInvitation = () => {\n invitations.forEach((invitation) => invitation.cancel());\n // TODO(nf): allow user to make invitations non-persistent?\n const invitation = client.halo.share();\n if (client.config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription = invitation.subscribe((invitation: Invitation) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n subscription.unsubscribe();\n }\n });\n }\n send?.({ type: 'selectInvitation', invitation });\n };\n const isProduction = client.config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production';\n return (\n <IdentityActionChooserImpl\n {...props}\n onClickAdd={createInvitation}\n onClickJoinExisting={() => send?.({ type: 'chooseJoinNewIdentity' })}\n onClickRecover={isProduction ? undefined : () => send?.({ type: 'chooseRecoverIdentity' })}\n onClickReset={() => send?.({ type: 'chooseResetStorage' })}\n />\n );\n};\n\nexport type IdentityActionChooserImplProps = IdentityActionChooserProps &\n Partial<AgentFormProps> &\n Pick<DeviceListProps, 'onClickAdd' | 'onClickJoinExisting' | 'onClickRecover' | 'onClickReset'>;\n\nexport const IdentityActionChooserImpl = ({\n devices,\n connectionState,\n agentHostingEnabled,\n onClickAdd,\n onClickJoinExisting,\n onClickRecover,\n onClickReset,\n ...agentProps\n}: IdentityActionChooserImplProps) => {\n const edgeDeviceAvailable = devices.find(\n (device) => device.profile?.type === DeviceType.AGENT_MANAGED && device.profile?.os?.toUpperCase() === 'EDGE',\n );\n return (\n <div role='none' className='bs-40 grow overflow-y-auto'>\n <DeviceList\n devices={devices}\n connectionState={connectionState}\n onClickAdd={onClickAdd}\n onClickJoinExisting={onClickJoinExisting}\n onClickRecover={agentProps.agentStatus === 'created' ? onClickRecover : undefined}\n onClickReset={onClickReset}\n onAgentDestroy={agentProps.onAgentDestroy!}\n />\n {!edgeDeviceAvailable && agentHostingEnabled && <AgentConfig {...(agentProps as AgentFormProps)} />}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\nimport { type Event, type SingleOrArray } from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { useClipboard, useTranslation } from '@dxos/react-ui';\nimport { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';\nimport { hexToEmoji, hexToHue } from '@dxos/util';\n\nimport { Action, Actions, StepHeading, Input } from '../../../components';\nimport { type IdentityPanelStepProps } from '../IdentityPanelProps';\nimport { type IdentityEvent } from '../identityMachine';\n\nexport interface ProfileFormProps extends Omit<IdentityPanelStepProps, 'send' | 'devices'> {\n send?: (event: SingleOrArray<Event<IdentityEvent>>) => void;\n onUpdateProfile?: (profile: NonNullable<Identity['profile']>) => Promise<void>;\n identity?: Identity;\n}\n\nexport type ProfileFormImplProps = ProfileFormProps & {\n validationMessage?: string;\n};\n\nexport const ProfileForm = (props: ProfileFormProps) => {\n const { onUpdateProfile } = props;\n const { t } = useTranslation('os');\n const [validationMessage, setValidationMessage] = useState('');\n const handleUpdateProfile = async (profile: NonNullable<Identity['profile']>) => {\n await onUpdateProfile?.(profile).catch((error) => {\n log.catch(error);\n setValidationMessage(t('failed to update profile message'));\n });\n };\n return <ProfileFormImpl {...props} onUpdateProfile={handleUpdateProfile} validationMessage={validationMessage} />;\n};\n\nconst getHueValue = (identity?: Identity) =>\n identity?.profile?.data?.hue || hexToHue(identity?.identityKey.toHex() ?? '0');\nconst getEmojiValue = (identity?: Identity) =>\n identity?.profile?.data?.emoji || hexToEmoji(identity?.identityKey.toHex() ?? '0');\n\n// TODO(zhenyasav): impl shouldn't need send()\nconst ProfileFormImpl = (props: ProfileFormImplProps) => {\n const { active, identity, send, onUpdateProfile, validationMessage } = props;\n const profile = identity?.profile;\n const disabled = !active;\n const { t } = useTranslation('os');\n const [displayName, setDisplayName] = useState(profile?.displayName ?? '');\n const [hue, setHue] = useState<string>(getHueValue(identity));\n const [emoji, setEmoji] = useState<string>(getEmojiValue(identity));\n const { textValue, setTextValue } = useClipboard();\n const identityHex = identity?.identityKey.toHex();\n const copied = textValue === identityHex;\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <Input\n {...{ validationMessage }}\n label={<StepHeading className='m-0'>{t('display name input label')}</StepHeading>}\n disabled={disabled}\n data-testid='display-name-input'\n placeholder={t('display name input placeholder')}\n value={displayName}\n onChange={({ target: { value } }) => setDisplayName(value)}\n />\n <StepHeading className='mbe-2'>{t('emoji and color label')}</StepHeading>\n <div role='none' className='grid grid-cols-[1fr_min-content] gap-y-2'>\n <EmojiPickerBlock\n emoji={emoji}\n onChangeEmoji={setEmoji}\n disabled={disabled}\n onClickClear={() => setEmoji(getEmojiValue(identity))}\n />\n <HuePicker disabled={disabled} value={hue} onChange={setHue} onReset={() => setHue(getHueValue(identity))} />\n </div>\n </div>\n <Actions>\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => {\n if (identityHex) {\n void setTextValue(identityHex);\n }\n }}\n data-testid='update-profile-form-copy-key'\n >\n {t(copied ? 'copy success label' : 'copy self public key label')}\n </Action>\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => send?.({ type: 'unchooseAction' })}\n data-testid='update-profile-form-back'\n >\n {t('back label')}\n </Action>\n <Action\n variant='primary'\n disabled={disabled}\n onClick={() =>\n onUpdateProfile?.({\n ...(displayName && { displayName }),\n ...((emoji || hue) && { data: { ...(emoji && { emoji }), ...(hue && { hue }) } }),\n })\n }\n data-testid='update-profile-form-continue'\n >\n {t('done label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type CancellableInvitation } from '@dxos/client-protocol';\nimport { useClient } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\n\nimport { useEdgeAgentHandlers } from './useEdgeAgentsHandlers';\nimport { useKubeAgentHandlers } from './useKubeAgentHandlers';\nimport { type AgentFormProps } from '../../components';\n\nexport const useAgentHandlers = (params: {\n invitations: CancellableInvitation[];\n identity: Identity | null;\n}): AgentFormProps => {\n const client = useClient();\n if (client.config.values?.runtime?.client?.edgeFeatures?.agents) {\n return useEdgeAgentHandlers(params);\n } else {\n return useKubeAgentHandlers(params);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type CancellableInvitation } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { QueryAgentStatusResponse } from '@dxos/protocols/proto/dxos/client/services';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { useClient } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\n\nimport { type AgentFormProps } from '../../components';\n\nexport const useEdgeAgentHandlers = ({\n identity,\n}: {\n invitations: CancellableInvitation[];\n identity: Identity | null;\n}): AgentFormProps => {\n const [validationMessage, setValidationMessage] = useState('');\n const [lastReceivedStatus, setLastReceivedStatus] = useState<QueryAgentStatusResponse.AgentStatus>(\n QueryAgentStatusResponse.AgentStatus.UNKNOWN,\n );\n const [agentStatus, setAgentStatus] = useState<AgentFormProps['agentStatus']>('getting');\n const client = useClient();\n // TODO(wittjosiah): This should be based on HALO credentials.\n const agentHostingEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.agents);\n\n const handleStatus = (status: QueryAgentStatusResponse.AgentStatus) => {\n switch (status) {\n case QueryAgentStatusResponse.AgentStatus.ACTIVE:\n case QueryAgentStatusResponse.AgentStatus.INACTIVE:\n setAgentStatus('created');\n break;\n case QueryAgentStatusResponse.AgentStatus.NOT_FOUND:\n setAgentStatus('creatable');\n break;\n case QueryAgentStatusResponse.AgentStatus.UNKNOWN:\n setAgentStatus('getting');\n break;\n }\n };\n\n useEffect(() => {\n const stream = client.services.services.EdgeAgentService?.queryAgentStatus();\n stream?.subscribe(({ status }) => {\n setLastReceivedStatus(status);\n handleStatus(status);\n });\n return () => {\n void stream?.close().catch(() => {});\n };\n }, []);\n\n const onAgentCreate = async () => {\n invariant(identity, 'Identity not found');\n const service = client.services.services.EdgeAgentService;\n if (!service) {\n setAgentStatus('error');\n setValidationMessage('Agent service not initialized.');\n return;\n }\n if (!agentHostingEnabled) {\n setAgentStatus('error');\n setValidationMessage('Edge agents are disabled in config.');\n return;\n }\n setAgentStatus('creating');\n setValidationMessage('');\n try {\n await service.createAgent(null as any, { timeout: 7_500 });\n await Promise.all(\n client.spaces\n .get()\n .map((space) => space?.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED)),\n );\n setAgentStatus('created');\n } catch (err: any) {\n log.catch(err);\n setAgentStatus('error');\n setValidationMessage(`Error creating an agent: ${err.message}`);\n }\n };\n\n const onAgentDestroy = async () => {\n setValidationMessage('Agents are non-destructible.');\n };\n\n const onAgentRefresh = async () => {\n setValidationMessage('');\n handleStatus(lastReceivedStatus);\n };\n\n return {\n onAgentCreate,\n onAgentDestroy,\n onAgentRefresh,\n validationMessage,\n agentStatus,\n agentHostingEnabled,\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { type CancellableInvitation } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { useClient, useAgentHostingClient } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\n\nimport { type AgentFormProps } from '../../components';\n\nexport const useKubeAgentHandlers = ({\n invitations,\n identity,\n}: {\n invitations: CancellableInvitation[];\n identity: Identity | null;\n}): AgentFormProps => {\n const [validationMessage, setValidationMessage] = useState('');\n const [agentStatus, setAgentStatus] = useState<AgentFormProps['agentStatus']>('getting');\n const agentHostingProviderClient = useAgentHostingClient();\n const client = useClient();\n\n const updateAgentStatus = async () => {\n // TODO(nf): if agent exists, subscribe to updates instead of oneshot status\n if (agentHostingProviderClient) {\n setAgentStatus('getting');\n try {\n const agentId = await agentHostingProviderClient?.getAgent(identity?.identityKey.truncate() ?? 'never');\n if (agentId) {\n setAgentStatus('created');\n } else {\n setAgentStatus('creatable');\n }\n } catch (err: any) {\n setAgentStatus('error');\n setValidationMessage(`Couldn’t check agent status: ${err.message}`);\n }\n } else {\n setAgentStatus('error');\n setValidationMessage('No agent provider configured.');\n }\n };\n\n const createAgent = async (invitationCode: string) => {\n invariant(identity, 'Identity not found');\n if (agentHostingProviderClient) {\n setAgentStatus('creating');\n setValidationMessage('');\n try {\n const agentId = await agentHostingProviderClient?.createAgent(invitationCode, identity.identityKey.truncate());\n if (agentId) {\n setAgentStatus('created');\n } else {\n setAgentStatus('creatable');\n setValidationMessage('Error creating agent.');\n }\n } catch (err: any) {\n setValidationMessage(`Error creating agent: ${err.message}`);\n return updateAgentStatus();\n }\n } else {\n setAgentStatus('error');\n setValidationMessage('No agent provider configured.');\n }\n };\n\n const destroyAgent = async () => {\n invariant(identity, 'Identity not found');\n if (agentHostingProviderClient) {\n setAgentStatus('destroying');\n setValidationMessage('');\n try {\n await agentHostingProviderClient?.destroyAgent(identity.identityKey.truncate());\n setAgentStatus('creatable');\n } catch (err: any) {\n setValidationMessage(`Error destroying agent: ${err.message}`);\n return updateAgentStatus();\n }\n } else {\n setAgentStatus('error');\n setValidationMessage('No agent provider configured.');\n }\n };\n\n useEffect(() => {\n void updateAgentStatus();\n }, []);\n\n const handleAgentCreate = useCallback(async (invitation: Invitation) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n return createAgent(invitationCode);\n }\n }, []);\n\n const onAgentCreate = async () => {\n invitations.forEach((invitation) => invitation.cancel());\n\n // TODO(nf): do this work in the hosting provider client?\n const invitation = client.halo.share({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.NONE,\n multiUse: true,\n });\n\n invitation.subscribe(handleAgentCreate);\n };\n\n const onAgentRefresh = async () => {\n setValidationMessage('');\n await updateAgentStatus();\n };\n\n return {\n onAgentCreate,\n onAgentDestroy: destroyAgent,\n onAgentRefresh,\n validationMessage,\n agentStatus,\n agentHostingEnabled: !!agentHostingProviderClient,\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Check, X } from '@phosphor-icons/react';\nimport React, { useMemo } from 'react';\nimport { QR } from 'react-qr-rounded';\n\nimport { type InvitationStatus } from '@dxos/react-client/invitations';\nimport { Clipboard, useId, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { type StepProps } from './StepProps';\nimport { Actions, Action, AuthCode, Emoji, Label, Viewport, type ViewportViewProps, Centered } from '../components';\nimport { invitationStatusValue } from '../util';\n\nexport type InvitationManagerProps = StepProps &\n Partial<InvitationStatus> & {\n invitationUrl?: string;\n };\n\nconst InvitationManagerView = ({ children, ...props }: ViewportViewProps & { emoji?: string }) => {\n return (\n <Viewport.View {...props} classNames='grow flex flex-col justify-around items-center'>\n {children}\n </Viewport.View>\n );\n};\n\nexport const InvitationManager = ({\n invitationUrl,\n active,\n send,\n status,\n multiUse,\n authCode,\n id = '0',\n}: InvitationManagerProps) => {\n const { t } = useTranslation('os');\n const qrLabel = useId('invitation-manager__qr-code');\n const statusValue = multiUse ? 0 : invitationStatusValue.get(status!) ?? 0;\n const showAuthCode = statusValue === 3;\n const emoji = hexToEmoji(id);\n const activeView = useMemo(() => {\n if (multiUse) {\n return 'showing qr';\n }\n switch (true) {\n case statusValue === 5:\n case statusValue < 0:\n return 'showing final';\n case statusValue === 3:\n return 'showing auth code';\n default:\n return 'showing qr';\n }\n }, [statusValue]);\n return (\n <>\n <Viewport.Root activeView={activeView} classNames='grow plb-1'>\n <Viewport.Views>\n <InvitationManagerView id='showing qr' emoji={emoji}>\n <p className='text-sm mlb-1 font-normal text-center'>\n {t(multiUse ? 'invite many qr label' : 'invite one qr label')}\n </p>\n <div role='none' className={mx(descriptionText, 'is-full max-is-[14rem] relative')}>\n <QR\n rounding={100}\n backgroundColor='transparent'\n color='currentColor'\n className={mx('is-full bs-full p-2', showAuthCode && 'invisible')}\n aria-labelledby={qrLabel}\n errorCorrectionLevel='Q'\n cutout={true}\n >\n {invitationUrl ?? 'never'}\n </QR>\n <Centered>\n <Emoji text={emoji} />\n </Centered>\n </div>\n <span id={qrLabel} className='sr-only'>\n {t('qr label')}\n </span>\n <Clipboard.Button variant='ghost' value={invitationUrl ?? 'never'} />\n </InvitationManagerView>\n <InvitationManagerView id='showing auth code'>\n <Label>{t('auth code message')}</Label>\n <AuthCode code={authCode} large classNames='text-black dark:text-white' />\n <Label>{t('auth other device emoji message')}</Label>\n {emoji && <Emoji text={emoji} />}\n </InvitationManagerView>\n <InvitationManagerView id='showing final'>\n {statusValue > 0 ? (\n <Check className={mx('m-1.5', getSize(6))} />\n ) : (\n <X className={mx('m-1.5', getSize(6))} />\n )}\n </InvitationManagerView>\n </Viewport.Views>\n </Viewport.Root>\n <Actions classNames='mbs-4'>\n <Action disabled={!active} onClick={() => send?.({ type: 'deselectInvitation' })}>\n {t('back label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Invitation } from '@dxos/react-client/invitations';\n\n/**\n * This map assigns a numeric value to invitation states to facilitate\n * more terse code which uses combinations of `>`, `<`, and `=` instead of\n * longer sequences of `===` and `||` predicates.\n */\nexport const invitationStatusValue = new Map<Invitation.State, number>([\n [Invitation.State.ERROR, -3],\n [Invitation.State.TIMEOUT, -2],\n [Invitation.State.CANCELLED, -1],\n [Invitation.State.INIT, 0],\n [Invitation.State.CONNECTING, 1],\n [Invitation.State.CONNECTED, 2],\n [Invitation.State.READY_FOR_AUTHENTICATION, 3],\n [Invitation.State.AUTHENTICATING, 4],\n [Invitation.State.SUCCESS, 5],\n]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Warning } from '@phosphor-icons/react';\nimport React, { useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { Message, useTranslation } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { type StepProps } from './StepProps';\nimport { Action, Actions, StepHeading, Input } from '../components';\n\ntype ConfirmResetOptions = Partial<{\n onCancel: () => void;\n onConfirm: () => Promise<void>;\n mode: 'join new identity' | 'recover' | 'reset storage';\n}>;\n\nexport type ConfirmResetProps = StepProps & ConfirmResetOptions;\n\nexport type ConfirmResetImplProps = ConfirmResetOptions & {\n disabled?: boolean;\n pending?: boolean;\n validationMessage?: string;\n};\n\nexport const ConfirmReset = ({ active, onCancel, onConfirm, mode }: ConfirmResetProps) => {\n const { t } = useTranslation('os');\n const [validationMessage, setValidationMessage] = useState('');\n const [pending, setPending] = useState(false);\n const processReset = async () => {\n setPending(true);\n return onConfirm?.().then(\n () => setPending(false),\n (error) => {\n log.catch(error);\n setValidationMessage(t('failed to reset identity message'));\n setPending(false);\n },\n );\n };\n return (\n <ConfirmResetImpl\n disabled={!active}\n pending={pending}\n validationMessage={validationMessage}\n onConfirm={processReset}\n onCancel={onCancel}\n mode={mode}\n />\n );\n};\n\nexport const ConfirmResetImpl = ({\n disabled,\n pending,\n validationMessage,\n onConfirm,\n onCancel,\n mode,\n}: ConfirmResetImplProps) => {\n const { t } = useTranslation('os');\n const confirmationValue = t('confirmation value');\n const [inputValue, setInputValue] = useState('');\n const testIdAffix =\n mode === 'join new identity' ? 'join-new-identity' : mode === 'recover' ? 'recover' : 'reset-storage';\n return (\n <>\n <div role='none' className='grow flex flex-col gap-2 justify-center'>\n <Message.Root valence='error'>\n <Message.Title>\n <Warning className={mx(getSize(6), 'inline mie-2')} />\n {t('sign out chooser title')}\n </Message.Title>\n <Message.Body>{t('sign out chooser message')}</Message.Body>\n </Message.Root>\n <Input\n {...{ validationMessage }}\n label={\n <StepHeading className='text-start mlb-2'>\n {t(\n mode === 'join new identity'\n ? 'join new identity input label'\n : mode === 'recover'\n ? 'recover reset input label'\n : 'reset storage input label',\n {\n confirmationValue,\n },\n )}\n </StepHeading>\n }\n disabled={disabled}\n data-testid={`${testIdAffix}.reset-identity-input`}\n placeholder={t('confirmation placeholder', { confirmationValue })}\n onChange={({ target: { value } }) => setInputValue(value)}\n />\n </div>\n <Actions>\n {onCancel && (\n <Action disabled={disabled} onClick={onCancel} data-testid={`${testIdAffix}.reset-identity-cancel`}>\n {t('cancel label')}\n </Action>\n )}\n {onConfirm && (\n <Action\n variant='destructive'\n disabled={disabled || pending || inputValue !== confirmationValue}\n onClick={onConfirm}\n data-testid={`${testIdAffix}.reset-identity-confirm`}\n >\n {pending ? t('reset in progress label') : t('reset device label')}\n </Action>\n )}\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient, useMulticastObservable } from '@dxos/react-client';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { useId, useThemeContext } from '@dxos/react-ui';\n\nimport { JoinHeading } from './JoinHeading';\nimport { type JoinPanelImplProps, type JoinPanelProps } from './JoinPanelProps';\nimport { useJoinMachine } from './joinMachine';\nimport {\n AdditionMethodChooser,\n IdentityAdded,\n IdentityInput,\n InvitationAuthenticator,\n InvitationInput,\n InvitationRescuer,\n} from './steps';\nimport { Viewport } from '../../components';\nimport { ConfirmReset } from '../../steps';\nimport { stepStyles } from '../../styles';\n\nexport const JoinPanelImpl = (props: JoinPanelImplProps) => {\n const {\n titleId,\n send,\n activeView,\n failed,\n mode,\n unredeemedCodes,\n invitationIds,\n invitationStates,\n invitationAuthMethods,\n succeededKeys,\n failReasons,\n onExit,\n onHaloDone,\n // onSpaceDone,\n exitActionParent,\n doneActionParent,\n onHaloInvitationCancel,\n onSpaceInvitationCancel,\n onHaloInvitationAuthenticate,\n onSpaceInvitationAuthenticate,\n onCancelResetStorage,\n onConfirmResetStorage,\n IdentityInput: IdentityInputComponent = IdentityInput,\n ConfirmReset: ConfirmResetComponent = ConfirmReset,\n } = props;\n return (\n <>\n {mode !== 'halo-only' && <JoinHeading {...{ titleId, mode, onExit, exitActionParent }} />}\n <Viewport.Root focusManaged activeView={activeView}>\n <Viewport.Views>\n <Viewport.View classNames={stepStyles} id='addition method chooser'>\n <AdditionMethodChooser send={send} active={activeView === 'addition method chooser'} />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='reset storage confirmation'>\n <ConfirmResetComponent\n send={send}\n active={activeView === 'reset storage confirmation'}\n onCancel={onCancelResetStorage}\n onConfirm={onConfirmResetStorage}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='create identity input'>\n <IdentityInputComponent\n send={send}\n method='create identity'\n active={activeView === 'create identity input'}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='recover identity input'>\n <IdentityInputComponent\n send={send}\n method='recover identity'\n active={activeView === 'recover identity input'}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='halo invitation input'>\n <InvitationInput\n send={send}\n Kind='Halo'\n active={activeView === 'halo invitation input'}\n {...(unredeemedCodes?.Halo && { unredeemedCode: unredeemedCodes.Halo })}\n {...(succeededKeys?.Halo && { succeededKeys: succeededKeys.Halo })}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='halo invitation rescuer'>\n <InvitationRescuer\n send={send}\n Kind='Halo'\n active={activeView === 'halo invitation rescuer'}\n invitationState={invitationStates?.Halo}\n onInvitationCancel={onHaloInvitationCancel}\n failReason={failReasons?.Halo}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='halo invitation authenticator'>\n <InvitationAuthenticator\n send={send}\n Kind='Halo'\n invitationId={invitationIds?.Halo}\n authMethod={invitationAuthMethods?.Halo}\n active={activeView === 'halo invitation authenticator'}\n onInvitationCancel={onHaloInvitationCancel}\n onInvitationAuthenticate={onHaloInvitationAuthenticate}\n {...(failed.has('Halo') && { failed: true })}\n />\n </Viewport.View>\n {/* <Viewport.View classNames={stepStyles} id='halo invitation accepted'>\n <InvitationAccepted\n {...{\n send,\n Kind: 'Halo',\n active: activeView === 'halo invitation accepted',\n doneActionParent,\n onDone: onHaloDone,\n }}\n />\n </Viewport.View> */}\n <Viewport.View classNames={stepStyles} id='identity added'>\n <IdentityAdded\n {...{ send, mode, active: activeView === 'identity added', doneActionParent, onDone: onHaloDone }}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='space invitation input'>\n <InvitationInput\n send={send}\n Kind='Space'\n active={activeView === 'space invitation input'}\n {...(unredeemedCodes?.Space && { unredeemedCode: unredeemedCodes.Space })}\n {...(succeededKeys?.Space && { succeededKeys: succeededKeys.Space })}\n onExit={onExit}\n exitActionParent={exitActionParent}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='space invitation rescuer'>\n <InvitationRescuer\n send={send}\n Kind='Space'\n active={activeView === 'space invitation rescuer'}\n invitationState={invitationStates?.Space}\n onInvitationCancel={onSpaceInvitationCancel}\n failReason={failReasons?.Space}\n />\n </Viewport.View>\n <Viewport.View classNames={stepStyles} id='space invitation authenticator'>\n <InvitationAuthenticator\n send={send}\n Kind='Space'\n invitationId={invitationIds?.Space}\n authMethod={invitationAuthMethods?.Space}\n active={activeView === 'space invitation authenticator'}\n onInvitationCancel={onSpaceInvitationCancel}\n onInvitationAuthenticate={onSpaceInvitationAuthenticate}\n {...(failed.has('Space') && { failed: true })}\n />\n </Viewport.View>\n {/* <Viewport.View classNames={stepStyles} id='space invitation accepted'>\n <InvitationAccepted\n {...{\n send,\n Kind: 'Space',\n active: activeView === 'space invitation accepted',\n doneActionParent,\n onDone: onSpaceDone,\n }}\n />\n </Viewport.View> */}\n </Viewport.Views>\n </Viewport.Root>\n </>\n );\n};\n\nexport const JoinPanel = ({\n titleId: propsTitleId,\n mode = 'default',\n initialDisposition = 'default',\n initialInvitationCode,\n exitActionParent,\n onExit,\n doneActionParent,\n onDone: propsOnDone,\n onCancelResetStorage,\n}: JoinPanelProps) => {\n const client = useClient();\n const identity = useIdentity();\n const { hasIosKeyboard } = useThemeContext();\n const titleId = useId('joinPanel__heading', propsTitleId);\n\n const [joinState, joinSend, joinService] = useJoinMachine(client, {\n context: {\n mode,\n initialDisposition,\n identity,\n ...(initialInvitationCode && {\n [mode === 'halo-only' ? 'halo' : 'space']: { unredeemedCode: initialInvitationCode },\n }),\n },\n });\n\n useEffect(() => {\n const subscription = joinService.subscribe((state) => {\n log('[state]', state);\n });\n\n return subscription.unsubscribe;\n }, [joinService]);\n\n useEffect(() => {\n const stateStack = joinState.configuration[0].id.split('.');\n const innermostState = stateStack[stateStack.length - 1];\n const autoFocusValue = innermostState === 'finishingJoining' ? 'successSpaceInvitation' : innermostState;\n const $nextAutofocus: HTMLElement | null = document.querySelector(`[data-autofocus~=\"${autoFocusValue}\"]`);\n if ($nextAutofocus && !(hasIosKeyboard && $nextAutofocus.hasAttribute('data-prevent-ios-autofocus'))) {\n $nextAutofocus.focus();\n }\n }, [joinState.value, hasIosKeyboard]);\n\n const activeView = useMemo(() => {\n switch (true) {\n case joinState.matches({ choosingIdentity: 'choosingAuthMethod' }):\n return 'addition method chooser';\n case joinState.matches('resettingIdentity'):\n return 'reset storage confirmation';\n case joinState.matches({ choosingIdentity: 'creatingIdentity' }):\n return 'create identity input';\n case joinState.matches({ choosingIdentity: 'recoveringIdentity' }):\n return 'recover identity input';\n case joinState.matches({\n choosingIdentity: { acceptingHaloInvitation: 'inputtingHaloInvitationCode' },\n }):\n return 'halo invitation input';\n case [\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'connectingHaloInvitation' },\n },\n },\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'failingHaloInvitation' },\n },\n },\n ].some(joinState.matches):\n return 'halo invitation rescuer';\n case [\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'inputtingHaloVerificationCode' },\n },\n },\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'authenticatingHaloVerificationCode' },\n },\n },\n {\n choosingIdentity: {\n acceptingHaloInvitation: {\n acceptingRedeemedHaloInvitation: 'authenticationFailingHaloVerificationCode',\n },\n },\n },\n ].some(joinState.matches):\n return 'halo invitation authenticator';\n case [\n {\n choosingIdentity: {\n acceptingHaloInvitation: { acceptingRedeemedHaloInvitation: 'successHaloInvitation' },\n },\n },\n 'finishingJoiningHalo',\n ].some(joinState.matches):\n return 'halo invitation accepted';\n case joinState.matches({\n choosingIdentity: 'confirmingAddedIdentity',\n }):\n return 'identity added';\n case joinState.matches({\n acceptingSpaceInvitation: 'inputtingSpaceInvitationCode',\n }):\n return 'space invitation input';\n case [\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'connectingSpaceInvitation' },\n },\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'failingSpaceInvitation' },\n },\n ].some(joinState.matches):\n return 'space invitation rescuer';\n case [\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'inputtingSpaceVerificationCode' },\n },\n {\n acceptingSpaceInvitation: { acceptingRedeemedSpaceInvitation: 'authenticatingSpaceVerificationCode' },\n },\n {\n acceptingSpaceInvitation: {\n acceptingRedeemedSpaceInvitation: 'authenticationFailingSpaceVerificationCode',\n },\n },\n ].some(joinState.matches):\n return 'space invitation authenticator';\n case joinState.matches('finishingJoiningSpace'):\n return 'space invitation accepted';\n default:\n return 'never';\n }\n }, [joinState]);\n\n useEffect(() => {\n switch (activeView) {\n case 'halo invitation accepted':\n onHaloDone();\n break;\n case 'space invitation accepted':\n onSpaceDone();\n break;\n }\n }, [activeView]);\n\n const failed = useMemo(() => {\n const result: JoinPanelImplProps['failed'] = new Set();\n switch (true) {\n case joinState.matches({\n choosingIdentity: {\n acceptingHaloInvitation: {\n acceptingRedeemedHaloInvitation: 'authenticationFailingHaloVerificationCode',\n },\n },\n }):\n result.add('Halo');\n break;\n case joinState.matches({\n acceptingSpaceInvitation: {\n acceptingRedeemedSpaceInvitation: 'authenticationFailingSpaceVerificationCode',\n },\n }):\n result.add('Space');\n break;\n }\n return result;\n }, [joinState]);\n\n const unredeemedCodes = useMemo(\n () => ({\n Halo: joinState.context.halo.unredeemedCode,\n Space: joinState.context.space.unredeemedCode,\n }),\n [joinState],\n );\n\n const spaces = useMulticastObservable(client.spaces);\n\n const succeededKeys = useMemo(\n () => ({\n Space: spaces ? new Set(spaces.map(({ key }) => key.toHex())) : undefined,\n }),\n [spaces],\n );\n\n const invitationStates = useMemo(\n () => ({\n Halo: joinState.context.halo.invitationObservable?.get().state,\n Space: joinState.context.space.invitationObservable?.get().state,\n }),\n [joinState],\n );\n\n const invitationAuthMethods = useMemo(\n () => ({\n Halo: joinState.context.halo.invitationObservable?.get().authMethod,\n Space: joinState.context.space.invitationObservable?.get().authMethod,\n }),\n [joinState],\n );\n\n const invitationIds = useMemo(\n () => ({\n Halo: joinState.context.halo.invitationObservable?.get().invitationId,\n Space: joinState.context.space.invitationObservable?.get().invitationId,\n }),\n [joinState],\n );\n\n const failReasons = useMemo(\n () => ({\n Halo: joinState.context.halo.failReason,\n Space: joinState.context.space.failReason,\n }),\n [joinState],\n );\n\n const onHaloDone = useCallback(() => {\n propsOnDone?.({\n identityKey: joinState.context.identity?.identityKey ?? joinState.context.halo.invitation?.identityKey ?? null,\n swarmKey: joinState.context.halo.invitation?.swarmKey ?? null,\n spaceKey: joinState.context.identity?.spaceKey ?? joinState.context.halo.invitation?.spaceKey ?? null,\n target: joinState.context.halo.invitation?.target ?? null,\n });\n }, [joinState, propsOnDone]);\n\n const onSpaceDone = useCallback(() => {\n propsOnDone?.({\n identityKey: joinState.context.space.invitation?.identityKey ?? null,\n swarmKey: joinState.context.space.invitation?.swarmKey ?? null,\n spaceKey: joinState.context.space.invitation?.spaceKey ?? null,\n target: joinState.context.space.invitation?.target ?? null,\n });\n }, [joinState, propsOnDone]);\n\n const onConfirmResetStorage = useCallback(\n () =>\n client.reset().then(() => {\n joinSend({ type: 'resetIdentity' });\n }),\n [client, joinSend],\n );\n\n return (\n <JoinPanelImpl\n {...{\n titleId,\n mode,\n send: joinSend,\n activeView,\n failed,\n failReasons,\n pending: ['connecting', 'authenticating'].some((str) => joinState?.configuration[0].id.includes(str)),\n unredeemedCodes,\n invitationIds,\n invitationStates,\n invitationAuthMethods,\n succeededKeys,\n identity,\n onExit,\n exitActionParent,\n doneActionParent,\n onHaloDone,\n onSpaceDone,\n onHaloInvitationCancel: () => joinState.context.halo.invitationObservable?.cancel(),\n onSpaceInvitationCancel: () => joinState.context.space.invitationObservable?.cancel(),\n onHaloInvitationAuthenticate: (authCode: string) => {\n // todo(thure): Is this necessary? Shouldn’t the observable emit this?\n joinSend({ type: 'authenticateHaloVerificationCode' });\n return joinState.context.halo.invitationObservable?.authenticate(authCode);\n },\n onSpaceInvitationAuthenticate: (authCode: string) => {\n joinSend({ type: 'authenticateSpaceVerificationCode' });\n return joinState.context.space.invitationObservable?.authenticate(authCode);\n },\n onConfirmResetStorage,\n onCancelResetStorage,\n }}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { X } from '@phosphor-icons/react';\nimport React, { cloneElement, type ForwardedRef, forwardRef } from 'react';\n\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, getSize, mx } from '@dxos/react-ui-theme';\n\nimport { type JoinPanelMode } from './JoinPanelProps';\nimport { Heading } from '../../components';\n\nexport interface JoinSpaceHeadingProps {\n mode?: JoinPanelMode;\n titleId: string;\n exitActionParent?: Parameters<typeof cloneElement>[0];\n onExit?: () => void;\n}\n\n// TODO(wittjosiah): Accesses the space properties directly which will trigger ECHO warnings without observer.\nexport const JoinHeading = forwardRef(\n ({ mode, titleId, exitActionParent, onExit }: JoinSpaceHeadingProps, forwardedRef: ForwardedRef<HTMLDivElement>) => {\n const { t } = useTranslation('os');\n\n const exitButton = (\n <Button\n variant='ghost'\n {...(onExit && { onClick: onExit })}\n classNames={mx(descriptionText, 'plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]')}\n data-testid='join-exit'\n >\n <X weight='bold' className={getSize(4)} />\n <span className='sr-only'>{t('exit label')}</span>\n </Button>\n );\n\n return (\n <Heading\n ref={forwardedRef}\n titleId={titleId}\n title={t(mode === 'halo-only' ? 'selecting identity heading' : 'joining space heading')}\n {...(mode === 'halo-only'\n ? { titleSrOnly: true }\n : { corner: exitActionParent ? cloneElement(exitActionParent, {}, exitButton) : exitButton })}\n titleSrOnly={mode === 'halo-only'}\n />\n );\n },\n);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMachine } from '@xstate/react';\nimport { useCallback } from 'react';\nimport {\n assign,\n createMachine,\n type InterpreterFrom,\n type StateFrom,\n type StateNodeConfig,\n type Subscribable,\n type Subscription,\n} from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Client, AlreadyJoinedError } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type AuthenticatingInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\n\nimport { type JoinPanelInitialDisposition, type JoinPanelMode } from './JoinPanelProps';\nimport { type FailReason } from '../../types';\n\ntype InvitationKindContext = Partial<{\n failReason: FailReason | null;\n unredeemedCode: string;\n invitationObservable: AuthenticatingInvitationObservable;\n invitation: Invitation;\n invitationSubscribable: Subscribable<InvitationEvent>;\n succeededKeys: Set<string>;\n}>;\n\ntype JoinMachineContext = {\n mode: JoinPanelMode;\n initialDisposition: JoinPanelInitialDisposition;\n identity: Identity | null;\n halo: InvitationKindContext;\n space: InvitationKindContext;\n};\n\ntype SelectIdentityEvent = {\n type: 'selectIdentity';\n identity: Identity;\n};\n\ntype SetInvitationCodeEvent = {\n type: 'setHaloInvitationCode' | 'setSpaceInvitationCode';\n code: string;\n succeededKeys?: Set<string>;\n};\n\ntype SetInvitationEvent = {\n type:\n | 'authenticatingHaloInvitation'\n | 'authenticatingSpaceInvitation'\n | 'readyForAuthenticationHaloInvitation'\n | 'readyForAuthenticationSpaceInvitation'\n | 'connectingHaloInvitation'\n | 'connectingSpaceInvitation'\n | 'connectedHaloInvitation'\n | 'connectedSpaceInvitation'\n | 'successHaloInvitation'\n | 'successSpaceInvitation';\n invitation: Invitation;\n};\n\ntype FailInvitationEvent = {\n type: 'failHaloInvitation' | 'failSpaceInvitation';\n reason: FailReason;\n};\n\ntype EmptyInvitationEvent = {\n type:\n | 'authenticateHaloVerificationCode'\n | 'authenticateSpaceVerificationCode'\n | 'resetHaloInvitation'\n | 'resetSpaceInvitation'\n | 'deselectInvitation';\n};\n\ntype InvitationEvent = FailInvitationEvent | SetInvitationCodeEvent | SetInvitationEvent | EmptyInvitationEvent;\n\ntype Kind = 'Space' | 'Halo';\n\nconst getInvitationSubscribable = (\n Kind: Kind,\n invitation: AuthenticatingInvitationObservable,\n): Subscribable<InvitationEvent> => {\n log('[subscribing to invitation]', invitation);\n return {\n subscribe: (\n next: (value: InvitationEvent) => void,\n onError?: (error: any) => void,\n complete?: () => void,\n ): Subscription =>\n invitation.subscribe(\n (invitation: Invitation) => {\n switch (invitation.state) {\n case Invitation.State.CONNECTING: {\n log('[invitation connecting]', { Kind, invitation });\n return next({ type: `connecting${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.CONNECTED: {\n log('[invitation connected]', { Kind, invitation });\n return next({ type: `connected${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.READY_FOR_AUTHENTICATION: {\n log('[invitation ready for authentication]', { Kind, invitation });\n return next({ type: `readyForAuthentication${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.AUTHENTICATING: {\n log('[invitation authenticating]', { Kind, invitation });\n return next({ type: `authenticating${Kind}Invitation`, invitation });\n }\n\n case Invitation.State.SUCCESS: {\n log('[invitation success]', { Kind, invitation });\n next({ type: `success${Kind}Invitation`, invitation });\n return complete?.();\n }\n\n case Invitation.State.CANCELLED: {\n log.warn('[invitation cancelled]', { Kind });\n return next({ type: `fail${Kind}Invitation`, reason: 'cancelled' } as FailInvitationEvent);\n }\n\n case Invitation.State.TIMEOUT: {\n log.error('[invitation timeout]', { Kind });\n return next({ type: `fail${Kind}Invitation`, reason: 'timeout' } as FailInvitationEvent);\n }\n }\n },\n (error: any) => {\n if (error instanceof AlreadyJoinedError) {\n log('[already joined]', { Kind, error });\n next({ type: `success${Kind}Invitation`, invitation: invitation.get() });\n return complete?.();\n }\n\n log.error('[invitation errored]', { Kind, error });\n next({ type: `fail${Kind}Invitation`, reason: 'error' });\n return onError?.(error);\n },\n ),\n } as Subscribable<InvitationEvent>;\n};\n\nconst acceptingInvitationTemplate = (Kind: Kind, successTarget: string) => {\n const config: StateNodeConfig<JoinMachineContext, any, InvitationEvent> = {\n initial: `unknown${Kind}`,\n states: {\n [`unknown${Kind}`]: {\n always: [\n {\n cond: ({ mode }) => mode === 'halo-only' && Kind === 'Space',\n target: '#join.finishingJoiningHalo',\n },\n {\n cond: (context) => !!context[Kind.toLowerCase() as Lowercase<typeof Kind>].unredeemedCode,\n target: `acceptingRedeemed${Kind}Invitation`,\n actions: [`redeem${Kind}InvitationCode`, `invalidate${Kind}InvitationCode`, 'log'],\n },\n {\n target: `inputting${Kind}InvitationCode`,\n actions: 'log',\n },\n ],\n },\n [`inputting${Kind}InvitationCode`]: {},\n [`acceptingRedeemed${Kind}Invitation`]: {\n invoke: {\n src: (context) => context[Kind.toLowerCase() as Lowercase<Kind>].invitationSubscribable!,\n },\n initial: `unknown${Kind}Invitation`,\n states: {\n [`unknown${Kind}Invitation`]: {\n always: [\n {\n cond: (context) => {\n if (Kind !== 'Space') {\n return false;\n } else {\n const spaceKey = context.space.invitation?.spaceKey?.toHex();\n const succeededKeys = context.space.succeededKeys;\n return spaceKey ? !!succeededKeys?.has(spaceKey) : false;\n }\n },\n target: successTarget,\n actions: 'log',\n },\n {\n cond: (context) => {\n const invitation = context[Kind.toLowerCase() as Lowercase<Kind>].invitation;\n return !invitation || invitation?.state === Invitation.State.CONNECTING;\n },\n target: `connecting${Kind}Invitation`,\n actions: 'log',\n },\n {\n target: `inputting${Kind}VerificationCode`,\n actions: 'log',\n },\n ],\n },\n [`connecting${Kind}Invitation`]: {},\n [`inputting${Kind}VerificationCode`]: {},\n [`authenticating${Kind}VerificationCode`]: {\n on: {\n [`readyForAuthentication${Kind}Invitation`]: {\n target: `authenticationFailing${Kind}VerificationCode`,\n actions: ['setInvitation', 'log'],\n },\n },\n },\n [`authenticationFailing${Kind}VerificationCode`]: {},\n [`failing${Kind}Invitation`]: {},\n [`success${Kind}Invitation`]: {},\n },\n on: {\n [`reset${Kind}Invitation`]: {\n target: `#join${Kind === 'Halo' ? '.choosingIdentity' : ''}.accepting${Kind}Invitation.unknown${Kind}`,\n actions: ['resetInvitation', 'log'],\n },\n [`connecting${Kind}Invitation`]: {\n target: `.connecting${Kind}Invitation`,\n actions: ['setInvitation', 'log'],\n },\n [`connected${Kind}Invitation`]: {\n target: `.connecting${Kind}Invitation`,\n actions: ['setInvitation', 'log'],\n },\n [`readyForAuthentication${Kind}Invitation`]: {\n target: `.inputting${Kind}VerificationCode`,\n actions: ['setInvitation', 'log'],\n },\n [`authenticating${Kind}Invitation`]: {\n target: `.authenticating${Kind}VerificationCode`,\n actions: ['setInvitation', 'log'],\n },\n [`success${Kind}Invitation`]: { target: successTarget, actions: ['setInvitation', 'log'] },\n [`fail${Kind}Invitation`]: {\n target: `.failing${Kind}Invitation`,\n actions: [\n assign({\n [Kind.toLowerCase()]: (context: JoinMachineContext, event: FailInvitationEvent) => ({\n ...context[Kind.toLowerCase() as Lowercase<Kind>],\n failReason: event.reason,\n }),\n }),\n 'log',\n ],\n },\n },\n },\n },\n on: {\n [`set${Kind}InvitationCode`]: {\n target: `.acceptingRedeemed${Kind}Invitation`,\n actions: [\n assign({\n [Kind.toLowerCase()]: (context: JoinMachineContext, event: SetInvitationCodeEvent) => ({\n ...context[Kind.toLowerCase() as Lowercase<Kind>],\n unredeemedCode: event.code,\n succeededKeys: event.succeededKeys,\n }),\n }),\n `redeem${Kind}InvitationCode`,\n `invalidate${Kind}InvitationCode`,\n 'log',\n ],\n },\n },\n };\n return config as StateNodeConfig<JoinMachineContext, typeof config, JoinEvent>;\n};\n\ntype EmptyJoinEvent = {\n type:\n | 'resetIdentity'\n | 'recoverIdentity'\n | 'createIdentity'\n | 'acceptHaloInvitation'\n | 'addIdentity'\n | 'selectIdentity'\n | 'deselectAuthMethod';\n};\n\ntype JoinEvent = InvitationEvent | SelectIdentityEvent | EmptyJoinEvent;\n\nconst joinMachine = createMachine<JoinMachineContext, JoinEvent>(\n {\n id: 'join',\n predictableActionArguments: true,\n context: {\n initialDisposition: 'default',\n mode: 'default',\n identity: null,\n halo: {},\n space: {},\n },\n initial: 'unknown',\n states: {\n unknown: {\n always: [\n { cond: 'existingIdentity', target: 'resettingIdentity', actions: 'log' },\n {\n cond: 'initiallyAcceptingHaloInvitation',\n target: '#join.choosingIdentity.acceptingHaloInvitation',\n actions: 'log',\n },\n {\n cond: 'initiallyRecoveringIdentity',\n target: '#join.choosingIdentity.recoveringIdentity',\n actions: 'log',\n },\n { cond: 'noSelectedIdentity', target: 'choosingIdentity', actions: 'log' },\n { target: 'acceptingSpaceInvitation', actions: 'log' },\n ],\n },\n // TODO(wittjosiah): Remove.\n choosingIdentity: {\n initial: 'unknownAuthMethod',\n states: {\n unknownAuthMethod: {\n always: [\n { cond: 'hasHaloUnredeemedCode', target: 'acceptingHaloInvitation', actions: 'log' },\n { target: 'choosingAuthMethod', actions: 'log' },\n ],\n },\n choosingAuthMethod: {},\n recoveringIdentity: {},\n creatingIdentity: {},\n acceptingHaloInvitation: acceptingInvitationTemplate('Halo', '#join.acceptingSpaceInvitation'),\n confirmingAddedIdentity: {},\n },\n on: {\n recoverIdentity: { target: '.recoveringIdentity', actions: 'log' },\n createIdentity: { target: '.creatingIdentity', actions: 'log' },\n acceptHaloInvitation: { target: '.acceptingHaloInvitation', actions: 'log' },\n addIdentity: { target: '.confirmingAddedIdentity', actions: 'log' },\n selectIdentity: {\n target: 'acceptingSpaceInvitation',\n actions: ['setIdentity', 'log'],\n },\n deselectAuthMethod: { target: '.choosingAuthMethod', actions: 'log' },\n },\n },\n // TODO(wittjosiah): Factor out to a machine handling recovery and device invitations.\n resettingIdentity: {},\n acceptingSpaceInvitation: acceptingInvitationTemplate('Space', '#join.finishingJoiningSpace'),\n finishingJoiningSpace: {\n type: 'final',\n },\n finishingJoiningHalo: {\n type: 'final',\n },\n },\n on: {\n resetIdentity: { target: 'choosingIdentity', actions: 'unsetIdentity' },\n },\n },\n {\n guards: {\n existingIdentity: ({ identity, mode }, _event) => mode === 'halo-only' && !!identity,\n noSelectedIdentity: ({ identity }, _event) => !identity,\n initiallyAcceptingHaloInvitation: ({ identity, initialDisposition }, _event) =>\n !identity && initialDisposition === 'accept-halo-invitation',\n initiallyRecoveringIdentity: ({ identity, initialDisposition }, _event) =>\n !identity && initialDisposition === 'recover-identity',\n hasHaloUnredeemedCode: ({ halo }, _event) => !!halo.unredeemedCode,\n noSpaceInvitation: ({ space }, _event) => !space.invitation && !space.unredeemedCode,\n },\n actions: {\n setIdentity: assign<JoinMachineContext, SelectIdentityEvent>({\n identity: (context, event) => event.identity,\n }),\n unsetIdentity: assign<JoinMachineContext>({\n identity: () => null,\n }),\n resetInvitation: assign<JoinMachineContext, EmptyInvitationEvent>({\n halo: (context, event) => {\n if (event.type !== 'resetHaloInvitation') {\n return context.halo;\n }\n\n if (context.halo.invitationObservable) {\n void context.halo.invitationObservable.cancel();\n }\n\n return {\n ...context.halo,\n invitation: undefined,\n invitationObservable: undefined,\n invitationSubscribable: undefined,\n };\n },\n space: (context, event) => {\n if (event.type !== 'resetSpaceInvitation') {\n return context.space;\n }\n\n if (context.space.invitationObservable) {\n void context.space.invitationObservable.cancel();\n }\n\n return {\n ...context.space,\n invitation: undefined,\n invitationObservable: undefined,\n invitationSubscribable: undefined,\n };\n },\n }),\n setInvitation: assign<JoinMachineContext, SetInvitationEvent>({\n halo: (context, event) =>\n event.type.includes('Halo') ? { ...context.halo, invitation: event.invitation } : context.halo,\n space: (context, event) =>\n event.type.includes('Space') ? { ...context.space, invitation: event.invitation } : context.space,\n }),\n log: (context, event) => {\n log('[transition]', {\n event,\n haloInvitation: context.halo.invitation,\n spaceInvitation: context.space.invitation,\n });\n },\n },\n },\n);\n\ntype JoinMachine = typeof joinMachine;\n\ntype JoinState = StateFrom<JoinMachine>;\ntype JoinSendVoid = (...params: Parameters<InterpreterFrom<JoinMachine>['send']>) => void;\ntype JoinSend = InterpreterFrom<JoinMachine>['send'] | JoinSendVoid;\n\nexport const defaultCodeFromUrl = (invitationType: 'halo' | 'space', text: string) => {\n try {\n const searchParams = new URLSearchParams(text.substring(text.lastIndexOf('?')));\n return (\n searchParams.get(`${invitationType}InvitationCode`) ??\n searchParams.get(`${invitationType}Invitation`) ??\n searchParams.get('invitationCode') ??\n searchParams.get('invitation') ??\n text\n );\n } catch (err) {\n log.catch(err);\n return text;\n }\n};\n\nconst useJoinMachine = (\n client: Client,\n options?: Parameters<typeof useMachine<JoinMachine>>[1] & { onInvalidateInvitationCode?: (code: string) => void },\n) => {\n const redeemHaloInvitationCode = useCallback(\n ({ halo }: JoinMachineContext) => {\n if (halo.unredeemedCode) {\n try {\n const invitation = InvitationEncoder.decode(defaultCodeFromUrl('halo', halo.unredeemedCode));\n const invitationObservable = client.halo.join(invitation);\n return {\n ...halo,\n invitationObservable,\n invitationSubscribable: getInvitationSubscribable('Halo', invitationObservable),\n };\n } catch (err) {\n log.error('Could not redeem device invitation code', err);\n return halo;\n }\n } else {\n return halo;\n }\n },\n [client],\n );\n\n const redeemSpaceInvitationCode = useCallback(\n ({ space }: JoinMachineContext) => {\n if (space.unredeemedCode) {\n try {\n const invitation = InvitationEncoder.decode(defaultCodeFromUrl('space', space.unredeemedCode));\n const invitationObservable = client.spaces.join(invitation);\n return {\n ...space,\n invitationObservable,\n invitationSubscribable: getInvitationSubscribable('Space', invitationObservable),\n };\n } catch (err) {\n log.error('Could not redeem space invitation code', err);\n return space;\n }\n } else {\n return space;\n }\n },\n [client],\n );\n\n const invalidateHaloInvitationCode = useCallback(\n ({ halo }: JoinMachineContext) => {\n if (halo.unredeemedCode) {\n options?.onInvalidateInvitationCode?.(halo.unredeemedCode);\n return {\n ...halo,\n unredeemedCode: undefined,\n };\n } else {\n return halo;\n }\n },\n [options?.onInvalidateInvitationCode],\n );\n\n const invalidateSpaceInvitationCode = useCallback(\n ({ space }: JoinMachineContext) => {\n if (space.unredeemedCode) {\n options?.onInvalidateInvitationCode?.(space.unredeemedCode);\n return {\n ...space,\n unredeemedCode: undefined,\n };\n } else {\n return space;\n }\n },\n [options?.onInvalidateInvitationCode],\n );\n\n return useMachine(joinMachine, {\n ...options,\n actions: {\n ...options?.actions,\n redeemHaloInvitationCode: assign<JoinMachineContext>({ halo: redeemHaloInvitationCode }),\n redeemSpaceInvitationCode: assign<JoinMachineContext>({ space: redeemSpaceInvitationCode }),\n invalidateHaloInvitationCode: assign<JoinMachineContext>({\n halo: invalidateHaloInvitationCode,\n }),\n invalidateSpaceInvitationCode: assign<JoinMachineContext>({\n space: invalidateSpaceInvitationCode,\n }),\n },\n });\n};\n\nexport type { JoinMachine, JoinState, JoinSend, JoinEvent, JoinMachineContext };\nexport { joinMachine, useJoinMachine };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretRight, Plus, QrCode, Textbox } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { CompoundButton, StepHeading } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport type AdditionMethodChooserProps = JoinStepProps;\n\nexport const AdditionMethodChooser = (viewStateProps: AdditionMethodChooserProps) => {\n const disabled = !viewStateProps.active;\n const { send } = viewStateProps;\n\n const { t } = useTranslation('os');\n\n const sharedButtonProps = {\n disabled,\n after: <CaretRight className={getSize(4)} weight='bold' />,\n slots: { label: { className: 'text-sm' } },\n };\n\n return (\n <>\n <StepHeading>{t('addition method chooser title')}</StepHeading>\n <div role='none' className='flex flex-col gap-1 grow'>\n <CompoundButton\n {...sharedButtonProps}\n description={t('create identity description')}\n before={<Plus className={getSize(6)} />}\n onClick={() => send({ type: 'createIdentity' })}\n data-autofocus='choosingAuthMethod'\n data-testid='identity-chooser.create-identity'\n >\n {t('create identity label')}\n </CompoundButton>\n <CompoundButton\n {...sharedButtonProps}\n description={t('join identity description')}\n before={<QrCode className={getSize(6)} />}\n onClick={() => send({ type: 'acceptHaloInvitation' })}\n data-testid='identity-chooser.join-identity'\n >\n {t('join identity label')}\n </CompoundButton>\n <CompoundButton\n {...sharedButtonProps}\n description={t('recover identity description')}\n before={<Textbox className={getSize(6)} />}\n onClick={() => send({ type: 'recoverIdentity' })}\n data-testid='identity-chooser.recover-identity'\n >\n {t('recover identity label')}\n </CompoundButton>\n </div>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { cloneElement } from 'react';\n\nimport { generateName } from '@dxos/display-name';\nimport type { Identity } from '@dxos/react-client/halo';\nimport { Avatar, useId, useTranslation } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\nimport { hexToFallback } from '@dxos/util';\n\nimport { Action, Actions, StepHeading } from '../../../components';\nimport { type JoinPanelMode, type JoinStepProps } from '../JoinPanelProps';\n\nexport interface IdentityAddedProps extends JoinStepProps {\n mode?: JoinPanelMode;\n addedIdentity?: Identity;\n}\n\nexport const IdentityAdded = (props: IdentityAddedProps) => {\n const { mode, addedIdentity, active, send, onDone, doneActionParent } = props;\n const disabled = !active;\n const { t } = useTranslation('os');\n\n const addedIdentityHex = addedIdentity?.identityKey.toHex() ?? '0';\n const fallbackValue = hexToFallback(addedIdentityHex);\n const labelId = useId('identityListItem__label');\n const displayName = addedIdentity?.profile?.displayName ?? (addedIdentity && generateName(addedIdentityHex));\n\n const doneAction = (\n <Action\n {...(onDone && { onClick: () => onDone(null) })}\n disabled={disabled}\n data-autofocus='confirmingAddedIdentity'\n data-testid='identity-added-done'\n >\n <span>{t('done label')}</span>\n </Action>\n );\n\n return (\n <>\n <StepHeading>{t('identity added label')}</StepHeading>\n <div role='none' className='grow flex flex-col items-center justify-center text-center gap-2'>\n <Avatar.Root labelId={labelId}>\n <Avatar.Content\n status='active'\n hue={addedIdentity?.profile?.data?.hue || fallbackValue.hue}\n fallback={addedIdentity?.profile?.data?.emoji || fallbackValue.emoji}\n />\n <Avatar.Label classNames={mx('text-lg truncate', !addedIdentity?.profile?.displayName && 'font-mono')}>\n {displayName}\n </Avatar.Label>\n </Avatar.Root>\n </div>\n <Actions>\n {mode === 'halo-only' ? (\n doneActionParent ? (\n cloneElement(doneActionParent, {}, doneAction)\n ) : (\n doneAction\n )\n ) : (\n <Action\n variant='primary'\n disabled={disabled || !addedIdentity}\n onClick={() => addedIdentity && send({ type: 'selectIdentity', identity: addedIdentity })}\n data-autofocus='confirmingAddedIdentity'\n >\n {t('continue label')}\n </Action>\n )}\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { Action, Actions, StepHeading, Input } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport interface IdentityCreatorProps extends JoinStepProps {\n method: 'recover identity' | 'create identity';\n}\n\nexport type IdentityInputProps = IdentityCreatorProps;\n\nexport type IdentityInputImplProps = IdentityCreatorProps & {\n onConfirm?: (value: string) => MaybePromise<void>;\n validationMessage?: string;\n};\n\nexport const IdentityInput = (props: IdentityInputProps) => {\n const { send, method } = props;\n const isRecover = method === 'recover identity';\n const client = useClient();\n const { t } = useTranslation('os');\n const [validationMessage, setValidationMessage] = useState('');\n const handleConfirm = async (value: string) => {\n if (isRecover) {\n await client.halo.recoverIdentity({ recoveryCode: value }).then(\n (identity) => {\n send?.({ type: 'selectIdentity' as const, identity });\n },\n (error) => {\n log.catch(error);\n setValidationMessage(t('failed to recover identity message'));\n },\n );\n } else {\n await client.halo.createIdentity({ displayName: value }).then(\n (identity) => {\n send?.({ type: 'selectIdentity' as const, identity });\n },\n (error) => {\n log.catch(error);\n setValidationMessage(t('failed to create identity message'));\n },\n );\n }\n };\n return <IdentityInputImpl {...props} onConfirm={handleConfirm} validationMessage={validationMessage} />;\n};\n\n// TODO(zhenyasav): impl shouldn't need send()\nexport const IdentityInputImpl = (props: IdentityInputImplProps) => {\n const { method, active, onConfirm, validationMessage } = props;\n const { t } = useTranslation('os');\n const [inputValue, setInputValue] = useState('');\n const [pending, setPending] = useState(false);\n const disabled = !active || pending;\n const isRecover = method === 'recover identity';\n\n const handleConfirm = useCallback(async () => {\n setPending(true);\n await onConfirm?.(inputValue);\n setPending(false);\n }, [onConfirm, inputValue]);\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <Input\n {...{ validationMessage }}\n label={\n <StepHeading>{t(isRecover ? 'recover identity input label' : 'new identity input label')}</StepHeading>\n }\n disabled={disabled}\n data-testid='identity-input'\n placeholder={isRecover ? t('recovery code placeholder') : t('display name placeholder')}\n onChange={({ target: { value } }) => setInputValue(value)}\n />\n </div>\n <Actions>\n {/* TODO(wittjosiah): This disables returning to deprecated identity creation flow.\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => send?.({ type: 'deselectAuthMethod' })}\n data-testid={`${method === 'recover identity' ? 'recover' : 'create'}-identity-input-back`}\n >\n {t('back label')}\n </Action> */}\n <Action\n variant='primary'\n disabled={disabled || inputValue.trim().length === 0}\n onClick={handleConfirm}\n data-testid={`${method === 'recover identity' ? 'recover' : 'create'}-identity-input-continue`}\n >\n {pending ? t('pending label') : t('continue label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { cloneElement } from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { Actions, Action } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport interface InvitationAcceptedProps extends JoinStepProps {\n Kind: 'Space' | 'Halo';\n doneActionParent?: Parameters<typeof cloneElement>[0];\n onDone?: () => void;\n}\n\nexport const InvitationAccepted = (props: InvitationAcceptedProps) => {\n const { active, Kind, doneActionParent, onDone } = props;\n const disabled = !active;\n const { t } = useTranslation('os');\n\n const doneAction = (\n <Action\n variant='primary'\n onClick={onDone}\n disabled={disabled}\n data-autofocus={`success${Kind}Invitation finishingJoining${Kind}`}\n data-testid={`${Kind.toLowerCase()}-invitation-accepted-done`}\n >\n {t('done label')}\n </Action>\n );\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <p className='text-center text-sm font-normal'>{t('welcome message')}</p>\n </div>\n <Actions>{doneActionParent ? cloneElement(doneActionParent, {}, doneAction) : doneAction}</Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState, useEffect, cloneElement } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { Actions, StepHeading, Action, Input } from '../../../components';\nimport { type JoinPanelProps, type JoinStepProps } from '../JoinPanelProps';\n\nexport interface InvitationInputProps extends JoinStepProps, Pick<JoinPanelProps, 'onExit' | 'exitActionParent'> {\n Kind: 'Space' | 'Halo';\n unredeemedCode?: string;\n succeededKeys?: Set<string>;\n}\n\nconst invitationCodeFromUrl = (text: string) => {\n try {\n const searchParams = new URLSearchParams(text.substring(text.lastIndexOf('?')));\n const invitation = searchParams.get('spaceInvitationCode') ?? searchParams.get('deviceInvitationCode');\n return invitation ?? text;\n } catch (err) {\n log.catch(err);\n return text;\n }\n};\n\nexport const InvitationInput = (props: InvitationInputProps) => {\n const { Kind, active, send, unredeemedCode, onExit, exitActionParent, onDone, doneActionParent, succeededKeys } =\n props;\n const disabled = !active;\n const { t } = useTranslation('os');\n\n const [inputValue, setInputValue] = useState(unredeemedCode ?? '');\n\n useEffect(() => {\n unredeemedCode && setInputValue(unredeemedCode ?? '');\n }, [unredeemedCode]);\n\n const handleNext = () => {\n if (inputValue.trim().length === 0) {\n return;\n }\n\n send({\n type: `set${Kind}InvitationCode`,\n code: invitationCodeFromUrl(inputValue),\n ...(Kind === 'Space' && { succeededKeys }),\n });\n };\n\n const exitAction = (\n <Action\n variant='ghost'\n disabled={disabled}\n {...(onExit ? { onClick: () => onExit() } : { onClick: () => onDone?.(null) })}\n data-testid='join-exit'\n >\n {t('cancel label')}\n </Action>\n );\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <Input\n label={<StepHeading>{t('invitation input label')}</StepHeading>}\n placeholder={t('invitation input placeholder')}\n disabled={disabled}\n value={inputValue}\n onChange={({ target: { value } }) => setInputValue(value)}\n data-autofocus={`inputting${Kind}InvitationCode`}\n data-testid={`${Kind.toLowerCase()}-invitation-input`}\n onKeyUp={({ key }) => key === 'Enter' && handleNext()}\n />\n </div>\n <Actions>\n {/* TODO(wittjosiah): This disables returning to deprecated identity creation flow. */}\n {Kind === 'Halo'\n ? null\n : exitActionParent\n ? cloneElement(exitActionParent, {}, exitAction)\n : doneActionParent\n ? cloneElement(doneActionParent, {}, exitAction)\n : exitAction}\n <Action\n variant='primary'\n disabled={disabled || inputValue.trim().length === 0}\n onClick={handleNext}\n data-testid={`${Kind.toLowerCase()}-invitation-input-continue`}\n >\n {t('continue label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Invitation } from '@dxos/react-client/invitations';\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionText } from '@dxos/react-ui-theme';\n\nimport { Action, Actions, StepHeading } from '../../../components';\nimport { type FailReason } from '../../../types';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nexport interface InvitationRescuerProps extends JoinStepProps {\n Kind: 'Space' | 'Halo';\n invitationState?: Invitation.State;\n onInvitationCancel?: () => Promise<void> | undefined;\n failReason?: FailReason | null;\n}\n\nconst InvitationActions = ({\n // `invitationState` does report correct state, but here we evaluate whether `failReason` is a better source of truth\n // for the UI in particular.\n invitationState,\n onInvitationCancel,\n active,\n send,\n Kind,\n failReason,\n}: InvitationRescuerProps) => {\n const { t } = useTranslation('os');\n\n if (failReason) {\n return (\n <>\n <StepHeading className={descriptionText}>\n {t(\n failReason === 'timeout'\n ? 'timeout status label'\n : failReason === 'cancelled'\n ? 'cancelled status label'\n : 'error status label',\n )}\n </StepHeading>\n <div role='none' className='grow' />\n <Actions>\n <Action\n disabled={!active}\n onClick={() => send({ type: `reset${Kind}Invitation` })}\n data-testid='invitation-rescuer-reset'\n >\n {t('reset label')}\n </Action>\n </Actions>\n </>\n );\n } else {\n return (\n <>\n <StepHeading className={descriptionText}>{t('connecting status label')}</StepHeading>\n <div role='none' className='grow' />\n <Actions>\n <Action disabled classNames='order-2' data-testid='next'>\n {t('next label')}\n </Action>\n <Action disabled={!active} onClick={onInvitationCancel} data-testid='invitation-rescuer-cancel'>\n {t('cancel label')}\n </Action>\n </Actions>\n </>\n );\n }\n};\n\nexport const InvitationRescuer = (props: InvitationRescuerProps) => {\n const { Kind, invitationState, active, send } = props;\n const { t } = useTranslation('os');\n\n return (\n <>\n {typeof invitationState === 'undefined' ? (\n <>\n <div role='none' className='grow flex flex-col justify-center'>\n <StepHeading className={descriptionText}>There was a problem joining the space</StepHeading>\n </div>\n <Actions>\n <Action\n disabled={!active}\n data-testid='invitation-rescuer-blank-reset'\n onClick={() => send({ type: `reset${Kind}Invitation` })}\n >\n {t('reset label')}\n </Action>\n </Actions>\n </>\n ) : (\n <InvitationActions {...props} />\n )}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ChangeEvent, useState } from 'react';\n\nimport { Invitation } from '@dxos/react-client/invitations';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { descriptionText } from '@dxos/react-ui-theme';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { Actions, Action, Emoji, StepHeading, Label } from '../../../components';\nimport { type JoinStepProps } from '../JoinPanelProps';\n\nconst pinLength = 6;\n\nexport interface InvitationAuthenticatorProps extends JoinStepProps {\n Kind: 'Space' | 'Halo';\n authMethod?: Invitation.AuthMethod;\n failed?: boolean;\n pending?: boolean;\n invitationId?: string;\n onInvitationCancel?: () => Promise<void> | undefined;\n onInvitationAuthenticate?: (authCode: string) => Promise<void> | undefined;\n}\n\nexport const InvitationAuthenticator = ({\n failed,\n Kind,\n authMethod,\n active,\n pending,\n invitationId,\n onInvitationAuthenticate,\n onInvitationCancel,\n}: InvitationAuthenticatorProps) => {\n const disabled = !active || pending;\n const { t } = useTranslation('os');\n const invitationType = Kind.toLowerCase() as 'space' | 'halo';\n const [authCode, setAuthCode] = useState('');\n\n const onChange = ({ target: { value } }: ChangeEvent<HTMLInputElement>) => {\n setAuthCode(value);\n if (value.length === pinLength) {\n (document.querySelector(`[data-autofocus-pinlength=\"${invitationType}\"]`) as HTMLElement | null)?.focus();\n }\n };\n\n return (\n <>\n <div role='none' className='grow flex flex-col justify-center gap-4'>\n <Input.Root\n {...(failed && {\n validationValence: 'error',\n })}\n >\n <Input.Label asChild>\n {authMethod === Invitation.AuthMethod.SHARED_SECRET ? (\n <StepHeading>{t('auth code input label')}</StepHeading>\n ) : (\n <>\n <StepHeading className={descriptionText}>{t('authenticating label')}</StepHeading>\n <div role='none' className='grow' />\n </>\n )}\n </Input.Label>\n {authMethod === Invitation.AuthMethod.SHARED_SECRET && (\n <Input.PinInput\n {...{\n disabled,\n length: pinLength,\n onChange,\n inputMode: 'numeric',\n autoComplete: 'off',\n pattern: '\\\\d*',\n 'data-autofocus': `connecting${Kind}Invitation inputting${Kind}VerificationCode authenticationFailing${Kind}VerificationCode authenticating${Kind}VerificationCode`,\n 'data-prevent-ios-autofocus': true,\n 'data-testid': `${invitationType}-auth-code-input`,\n 'data-1p-ignore': true,\n }}\n />\n )}\n {failed && (\n <Input.DescriptionAndValidation classNames='text-center'>\n <Input.Validation>{t('failed to authenticate message')}</Input.Validation>\n </Input.DescriptionAndValidation>\n )}\n </Input.Root>\n\n {invitationId && authMethod === Invitation.AuthMethod.SHARED_SECRET && (\n <>\n <Label>{t('auth other device emoji message')}</Label>\n <div className='flex justify-center'>\n <Emoji text={hexToEmoji(invitationId)} />\n </div>\n </>\n )}\n </div>\n <Actions>\n <Action\n variant='ghost'\n disabled={disabled}\n onClick={() => onInvitationCancel?.()}\n data-testid={`${invitationType}-invitation-authenticator-cancel`}\n >\n {t('cancel label')}\n </Action>\n <Action\n variant='primary'\n disabled={disabled}\n onClick={() => onInvitationAuthenticate?.(authCode)}\n data-autofocus-pinlength={invitationType}\n data-testid={`${invitationType}-invitation-authenticator-next`}\n >\n {t('next label')}\n </Action>\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const stepStyles = 'pbs-1 pbe-3 pli-3';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Invitation } from '@dxos/react-client/invitations';\n\nexport const inactiveBgColor = 'bg-neutral-100 dark:bg-neutral-600';\nexport const activeBgColor = 'bg-primary-500 dark:bg-primary-400';\nexport const successBgColor = 'bg-success-500 dark:bg-success-400';\nexport const errorBgColor = 'bg-error-500 dark:bg-error-400';\nexport const cancelledBgColor = 'bg-warning-500 dark:bg-warning-400';\n\nexport const inactiveTextColor = 'text-neutral-100 dark:text-neutral-600';\nexport const activeTextColor = 'text-primary-400 dark:text-primary-500';\nexport const successTextColor = 'text-success-400 dark:text-success-500';\nexport const errorTextColor = 'text-error-400 dark:text-error-500';\nexport const cancelledTextColor = 'text-warning-400 dark:text-warning-500';\n\nexport const inactiveStrokeColor = 'stroke-neutral-100 dark:stroke-neutral-700';\nexport const activeStrokeColor = 'stroke-primary-400 dark:stroke-primary-150';\nexport const successStrokeColor = 'stroke-success-300 dark:stroke-primary-400';\nexport const errorStrokeColor = 'stroke-error-300 dark:stroke-error-500';\nexport const cancelledStrokeColor = 'stroke-warning-300 dark:stroke-warning-500';\n\nexport const resolvedStrokeColor = (status: Invitation.State) =>\n status === Invitation.State.ERROR\n ? errorStrokeColor\n : status === Invitation.State.CANCELLED || status === Invitation.State.TIMEOUT\n ? cancelledStrokeColor\n : successStrokeColor;\n\nexport const resolvedBgColor = (status: Invitation.State) =>\n status === Invitation.State.ERROR\n ? errorBgColor\n : status === Invitation.State.CANCELLED || status === Invitation.State.TIMEOUT\n ? cancelledBgColor\n : successBgColor;\n\nexport const resolvedTextColor = (status: Invitation.State) =>\n status === Invitation.State.ERROR\n ? errorTextColor\n : status === Invitation.State.CANCELLED || status === Invitation.State.TIMEOUT\n ? cancelledTextColor\n : successTextColor;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Planet } from '@phosphor-icons/react';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useInvitationStatus } from '@dxos/react-client/invitations';\nimport type { CancellableInvitationObservable } from '@dxos/react-client/invitations';\nimport { useId, useTranslation } from '@dxos/react-ui';\n\nimport { type SpacePanelHeadingProps, type SpacePanelImplProps, type SpacePanelProps } from './SpacePanelProps';\nimport { useSpaceMachine } from './spaceMachine';\nimport { SpaceManager } from './steps';\nimport { Heading, CloseButton, Viewport } from '../../components';\nimport { InvitationManager } from '../../steps';\nimport { stepStyles } from '../../styles';\n\nconst SpacePanelHeading = ({ titleId, space, onDone }: SpacePanelHeadingProps) => {\n const { t } = useTranslation('os');\n const name = space.properties.name;\n return (\n <Heading\n titleId={titleId}\n title={t('space panel heading')}\n corner={<CloseButton data-testid='identity-panel-done' onDone={onDone} />}\n >\n <div role='none' className='flex gap-4 items-center justify-center mlb-4'>\n <Planet size={32} weight='light' />\n <div className='block text-start font-light text-xl'>{name ?? space.key.truncate()}</div>\n </div>\n </Heading>\n );\n};\n\nexport const SpacePanelImpl = (props: SpacePanelImplProps) => {\n const {\n titleId,\n activeView,\n space,\n hideHeading,\n target,\n SpaceManager: SpaceManagerComponent = SpaceManager,\n InvitationManager: InvitationManagerComponent = InvitationManager,\n ...rest\n } = props;\n\n return (\n <>\n {!hideHeading && <SpacePanelHeading {...rest} {...{ titleId, space }} />}\n <Viewport.Root activeView={activeView}>\n <Viewport.Views>\n <Viewport.View id='space manager' classNames={stepStyles}>\n <SpaceManagerComponent active={activeView === 'space manager'} space={space} target={target} {...rest} />\n </Viewport.View>\n <Viewport.View id='space invitation manager' classNames={stepStyles}>\n <InvitationManagerComponent\n active={activeView === 'space invitation manager'}\n {...rest}\n invitationUrl={props.invitationUrl}\n />\n </Viewport.View>\n </Viewport.Views>\n </Viewport.Root>\n </>\n );\n};\n\nconst SpacePanelWithInvitationImpl = ({\n invitation,\n ...props\n}: SpacePanelImplProps & { invitation: CancellableInvitationObservable }) => {\n const invitationStatus = useInvitationStatus(invitation);\n return (\n <SpacePanelImpl\n {...props}\n {...invitationStatus}\n invitationUrl={props.createInvitationUrl(invitationStatus.invitationCode!)}\n />\n );\n};\n\nexport const SpacePanel = ({\n titleId: propsTitleId,\n createInvitationUrl = (code) => code,\n ...props\n}: SpacePanelProps) => {\n const titleId = useId('spacePanel__heading', propsTitleId);\n\n const [spaceState, spaceSend, spaceService] = useSpaceMachine({ context: { space: props.space } });\n\n useEffect(() => {\n const subscription = spaceService.subscribe((state) => {\n log('[state]', state);\n });\n\n return subscription.unsubscribe;\n }, [spaceService]);\n\n const activeView = useMemo(() => {\n switch (true) {\n case spaceState.matches('managingSpace'):\n return 'space manager';\n case spaceState.matches('managingSpaceInvitation'):\n return 'space invitation manager';\n default:\n return 'never';\n }\n }, [spaceState]);\n\n const implProps = {\n ...props,\n activeView,\n send: spaceSend,\n titleId,\n createInvitationUrl,\n };\n\n return spaceState.context.invitation ? (\n // TODO(wittjosiah): Unused? Remove?\n <SpacePanelWithInvitationImpl {...implProps} invitation={spaceState.context.invitation} />\n ) : (\n <SpacePanelImpl {...implProps} />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useMachine } from '@xstate/react';\nimport { assign, createMachine, type InterpreterFrom, type StateFrom } from 'xstate';\n\nimport { log } from '@dxos/log';\nimport { type Space } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable } from '@dxos/react-client/invitations';\n\nimport { type ErsatzSpace } from './SpacePanelProps';\nimport { type StepEvent } from '../../steps';\n\ntype SpaceMachineContext = {\n invitation?: CancellableInvitationObservable;\n space: ErsatzSpace | Space | null;\n};\n\ntype SpaceSelectInvitationEvent = {\n type: 'selectInvitation';\n invitation: CancellableInvitationObservable;\n};\n\ntype SpaceEvent = SpaceSelectInvitationEvent | StepEvent;\n\nconst spaceMachine = createMachine<SpaceMachineContext, SpaceEvent>(\n {\n id: 'space',\n predictableActionArguments: true,\n context: {\n space: null,\n },\n initial: 'managingSpace',\n states: {\n managingSpace: {},\n managingSpaceInvitation: {},\n },\n on: {\n deselectInvitation: { target: '.managingSpace', actions: ['unsetInvitation', 'log'] },\n selectInvitation: { target: '.managingSpaceInvitation', actions: ['setInvitation', 'log'] },\n },\n },\n {\n actions: {\n setInvitation: assign<SpaceMachineContext, SpaceEvent>({\n invitation: (context, event) => (event as SpaceSelectInvitationEvent)?.invitation ?? null,\n }),\n unsetInvitation: assign<SpaceMachineContext, SpaceEvent>({\n invitation: () => undefined,\n }),\n log: (context, event) => {\n log('[transition]', {\n event,\n context,\n });\n },\n },\n },\n);\n\ntype SpaceMachine = typeof spaceMachine;\n\ntype SpaceState = StateFrom<SpaceMachine>;\ntype SpaceSend = InterpreterFrom<SpaceMachine>['send'];\n\nconst useSpaceMachine = (options?: Parameters<typeof useMachine<SpaceMachine>>[1]) => {\n return useMachine(spaceMachine, { ...options, context: { ...options?.context } });\n};\n\nexport type { SpaceMachine, SpaceEvent, SpaceMachineContext, SpaceState, SpaceSend };\nexport { spaceMachine, useSpaceMachine };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Placeholder, UserPlus, UsersThree } from '@phosphor-icons/react';\nimport React, { type Dispatch, type FC, type SetStateAction, useCallback, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useConfig } from '@dxos/react-client';\nimport { useSpaceInvitations } from '@dxos/react-client/echo';\nimport { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { ScrollArea, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport {\n Actions,\n type ActionMenuItem,\n BifurcatedAction,\n InvitationList,\n type InvitationListProps,\n SpaceMemberList,\n type SpaceMemberListProps,\n} from '../../../components';\nimport { type SpacePanelStepProps } from '../SpacePanelProps';\n\nexport type SpaceManagerImplProps = SpacePanelStepProps & {\n target?: string;\n invitations?: CancellableInvitationObservable[];\n showInactiveInvitations?: boolean;\n inviteActions?: Record<string, ActionMenuItem>;\n SpaceMemberList?: FC<SpaceMemberListProps>;\n InvitationList?: FC<InvitationListProps>;\n};\n\nconst activeActionKey = 'dxos:react-shell/space-manager/active-action';\n\nconst handleInvitationEvent = (invitation: Invitation, subscription: ZenObservable.Subscription) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n subscription.unsubscribe();\n }\n};\n\nexport type SpaceManagerProps = SpaceManagerImplProps & {};\n\nexport const SpaceManager = (props: SpaceManagerProps) => {\n const { space, target } = props;\n const { t } = useTranslation('os');\n const config = useConfig();\n\n const invitations = useSpaceInvitations(space?.key);\n\n const inviteActions = {\n inviteOne: {\n label: t('invite one label'),\n description: t('invite one description'),\n icon: UserPlus,\n testId: 'spaces-panel.invite-one',\n onClick: useCallback(() => {\n const invitation = space.share?.({\n type: Invitation.Type.INTERACTIVE,\n authMethod: Invitation.AuthMethod.SHARED_SECRET,\n multiUse: false,\n target,\n });\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>\n handleInvitationEvent(invitation, subscription),\n );\n }\n }, [space, target]),\n },\n inviteMany: {\n label: t('invite many label'),\n description: t('invite many description'),\n icon: UsersThree,\n testId: 'spaces-panel.invite-many',\n onClick: useCallback(() => {\n const invitation = space.share?.({\n type: Invitation.Type.DELEGATED,\n authMethod: Invitation.AuthMethod.KNOWN_PUBLIC_KEY,\n multiUse: true,\n target,\n });\n if (invitation && config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription: ZenObservable.Subscription = invitation.subscribe((invitation) =>\n handleInvitationEvent(invitation, subscription),\n );\n }\n }, [space, target]),\n },\n };\n\n return <SpaceManagerImpl {...props} invitations={invitations} inviteActions={inviteActions} />;\n};\n\nconst headingFragment = 'pis-3 pie-1 plb-1 mbe-1 font-medium';\n\nexport const SpaceManagerImpl = (props: SpaceManagerImplProps) => {\n const {\n active,\n space,\n createInvitationUrl,\n send,\n inviteActions: propsInviteActions,\n invitations,\n showInactiveInvitations,\n SpaceMemberList: SpaceMemberListComponent = SpaceMemberList,\n InvitationList: InvitationListComponent = InvitationList,\n } = props;\n const { t } = useTranslation('os');\n\n const inviteActions =\n propsInviteActions ??\n ({\n noopInvite: {\n label: t('create space invitation label'),\n description: '',\n icon: Placeholder,\n onClick: () => {},\n },\n } as Record<string, ActionMenuItem>);\n\n const [activeAction, setInternalActiveAction] = useState(localStorage.getItem(activeActionKey) ?? 'inviteMany');\n\n const setActiveAction = (nextAction: string) => {\n setInternalActiveAction(nextAction);\n localStorage.setItem(activeActionKey, nextAction);\n };\n\n const visibleInvitations = showInactiveInvitations\n ? invitations\n : invitations?.filter((invitation) => ![Invitation.State.CANCELLED].includes(invitation.get().state));\n\n return (\n <>\n <ScrollArea.Root classNames='grow shrink basis-28 -mli-2'>\n <ScrollArea.Viewport classNames='is-full pie-2'>\n {!!visibleInvitations?.length && (\n <>\n <h3 className={mx(headingFragment, descriptionText)}>{t('invitation list heading')}</h3>\n <InvitationListComponent\n className='mb-2'\n send={send}\n invitations={visibleInvitations ?? []}\n onClickRemove={(invitation) => invitation.cancel()}\n createInvitationUrl={createInvitationUrl}\n />\n <h3 className={mx(headingFragment, descriptionText, 'mbs-2')}>{t('space member list heading')}</h3>\n </>\n )}\n <SpaceMemberListComponent spaceKey={space.key} includeSelf />\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n <Actions>\n <BifurcatedAction\n disabled={!active}\n actions={inviteActions}\n activeAction={activeAction}\n onChangeActiveAction={setActiveAction as Dispatch<SetStateAction<string>>}\n data-testid='spaces-panel.create-invitation'\n />\n </Actions>\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Status, useTranslation } from '@dxos/react-ui';\n\nexport const StatusPanel = ({ titleId }: { titleId?: string }) => {\n const { t } = useTranslation('os');\n return (\n <div className='grid place-items-center p-2 gap-2'>\n <p id={titleId} className='font-medium text-center'>\n {t('resetting message')}\n </p>\n <Status indeterminate>{t('resetting message')}</Status>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { AlertDialog, type AlertDialogContentProps, useId, useVisualViewport } from '@dxos/react-ui';\n\nimport { JoinPanel, type JoinPanelProps } from '../../panels';\n\nexport interface JoinDialogProps\n extends Omit<AlertDialogContentProps, 'children'>,\n Omit<JoinPanelProps, 'exitActionParent' | 'doneActionParent'> {}\n\nexport const JoinDialog = (joinPanelProps: JoinDialogProps) => {\n const titleId = useId('joinDialog__title');\n // todo(thure): This doesn’t work within an iframe on iOS Safari.\n const { height } = useVisualViewport();\n return (\n <AlertDialog.Root\n defaultOpen\n onOpenChange={(open) => open || (joinPanelProps.onExit ? joinPanelProps.onExit() : joinPanelProps.onDone?.(null))}\n >\n <AlertDialog.Portal>\n <AlertDialog.Overlay classNames='backdrop-blur' {...(height && { style: { blockSize: `${height}px` } })}>\n <AlertDialog.Content aria-labelledby={titleId}>\n <JoinPanel\n {...{\n ...joinPanelProps,\n titleId,\n exitActionParent: <AlertDialog.Cancel asChild />,\n doneActionParent: <AlertDialog.Action asChild />,\n }}\n />\n </AlertDialog.Content>\n </AlertDialog.Overlay>\n </AlertDialog.Portal>\n </AlertDialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { StrictMode } from 'react';\nimport { createRoot } from 'react-dom/client';\n\nimport { DEFAULT_CLIENT_CHANNEL, DEFAULT_SHELL_CHANNEL } from '@dxos/client-protocol';\nimport { AgentHostingProvider, ClientProvider, ClientServicesProxy, Config, ShellDisplay } from '@dxos/react-client';\nimport { Button, Clipboard, Dialog, ThemeProvider, Tooltip, useTranslation } from '@dxos/react-ui';\nimport { defaultTx } from '@dxos/react-ui-theme';\nimport { createIFramePort } from '@dxos/rpc-tunnel';\n\nimport { Shell } from './Shell';\nimport { ShellRuntimeImpl } from './shell-runtime';\nimport { osTranslations } from '../../translations';\n\nexport const runShell = async (config: Config = new Config()) => {\n // If runtime fails to open then the shell will not be openable.\n const runtime = new ShellRuntimeImpl(createIFramePort({ channel: DEFAULT_SHELL_CHANNEL }));\n await runtime.open();\n\n try {\n const services = new ClientServicesProxy(createIFramePort({ channel: DEFAULT_CLIENT_CHANNEL }));\n\n createRoot(document.getElementById('root')!).render(\n <StrictMode>\n <ThemeProvider tx={defaultTx} resourceExtensions={[osTranslations]}>\n <ClientProvider config={config} services={services} noBanner>\n <Clipboard.Provider>\n <Tooltip.Provider>\n <AgentHostingProvider>\n <Shell runtime={runtime} />\n </AgentHostingProvider>\n </Tooltip.Provider>\n </Clipboard.Provider>\n </ClientProvider>\n </ThemeProvider>\n </StrictMode>,\n );\n } catch {\n // If shell's client fails to initialize, ensure that the shell is still closeable.\n createRoot(document.getElementById('root')!).render(\n <StrictMode>\n <ThemeProvider tx={defaultTx} resourceExtensions={[osTranslations]}>\n <Fallback onClose={() => runtime.setAppContext({ display: ShellDisplay.NONE })} />\n </ThemeProvider>\n </StrictMode>,\n );\n }\n};\n\nconst Fallback = ({ onClose }: { onClose?: () => void }) => {\n const { t } = useTranslation('os');\n\n return (\n <Dialog.Root modal open onOpenChange={() => onClose?.()}>\n <Dialog.Overlay>\n <Dialog.Content>\n <Dialog.Title>{t('shell fallback title')}</Dialog.Title>\n <Dialog.Close asChild onClick={() => onClose?.()}>\n <Button variant='primary'>{t('close label')}</Button>\n </Dialog.Close>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { log } from '@dxos/log';\nimport { useClient } from '@dxos/react-client';\nimport {\n ShellDisplay,\n ShellLayout,\n type InvitationUrlRequest,\n type LayoutRequest,\n type ShellRuntime,\n} from '@dxos/react-client';\nimport { useSpace } from '@dxos/react-client/echo';\n\nimport { IdentityDialog } from '../IdentityDialog';\nimport { JoinDialog } from '../JoinDialog';\nimport { SpaceDialog } from '../SpaceDialog';\nimport { StatusDialog } from '../StatusDialog';\n\nconst blurActiveElement = () => (document.activeElement as HTMLElement | undefined)?.blur?.();\n\nexport const Shell = ({ runtime }: { runtime: ShellRuntime }) => {\n const [{ layout, invitationCode, spaceKey, spaceId, target }, setLayout] = useState<LayoutRequest>({\n layout: runtime.layout,\n invitationCode: runtime.invitationCode,\n spaceKey: runtime.spaceKey,\n spaceId: runtime.spaceId,\n target: runtime.target,\n });\n const [{ invitationUrl, deviceInvitationParam, spaceInvitationParam }, setInvitationUrl] =\n useState<InvitationUrlRequest>({\n invitationUrl: runtime.invitationUrl,\n deviceInvitationParam: runtime.deviceInvitationParam,\n spaceInvitationParam: runtime.spaceInvitationParam,\n });\n\n const client = useClient();\n const space = useSpace(spaceId ?? spaceKey);\n\n const createDeviceInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationUrl);\n baseUrl.searchParams.set(deviceInvitationParam, invitationCode);\n return baseUrl.toString();\n };\n\n const createSpaceInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationUrl);\n baseUrl.searchParams.set(spaceInvitationParam, invitationCode);\n return baseUrl.toString();\n };\n\n useEffect(() => {\n const unsubscribeLayout = runtime.layoutUpdate.on((request) => setLayout(request));\n const unsubscribeInvitationUrl = runtime.invitationUrlUpdate.on((request) => setInvitationUrl(request));\n\n return () => {\n unsubscribeLayout();\n unsubscribeInvitationUrl();\n };\n }, [runtime]);\n\n useEffect(() => {\n if (layout === ShellLayout.SPACE && !space) {\n log.warn('No space found for shell space invitations.');\n\n const timeout = setTimeout(async () => {\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n });\n\n return () => clearTimeout(timeout);\n }\n }, [runtime, layout, space]);\n\n switch (layout) {\n case ShellLayout.STATUS:\n return <StatusDialog />;\n case ShellLayout.INITIALIZE_IDENTITY:\n case ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION:\n case ShellLayout.INITIALIZE_IDENTITY_FROM_RECOVERY:\n return (\n <JoinDialog\n mode='halo-only'\n initialDisposition={\n layout === ShellLayout.INITIALIZE_IDENTITY_FROM_RECOVERY\n ? 'recover-identity'\n : layout === ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION\n ? 'accept-halo-invitation'\n : 'default'\n }\n initialInvitationCode={invitationCode}\n onCancelResetStorage={() => runtime.setLayout({ layout: ShellLayout.IDENTITY })}\n onDone={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n />\n );\n\n case ShellLayout.IDENTITY:\n case ShellLayout.SHARE_IDENTITY:\n case ShellLayout.EDIT_PROFILE:\n return (\n <IdentityDialog\n createInvitationUrl={createDeviceInvitationUrl}\n onResetStorage={async () => {\n runtime.setLayout({ layout: ShellLayout.STATUS });\n await client.reset();\n return runtime.setAppContext({ display: ShellDisplay.NONE, reset: true });\n }}\n onRecover={async () => {\n runtime.setLayout({ layout: ShellLayout.STATUS });\n await client.reset();\n // TODO(wittjosiah): Enter join flow without reloading.\n return runtime.setAppContext({ display: ShellDisplay.NONE, reset: true, target: 'recoverIdentity' });\n }}\n onJoinNewIdentity={async () => {\n runtime.setLayout({ layout: ShellLayout.STATUS });\n await client.reset();\n // TODO(wittjosiah): Enter join flow without reloading.\n return runtime.setAppContext({ display: ShellDisplay.NONE, reset: true, target: 'deviceInvitation' });\n }}\n onDone={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n initialDisposition={layout === ShellLayout.SHARE_IDENTITY ? 'manage-device-invitation' : 'default'}\n />\n );\n\n case ShellLayout.SPACE:\n return space ? (\n <SpaceDialog\n space={space}\n target={target}\n createInvitationUrl={createSpaceInvitationUrl}\n onDone={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n />\n ) : null;\n\n case ShellLayout.JOIN_SPACE:\n return (\n <JoinDialog\n initialInvitationCode={invitationCode}\n onDone={async (result) => {\n blurActiveElement();\n const target = result?.target ?? undefined;\n await runtime.setAppContext({\n display: ShellDisplay.NONE,\n spaceKey: result?.spaceKey ?? undefined,\n target,\n });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n onExit={async () => {\n blurActiveElement();\n await runtime.setAppContext({ display: ShellDisplay.NONE });\n runtime.setLayout({ layout: ShellLayout.DEFAULT });\n }}\n />\n );\n\n default:\n return null;\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Clipboard, Dialog, type DialogContentProps, useId } from '@dxos/react-ui';\n\nimport { SpacePanel, type SpacePanelProps } from '../../panels';\n\nexport interface SpaceDialogProps\n extends Omit<DialogContentProps, 'children'>,\n Omit<SpacePanelProps, 'doneActionParent'> {}\n\nexport const SpaceDialog = (spacePanelProps: SpaceDialogProps) => {\n const titleId = useId('spaceDialog__title');\n return (\n <Dialog.Root defaultOpen onOpenChange={(open) => open || spacePanelProps.onDone?.()}>\n <Dialog.Portal>\n <Dialog.Overlay>\n <Dialog.Content aria-labelledby={titleId}>\n <Clipboard.Provider>\n <SpacePanel\n {...{\n ...spacePanelProps,\n titleId,\n doneActionParent: <Dialog.Close asChild />,\n }}\n />\n </Clipboard.Provider>\n </Dialog.Content>\n </Dialog.Overlay>\n </Dialog.Portal>\n </Dialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { AlertDialog, useId } from '@dxos/react-ui';\n\nimport { StatusPanel } from '../../panels';\n\nexport const StatusDialog = () => {\n const titleId = useId('statusDialog__title');\n return (\n <AlertDialog.Root open>\n <AlertDialog.Portal>\n <AlertDialog.Overlay>\n <AlertDialog.Content aria-labelledby={titleId}>\n <StatusPanel titleId={titleId} />\n </AlertDialog.Content>\n </AlertDialog.Overlay>\n </AlertDialog.Portal>\n </AlertDialog.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport { appServiceBundle, type AppServiceBundle, type ShellRuntime, shellServiceBundle } from '@dxos/client-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport {\n type AppContextRequest,\n type LayoutRequest,\n ShellLayout,\n type InvitationUrlRequest,\n} from '@dxos/protocols/proto/dxos/iframe';\nimport { createProtoRpcPeer, type ProtoRpcPeer, type RpcPort } from '@dxos/rpc';\n\n/**\n * Endpoint that handles shell services.\n */\nexport class ShellRuntimeImpl implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n readonly invitationUrlUpdate = new Event<InvitationUrlRequest>();\n\n private _appRpc?: ProtoRpcPeer<AppServiceBundle>;\n private _layout = ShellLayout.DEFAULT;\n private _spaceKey?: PublicKey;\n private _spaceId?: string;\n\n private _invitationCode?: string;\n private _invitationUrl? = typeof window !== 'undefined' ? window.location.origin : undefined;\n\n // TODO(burdon): Change to using underscores (coordinate with @dxos/web-auth).\n private _deviceInvitationParam = 'deviceInvitationCode'; // TODO(burdon): device_invitation_code\n private _spaceInvitationParam = 'spaceInvitationCode'; // TODO(burdon): space_invitation_code\n\n constructor(private readonly _port: RpcPort) {}\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n /** @deprecated Use spaceId. */\n get spaceKey() {\n return this._spaceKey;\n }\n\n get spaceId() {\n return this._spaceId;\n }\n\n get invitationUrl() {\n return this._invitationUrl!;\n }\n\n get deviceInvitationParam() {\n return this._deviceInvitationParam;\n }\n\n get spaceInvitationParam() {\n return this._spaceInvitationParam;\n }\n\n setLayout({ layout, invitationCode, spaceKey, spaceId }: LayoutRequest) {\n this._layout = layout;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this._spaceId = spaceId;\n this.layoutUpdate.emit({ layout, invitationCode, spaceKey, spaceId });\n }\n\n setInvitationUrl({ invitationUrl, deviceInvitationParam, spaceInvitationParam }: InvitationUrlRequest) {\n this._invitationUrl = invitationUrl;\n this._deviceInvitationParam = deviceInvitationParam;\n this._spaceInvitationParam = spaceInvitationParam;\n this.invitationUrlUpdate.emit({ invitationUrl, deviceInvitationParam, spaceInvitationParam });\n }\n\n async setAppContext(context: AppContextRequest) {\n invariant(this._appRpc, 'runtime not open');\n\n await this._appRpc.rpc.AppService.setContext(context);\n }\n\n async open() {\n this._appRpc = createProtoRpcPeer({\n requested: appServiceBundle,\n exposed: shellServiceBundle,\n handlers: {\n ShellService: {\n setLayout: async (request) => {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this._spaceId = request.spaceId;\n this.layoutUpdate.emit(request);\n },\n setInvitationUrl: async (request) => {\n this._invitationUrl = request.invitationUrl;\n this._deviceInvitationParam = request.deviceInvitationParam;\n this._spaceInvitationParam = request.spaceInvitationParam;\n this.invitationUrlUpdate.emit(request);\n },\n },\n },\n port: this._port,\n });\n\n await this._appRpc.open();\n }\n\n async close() {\n await this._appRpc?.close();\n this._appRpc = undefined;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nexport const os = {\n 'manage profile label': 'Manage identity',\n 'identity offline description': 'Offline',\n 'sidebar label': 'DXOS sidebar',\n 'copy invitation code label': 'Copy URL',\n 'copy success label': 'Copied',\n 'copy self did label': 'Copy DID',\n 'open share panel label': 'View QR code',\n 'manage credentials label': 'Manage credentials',\n 'joining space heading': 'Joining space',\n 'join space heading': 'Enter space invitation',\n 'halo heading': 'Initialize device identity',\n 'exit label': 'Exit',\n 'identity selector title': 'Join as',\n 'identity radio group title': 'Select an identity you’ve associated with this device already',\n 'add identity label': 'Add',\n 'continue label': 'Continue',\n 'pending label': 'Pending',\n 'back label': 'Back',\n 'next label': 'Next',\n 'close label': 'Close',\n 'auth choices label': 'Choose an identity',\n 'create identity label': 'Create an identity',\n 'create identity description': 'Create a new identity.',\n 'recover identity label': 'Use a recovery code',\n 'recover identity description': 'Enter your recovery code to log in manually.',\n 'invitation input placeholder': 'Invitation code',\n 'recovery code placeholder': 'Recovery code',\n 'display name placeholder': 'Display name',\n 'join identity label': 'Use another device',\n 'join identity description': 'Add this device to an identity you’re already logged into on another device.',\n 'deselect identity label': 'Back to identities',\n 'addition method chooser title': 'An identity is required to continue',\n 'new identity input label': 'Set display name',\n 'recover identity input label': 'Type or paste your recovery code',\n 'failed to create identity message': 'Failed to create an identity.',\n 'failed to recover identity message': 'Failed to recover an identity from the provided recovery code.',\n 'failed to authenticate message': 'Incorrect code.',\n 'identity added label': 'Created identity & added to this device:',\n 'join space as identity heading': '<part>as </part><part><icon/><label>{{labelValue}}</label></part>',\n 'error status label': 'Failed',\n 'timeout status label': 'Timed out',\n 'cancelled status label': 'Cancelled',\n 'init status label': 'Ready to connect',\n 'connecting status label': 'Connecting…',\n 'connected status label': 'Enter authentication code',\n 'authenticating status label': 'Enter authentication code',\n 'success status label': 'Success',\n 'cancel label': 'Cancel',\n 'done label': 'Done',\n 'reset label': 'Start over',\n 'auth code input label': 'Enter the verification code',\n 'invitation input label': 'Paste an invitation code or URL',\n 'create device invitation label': 'Add device',\n 'create space invitation label': 'Invite',\n 'qr label': 'Scan to accept invitation',\n 'empty invitations message': 'No pending invitations',\n 'empty device list message': 'No devices authenticated other than this device.',\n 'show all spaces label': 'All spaces',\n 'all spaces label': 'All spaces',\n 'create space label': 'Create a new space',\n 'join space label': 'Join a space',\n 'show current space label': 'Current space',\n 'view space invitations label': 'View space invitations',\n 'toggle sidebar label': 'Open/close sidebar',\n 'open sidebar label': 'Open sidebar',\n 'close sidebar label': 'Close sidebar',\n 'welcome message': 'Welcome',\n 'selecting identity heading': 'Selecting identity',\n 'devices heading': 'Devices',\n 'identity heading': 'Profile settings',\n 'choose add device label': 'Add device',\n 'choose devices label': 'Manage devices',\n 'choose profile label': 'Edit profile',\n 'choose sign out label': 'Reset storage',\n 'choose join new identity label': 'Join existing device',\n 'empty space members message': 'There is nobody in this space yet.',\n 'back to all invitations label': 'Back to all invitations',\n 'invitation heading': 'Invitation',\n 'invitation list heading': 'Invitations',\n 'device invitation list heading': 'Pending device invitations',\n 'space invitation list heading': 'Pending invitations',\n 'device list heading': 'Devices',\n 'space member list heading': 'Members',\n 'space panel heading': 'Space membership',\n 'auth code message': 'Enter the following auth code on the joining device. Click the code to copy it.',\n 'auth other device emoji message': 'Be sure the other device shows the following emoji.',\n 'display name input label': 'Display name',\n 'display name input placeholder': 'Enter a display name',\n 'invite one label': 'Create single-use invitation',\n 'invite one description': 'Only one user may join.',\n 'invite one qr label': 'Single-use invitation',\n 'invite one list item label': 'Active single-use invitation',\n 'invite many label': 'Create multi-use invitation',\n 'invite many description': 'Anyone with the link can join.',\n 'invite many qr label': 'Multi-use invitation',\n 'invite many list item label': 'Active multi-use invitation',\n 'invite options label': 'Change the active invite option.',\n 'reset in progress label': 'Resetting...',\n 'confirm label': 'Confirm',\n 'reset storage input label':\n 'WARNING: This will delete all data on this device. Type {{confirmationValue}} to continue.',\n 'join new identity input label':\n 'WARNING: To join an existing device all data on this device will be deleted. Type {{confirmationValue}} to continue.',\n 'failed to reset identity message': 'Failed to reset identity.',\n 'confirmation value': 'RESET',\n 'confirmation placeholder': 'Enter {{confirmationValue}} to continue.',\n 'sign out chooser title': 'Danger zone',\n 'sign out chooser message': 'Proceeding with the action below will erase all data on this device.',\n 'join new identity label': 'Join an existing identity',\n 'reset device label': 'Reset storage',\n 'reset device confirm message': 'Are you sure you want to reset your device? All data will be lost.',\n 'emoji and color label': 'Emoji and color',\n 'clear label': 'Use default',\n 'select emoji label': 'Avatar emoji',\n 'select hue label': 'Avatar background color',\n 'resetting message': 'One moment while the device is reset…',\n 'expires label': 'Expires {{timeLeft}}',\n 'no expiration label': 'Doesn’t expire',\n\n // TODO(burdon): Factor out.\n 'red label': 'Red',\n 'orange label': 'Orange',\n 'amber label': 'Amber',\n 'yellow label': 'Yellow',\n 'lime label': 'Lime',\n 'green label': 'Green',\n 'emerald label': 'Emerald',\n 'teal label': 'Teal',\n 'cyan label': 'Cyan',\n 'sky label': 'Sky',\n 'blue label': 'Blue',\n 'indigo label': 'Indigo',\n 'violet label': 'Violet',\n 'purple label': 'Purple',\n 'fuchsia label': 'Fuchsia',\n 'pink label': 'Pink',\n 'rose label': 'Rose',\n\n 'select a hue label': 'Select color',\n 'hue label': 'Hue',\n 'icon label': 'Icon',\n 'current device tag label': 'This device',\n 'device name placeholder': '{{platform}} on {{os}}',\n 'more options label': 'More options',\n 'disconnect label': 'Go offline',\n 'connect label': 'Go online',\n 'edit device label': 'Edit device name & avatar',\n 'agent heading': 'Agent',\n 'create agent clickwrap':\n 'By creating an agent, you agree to our <tosLink href=\"https://dxos.org/tos\">Terms of Service</tosLink>.',\n 'create agent description':\n 'Creating an agent helps keep your devices and peers in-sync. An agent is like any other device, but since it’s always online your changes will sync even when all your physical devices are asleep.',\n 'create agent label': 'Start an agent',\n 'destroy agent label': 'Shut down agent',\n 'agent device label': 'Your agent',\n 'shell fallback title': 'Shell failed to connect',\n 'creating agent label': 'Starting agent…',\n 'destroying agent label': 'Stopping agent…',\n 'getting agent label': 'Checking agent status…',\n 'agent requested label': 'Agent requested',\n 'agent requested description':\n 'The agent service is creating an agent for you. Once the agent connects, it will display in the devices list.',\n 'authenticating label': 'Authenticating…',\n 'create recovery code label': 'Create recovery code',\n 'choose recover identity label': 'Recover identity',\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as enUS from './locales/en-US';\n\nexport const osTranslations = { 'en-US': enUS };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, {\n type Context,\n createContext,\n type PropsWithChildren,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { type PublicKey, useClient, ShellDisplay, ShellLayout, type LayoutRequest } from '@dxos/react-client';\nimport type { Space } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { Shell } from './Shell';\nimport { MemoryShellRuntime } from './memory-shell-runtime';\n\nexport type ShellContextProps = {\n runtime?: MemoryShellRuntime;\n setDisplay?: (display: ShellDisplay) => void;\n};\n\nexport const ShellContext: Context<ShellContextProps> = createContext<ShellContextProps>({});\n\ntype SetLayout = (layout: ShellLayout, options?: Omit<LayoutRequest, 'layout'>) => void;\n\n/**\n * @deprecated\n */\nexport const useShell = (): { setLayout: SetLayout } => {\n const client = useClient();\n const { runtime, setDisplay } = useContext(ShellContext);\n\n const setLayout: SetLayout = async (layout, options) => {\n if (runtime) {\n if (layout === ShellLayout.DEFAULT) {\n setDisplay?.(ShellDisplay.NONE);\n } else {\n setDisplay?.(ShellDisplay.FULLSCREEN);\n }\n\n runtime.setLayout({ layout, ...options });\n }\n\n await client.shell.open(layout, options);\n };\n\n return {\n setLayout,\n };\n};\n\nexport type ShellProviderProps = PropsWithChildren<{\n space?: Space;\n deviceInvitationCode?: string | null;\n spaceInvitationCode?: string | null;\n onJoinedSpace?: (spaceKey?: PublicKey) => void;\n}>;\n\n/**\n * Renders the DXOS shell and provides a way to set the layout of the shell from the rest of the app.\n *\n * @deprecated\n */\n// TODO(wittjosiah): Remove? Is MemoryShellRuntime needed? We now can use shell with monolithic client.\nexport const ShellProvider = ({\n space,\n deviceInvitationCode,\n spaceInvitationCode,\n onJoinedSpace,\n children,\n}: ShellProviderProps) => {\n const client = useClient();\n\n //\n // Component Shell\n //\n\n const identity = useIdentity();\n const [display, setDisplay] = useState(\n !identity || spaceInvitationCode || deviceInvitationCode ? ShellDisplay.FULLSCREEN : ShellDisplay.NONE,\n );\n\n const shellRuntime = useMemo(() => {\n if (client.config.get('runtime.app.env.DX_VAULT') !== 'false') {\n return;\n }\n\n if (spaceInvitationCode) {\n return new MemoryShellRuntime({\n layout: ShellLayout.JOIN_SPACE,\n invitationCode: spaceInvitationCode,\n });\n }\n\n if (deviceInvitationCode) {\n return new MemoryShellRuntime({\n layout: ShellLayout.INITIALIZE_IDENTITY,\n invitationCode: deviceInvitationCode,\n });\n }\n\n return new MemoryShellRuntime({ layout: identity ? ShellLayout.DEFAULT : ShellLayout.INITIALIZE_IDENTITY });\n }, [client, identity, spaceInvitationCode, deviceInvitationCode]);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent) => {\n if (!space || !shellRuntime) {\n return;\n }\n\n const modifier = event.ctrlKey || event.metaKey;\n if (event.key === '>' && event.shiftKey && modifier) {\n shellRuntime.setLayout({ layout: ShellLayout.SHARE_IDENTITY });\n setDisplay(ShellDisplay.FULLSCREEN);\n } else if (event.key === '.' && modifier) {\n shellRuntime.setLayout({ layout: ShellLayout.SPACE, spaceKey: space.key });\n setDisplay(ShellDisplay.FULLSCREEN);\n }\n },\n [space, shellRuntime],\n );\n\n useEffect(() => {\n if (!shellRuntime) {\n return;\n }\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [shellRuntime, handleKeyDown]);\n\n useEffect(() => {\n if (!shellRuntime) {\n return;\n }\n\n return shellRuntime.contextUpdate.on(({ display, spaceKey }) => {\n if (display) {\n setDisplay(display);\n }\n onJoinedSpace?.(spaceKey);\n });\n }, [shellRuntime]);\n\n return (\n <>\n {shellRuntime && (\n <div className={mx(display === ShellDisplay.NONE ? 'hidden' : '')}>\n <Shell runtime={shellRuntime} />\n </div>\n )}\n\n <ShellContext.Provider value={{ runtime: shellRuntime, setDisplay }}>{children}</ShellContext.Provider>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Event } from '@dxos/async';\nimport {\n ShellLayout,\n type AppContextRequest,\n type InvitationUrlRequest,\n type LayoutRequest,\n type PublicKey,\n type ShellRuntime,\n} from '@dxos/react-client';\n\n// TODO(wittjosiah): Remove?\nexport class MemoryShellRuntime implements ShellRuntime {\n readonly layoutUpdate = new Event<LayoutRequest>();\n readonly invitationUrlUpdate = new Event<InvitationUrlRequest>();\n readonly contextUpdate = new Event<AppContextRequest>();\n private _layout: ShellLayout;\n private _invitationCode?: string;\n private _spaceKey?: PublicKey;\n private _invitationUrl: string;\n private _deviceInvitationParam: string;\n private _spaceInvitationParam: string;\n\n constructor({\n layout,\n invitationCode,\n spaceKey,\n invitationUrl,\n deviceInvitationParam,\n spaceInvitationParam,\n }: Partial<LayoutRequest> & Partial<AppContextRequest> & Partial<InvitationUrlRequest> = {}) {\n this._layout = layout ?? ShellLayout.DEFAULT;\n this._invitationCode = invitationCode;\n this._spaceKey = spaceKey;\n this._invitationUrl = invitationUrl ?? window.location.origin;\n this._deviceInvitationParam = deviceInvitationParam ?? 'deviceInvitationCode';\n this._spaceInvitationParam = spaceInvitationParam ?? 'spaceInvitationCode';\n }\n\n get layout() {\n return this._layout;\n }\n\n get invitationCode() {\n return this._invitationCode;\n }\n\n get spaceKey() {\n return this._spaceKey;\n }\n\n get invitationUrl() {\n return this._invitationUrl;\n }\n\n get deviceInvitationParam() {\n return this._deviceInvitationParam;\n }\n\n get spaceInvitationParam() {\n return this._spaceInvitationParam;\n }\n\n setLayout(request: LayoutRequest) {\n this._layout = request.layout;\n this._invitationCode = request.invitationCode;\n this._spaceKey = request.spaceKey;\n this.layoutUpdate.emit(request);\n }\n\n setInvitationUrl(request: InvitationUrlRequest) {\n this._invitationUrl = request.invitationUrl;\n this._deviceInvitationParam = request.deviceInvitationParam;\n this._spaceInvitationParam = request.spaceInvitationParam;\n this.invitationUrlUpdate.emit(request);\n }\n\n async setAppContext(context: AppContextRequest) {\n this.contextUpdate.emit(context);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ArrowsClockwise", "Plus", "React", "Avatar", "Button", "IconButton", "Link", "Tooltip", "Trans", "useTranslation", "descriptionText", "getSize", "mx", "valenceColorText", "AgentConfig", "agentStatus", "validationMessage", "onAgentDestroy", "onAgentCreate", "onAgentRefresh", "t", "useTranslation", "div", "role", "className", "h2", "mx", "descriptionText", "p", "valenceColorText", "aria-describedby", "Avatar", "Root", "Content", "status", "variant", "classNames", "icon", "Label", "Tooltip", "Trigger", "asChild", "content", "side", "IconButton", "iconOnly", "data-testid", "label", "size", "onClick", "id", "Button", "getSize", "Plus", "weight", "ArrowsClockwise", "span", "Trans", "i18nKey", "components", "tosLink", "Link", "target", "rel", "React", "useId", "useThemeContext", "useElevationContext", "descriptionText", "descriptionTextPrimary", "mx", "CompoundButton", "children", "description", "before", "after", "variant", "elevation", "propsElevation", "slots", "buttonProps", "labelId", "useId", "descriptionId", "tx", "useThemeContext", "useElevationContext", "styleProps", "textWrap", "buttonClassName", "root", "className", "React", "button", "aria-labelledby", "div", "role", "middle", "mx", "p", "label", "id", "descriptionTextPrimary", "descriptionText", "React", "forwardRef", "generateName", "SpaceMember", "ListItem", "Avatar", "useId", "mx", "keyToFallback", "IdentityListItem", "forwardRef", "identity", "presence", "onClick", "classNames", "props", "forwardedRef", "fallbackValue", "keyToFallback", "identityKey", "labelId", "useId", "displayName", "profile", "generateName", "toHex", "React", "ListItem", "Root", "mx", "data-testid", "ref", "Avatar", "Content", "status", "SpaceMember", "PresenceState", "ONLINE", "hue", "data", "fallback", "emoji", "Label", "React", "useMemo", "useClient", "useMembers", "useTranslation", "List", "descriptionText", "mx", "SpaceMemberList", "spaceKey", "includeSelf", "onSelect", "client", "useClient", "allUnsortedMembers", "useMembers", "members", "useMemo", "sort", "member", "identity", "identityKey", "equals", "halo", "get", "filter", "React", "SpaceMemberListImpl", "t", "useTranslation", "visibleMembers", "length", "List", "classNames", "data-testid", "map", "IdentityListItem", "key", "toHex", "presence", "onClick", "div", "role", "className", "p", "mx", "descriptionText", "CaretRight", "Plus", "React", "Button", "List", "useTranslation", "descriptionText", "getSize", "mx", "DotsThree", "ShareFat", "Power", "FirstAidKit", "React", "forwardRef", "generateName", "Device", "DeviceType", "DeviceKind", "ConnectionState", "ListItem", "Avatar", "useId", "Tag", "useTranslation", "DropdownMenu", "Button", "getSize", "keyToFallback", "DeviceListItem", "forwardRef", "device", "onClickAdd", "onClickEdit", "onClickReset", "onClickRecover", "onClickJoinExisting", "classNames", "connectionState", "onAgentDestroy", "_", "props", "forwardedRef", "t", "useTranslation", "fallbackValue", "keyToFallback", "deviceKey", "labelId", "useId", "displayName", "profile", "os", "platform", "generateName", "toHex", "isCurrent", "kind", "DeviceKind", "CURRENT", "React", "ListItem", "Root", "data-testid", "ref", "Avatar", "Content", "status", "ConnectionState", "OFFLINE", "presence", "Device", "PresenceState", "ONLINE", "hue", "variant", "type", "icon", "DeviceType", "AGENT_MANAGED", "BROWSER", "NATIVE", "AGENT", "includes", "MOBILE", "fallback", "emoji", "Label", "Tag", "color", "DropdownMenu", "Trigger", "asChild", "Button", "span", "className", "DotsThree", "getSize", "Viewport", "Item", "onClick", "ShareFat", "FirstAidKit", "Power", "DeviceList", "devices", "connectionState", "onClickAdd", "onClickEdit", "onClickReset", "onClickRecover", "onClickJoinExisting", "onAgentDestroy", "t", "useTranslation", "React", "div", "role", "className", "h2", "mx", "descriptionText", "length", "List", "map", "device", "DeviceListItem", "key", "deviceKey", "toHex", "Button", "variant", "classNames", "data-testid", "onClick", "getSize", "Plus", "weight", "span", "CaretRight", "X", "formatDistanceToNow", "React", "useCallback", "Invitation", "useInvitationStatus", "Button", "Clipboard", "ListItem", "useTranslation", "Avatar", "useThemeContext", "Tooltip", "focusRing", "getSize", "mx", "hexToEmoji", "React", "useRef", "mx", "AuthCode", "props", "code", "large", "classNames", "l", "length", "left", "slice", "right", "codeRef", "useRef", "handleClick", "current", "selection", "window", "getSelection", "removeAllRanges", "range", "document", "createRange", "selectNodeContents", "addRange", "navigator", "clipboard", "writeText", "React", "span", "className", "mx", "onClick", "ref", "InvitationListItem", "props", "invitation", "invitationStatus", "useInvitationStatus", "React", "InvitationListItemImpl", "avatarProps", "size", "variant", "AvatarStackEffect", "animation", "status", "reverseEffects", "tx", "useThemeContext", "span", "role", "className", "mx", "getSize", "style", "animationDelay", "propsInvitationStatus", "send", "onClickRemove", "createInvitationUrl", "t", "useTranslation", "cancel", "invitationCode", "authCode", "multiUse", "shareable", "isCancellable", "Invitation", "State", "ERROR", "TIMEOUT", "CANCELLED", "indexOf", "showShare", "INIT", "CONNECTING", "CONNECTED", "showAuthCode", "READY_FOR_AUTHENTICATION", "handleClickRemove", "useCallback", "invitationUrl", "invitationId", "get", "invitationHasLifetime", "lifetime", "invitationTimeLeft", "expiry", "formatDistanceToNow", "addSuffix", "undefined", "avatarAnimation", "AUTHENTICATING", "includes", "avatarError", "avatarGreen", "SUCCESS", "avatarStatus", "ListItem", "Root", "id", "classNames", "Heading", "Avatar", "Tooltip", "Trigger", "asChild", "content", "side", "Content", "fallback", "hexToEmoji", "tabIndex", "focusRing", "timeLeft", "Button", "onClick", "type", "data-testid", "Clipboard", "IconButton", "value", "AuthCode", "code", "X", "React", "useCallback", "useSpace", "useSpaceInvitations", "React", "List", "mx", "InvitationList", "invitations", "send", "invitationProps", "className", "InvitationListItem", "Item", "React", "List", "classNames", "mx", "map", "invitation", "value", "get", "invitationId", "key", "InvitationListContainer", "spaceKey", "createInvitationUrl", "send", "space", "useSpace", "invitations", "useSpaceInvitations", "handleClickRemove", "useCallback", "invitation", "cancel", "React", "InvitationList", "onClickRemove", "CaretDown", "Check", "Placeholder", "useControllableState", "React", "forwardRef", "Button", "DropdownMenu", "useTranslation", "descriptionText", "getSize", "mx", "defaultActions", "noopAction", "label", "description", "icon", "Placeholder", "onClick", "BifurcatedAction", "forwardRef", "props", "forwardedRef", "classNames", "variant", "isFull", "actions", "activeAction", "propsActiveAction", "onChangeActiveAction", "defaultActiveAction", "testId", "rest", "dropdownTestId", "activeActionKey", "Object", "keys", "setActiveAction", "useControllableState", "prop", "onChange", "defaultProp", "t", "useTranslation", "React", "div", "role", "className", "mx", "Button", "ref", "data-testid", "getSize", "span", "DropdownMenu", "Root", "Trigger", "asChild", "CaretDown", "Portal", "Content", "Viewport", "entries", "map", "id", "action", "CheckboxItem", "key", "aria-labelledby", "aria-describedby", "checked", "onCheckedChange", "p", "descriptionText", "ItemIndicator", "Check", "weight", "Arrow", "Action", "children", "React", "forwardRef", "mx", "Actions", "forwardRef", "classNames", "children", "props", "forwardedRef", "React", "div", "className", "mx", "Array", "isArray", "length", "ref", "X", "React", "Button", "useTranslation", "getSize", "mx", "CloseButton", "onDone", "props", "t", "useTranslation", "React", "Button", "variant", "classNames", "mx", "onClick", "X", "weight", "className", "getSize", "span", "React", "mx", "getSize", "Emoji", "text", "className", "size", "React", "div", "role", "mx", "getSize", "svg", "viewBox", "width", "height", "x", "y", "textAnchor", "dominantBaseline", "baselineShift", "fontSize", "Centered", "props", "children", "React", "forwardRef", "descriptionText", "mx", "Heading", "forwardRef", "titleId", "title", "titleSrOnly", "children", "corner", "forwardedRef", "React", "div", "role", "className", "ref", "h1", "id", "mx", "descriptionText", "span", "React", "descriptionText", "mx", "Label", "props", "children", "React", "span", "className", "mx", "descriptionText", "React", "Input", "UiInput", "Input", "validationMessage", "label", "props", "React", "UiInput", "Root", "Label", "TextInput", "classNames", "DescriptionAndValidation", "Validation", "React", "forwardRef", "mx", "StepHeading", "forwardRef", "children", "className", "props", "forwardedRef", "React", "h2", "mx", "ref", "useFocusFinders", "createContextScope", "useControllableState", "React", "forwardRef", "useEffect", "useForwardedRef", "mx", "VIEWPORT_NAME", "VIEWS_NAME", "VIEW_NAME", "createViewportContext", "createViewportScope", "createContextScope", "ViewportProvider", "useViewportContext", "ViewportRoot", "__viewportScope", "classNames", "children", "defaultActiveView", "activeView", "propsActiveView", "focusManaged", "onActiveViewChange", "props", "setActiveView", "useControllableState", "prop", "defaultProp", "onChange", "React", "scope", "div", "role", "aria-live", "className", "mx", "displayName", "ViewportViews", "size", "inlineSize", "Math", "ceil", "length", "style", "ViewportView", "forwardRef", "id", "forwardedRef", "isActive", "ref", "useForwardedRef", "findFirstFocusable", "useFocusFinders", "useEffect", "document", "body", "hasAttribute", "current", "focus", "section", "Viewport", "Root", "Views", "View", "React", "forwardRef", "Avatar", "useId", "mx", "humanize", "keyToEmoji", "SpaceListItem", "forwardRef", "space", "onClick", "ref", "fallbackValue", "keyToEmoji", "key", "labelId", "useId", "displayName", "properties", "name", "humanize", "toHex", "React", "li", "className", "mx", "data-testid", "Avatar", "Root", "Content", "fallback", "Label", "classNames", "React", "Clipboard", "Dialog", "useId", "IdentificationCard", "Plugs", "PlugsConnected", "React", "useEffect", "useMemo", "useState", "debounce", "generateName", "log", "useClient", "useIdentity", "useDevices", "useHaloInvitations", "useInvitationStatus", "useNetworkStatus", "ConnectionState", "Avatar", "Clipboard", "Input", "Toolbar", "Tooltip", "useId", "useTranslation", "EmojiPickerToolbarButton", "HuePicker", "errorText", "getSize", "hexToEmoji", "hexToHue", "keyToFallback", "useMachine", "assign", "createMachine", "log", "identityMachine", "id", "predictableActionArguments", "context", "identity", "identitySubscribable", "initial", "invoke", "src", "states", "unknown", "always", "cond", "target", "actions", "choosingAction", "managingDeviceInvitation", "confirmingResetStorage", "confirmingRecover", "confirmingJoinNewIdentity", "on", "unchooseAction", "deselectInvitation", "selectInvitation", "chooseJoinNewIdentity", "chooseRecoverIdentity", "chooseResetStorage", "guards", "initiallyManagingDeviceInvitation", "initialDisposition", "_event", "setIdentity", "event", "setInvitation", "invitation", "unsetInvitation", "undefined", "useIdentityMachine", "client", "options", "halo", "get", "map", "type", "React", "log", "useClient", "useHaloInvitations", "DeviceType", "Invitation", "InvitationEncoder", "IdentityActionChooser", "props", "send", "client", "useClient", "invitations", "useHaloInvitations", "createInvitation", "forEach", "invitation", "cancel", "halo", "share", "config", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "subscription", "subscribe", "invitationCode", "InvitationEncoder", "encode", "state", "Invitation", "State", "CONNECTING", "log", "info", "JSON", "stringify", "authCode", "unsubscribe", "type", "isProduction", "React", "IdentityActionChooserImpl", "onClickAdd", "onClickJoinExisting", "onClickRecover", "undefined", "onClickReset", "devices", "connectionState", "agentHostingEnabled", "agentProps", "edgeDeviceAvailable", "find", "device", "profile", "DeviceType", "AGENT_MANAGED", "os", "toUpperCase", "div", "role", "className", "DeviceList", "agentStatus", "onAgentDestroy", "AgentConfig", "React", "useState", "log", "useClipboard", "useTranslation", "EmojiPickerBlock", "HuePicker", "hexToEmoji", "hexToHue", "useClient", "useEffect", "useState", "invariant", "log", "QueryAgentStatusResponse", "EdgeReplicationSetting", "useClient", "useEdgeAgentHandlers", "identity", "validationMessage", "setValidationMessage", "lastReceivedStatus", "setLastReceivedStatus", "AgentStatus", "UNKNOWN", "agentStatus", "setAgentStatus", "client", "agentHostingEnabled", "Boolean", "config", "values", "runtime", "edgeFeatures", "agents", "handleStatus", "status", "ACTIVE", "INACTIVE", "NOT_FOUND", "stream", "services", "EdgeAgentService", "queryAgentStatus", "subscribe", "close", "catch", "onAgentCreate", "service", "createAgent", "timeout", "Promise", "all", "spaces", "get", "map", "space", "internal", "setEdgeReplicationPreference", "ENABLED", "err", "message", "onAgentDestroy", "onAgentRefresh", "useCallback", "useEffect", "useState", "invariant", "log", "useClient", "useAgentHostingClient", "Invitation", "InvitationEncoder", "useKubeAgentHandlers", "invitations", "identity", "validationMessage", "setValidationMessage", "agentStatus", "setAgentStatus", "agentHostingProviderClient", "client", "updateAgentStatus", "agentId", "getAgent", "identityKey", "truncate", "err", "message", "createAgent", "invitationCode", "destroyAgent", "handleAgentCreate", "invitation", "encode", "state", "State", "CONNECTING", "info", "JSON", "stringify", "authCode", "onAgentCreate", "forEach", "cancel", "halo", "share", "type", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "NONE", "multiUse", "subscribe", "onAgentRefresh", "onAgentDestroy", "agentHostingEnabled", "useAgentHandlers", "params", "client", "useClient", "config", "values", "runtime", "edgeFeatures", "agents", "useEdgeAgentHandlers", "useKubeAgentHandlers", "Check", "X", "React", "useMemo", "QR", "Clipboard", "useId", "useTranslation", "descriptionText", "getSize", "mx", "hexToEmoji", "Invitation", "invitationStatusValue", "Map", "Invitation", "State", "ERROR", "TIMEOUT", "CANCELLED", "INIT", "CONNECTING", "CONNECTED", "READY_FOR_AUTHENTICATION", "AUTHENTICATING", "SUCCESS", "InvitationManagerView", "children", "props", "React", "Viewport", "View", "classNames", "InvitationManager", "invitationUrl", "active", "send", "status", "multiUse", "authCode", "id", "t", "useTranslation", "qrLabel", "useId", "statusValue", "invitationStatusValue", "get", "showAuthCode", "emoji", "hexToEmoji", "activeView", "useMemo", "Root", "Views", "p", "className", "div", "role", "mx", "descriptionText", "QR", "rounding", "backgroundColor", "color", "aria-labelledby", "errorCorrectionLevel", "cutout", "Centered", "Emoji", "text", "span", "Clipboard", "Button", "variant", "value", "Label", "AuthCode", "code", "large", "Check", "getSize", "X", "Actions", "Action", "disabled", "onClick", "type", "Warning", "React", "useState", "log", "Message", "useTranslation", "getSize", "mx", "ConfirmReset", "active", "onCancel", "onConfirm", "mode", "t", "useTranslation", "validationMessage", "setValidationMessage", "useState", "pending", "setPending", "processReset", "then", "error", "log", "catch", "React", "ConfirmResetImpl", "disabled", "confirmationValue", "inputValue", "setInputValue", "testIdAffix", "div", "role", "className", "Message", "Root", "valence", "Title", "Warning", "mx", "getSize", "Body", "Input", "label", "StepHeading", "data-testid", "placeholder", "onChange", "target", "value", "Actions", "Action", "onClick", "variant", "viewStyles", "getHueValue", "identity", "profile", "data", "hue", "hexToHue", "identityKey", "toHex", "getEmojiValue", "emoji", "hexToEmoji", "IdentityHeading", "titleId", "title", "onDone", "onUpdateProfile", "connectionState", "onChangeConnectionState", "onManageCredentials", "fallbackValue", "keyToFallback", "t", "useTranslation", "displayName", "setDisplayNameDirectly", "useState", "setEmojiDirectly", "setHueDirectly", "updateDisplayName", "useMemo", "debounce", "nextDisplayName", "setDisplayName", "setEmoji", "nextEmoji", "setHue", "nextHue", "isConnected", "ConnectionState", "ONLINE", "React", "Heading", "corner", "CloseButton", "Avatar", "Root", "Toolbar", "classNames", "Content", "size", "variant", "status", "fallback", "Label", "data-testid", "generateName", "Input", "srOnly", "TextInput", "placeholder", "value", "onChange", "target", "EmojiPickerToolbarButton", "onChangeEmoji", "HuePicker", "onReset", "undefined", "rootVariant", "Clipboard", "IconButton", "label", "did", "Tooltip", "Trigger", "asChild", "content", "side", "Button", "onClick", "span", "className", "IdentificationCard", "getSize", "errorText", "OFFLINE", "PlugsConnected", "Plugs", "IdentityPanelImpl", "props", "activeView", "onResetStorage", "onRecover", "onJoinNewIdentity", "IdentityActionChooser", "IdentityActionChooserComponent", "InvitationManager", "InvitationManagerComponent", "rest", "onCancelReset", "send", "hideRecover", "agentStatus", "Viewport", "Views", "View", "id", "active", "invitationUrl", "createInvitationUrl", "invitationCode", "ConfirmReset", "mode", "onConfirm", "onCancel", "IdentityPanelWithInvitationImpl", "invitation", "invitationStatus", "useInvitationStatus", "IdentityPanel", "propsTitleId", "code", "initialDisposition", "useId", "client", "useClient", "devices", "useDevices", "useIdentity", "invitations", "useHaloInvitations", "agentProps", "useAgentHandlers", "log", "error", "identityState", "identitySend", "identityService", "useIdentityMachine", "context", "swarm", "useNetworkStatus", "handleChangeConnectionState", "nextState", "mesh", "updateConfig", "useEffect", "subscription", "subscribe", "state", "unsubscribe", "matches", "type", "halo", "updateProfile", "implProps", "React", "useCallback", "useEffect", "useMemo", "log", "useClient", "useMulticastObservable", "useIdentity", "useId", "useThemeContext", "X", "React", "cloneElement", "forwardRef", "Button", "useTranslation", "descriptionText", "getSize", "mx", "JoinHeading", "forwardRef", "mode", "titleId", "exitActionParent", "onExit", "forwardedRef", "t", "useTranslation", "exitButton", "React", "Button", "variant", "onClick", "classNames", "mx", "descriptionText", "data-testid", "X", "weight", "className", "getSize", "span", "Heading", "ref", "title", "titleSrOnly", "corner", "cloneElement", "useMachine", "useCallback", "assign", "createMachine", "log", "AlreadyJoinedError", "Invitation", "InvitationEncoder", "getInvitationSubscribable", "Kind", "invitation", "subscribe", "next", "onError", "complete", "state", "State", "CONNECTING", "type", "CONNECTED", "READY_FOR_AUTHENTICATION", "AUTHENTICATING", "SUCCESS", "CANCELLED", "warn", "reason", "TIMEOUT", "error", "get", "acceptingInvitationTemplate", "successTarget", "config", "initial", "states", "always", "cond", "mode", "target", "context", "toLowerCase", "unredeemedCode", "actions", "invoke", "src", "invitationSubscribable", "spaceKey", "space", "toHex", "succeededKeys", "has", "on", "event", "failReason", "code", "joinMachine", "id", "predictableActionArguments", "initialDisposition", "identity", "halo", "unknown", "choosingIdentity", "unknownAuthMethod", "choosingAuthMethod", "recoveringIdentity", "creatingIdentity", "acceptingHaloInvitation", "confirmingAddedIdentity", "recoverIdentity", "createIdentity", "acceptHaloInvitation", "addIdentity", "selectIdentity", "deselectAuthMethod", "resettingIdentity", "acceptingSpaceInvitation", "finishingJoiningSpace", "finishingJoiningHalo", "resetIdentity", "guards", "existingIdentity", "_event", "noSelectedIdentity", "initiallyAcceptingHaloInvitation", "initiallyRecoveringIdentity", "hasHaloUnredeemedCode", "noSpaceInvitation", "setIdentity", "unsetIdentity", "resetInvitation", "invitationObservable", "cancel", "undefined", "setInvitation", "includes", "haloInvitation", "spaceInvitation", "defaultCodeFromUrl", "invitationType", "text", "searchParams", "URLSearchParams", "substring", "lastIndexOf", "err", "catch", "useJoinMachine", "client", "options", "redeemHaloInvitationCode", "decode", "join", "redeemSpaceInvitationCode", "spaces", "invalidateHaloInvitationCode", "onInvalidateInvitationCode", "invalidateSpaceInvitationCode", "CaretRight", "Plus", "QrCode", "Textbox", "React", "useTranslation", "getSize", "AdditionMethodChooser", "viewStateProps", "disabled", "active", "send", "t", "useTranslation", "sharedButtonProps", "after", "React", "CaretRight", "className", "getSize", "weight", "slots", "label", "StepHeading", "div", "role", "CompoundButton", "description", "before", "Plus", "onClick", "type", "data-autofocus", "data-testid", "QrCode", "Textbox", "React", "cloneElement", "generateName", "Avatar", "useId", "useTranslation", "mx", "hexToFallback", "IdentityAdded", "props", "mode", "addedIdentity", "active", "send", "onDone", "doneActionParent", "disabled", "t", "useTranslation", "addedIdentityHex", "identityKey", "toHex", "fallbackValue", "hexToFallback", "labelId", "useId", "displayName", "profile", "generateName", "doneAction", "React", "Action", "onClick", "data-autofocus", "data-testid", "span", "StepHeading", "div", "role", "className", "Avatar", "Root", "Content", "status", "hue", "data", "fallback", "emoji", "Label", "classNames", "mx", "Actions", "cloneElement", "variant", "type", "identity", "React", "useCallback", "useState", "log", "useClient", "useTranslation", "IdentityInput", "props", "send", "method", "isRecover", "client", "useClient", "t", "useTranslation", "validationMessage", "setValidationMessage", "useState", "handleConfirm", "value", "halo", "recoverIdentity", "recoveryCode", "then", "identity", "type", "error", "log", "catch", "createIdentity", "displayName", "React", "IdentityInputImpl", "onConfirm", "active", "inputValue", "setInputValue", "pending", "setPending", "disabled", "useCallback", "div", "role", "className", "Input", "label", "StepHeading", "data-testid", "placeholder", "onChange", "target", "Actions", "Action", "variant", "trim", "length", "onClick", "React", "cloneElement", "useTranslation", "React", "useState", "useEffect", "cloneElement", "log", "useTranslation", "invitationCodeFromUrl", "text", "searchParams", "URLSearchParams", "substring", "lastIndexOf", "invitation", "get", "err", "log", "catch", "InvitationInput", "props", "Kind", "active", "send", "unredeemedCode", "onExit", "exitActionParent", "onDone", "doneActionParent", "succeededKeys", "disabled", "t", "useTranslation", "inputValue", "setInputValue", "useState", "useEffect", "handleNext", "trim", "length", "type", "code", "exitAction", "React", "Action", "variant", "onClick", "data-testid", "div", "role", "className", "Input", "label", "StepHeading", "placeholder", "value", "onChange", "target", "data-autofocus", "toLowerCase", "onKeyUp", "key", "Actions", "cloneElement", "React", "useTranslation", "descriptionText", "InvitationActions", "invitationState", "onInvitationCancel", "active", "send", "Kind", "failReason", "t", "useTranslation", "React", "StepHeading", "className", "descriptionText", "div", "role", "Actions", "Action", "disabled", "onClick", "type", "data-testid", "classNames", "InvitationRescuer", "props", "React", "useState", "Invitation", "Input", "useTranslation", "descriptionText", "hexToEmoji", "pinLength", "InvitationAuthenticator", "failed", "Kind", "authMethod", "active", "pending", "invitationId", "onInvitationAuthenticate", "onInvitationCancel", "disabled", "t", "useTranslation", "invitationType", "toLowerCase", "authCode", "setAuthCode", "useState", "onChange", "target", "value", "length", "document", "querySelector", "focus", "React", "div", "role", "className", "Input", "Root", "validationValence", "Label", "asChild", "Invitation", "AuthMethod", "SHARED_SECRET", "StepHeading", "descriptionText", "PinInput", "inputMode", "autoComplete", "pattern", "DescriptionAndValidation", "classNames", "Validation", "Emoji", "text", "hexToEmoji", "Actions", "Action", "variant", "onClick", "data-testid", "data-autofocus-pinlength", "stepStyles", "Invitation", "inactiveBgColor", "activeBgColor", "successBgColor", "errorBgColor", "cancelledBgColor", "inactiveTextColor", "activeTextColor", "successTextColor", "errorTextColor", "cancelledTextColor", "inactiveStrokeColor", "activeStrokeColor", "successStrokeColor", "errorStrokeColor", "cancelledStrokeColor", "resolvedStrokeColor", "status", "Invitation", "State", "ERROR", "CANCELLED", "TIMEOUT", "resolvedBgColor", "resolvedTextColor", "JoinPanelImpl", "props", "titleId", "send", "activeView", "failed", "mode", "unredeemedCodes", "invitationIds", "invitationStates", "invitationAuthMethods", "succeededKeys", "failReasons", "onExit", "onHaloDone", "exitActionParent", "doneActionParent", "onHaloInvitationCancel", "onSpaceInvitationCancel", "onHaloInvitationAuthenticate", "onSpaceInvitationAuthenticate", "onCancelResetStorage", "onConfirmResetStorage", "IdentityInput", "IdentityInputComponent", "ConfirmReset", "ConfirmResetComponent", "React", "JoinHeading", "Viewport", "Root", "focusManaged", "Views", "View", "classNames", "stepStyles", "id", "AdditionMethodChooser", "active", "onCancel", "onConfirm", "method", "InvitationInput", "Kind", "Halo", "unredeemedCode", "InvitationRescuer", "invitationState", "onInvitationCancel", "failReason", "InvitationAuthenticator", "invitationId", "authMethod", "onInvitationAuthenticate", "has", "IdentityAdded", "onDone", "Space", "JoinPanel", "propsTitleId", "initialDisposition", "initialInvitationCode", "propsOnDone", "client", "useClient", "identity", "useIdentity", "hasIosKeyboard", "useThemeContext", "useId", "joinState", "joinSend", "joinService", "useJoinMachine", "context", "useEffect", "subscription", "subscribe", "state", "log", "unsubscribe", "stateStack", "configuration", "split", "innermostState", "length", "autoFocusValue", "$nextAutofocus", "document", "querySelector", "hasAttribute", "focus", "value", "useMemo", "matches", "choosingIdentity", "acceptingHaloInvitation", "acceptingRedeemedHaloInvitation", "some", "acceptingSpaceInvitation", "acceptingRedeemedSpaceInvitation", "onSpaceDone", "result", "Set", "add", "halo", "space", "spaces", "useMulticastObservable", "map", "key", "toHex", "undefined", "invitationObservable", "get", "useCallback", "identityKey", "invitation", "swarmKey", "spaceKey", "target", "reset", "then", "type", "pending", "str", "includes", "cancel", "authCode", "authenticate", "Planet", "React", "useEffect", "useMemo", "log", "useInvitationStatus", "useId", "useTranslation", "useMachine", "assign", "createMachine", "log", "spaceMachine", "id", "predictableActionArguments", "context", "space", "initial", "states", "managingSpace", "managingSpaceInvitation", "on", "deselectInvitation", "target", "actions", "selectInvitation", "setInvitation", "invitation", "event", "unsetInvitation", "undefined", "useSpaceMachine", "options", "Placeholder", "UserPlus", "UsersThree", "React", "useCallback", "useState", "log", "useConfig", "useSpaceInvitations", "Invitation", "InvitationEncoder", "ScrollArea", "useTranslation", "descriptionText", "mx", "activeActionKey", "handleInvitationEvent", "invitation", "subscription", "invitationCode", "InvitationEncoder", "encode", "state", "Invitation", "State", "CONNECTING", "log", "info", "JSON", "stringify", "authCode", "unsubscribe", "SpaceManager", "props", "space", "target", "t", "useTranslation", "config", "useConfig", "invitations", "useSpaceInvitations", "key", "inviteActions", "inviteOne", "label", "description", "icon", "UserPlus", "testId", "onClick", "useCallback", "share", "type", "Type", "INTERACTIVE", "authMethod", "AuthMethod", "SHARED_SECRET", "multiUse", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "subscribe", "inviteMany", "UsersThree", "DELEGATED", "KNOWN_PUBLIC_KEY", "React", "SpaceManagerImpl", "headingFragment", "active", "createInvitationUrl", "send", "propsInviteActions", "showInactiveInvitations", "SpaceMemberList", "SpaceMemberListComponent", "InvitationList", "InvitationListComponent", "noopInvite", "Placeholder", "activeAction", "setInternalActiveAction", "useState", "localStorage", "getItem", "setActiveAction", "nextAction", "setItem", "visibleInvitations", "filter", "CANCELLED", "includes", "get", "ScrollArea", "Root", "classNames", "Viewport", "length", "h3", "className", "mx", "descriptionText", "onClickRemove", "cancel", "spaceKey", "includeSelf", "Scrollbar", "orientation", "Thumb", "Actions", "BifurcatedAction", "disabled", "actions", "onChangeActiveAction", "data-testid", "SpacePanelHeading", "titleId", "space", "onDone", "t", "useTranslation", "name", "properties", "React", "Heading", "title", "corner", "CloseButton", "data-testid", "div", "role", "className", "Planet", "size", "weight", "key", "truncate", "SpacePanelImpl", "props", "activeView", "hideHeading", "target", "SpaceManager", "SpaceManagerComponent", "InvitationManager", "InvitationManagerComponent", "rest", "Viewport", "Root", "Views", "View", "id", "classNames", "stepStyles", "active", "invitationUrl", "SpacePanelWithInvitationImpl", "invitation", "invitationStatus", "useInvitationStatus", "createInvitationUrl", "invitationCode", "SpacePanel", "propsTitleId", "code", "useId", "spaceState", "spaceSend", "spaceService", "useSpaceMachine", "context", "useEffect", "subscription", "subscribe", "state", "log", "unsubscribe", "useMemo", "matches", "implProps", "send", "React", "Status", "useTranslation", "StatusPanel", "titleId", "t", "useTranslation", "React", "div", "className", "p", "id", "Status", "indeterminate", "IdentityDialog", "props", "titleId", "useId", "title", "React", "Dialog", "Root", "defaultOpen", "onOpenChange", "open", "onDone", "Portal", "Overlay", "Content", "aria-labelledby", "onOpenAutoFocus", "ev", "preventDefault", "Clipboard", "Provider", "IdentityPanel", "doneActionParent", "Close", "asChild", "React", "AlertDialog", "useId", "useVisualViewport", "JoinDialog", "joinPanelProps", "titleId", "useId", "height", "useVisualViewport", "React", "AlertDialog", "Root", "defaultOpen", "onOpenChange", "open", "onExit", "onDone", "Portal", "Overlay", "classNames", "style", "blockSize", "Content", "aria-labelledby", "JoinPanel", "exitActionParent", "Cancel", "asChild", "doneActionParent", "Action", "React", "StrictMode", "createRoot", "DEFAULT_CLIENT_CHANNEL", "DEFAULT_SHELL_CHANNEL", "AgentHostingProvider", "ClientProvider", "ClientServicesProxy", "Config", "ShellDisplay", "Button", "Clipboard", "Dialog", "ThemeProvider", "Tooltip", "useTranslation", "defaultTx", "createIFramePort", "React", "useEffect", "useState", "log", "useClient", "ShellDisplay", "ShellLayout", "useSpace", "React", "Clipboard", "Dialog", "useId", "SpaceDialog", "spacePanelProps", "titleId", "useId", "React", "Dialog", "Root", "defaultOpen", "onOpenChange", "open", "onDone", "Portal", "Overlay", "Content", "aria-labelledby", "Clipboard", "Provider", "SpacePanel", "doneActionParent", "Close", "asChild", "React", "AlertDialog", "useId", "StatusDialog", "titleId", "useId", "React", "AlertDialog", "Root", "open", "Portal", "Overlay", "Content", "aria-labelledby", "StatusPanel", "blurActiveElement", "document", "activeElement", "blur", "Shell", "runtime", "layout", "invitationCode", "spaceKey", "spaceId", "target", "setLayout", "useState", "invitationUrl", "deviceInvitationParam", "spaceInvitationParam", "setInvitationUrl", "client", "useClient", "space", "useSpace", "createDeviceInvitationUrl", "baseUrl", "URL", "searchParams", "set", "toString", "createSpaceInvitationUrl", "useEffect", "unsubscribeLayout", "layoutUpdate", "on", "request", "unsubscribeInvitationUrl", "invitationUrlUpdate", "ShellLayout", "SPACE", "log", "warn", "timeout", "setTimeout", "setAppContext", "display", "ShellDisplay", "NONE", "DEFAULT", "clearTimeout", "STATUS", "React", "StatusDialog", "INITIALIZE_IDENTITY", "INITIALIZE_IDENTITY_FROM_INVITATION", "INITIALIZE_IDENTITY_FROM_RECOVERY", "JoinDialog", "mode", "initialDisposition", "initialInvitationCode", "onCancelResetStorage", "IDENTITY", "onDone", "SHARE_IDENTITY", "EDIT_PROFILE", "IdentityDialog", "createInvitationUrl", "onResetStorage", "reset", "onRecover", "onJoinNewIdentity", "SpaceDialog", "JOIN_SPACE", "result", "undefined", "onExit", "Event", "appServiceBundle", "shellServiceBundle", "invariant", "ShellLayout", "createProtoRpcPeer", "ShellRuntimeImpl", "constructor", "_port", "layoutUpdate", "invitationUrlUpdate", "_layout", "DEFAULT", "_invitationUrl", "window", "location", "origin", "undefined", "_deviceInvitationParam", "_spaceInvitationParam", "layout", "invitationCode", "_invitationCode", "spaceKey", "_spaceKey", "spaceId", "_spaceId", "invitationUrl", "deviceInvitationParam", "spaceInvitationParam", "setLayout", "emit", "setInvitationUrl", "setAppContext", "context", "_appRpc", "rpc", "AppService", "setContext", "open", "requested", "exposed", "handlers", "ShellService", "request", "port", "close", "os", "osTranslations", "enUS", "runShell", "config", "Config", "runtime", "ShellRuntimeImpl", "createIFramePort", "channel", "DEFAULT_SHELL_CHANNEL", "open", "services", "ClientServicesProxy", "DEFAULT_CLIENT_CHANNEL", "createRoot", "document", "getElementById", "render", "React", "StrictMode", "ThemeProvider", "tx", "defaultTx", "resourceExtensions", "osTranslations", "ClientProvider", "noBanner", "Clipboard", "Provider", "Tooltip", "AgentHostingProvider", "Shell", "Fallback", "onClose", "setAppContext", "display", "ShellDisplay", "NONE", "t", "useTranslation", "Dialog", "Root", "modal", "onOpenChange", "Overlay", "Content", "Title", "Close", "asChild", "onClick", "Button", "variant", "React", "createContext", "useCallback", "useContext", "useEffect", "useMemo", "useState", "useClient", "ShellDisplay", "ShellLayout", "useIdentity", "mx", "Event", "ShellLayout", "MemoryShellRuntime", "constructor", "layout", "invitationCode", "spaceKey", "invitationUrl", "deviceInvitationParam", "spaceInvitationParam", "layoutUpdate", "Event", "invitationUrlUpdate", "contextUpdate", "_layout", "ShellLayout", "DEFAULT", "_invitationCode", "_spaceKey", "_invitationUrl", "window", "location", "origin", "_deviceInvitationParam", "_spaceInvitationParam", "setLayout", "request", "emit", "setInvitationUrl", "setAppContext", "context", "ShellContext", "createContext", "useShell", "client", "useClient", "runtime", "setDisplay", "useContext", "setLayout", "layout", "options", "ShellLayout", "DEFAULT", "ShellDisplay", "NONE", "FULLSCREEN", "shell", "open", "ShellProvider", "space", "deviceInvitationCode", "spaceInvitationCode", "onJoinedSpace", "children", "identity", "useIdentity", "display", "useState", "shellRuntime", "useMemo", "config", "get", "MemoryShellRuntime", "JOIN_SPACE", "invitationCode", "INITIALIZE_IDENTITY", "handleKeyDown", "useCallback", "event", "modifier", "ctrlKey", "metaKey", "key", "shiftKey", "SHARE_IDENTITY", "SPACE", "spaceKey", "useEffect", "window", "addEventListener", "removeEventListener", "contextUpdate", "on", "React", "div", "className", "mx", "Shell", "Provider", "value"]
|
|
7
7
|
}
|