@dxos/shell 0.4.7-main.f9d3866 → 0.4.7-next.76c1dea
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.mjs +69806 -27240
- package/dist/bundle/shell.mjs.map +1 -1
- package/dist/bundle/shell.umd.js +796 -80
- package/dist/bundle/shell.umd.js.map +1 -1
- package/dist/bundle/style.css +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react.mjs +871 -669
- package/dist/lib/browser/react.mjs.map +4 -4
- package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -0
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts +1 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts.map +1 -1
- package/dist/types/src/components/EmojiPicker.d.ts +11 -0
- package/dist/types/src/components/EmojiPicker.d.ts.map +1 -0
- package/dist/types/src/components/EmojiPicker.js +79 -0
- package/dist/types/src/components/EmojiPicker.js.map +1 -0
- package/dist/types/src/components/HuePicker.d.ts +11 -0
- package/dist/types/src/components/HuePicker.d.ts.map +1 -0
- package/dist/types/src/components/HuePicker.js +56 -0
- package/dist/types/src/components/HuePicker.js.map +1 -0
- package/dist/types/src/components/IdentityList/DeviceList.d.ts +1 -0
- package/dist/types/src/components/IdentityList/DeviceList.d.ts.map +1 -1
- package/dist/types/src/components/IdentityList/IdentityListItem.d.ts.map +1 -1
- package/dist/types/src/components/IdentityList/IdentityListItem.js +5 -5
- package/dist/types/src/components/IdentityList/IdentityListItem.js.map +1 -1
- package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts +1 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts.map +1 -1
- package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts +1 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts.map +1 -1
- package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts +1 -0
- package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts.map +1 -1
- package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts +1 -0
- package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts.map +1 -1
- package/dist/types/src/components/InvitationList/InvitationListItem.d.ts.map +1 -1
- package/dist/types/src/components/InvitationList/InvitationListItem.js +2 -2
- package/dist/types/src/components/InvitationList/InvitationListItem.js.map +1 -1
- package/dist/types/src/components/Panel/CloseButton.d.ts +1 -0
- package/dist/types/src/components/Panel/CloseButton.d.ts.map +1 -1
- package/dist/types/src/components/Panel/Panel.stories.d.ts +1 -0
- package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -1
- package/dist/types/src/components/SpaceListItem.d.ts.map +1 -1
- package/dist/types/src/components/SpaceListItem.js +2 -3
- package/dist/types/src/components/SpaceListItem.js.map +1 -1
- package/dist/types/src/components/Viewport/Viewport.js.map +1 -1
- package/dist/types/src/components/Viewport/Viewport.stories.d.ts +1 -0
- package/dist/types/src/components/Viewport/Viewport.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/index.js +2 -0
- package/dist/types/src/components/index.js.map +1 -1
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts +1 -0
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts.map +1 -1
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.js +1 -1
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.js.map +1 -1
- package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts +1 -0
- package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts.map +1 -1
- package/dist/types/src/composites/JoinDialog/JoinDialog.js +2 -2
- package/dist/types/src/composites/JoinDialog/JoinDialog.js.map +1 -1
- package/dist/types/src/composites/Shell/Shell.d.ts +1 -0
- package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
- package/dist/types/src/composites/Shell/Shell.js.map +1 -1
- package/dist/types/src/composites/Shell/ShellContext.js.map +1 -1
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts +1 -0
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts.map +1 -1
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.js +1 -1
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +7 -6
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/AgentForm.d.ts +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/AgentForm.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/DeviceManager.d.ts +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/DeviceManager.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +2 -1
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js +12 -3
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.d.ts +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +2 -1
- package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/JoinPanel.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/joinMachine.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js +8 -7
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js +2 -2
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.js.map +1 -1
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.d.ts +1 -0
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.d.ts.map +1 -1
- package/dist/types/src/panels/Panels.stories.d.ts.map +1 -1
- package/dist/types/src/panels/Panels.stories.js +1 -3
- package/dist/types/src/panels/Panels.stories.js.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +2 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
- package/dist/types/src/playwright/invitations-manager.js.map +1 -1
- package/dist/types/src/steps/InvitationManager.d.ts +1 -0
- package/dist/types/src/steps/InvitationManager.d.ts.map +1 -1
- package/dist/types/src/steps/InvitationManager.js +5 -4
- package/dist/types/src/steps/InvitationManager.js.map +1 -1
- package/dist/types/src/stories/Invitations.e2e-stories.d.ts +1 -0
- package/dist/types/src/stories/Invitations.e2e-stories.d.ts.map +1 -1
- package/dist/types/src/stories/Invitations.e2e-stories.js +3 -2
- package/dist/types/src/stories/Invitations.e2e-stories.js.map +1 -1
- package/dist/types/src/testing/scoped-shell-manager.js.map +1 -1
- package/dist/types/src/testing/shell-manager.js.map +1 -1
- package/dist/types/src/translations/locales/en-US.d.ts +21 -0
- package/dist/types/src/translations/locales/en-US.d.ts.map +1 -1
- package/dist/types/src/translations/locales/en-US.js +21 -0
- package/dist/types/src/translations/locales/en-US.js.map +1 -1
- package/dist/types/src/util/index.d.ts +0 -1
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/index.js +0 -1
- package/dist/types/src/util/index.js.map +1 -1
- package/package.json +23 -22
- package/src/components/EmojiPicker.tsx +82 -0
- package/src/components/HuePicker.tsx +87 -0
- package/src/components/IdentityList/IdentityListItem.tsx +9 -5
- package/src/components/InvitationList/InvitationListItem.tsx +2 -2
- package/src/components/SpaceListItem.tsx +4 -5
- package/src/components/index.ts +2 -0
- package/src/panels/IdentityPanel/IdentityPanel.tsx +6 -5
- package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +2 -1
- package/src/panels/IdentityPanel/steps/ProfileForm.tsx +29 -7
- package/src/panels/IdentityPanel/useAgentHandlers.ts +2 -1
- package/src/panels/JoinPanel/steps/IdentityAdded.tsx +7 -7
- package/src/panels/JoinPanel/steps/InvitationAuthenticator.tsx +2 -2
- package/src/panels/Panels.stories.tsx +1 -3
- package/src/panels/SpacePanel/steps/SpaceManager.tsx +2 -1
- package/src/steps/InvitationManager.tsx +4 -3
- package/src/stories/Invitations.e2e-stories.tsx +3 -2
- package/src/translations/locales/en-US.ts +21 -0
- package/src/util/index.ts +0 -1
- package/dist/types/src/util/toEmoji.d.ts +0 -2
- package/dist/types/src/util/toEmoji.d.ts.map +0 -1
- package/dist/types/src/util/toEmoji.js +0 -26
- package/dist/types/src/util/toEmoji.js.map +0 -1
- package/src/util/toEmoji.ts +0 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en-US.js","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"en-US.js","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/util/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/util/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC"}
|
|
@@ -18,5 +18,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
20
|
__exportStar(require("./invitationStatusValue"), exports);
|
|
21
|
-
__exportStar(require("./toEmoji"), exports);
|
|
22
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/util/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;AAEF,0DAAwC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/util/index.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;;;;;;;;;;;AAEF,0DAAwC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/shell",
|
|
3
|
-
"version": "0.4.7-
|
|
3
|
+
"version": "0.4.7-next.76c1dea",
|
|
4
4
|
"description": "DXOS’s OS experiences",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
"src"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
+
"@emoji-mart/data": "^1.1.2",
|
|
32
|
+
"@emoji-mart/react": "^1.1.1",
|
|
31
33
|
"@fluentui/react-tabster": "^9.19.0",
|
|
32
34
|
"@radix-ui/react-accordion": "^1.1.1",
|
|
33
35
|
"@radix-ui/react-context": "^1.0.0",
|
|
@@ -35,39 +37,38 @@
|
|
|
35
37
|
"@radix-ui/react-use-controllable-state": "^1.0.0",
|
|
36
38
|
"@react-hook/async": "^3.1.1",
|
|
37
39
|
"@xstate/react": "^3.2.1",
|
|
38
|
-
"
|
|
40
|
+
"emoji-mart": "^5.5.2",
|
|
39
41
|
"react-qr-rounded": "^1.0.0",
|
|
40
42
|
"url-join": "^5.0.0",
|
|
41
43
|
"xstate": "^4.37.0",
|
|
42
|
-
"@dxos/
|
|
43
|
-
"@dxos/client-services": "0.4.7-
|
|
44
|
-
"@dxos/
|
|
45
|
-
"@dxos/debug": "0.4.7-
|
|
46
|
-
"@dxos/
|
|
47
|
-
"@dxos/react-client": "0.4.7-
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/
|
|
50
|
-
"@dxos/
|
|
51
|
-
"@dxos/react-ui-
|
|
52
|
-
"@dxos/
|
|
53
|
-
"@dxos/
|
|
54
|
-
"@dxos/util": "0.4.7-
|
|
44
|
+
"@dxos/async": "0.4.7-next.76c1dea",
|
|
45
|
+
"@dxos/client-services": "0.4.7-next.76c1dea",
|
|
46
|
+
"@dxos/client-protocol": "0.4.7-next.76c1dea",
|
|
47
|
+
"@dxos/debug": "0.4.7-next.76c1dea",
|
|
48
|
+
"@dxos/display-name": "0.4.7-next.76c1dea",
|
|
49
|
+
"@dxos/react-client": "0.4.7-next.76c1dea",
|
|
50
|
+
"@dxos/log": "0.4.7-next.76c1dea",
|
|
51
|
+
"@dxos/invariant": "0.4.7-next.76c1dea",
|
|
52
|
+
"@dxos/react-ui": "0.4.7-next.76c1dea",
|
|
53
|
+
"@dxos/react-ui-theme": "0.4.7-next.76c1dea",
|
|
54
|
+
"@dxos/rpc-tunnel": "0.4.7-next.76c1dea",
|
|
55
|
+
"@dxos/react-ui-types": "0.4.7-next.76c1dea",
|
|
56
|
+
"@dxos/util": "0.4.7-next.76c1dea"
|
|
55
57
|
},
|
|
56
58
|
"devDependencies": {
|
|
57
59
|
"@phosphor-icons/react": "^2.0.5",
|
|
58
|
-
"@types/lodash.toarray": "^4.4.7",
|
|
59
60
|
"@types/react": "^18.0.21",
|
|
60
61
|
"@types/react-dom": "^18.0.6",
|
|
61
62
|
"@vitejs/plugin-react": "^4.2.1",
|
|
62
63
|
"react": "^18.2.0",
|
|
63
64
|
"react-dom": "^18.2.0",
|
|
64
|
-
"vite": "^5.1.
|
|
65
|
+
"vite": "^5.1.5",
|
|
65
66
|
"vite-plugin-turbosnap": "^1.0.2",
|
|
66
|
-
"@dxos/config": "0.4.7-
|
|
67
|
-
"@dxos/react-async": "0.4.7-
|
|
68
|
-
"@dxos/
|
|
69
|
-
"@dxos/
|
|
70
|
-
"@dxos/
|
|
67
|
+
"@dxos/config": "0.4.7-next.76c1dea",
|
|
68
|
+
"@dxos/react-async": "0.4.7-next.76c1dea",
|
|
69
|
+
"@dxos/react-ui-theme": "0.4.7-next.76c1dea",
|
|
70
|
+
"@dxos/storybook-utils": "0.4.7-next.76c1dea",
|
|
71
|
+
"@dxos/random": "0.4.7-next.76c1dea"
|
|
71
72
|
},
|
|
72
73
|
"peerDependencies": {
|
|
73
74
|
"@phosphor-icons/react": "^2.0.5",
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
import emojiData from '@emoji-mart/data';
|
|
5
|
+
import EmojiMart from '@emoji-mart/react';
|
|
6
|
+
import { ArrowCounterClockwise, CaretDown } from '@phosphor-icons/react';
|
|
7
|
+
import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
8
|
+
import React, { type Dispatch, type SetStateAction, useState } from 'react';
|
|
9
|
+
|
|
10
|
+
import { Button, Popover, useTranslation, Tooltip, type ButtonProps } from '@dxos/react-ui';
|
|
11
|
+
import { getSize } from '@dxos/react-ui-theme';
|
|
12
|
+
|
|
13
|
+
export type EmojiPickerProps = {
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
defaultEmoji?: string;
|
|
16
|
+
emoji?: string;
|
|
17
|
+
onChangeEmoji?: Dispatch<SetStateAction<string>>;
|
|
18
|
+
onClickClear?: ButtonProps['onClick'];
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const EmojiPicker = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickClear }: EmojiPickerProps) => {
|
|
22
|
+
const { t } = useTranslation('os');
|
|
23
|
+
|
|
24
|
+
const [emojiValue, setEmojiValue] = useControllableState<string>({
|
|
25
|
+
prop: emoji,
|
|
26
|
+
onChange: onChangeEmoji,
|
|
27
|
+
defaultProp: defaultEmoji,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
const [emojiPickerOpen, setEmojiPickerOpen] = useState<boolean>(false);
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<>
|
|
34
|
+
<Popover.Root open={emojiPickerOpen} onOpenChange={setEmojiPickerOpen}>
|
|
35
|
+
<Popover.Trigger asChild>
|
|
36
|
+
<Button variant='ghost' classNames='gap-2 text-2xl plb-1' disabled={disabled}>
|
|
37
|
+
<span className='sr-only'>{t('select emoji label')}</span>
|
|
38
|
+
<span className='grow pis-14'>{emojiValue}</span>
|
|
39
|
+
<CaretDown className={getSize(4)} />
|
|
40
|
+
</Button>
|
|
41
|
+
</Popover.Trigger>
|
|
42
|
+
<Popover.Content
|
|
43
|
+
side='right'
|
|
44
|
+
onKeyDownCapture={(event) => {
|
|
45
|
+
if (event.key === 'Escape') {
|
|
46
|
+
event.stopPropagation();
|
|
47
|
+
setEmojiPickerOpen(false);
|
|
48
|
+
}
|
|
49
|
+
}}
|
|
50
|
+
>
|
|
51
|
+
<EmojiMart
|
|
52
|
+
data={emojiData}
|
|
53
|
+
onEmojiSelect={({ native }: { native?: string }) => {
|
|
54
|
+
if (native) {
|
|
55
|
+
setEmojiValue(native);
|
|
56
|
+
setEmojiPickerOpen(false);
|
|
57
|
+
}
|
|
58
|
+
}}
|
|
59
|
+
autoFocus={true}
|
|
60
|
+
maxFrequentRows={0}
|
|
61
|
+
noCountryFlags={true}
|
|
62
|
+
/>
|
|
63
|
+
<Popover.Arrow />
|
|
64
|
+
</Popover.Content>
|
|
65
|
+
</Popover.Root>
|
|
66
|
+
<Tooltip.Root>
|
|
67
|
+
<Tooltip.Trigger asChild>
|
|
68
|
+
<Button variant='ghost' onClick={onClickClear} disabled={disabled}>
|
|
69
|
+
<span className='sr-only'>{t('clear label')}</span>
|
|
70
|
+
<ArrowCounterClockwise />
|
|
71
|
+
</Button>
|
|
72
|
+
</Tooltip.Trigger>
|
|
73
|
+
<Tooltip.Portal>
|
|
74
|
+
<Tooltip.Content style={{ zIndex: 70 }} side='right'>
|
|
75
|
+
{t('clear label')}
|
|
76
|
+
<Tooltip.Arrow />
|
|
77
|
+
</Tooltip.Content>
|
|
78
|
+
</Tooltip.Portal>
|
|
79
|
+
</Tooltip.Root>
|
|
80
|
+
</>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
import { ArrowCounterClockwise, CaretDown, Check } from '@phosphor-icons/react';
|
|
5
|
+
import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
6
|
+
import React, { type Dispatch, type SetStateAction } from 'react';
|
|
7
|
+
|
|
8
|
+
import { Button, useTranslation, Tooltip, DropdownMenu, useThemeContext, type ButtonProps } from '@dxos/react-ui';
|
|
9
|
+
import { getSize, hueTokenThemes } from '@dxos/react-ui-theme';
|
|
10
|
+
|
|
11
|
+
const HuePreview = ({ hue }: { hue: string }) => {
|
|
12
|
+
const { tx } = useThemeContext();
|
|
13
|
+
return (
|
|
14
|
+
<svg width={12} height={12} viewBox='0 0 12 12'>
|
|
15
|
+
<rect x={0} y={0} width={12} height={12} className={tx('hue.fill', 'select--hue__preview', { hue })} />
|
|
16
|
+
</svg>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type HuePickerProps = {
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
defaultHue?: string;
|
|
23
|
+
hue?: string;
|
|
24
|
+
onChangeHue?: Dispatch<SetStateAction<string>>;
|
|
25
|
+
onClickClear?: ButtonProps['onClick'];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export const HuePicker = ({ disabled, hue, onChangeHue, defaultHue, onClickClear }: HuePickerProps) => {
|
|
29
|
+
const { t } = useTranslation('os');
|
|
30
|
+
|
|
31
|
+
const [hueValue, setHueValue] = useControllableState<string>({
|
|
32
|
+
prop: hue,
|
|
33
|
+
onChange: onChangeHue,
|
|
34
|
+
defaultProp: defaultHue,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return (
|
|
38
|
+
<>
|
|
39
|
+
<DropdownMenu.Root modal={false}>
|
|
40
|
+
<DropdownMenu.Trigger asChild>
|
|
41
|
+
<Button variant='ghost' classNames='gap-2 plb-1' disabled={disabled}>
|
|
42
|
+
<span className='sr-only'>{t('select hue label')}</span>
|
|
43
|
+
<div role='none' className='pis-14 grow flex items-center justify-center gap-2'>
|
|
44
|
+
<HuePreview hue={hueValue!} />
|
|
45
|
+
<span>{t(`${hueValue} label`)}</span>
|
|
46
|
+
</div>
|
|
47
|
+
<CaretDown className={getSize(4)} />
|
|
48
|
+
</Button>
|
|
49
|
+
</DropdownMenu.Trigger>
|
|
50
|
+
<DropdownMenu.Content side='right'>
|
|
51
|
+
<DropdownMenu.Viewport>
|
|
52
|
+
{Object.keys(hueTokenThemes).map((hue) => {
|
|
53
|
+
return (
|
|
54
|
+
<DropdownMenu.CheckboxItem
|
|
55
|
+
key={hue}
|
|
56
|
+
checked={hue === hueValue}
|
|
57
|
+
onCheckedChange={() => setHueValue(hue)}
|
|
58
|
+
>
|
|
59
|
+
<HuePreview hue={hue} />
|
|
60
|
+
<span className='grow'>{t(`${hue} label`)}</span>
|
|
61
|
+
<DropdownMenu.ItemIndicator>
|
|
62
|
+
<Check />
|
|
63
|
+
</DropdownMenu.ItemIndicator>
|
|
64
|
+
</DropdownMenu.CheckboxItem>
|
|
65
|
+
);
|
|
66
|
+
})}
|
|
67
|
+
</DropdownMenu.Viewport>
|
|
68
|
+
<DropdownMenu.Arrow />
|
|
69
|
+
</DropdownMenu.Content>
|
|
70
|
+
</DropdownMenu.Root>
|
|
71
|
+
<Tooltip.Root>
|
|
72
|
+
<Tooltip.Trigger asChild>
|
|
73
|
+
<Button variant='ghost' onClick={onClickClear} disabled={disabled}>
|
|
74
|
+
<span className='sr-only'>{t('clear label')}</span>
|
|
75
|
+
<ArrowCounterClockwise />
|
|
76
|
+
</Button>
|
|
77
|
+
</Tooltip.Trigger>
|
|
78
|
+
<Tooltip.Portal>
|
|
79
|
+
<Tooltip.Content style={{ zIndex: 70 }} side='right'>
|
|
80
|
+
{t('clear label')}
|
|
81
|
+
<Tooltip.Arrow />
|
|
82
|
+
</Tooltip.Content>
|
|
83
|
+
</Tooltip.Portal>
|
|
84
|
+
</Tooltip.Root>
|
|
85
|
+
</>
|
|
86
|
+
);
|
|
87
|
+
};
|
|
@@ -7,8 +7,9 @@ import React, { type ComponentPropsWithoutRef, forwardRef } from 'react';
|
|
|
7
7
|
import { generateName } from '@dxos/display-name';
|
|
8
8
|
import { SpaceMember } from '@dxos/react-client/echo';
|
|
9
9
|
import { type Identity } from '@dxos/react-client/halo';
|
|
10
|
-
import { ListItem, Avatar,
|
|
10
|
+
import { ListItem, Avatar, useId, type ThemedClassName } from '@dxos/react-ui';
|
|
11
11
|
import { mx } from '@dxos/react-ui-theme';
|
|
12
|
+
import { keyToFallback } from '@dxos/util';
|
|
12
13
|
|
|
13
14
|
type IdentityListItemProps = {
|
|
14
15
|
identity: Identity;
|
|
@@ -20,9 +21,8 @@ export const IdentityListItem = forwardRef<
|
|
|
20
21
|
HTMLLIElement,
|
|
21
22
|
ThemedClassName<ComponentPropsWithoutRef<'li'>> & IdentityListItemProps
|
|
22
23
|
>(({ identity, presence, onClick, classNames, ...props }, forwardedRef) => {
|
|
23
|
-
const fallbackValue = identity.identityKey
|
|
24
|
+
const fallbackValue = keyToFallback(identity.identityKey);
|
|
24
25
|
const labelId = useId('identityListItem__label');
|
|
25
|
-
const jdenticon = useJdenticonHref(fallbackValue ?? '', 12);
|
|
26
26
|
const displayName = identity.profile?.displayName ?? generateName(identity.identityKey.toHex());
|
|
27
27
|
return (
|
|
28
28
|
<ListItem.Root
|
|
@@ -33,9 +33,13 @@ export const IdentityListItem = forwardRef<
|
|
|
33
33
|
labelId={labelId}
|
|
34
34
|
ref={forwardedRef}
|
|
35
35
|
>
|
|
36
|
-
<Avatar.Root
|
|
36
|
+
<Avatar.Root
|
|
37
|
+
status={presence === SpaceMember.PresenceState.ONLINE ? 'active' : 'inactive'}
|
|
38
|
+
labelId={labelId}
|
|
39
|
+
hue={identity.profile?.data?.hue || fallbackValue.hue}
|
|
40
|
+
>
|
|
37
41
|
<Avatar.Frame classNames='place-self-center'>
|
|
38
|
-
<Avatar.Fallback
|
|
42
|
+
<Avatar.Fallback text={identity.profile?.data?.emoji || fallbackValue.emoji} />
|
|
39
43
|
</Avatar.Frame>
|
|
40
44
|
<Avatar.Label classNames='text-sm truncate pli-2'>{displayName}</Avatar.Label>
|
|
41
45
|
</Avatar.Root>
|
|
@@ -21,9 +21,9 @@ import {
|
|
|
21
21
|
type ThemedClassName,
|
|
22
22
|
} from '@dxos/react-ui';
|
|
23
23
|
import { focusRing, getSize, mx } from '@dxos/react-ui-theme';
|
|
24
|
+
import { hexToEmoji } from '@dxos/util';
|
|
24
25
|
|
|
25
26
|
import { type SharedInvitationListProps } from './InvitationListProps';
|
|
26
|
-
import { toEmoji } from '../../util';
|
|
27
27
|
import { AuthCode } from '../AuthCode';
|
|
28
28
|
import { CopyButtonIconOnly } from '../Clipboard';
|
|
29
29
|
|
|
@@ -151,7 +151,7 @@ export const InvitationListItemImpl = ({
|
|
|
151
151
|
<Avatar.Root {...avatarProps} animation={avatarAnimation} status={avatarStatus}>
|
|
152
152
|
<Tooltip.Trigger asChild>
|
|
153
153
|
<Avatar.Frame tabIndex={0} classNames={[focusRing, 'relative rounded-full place-self-center']}>
|
|
154
|
-
<Avatar.Fallback text={
|
|
154
|
+
<Avatar.Fallback text={hexToEmoji(invitationId)} />
|
|
155
155
|
</Avatar.Frame>
|
|
156
156
|
</Tooltip.Trigger>
|
|
157
157
|
</Avatar.Root>
|
|
@@ -5,15 +5,14 @@
|
|
|
5
5
|
import React, { type ForwardedRef, forwardRef } from 'react';
|
|
6
6
|
|
|
7
7
|
import type { Space } from '@dxos/react-client/echo';
|
|
8
|
-
import { Avatar, useId
|
|
8
|
+
import { Avatar, useId } from '@dxos/react-ui';
|
|
9
9
|
import { mx } from '@dxos/react-ui-theme';
|
|
10
|
-
import { humanize } from '@dxos/util';
|
|
10
|
+
import { humanize, keyToEmoji } from '@dxos/util';
|
|
11
11
|
|
|
12
12
|
export const SpaceListItem = forwardRef(
|
|
13
13
|
({ space, onClick }: { space: Space; onClick?: () => void }, ref: ForwardedRef<HTMLLIElement>) => {
|
|
14
|
-
const fallbackValue = space.key
|
|
14
|
+
const fallbackValue = keyToEmoji(space.key);
|
|
15
15
|
const labelId = useId('identityListItem__label');
|
|
16
|
-
const jdenticon = useJdenticonHref(fallbackValue ?? '', 12);
|
|
17
16
|
const displayName = space.properties.name ?? humanize(space.key.toHex());
|
|
18
17
|
|
|
19
18
|
return (
|
|
@@ -25,7 +24,7 @@ export const SpaceListItem = forwardRef(
|
|
|
25
24
|
>
|
|
26
25
|
<Avatar.Root labelId={labelId}>
|
|
27
26
|
<Avatar.Frame>
|
|
28
|
-
<Avatar.Fallback
|
|
27
|
+
<Avatar.Fallback text={fallbackValue} />
|
|
29
28
|
</Avatar.Frame>
|
|
30
29
|
<Avatar.Label classNames='text-sm truncate'>{displayName}</Avatar.Label>
|
|
31
30
|
</Avatar.Root>
|
package/src/components/index.ts
CHANGED
|
@@ -9,7 +9,8 @@ import { useClient } from '@dxos/react-client';
|
|
|
9
9
|
import { type Identity, useIdentity, useDevices, useHaloInvitations } from '@dxos/react-client/halo';
|
|
10
10
|
import { useInvitationStatus } from '@dxos/react-client/invitations';
|
|
11
11
|
import type { CancellableInvitationObservable } from '@dxos/react-client/invitations';
|
|
12
|
-
import { Avatar, DensityProvider, useId,
|
|
12
|
+
import { Avatar, DensityProvider, useId, useTranslation } from '@dxos/react-ui';
|
|
13
|
+
import { keyToFallback } from '@dxos/util';
|
|
13
14
|
|
|
14
15
|
import {
|
|
15
16
|
type IdentityPanelHeadingProps,
|
|
@@ -25,12 +26,12 @@ import { InvitationManager } from '../../steps';
|
|
|
25
26
|
const viewStyles = 'pbs-1 pbe-3 pli-3';
|
|
26
27
|
|
|
27
28
|
const IdentityHeading = ({ titleId, title, identity, onDone }: IdentityPanelHeadingProps) => {
|
|
28
|
-
const
|
|
29
|
+
const fallbackValue = keyToFallback(identity.identityKey);
|
|
29
30
|
return (
|
|
30
31
|
<Heading titleId={titleId} title={title} corner={<CloseButton onDone={onDone} />}>
|
|
31
|
-
<Avatar.Root size={12} variant='circle' status='active'>
|
|
32
|
+
<Avatar.Root size={12} variant='circle' status='active' hue={identity.profile?.data?.hue || fallbackValue.hue}>
|
|
32
33
|
<Avatar.Frame classNames='block mbs-4 mbe-2 mli-auto chromatic-ignore'>
|
|
33
|
-
<Avatar.Fallback
|
|
34
|
+
<Avatar.Fallback text={identity.profile?.data?.emoji || fallbackValue.emoji} />
|
|
34
35
|
</Avatar.Frame>
|
|
35
36
|
<Avatar.Label classNames='block text-center font-light text-xl' data-testid='identityHeading.displayName'>
|
|
36
37
|
{identity.profile?.displayName ?? generateName(identity.identityKey.toHex())}
|
|
@@ -128,7 +129,7 @@ export const IdentityPanel = ({
|
|
|
128
129
|
const invitations = useHaloInvitations();
|
|
129
130
|
const agentProps = useAgentHandlers({ client, identity, invitations });
|
|
130
131
|
if (!identity) {
|
|
131
|
-
|
|
132
|
+
log.error('IdentityPanel rendered with no active identity.');
|
|
132
133
|
return null;
|
|
133
134
|
}
|
|
134
135
|
const [identityState, identitySend, identityService] = useIdentityMachine(client);
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { CaretRight, Devices, Plus, Power, UserGear, HardDrive } from '@phosphor-icons/react';
|
|
6
6
|
import React, { useCallback } from 'react';
|
|
7
7
|
|
|
8
|
+
import { log } from '@dxos/log';
|
|
8
9
|
import { useAgentHostingProviderClient, useClient } from '@dxos/react-client';
|
|
9
10
|
import { useHaloInvitations } from '@dxos/react-client/halo';
|
|
10
11
|
import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
|
|
@@ -24,7 +25,7 @@ export const IdentityActionChooser = (props: IdentityPanelStepProps) => {
|
|
|
24
25
|
const onInvitationEvent = useCallback((invitation: Invitation) => {
|
|
25
26
|
const invitationCode = InvitationEncoder.encode(invitation);
|
|
26
27
|
if (invitation.state === Invitation.State.CONNECTING) {
|
|
27
|
-
|
|
28
|
+
log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));
|
|
28
29
|
}
|
|
29
30
|
}, []);
|
|
30
31
|
const createInvitation = (e: React.MouseEvent) => {
|
|
@@ -8,8 +8,9 @@ import { type Event, type SingleOrArray } from 'xstate';
|
|
|
8
8
|
import { log } from '@dxos/log';
|
|
9
9
|
import { type Identity } from '@dxos/react-client/halo';
|
|
10
10
|
import { useTranslation } from '@dxos/react-ui';
|
|
11
|
+
import { hexToEmoji, hexToHue } from '@dxos/util';
|
|
11
12
|
|
|
12
|
-
import { Action, Actions, StepHeading, Input, useClipboardContext } from '../../../components';
|
|
13
|
+
import { Action, Actions, StepHeading, Input, useClipboardContext, EmojiPicker, HuePicker } from '../../../components';
|
|
13
14
|
import { type IdentityPanelStepProps } from '../IdentityPanelProps';
|
|
14
15
|
import { type IdentityEvent } from '../identityMachine';
|
|
15
16
|
|
|
@@ -36,13 +37,20 @@ export const ProfileForm = (props: ProfileFormProps) => {
|
|
|
36
37
|
return <ProfileFormImpl {...props} onUpdateProfile={handleUpdateProfile} validationMessage={validationMessage} />;
|
|
37
38
|
};
|
|
38
39
|
|
|
40
|
+
const getHueValue = (identity?: Identity) =>
|
|
41
|
+
identity?.profile?.data?.hue || hexToHue(identity?.identityKey.toHex() ?? '0');
|
|
42
|
+
const getEmojiValue = (identity?: Identity) =>
|
|
43
|
+
identity?.profile?.data?.emoji || hexToEmoji(identity?.identityKey.toHex() ?? '0');
|
|
44
|
+
|
|
39
45
|
// TODO(zhenyasav): impl shouldn't need send()
|
|
40
46
|
const ProfileFormImpl = (props: ProfileFormImplProps) => {
|
|
41
47
|
const { active, identity, send, onUpdateProfile, validationMessage } = props;
|
|
42
48
|
const profile = identity?.profile;
|
|
43
49
|
const disabled = !active;
|
|
44
50
|
const { t } = useTranslation('os');
|
|
45
|
-
const [
|
|
51
|
+
const [displayName, setDisplayName] = useState(profile?.displayName ?? '');
|
|
52
|
+
const [hue, setHue] = useState<string>(getHueValue(identity));
|
|
53
|
+
const [emoji, setEmoji] = useState<string>(getEmojiValue(identity));
|
|
46
54
|
const { textValue, setTextValue } = useClipboardContext();
|
|
47
55
|
const identityHex = identity?.identityKey.toHex();
|
|
48
56
|
const copied = textValue === identityHex;
|
|
@@ -51,14 +59,28 @@ const ProfileFormImpl = (props: ProfileFormImplProps) => {
|
|
|
51
59
|
<div role='none' className='grow flex flex-col justify-center'>
|
|
52
60
|
<Input
|
|
53
61
|
{...{ validationMessage }}
|
|
54
|
-
label={<StepHeading>{t('display name input label')}</StepHeading>}
|
|
62
|
+
label={<StepHeading className='m-0'>{t('display name input label')}</StepHeading>}
|
|
55
63
|
disabled={disabled}
|
|
56
64
|
data-testid='display-name-input'
|
|
57
65
|
placeholder={t('display name input placeholder')}
|
|
58
|
-
value={
|
|
59
|
-
onChange={({ target: { value } }) =>
|
|
60
|
-
onKeyDown={({ key }) => key === 'Enter' && onUpdateProfile?.({ displayName: inputValue })}
|
|
66
|
+
value={displayName}
|
|
67
|
+
onChange={({ target: { value } }) => setDisplayName(value)}
|
|
61
68
|
/>
|
|
69
|
+
<StepHeading className='mbe-2'>{t('emoji and color label')}</StepHeading>
|
|
70
|
+
<div role='none' className='grid grid-cols-[1fr_min-content] gap-y-2'>
|
|
71
|
+
<EmojiPicker
|
|
72
|
+
emoji={emoji}
|
|
73
|
+
onChangeEmoji={setEmoji}
|
|
74
|
+
disabled={disabled}
|
|
75
|
+
onClickClear={() => setEmoji(getEmojiValue(identity))}
|
|
76
|
+
/>
|
|
77
|
+
<HuePicker
|
|
78
|
+
hue={hue}
|
|
79
|
+
onChangeHue={setHue}
|
|
80
|
+
disabled={disabled}
|
|
81
|
+
onClickClear={() => setHue(getHueValue(identity))}
|
|
82
|
+
/>
|
|
83
|
+
</div>
|
|
62
84
|
</div>
|
|
63
85
|
<Actions>
|
|
64
86
|
<Action
|
|
@@ -84,7 +106,7 @@ const ProfileFormImpl = (props: ProfileFormImplProps) => {
|
|
|
84
106
|
<Action
|
|
85
107
|
variant='primary'
|
|
86
108
|
disabled={disabled}
|
|
87
|
-
onClick={() => onUpdateProfile?.({ displayName:
|
|
109
|
+
onClick={() => onUpdateProfile?.({ displayName, data: { emoji, hue } })}
|
|
88
110
|
data-testid='update-profile-form-continue'
|
|
89
111
|
>
|
|
90
112
|
{t('done label')}
|
|
@@ -6,6 +6,7 @@ import { useCallback, useEffect, useState } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { type CancellableInvitation } from '@dxos/client-protocol';
|
|
8
8
|
import { invariant } from '@dxos/invariant';
|
|
9
|
+
import { log } from '@dxos/log';
|
|
9
10
|
import { useAgentHostingProviderClient, type Client } from '@dxos/react-client';
|
|
10
11
|
import { type Identity } from '@dxos/react-client/halo';
|
|
11
12
|
import { Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
|
|
@@ -46,7 +47,7 @@ export const useAgentHandlers = ({
|
|
|
46
47
|
const handleAgentCreate = useCallback(async (invitation: Invitation) => {
|
|
47
48
|
const invitationCode = InvitationEncoder.encode(invitation);
|
|
48
49
|
if (invitation.state === Invitation.State.CONNECTING) {
|
|
49
|
-
|
|
50
|
+
log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));
|
|
50
51
|
invariant(identity, 'Identity not found');
|
|
51
52
|
if (agentHostingProviderClient) {
|
|
52
53
|
try {
|
|
@@ -6,8 +6,9 @@ import React, { cloneElement } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { generateName } from '@dxos/display-name';
|
|
8
8
|
import type { Identity } from '@dxos/react-client/halo';
|
|
9
|
-
import { Avatar, useId,
|
|
9
|
+
import { Avatar, useId, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { mx } from '@dxos/react-ui-theme';
|
|
11
|
+
import { hexToFallback } from '@dxos/util';
|
|
11
12
|
|
|
12
13
|
import { Action, Actions, StepHeading } from '../../../components';
|
|
13
14
|
import { type JoinPanelMode, type JoinStepProps } from '../JoinPanelProps';
|
|
@@ -22,11 +23,10 @@ export const IdentityAdded = (props: IdentityAddedProps) => {
|
|
|
22
23
|
const disabled = !active;
|
|
23
24
|
const { t } = useTranslation('os');
|
|
24
25
|
|
|
25
|
-
const
|
|
26
|
+
const addedIdentityHex = addedIdentity?.identityKey.toHex() ?? '0';
|
|
27
|
+
const fallbackValue = hexToFallback(addedIdentityHex);
|
|
26
28
|
const labelId = useId('identityListItem__label');
|
|
27
|
-
const
|
|
28
|
-
const displayName =
|
|
29
|
-
addedIdentity?.profile?.displayName ?? (addedIdentity && generateName(addedIdentity?.identityKey.toHex()));
|
|
29
|
+
const displayName = addedIdentity?.profile?.displayName ?? (addedIdentity && generateName(addedIdentityHex));
|
|
30
30
|
|
|
31
31
|
const doneAction = (
|
|
32
32
|
<Action
|
|
@@ -43,9 +43,9 @@ export const IdentityAdded = (props: IdentityAddedProps) => {
|
|
|
43
43
|
<>
|
|
44
44
|
<StepHeading>{t('identity added label')}</StepHeading>
|
|
45
45
|
<div role='none' className='grow flex flex-col items-center justify-center text-center gap-2'>
|
|
46
|
-
<Avatar.Root status='active' labelId={labelId}>
|
|
46
|
+
<Avatar.Root status='active' labelId={labelId} hue={addedIdentity?.profile?.data?.hue || fallbackValue.hue}>
|
|
47
47
|
<Avatar.Frame>
|
|
48
|
-
<Avatar.Fallback
|
|
48
|
+
<Avatar.Fallback text={addedIdentity?.profile?.data?.emoji || fallbackValue.emoji} />
|
|
49
49
|
</Avatar.Frame>
|
|
50
50
|
<Avatar.Label classNames={mx('text-lg truncate', !addedIdentity?.profile?.displayName && 'font-mono')}>
|
|
51
51
|
{displayName}
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
import React, { type ChangeEvent, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { Input, useTranslation } from '@dxos/react-ui';
|
|
8
|
+
import { hexToEmoji } from '@dxos/util';
|
|
8
9
|
|
|
9
10
|
import { Actions, Action, Emoji, StepHeading } from '../../../components';
|
|
10
|
-
import { toEmoji } from '../../../util';
|
|
11
11
|
import { type JoinStepProps } from '../JoinPanelProps';
|
|
12
12
|
|
|
13
13
|
const pinLength = 6;
|
|
@@ -45,7 +45,7 @@ export const InvitationAuthenticator = ({
|
|
|
45
45
|
return (
|
|
46
46
|
<>
|
|
47
47
|
<div role='none' className='grow flex flex-col justify-center'>
|
|
48
|
-
{invitationId && <Emoji text={
|
|
48
|
+
{invitationId && <Emoji text={hexToEmoji(invitationId)} />}
|
|
49
49
|
<Input.Root
|
|
50
50
|
{...(failed && {
|
|
51
51
|
validationValence: 'error',
|
|
@@ -16,9 +16,7 @@ const getComponentNames = (module: any): string[] =>
|
|
|
16
16
|
Object.getOwnPropertyNames(module).filter((name) => !(name === 'default' || name.startsWith('__')));
|
|
17
17
|
|
|
18
18
|
const getComponents = (module: any): React.FC[] => {
|
|
19
|
-
|
|
20
|
-
console.log(module);
|
|
21
|
-
return components;
|
|
19
|
+
return getComponentNames(module).map((name) => module[name]);
|
|
22
20
|
};
|
|
23
21
|
|
|
24
22
|
const camelCaseToSpacedName = (camelCase: string) => {
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { Placeholder, UserPlus, UsersThree } from '@phosphor-icons/react';
|
|
6
6
|
import React, { type Dispatch, type SetStateAction, useCallback, useState } from 'react';
|
|
7
7
|
|
|
8
|
+
import { log } from '@dxos/log';
|
|
8
9
|
import { useConfig } from '@dxos/react-client';
|
|
9
10
|
import { useSpaceInvitations } from '@dxos/react-client/echo';
|
|
10
11
|
import { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
|
|
@@ -45,7 +46,7 @@ export const SpaceManager = (props: SpaceManagerProps) => {
|
|
|
45
46
|
const onInvitationEvent = useCallback((invitation: Invitation) => {
|
|
46
47
|
const invitationCode = InvitationEncoder.encode(invitation);
|
|
47
48
|
if (invitation.state === Invitation.State.CONNECTING) {
|
|
48
|
-
|
|
49
|
+
log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));
|
|
49
50
|
}
|
|
50
51
|
}, []);
|
|
51
52
|
|