@dxos/shell 0.4.7-main.731b147 → 0.4.7-main.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.
Files changed (175) hide show
  1. package/dist/bundle/shell.mjs +69787 -27214
  2. package/dist/bundle/shell.mjs.map +1 -1
  3. package/dist/bundle/shell.umd.js +796 -80
  4. package/dist/bundle/shell.umd.js.map +1 -1
  5. package/dist/bundle/style.css +1 -1
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/browser/react.mjs +872 -669
  8. package/dist/lib/browser/react.mjs.map +4 -4
  9. package/dist/types/src/components/Clipboard/CopyButton.d.ts +1 -0
  10. package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
  11. package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts +1 -0
  12. package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts.map +1 -1
  13. package/dist/types/src/components/EmojiPicker.d.ts +11 -0
  14. package/dist/types/src/components/EmojiPicker.d.ts.map +1 -0
  15. package/dist/types/src/components/EmojiPicker.js +79 -0
  16. package/dist/types/src/components/EmojiPicker.js.map +1 -0
  17. package/dist/types/src/components/HuePicker.d.ts +11 -0
  18. package/dist/types/src/components/HuePicker.d.ts.map +1 -0
  19. package/dist/types/src/components/HuePicker.js +56 -0
  20. package/dist/types/src/components/HuePicker.js.map +1 -0
  21. package/dist/types/src/components/IdentityList/DeviceList.d.ts +1 -0
  22. package/dist/types/src/components/IdentityList/DeviceList.d.ts.map +1 -1
  23. package/dist/types/src/components/IdentityList/DeviceList.js +1 -1
  24. package/dist/types/src/components/IdentityList/DeviceList.js.map +1 -1
  25. package/dist/types/src/components/IdentityList/IdentityListItem.d.ts.map +1 -1
  26. package/dist/types/src/components/IdentityList/IdentityListItem.js +5 -5
  27. package/dist/types/src/components/IdentityList/IdentityListItem.js.map +1 -1
  28. package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts +1 -0
  29. package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts.map +1 -1
  30. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts +1 -0
  31. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts.map +1 -1
  32. package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts +1 -0
  33. package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts +1 -0
  35. package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts.map +1 -1
  36. package/dist/types/src/components/InvitationList/InvitationListItem.d.ts.map +1 -1
  37. package/dist/types/src/components/InvitationList/InvitationListItem.js +2 -2
  38. package/dist/types/src/components/InvitationList/InvitationListItem.js.map +1 -1
  39. package/dist/types/src/components/Panel/CloseButton.d.ts +1 -0
  40. package/dist/types/src/components/Panel/CloseButton.d.ts.map +1 -1
  41. package/dist/types/src/components/Panel/Panel.stories.d.ts +1 -0
  42. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -1
  43. package/dist/types/src/components/SpaceListItem.d.ts.map +1 -1
  44. package/dist/types/src/components/SpaceListItem.js +2 -3
  45. package/dist/types/src/components/SpaceListItem.js.map +1 -1
  46. package/dist/types/src/components/Viewport/Viewport.js.map +1 -1
  47. package/dist/types/src/components/Viewport/Viewport.stories.d.ts +1 -0
  48. package/dist/types/src/components/Viewport/Viewport.stories.d.ts.map +1 -1
  49. package/dist/types/src/components/index.d.ts +2 -0
  50. package/dist/types/src/components/index.d.ts.map +1 -1
  51. package/dist/types/src/components/index.js +2 -0
  52. package/dist/types/src/components/index.js.map +1 -1
  53. package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts +1 -0
  54. package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts.map +1 -1
  55. package/dist/types/src/composites/IdentityDialog/IdentityDialog.js +1 -1
  56. package/dist/types/src/composites/IdentityDialog/IdentityDialog.js.map +1 -1
  57. package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts +1 -0
  58. package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts.map +1 -1
  59. package/dist/types/src/composites/JoinDialog/JoinDialog.js +2 -2
  60. package/dist/types/src/composites/JoinDialog/JoinDialog.js.map +1 -1
  61. package/dist/types/src/composites/Shell/Shell.d.ts +1 -0
  62. package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
  63. package/dist/types/src/composites/Shell/Shell.js.map +1 -1
  64. package/dist/types/src/composites/Shell/ShellContext.js.map +1 -1
  65. package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts +1 -0
  66. package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts.map +1 -1
  67. package/dist/types/src/composites/SpaceDialog/SpaceDialog.js +1 -1
  68. package/dist/types/src/composites/SpaceDialog/SpaceDialog.js.map +1 -1
  69. package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts +1 -0
  70. package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
  71. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +7 -6
  72. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
  73. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts +1 -0
  74. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts.map +1 -1
  75. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js +16 -3
  76. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js.map +1 -1
  77. package/dist/types/src/panels/IdentityPanel/steps/AgentForm.d.ts +1 -0
  78. package/dist/types/src/panels/IdentityPanel/steps/AgentForm.d.ts.map +1 -1
  79. package/dist/types/src/panels/IdentityPanel/steps/DeviceManager.d.ts +1 -0
  80. package/dist/types/src/panels/IdentityPanel/steps/DeviceManager.d.ts.map +1 -1
  81. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -1
  82. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +2 -1
  83. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
  84. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts +1 -0
  85. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts.map +1 -1
  86. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js +12 -3
  87. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js.map +1 -1
  88. package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.d.ts +1 -0
  89. package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.d.ts.map +1 -1
  90. package/dist/types/src/panels/IdentityPanel/steps/SignOutChooser.js.map +1 -1
  91. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -1
  92. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +2 -1
  93. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -1
  94. package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts +1 -0
  95. package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts.map +1 -1
  96. package/dist/types/src/panels/JoinPanel/JoinPanel.js.map +1 -1
  97. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts +1 -0
  98. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts.map +1 -1
  99. package/dist/types/src/panels/JoinPanel/joinMachine.js.map +1 -1
  100. package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts +1 -0
  101. package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts.map +1 -1
  102. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts +1 -0
  103. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts.map +1 -1
  104. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js +8 -7
  105. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js.map +1 -1
  106. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts +1 -0
  107. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts.map +1 -1
  108. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts +1 -0
  109. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts.map +1 -1
  110. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js +2 -2
  111. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js.map +1 -1
  112. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts +1 -0
  113. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts.map +1 -1
  114. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js.map +1 -1
  115. package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts +1 -0
  116. package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts.map +1 -1
  117. package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.js.map +1 -1
  118. package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.d.ts +1 -0
  119. package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.d.ts.map +1 -1
  120. package/dist/types/src/panels/Panels.stories.d.ts.map +1 -1
  121. package/dist/types/src/panels/Panels.stories.js +1 -3
  122. package/dist/types/src/panels/Panels.stories.js.map +1 -1
  123. package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts +1 -0
  124. package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -1
  125. package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
  126. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts +1 -0
  127. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts.map +1 -1
  128. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
  129. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +2 -1
  130. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
  131. package/dist/types/src/playwright/invitations-manager.js.map +1 -1
  132. package/dist/types/src/steps/InvitationManager.d.ts +1 -0
  133. package/dist/types/src/steps/InvitationManager.d.ts.map +1 -1
  134. package/dist/types/src/steps/InvitationManager.js +5 -4
  135. package/dist/types/src/steps/InvitationManager.js.map +1 -1
  136. package/dist/types/src/stories/Invitations.e2e-stories.d.ts +1 -0
  137. package/dist/types/src/stories/Invitations.e2e-stories.d.ts.map +1 -1
  138. package/dist/types/src/stories/Invitations.e2e-stories.js +3 -2
  139. package/dist/types/src/stories/Invitations.e2e-stories.js.map +1 -1
  140. package/dist/types/src/testing/scoped-shell-manager.js.map +1 -1
  141. package/dist/types/src/testing/shell-manager.js.map +1 -1
  142. package/dist/types/src/translations/locales/en-US.d.ts +21 -0
  143. package/dist/types/src/translations/locales/en-US.d.ts.map +1 -1
  144. package/dist/types/src/translations/locales/en-US.js +21 -0
  145. package/dist/types/src/translations/locales/en-US.js.map +1 -1
  146. package/dist/types/src/util/index.d.ts +0 -1
  147. package/dist/types/src/util/index.d.ts.map +1 -1
  148. package/dist/types/src/util/index.js +0 -1
  149. package/dist/types/src/util/index.js.map +1 -1
  150. package/package.json +23 -22
  151. package/src/components/EmojiPicker.tsx +82 -0
  152. package/src/components/HuePicker.tsx +87 -0
  153. package/src/components/IdentityList/DeviceList.tsx +1 -0
  154. package/src/components/IdentityList/IdentityListItem.tsx +9 -5
  155. package/src/components/InvitationList/InvitationListItem.tsx +2 -2
  156. package/src/components/SpaceListItem.tsx +4 -5
  157. package/src/components/index.ts +2 -0
  158. package/src/panels/IdentityPanel/IdentityPanel.stories.tsx +17 -4
  159. package/src/panels/IdentityPanel/IdentityPanel.tsx +6 -5
  160. package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +2 -1
  161. package/src/panels/IdentityPanel/steps/ProfileForm.tsx +29 -7
  162. package/src/panels/IdentityPanel/useAgentHandlers.ts +2 -1
  163. package/src/panels/JoinPanel/steps/IdentityAdded.tsx +7 -7
  164. package/src/panels/JoinPanel/steps/InvitationAuthenticator.tsx +2 -2
  165. package/src/panels/Panels.stories.tsx +1 -3
  166. package/src/panels/SpacePanel/steps/SpaceManager.tsx +2 -1
  167. package/src/steps/InvitationManager.tsx +4 -3
  168. package/src/stories/Invitations.e2e-stories.tsx +3 -2
  169. package/src/translations/locales/en-US.ts +21 -0
  170. package/src/util/index.ts +0 -1
  171. package/dist/types/src/util/toEmoji.d.ts +0 -2
  172. package/dist/types/src/util/toEmoji.d.ts.map +0 -1
  173. package/dist/types/src/util/toEmoji.js +0 -26
  174. package/dist/types/src/util/toEmoji.js.map +0 -1
  175. package/src/util/toEmoji.ts +0 -22
@@ -1 +1 @@
1
- {"version":3,"file":"shell-manager.js","sourceRoot":"","sources":["../../../../src/testing/shell-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shell-manager.js","sourceRoot":"","sources":["../../../../src/testing/shell-manager.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIF,uCAA6C;AAE7C,iEAA4D;AAE5D,yEAAyE;AAEzE,MAAa,YAAa,SAAQ,yCAAkB;IAIlD,kBAAkB;IAClB,YACoB,IAAU,EACnB,WAAW,IAAI;QAExB,KAAK,EAAE,CAAC;QAHU,SAAI,GAAJ,IAAI,CAAM;QACnB,aAAQ,GAAR,QAAQ,CAAO;QANlB,oBAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QACxC,cAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QAQxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACtF,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAC;IACrE,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;QACxE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,YAAY,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;YAC5C,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAChC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACxB,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC9D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wBAAwB,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/D,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACrE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;QACrE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,QAAQ,GAAG,IAAI;QACxD,yCAAyC;QACzC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,uGAAuG;QACvG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,cAAsB;QAChD,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,yCAAyC;QACzC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAuB;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,WAAM,CAAC,CAAA,CAAC;IACZ,CAAC;CACF;AApHD,oCAoHC"}
@@ -101,5 +101,26 @@ export declare const os: {
101
101
  'join new identity label': string;
102
102
  'reset device label': string;
103
103
  'reset device confirm message': string;
104
+ 'emoji and color label': string;
105
+ 'clear label': string;
106
+ 'select emoji label': string;
107
+ 'select hue label': string;
108
+ 'red label': string;
109
+ 'orange label': string;
110
+ 'amber label': string;
111
+ 'yellow label': string;
112
+ 'lime label': string;
113
+ 'green label': string;
114
+ 'emerald label': string;
115
+ 'teal label': string;
116
+ 'cyan label': string;
117
+ 'sky label': string;
118
+ 'blue label': string;
119
+ 'indigo label': string;
120
+ 'violet label': string;
121
+ 'purple label': string;
122
+ 'fuchsia label': string;
123
+ 'pink label': string;
124
+ 'rose label': string;
104
125
  };
105
126
  //# sourceMappingURL=en-US.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"en-US.d.ts","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGd,CAAC"}
1
+ {"version":3,"file":"en-US.d.ts","sourceRoot":"","sources":["../../../../../src/translations/locales/en-US.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6Hd,CAAC"}
@@ -107,5 +107,26 @@ exports.os = {
107
107
  'join new identity label': 'Join a new identity',
108
108
  'reset device label': 'Reset device',
109
109
  'reset device confirm message': 'Are you sure you want to reset your device? All data will be lost.',
110
+ 'emoji and color label': 'Emoji and color',
111
+ 'clear label': 'Use default',
112
+ 'select emoji label': 'Choose an emoji to use in your avatar',
113
+ 'select hue label': 'Choose a hue to use in your avatar',
114
+ 'red label': 'Red',
115
+ 'orange label': 'Orange',
116
+ 'amber label': 'Amber',
117
+ 'yellow label': 'Yellow',
118
+ 'lime label': 'Lime',
119
+ 'green label': 'Green',
120
+ 'emerald label': 'Emerald',
121
+ 'teal label': 'Teal',
122
+ 'cyan label': 'Cyan',
123
+ 'sky label': 'Sky',
124
+ 'blue label': 'Blue',
125
+ 'indigo label': 'Indigo',
126
+ 'violet label': 'Violet',
127
+ 'purple label': 'Purple',
128
+ 'fuchsia label': 'Fuchsia',
129
+ 'pink label': 'Pink',
130
+ 'rose label': 'Rose',
110
131
  };
111
132
  //# sourceMappingURL=en-US.js.map
@@ -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":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAEW,QAAA,EAAE,GAAG;IAChB,sBAAsB,EAAE,iBAAiB;IACzC,8BAA8B,EAAE,SAAS;IACzC,eAAe,EAAE,cAAc;IAC/B,4BAA4B,EAAE,UAAU;IACxC,oBAAoB,EAAE,QAAQ;IAC9B,4BAA4B,EAAE,iBAAiB;IAC/C,wBAAwB,EAAE,cAAc;IACxC,uBAAuB,EAAE,eAAe;IACxC,oBAAoB,EAAE,wBAAwB;IAC9C,cAAc,EAAE,4BAA4B;IAC5C,YAAY,EAAE,MAAM;IACpB,yBAAyB,EAAE,SAAS;IACpC,4BAA4B,EAAE,+DAA+D;IAC7F,oBAAoB,EAAE,KAAK;IAC3B,gBAAgB,EAAE,UAAU;IAC5B,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,MAAM;IACpB,aAAa,EAAE,OAAO;IACtB,oBAAoB,EAAE,oBAAoB;IAC1C,uBAAuB,EAAE,oBAAoB;IAC7C,6BAA6B,EAAE,wBAAwB;IACvD,wBAAwB,EAAE,mBAAmB;IAC7C,8BAA8B,EAAE,4CAA4C;IAC5E,qBAAqB,EAAE,oBAAoB;IAC3C,2BAA2B,EAAE,8EAA8E;IAC3G,yBAAyB,EAAE,oBAAoB;IAC/C,+BAA+B,EAAE,qCAAqC;IACtE,0BAA0B,EAAE,kBAAkB;IAC9C,8BAA8B,EAAE,gCAAgC;IAChE,mCAAmC,EAAE,+BAA+B;IACpE,oCAAoC,EAAE,8DAA8D;IACpG,gCAAgC,EAAE,gBAAgB;IAClD,sBAAsB,EAAE,0CAA0C;IAClE,gCAAgC,EAAE,mEAAmE;IACrG,oBAAoB,EAAE,QAAQ;IAC9B,sBAAsB,EAAE,WAAW;IACnC,wBAAwB,EAAE,WAAW;IACrC,mBAAmB,EAAE,kBAAkB;IACvC,yBAAyB,EAAE,aAAa;IACxC,wBAAwB,EAAE,wBAAwB;IAClD,6BAA6B,EAAE,wBAAwB;IACvD,sBAAsB,EAAE,SAAS;IACjC,eAAe,EAAE,SAAS;IAC1B,iBAAiB,EAAE,WAAW;IAC9B,cAAc,EAAE,QAAQ;IACxB,YAAY,EAAE,MAAM;IACpB,aAAa,EAAE,YAAY;IAC3B,uBAAuB,EAAE,6BAA6B;IACtD,wBAAwB,EAAE,iCAAiC;IAC3D,gCAAgC,EAAE,YAAY;IAC9C,+BAA+B,EAAE,QAAQ;IACzC,UAAU,EAAE,2BAA2B;IACvC,2BAA2B,EAAE,wBAAwB;IACrD,2BAA2B,EAAE,kDAAkD;IAC/E,uBAAuB,EAAE,YAAY;IACrC,kBAAkB,EAAE,YAAY;IAChC,oBAAoB,EAAE,oBAAoB;IAC1C,kBAAkB,EAAE,cAAc;IAClC,0BAA0B,EAAE,eAAe;IAC3C,8BAA8B,EAAE,wBAAwB;IACxD,sBAAsB,EAAE,oBAAoB;IAC5C,oBAAoB,EAAE,cAAc;IACpC,qBAAqB,EAAE,eAAe;IACtC,iBAAiB,EAAE,SAAS;IAC5B,4BAA4B,EAAE,oBAAoB;IAClD,iBAAiB,EAAE,SAAS;IAC5B,kBAAkB,EAAE,kBAAkB;IACtC,yBAAyB,EAAE,YAAY;IACvC,sBAAsB,EAAE,gBAAgB;IACxC,sBAAsB,EAAE,cAAc;IACtC,uBAAuB,EAAE,UAAU;IACnC,6BAA6B,EAAE,oCAAoC;IACnE,+BAA+B,EAAE,yBAAyB;IAC1D,oBAAoB,EAAE,YAAY;IAClC,yBAAyB,EAAE,aAAa;IACxC,gCAAgC,EAAE,4BAA4B;IAC9D,+BAA+B,EAAE,qBAAqB;IACtD,qBAAqB,EAAE,SAAS;IAChC,2BAA2B,EAAE,SAAS;IACtC,qBAAqB,EAAE,kBAAkB;IACzC,mBAAmB,EAAE,sDAAsD;IAC3E,0BAA0B,EAAE,cAAc;IAC1C,gCAAgC,EAAE,sBAAsB;IACxD,kBAAkB,EAAE,YAAY;IAChC,wBAAwB,EAAE,yBAAyB;IACnD,qBAAqB,EAAE,YAAY;IACnC,4BAA4B,EAAE,8BAA8B;IAC5D,mBAAmB,EAAE,aAAa;IAClC,yBAAyB,EAAE,gCAAgC;IAC3D,sBAAsB,EAAE,cAAc;IACtC,6BAA6B,EAAE,gCAAgC;IAC/D,sBAAsB,EAAE,kCAAkC;IAC1D,yBAAyB,EAAE,cAAc;IACzC,eAAe,EAAE,SAAS;IAC1B,4BAA4B,EAC1B,0GAA0G;IAC5G,kCAAkC,EAAE,2BAA2B;IAC/D,oBAAoB,EAAE,SAAS;IAC/B,wBAAwB,EAAE,aAAa;IACvC,0BAA0B,EAAE,yEAAyE;IACrG,yBAAyB,EAAE,qBAAqB;IAChD,oBAAoB,EAAE,cAAc;IACpC,8BAA8B,EAAE,oEAAoE;IACpG,uBAAuB,EAAE,iBAAiB;IAC1C,aAAa,EAAE,aAAa;IAC5B,oBAAoB,EAAE,uCAAuC;IAC7D,kBAAkB,EAAE,oCAAoC;IACxD,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,QAAQ;IACxB,aAAa,EAAE,OAAO;IACtB,cAAc,EAAE,QAAQ;IACxB,YAAY,EAAE,MAAM;IACpB,aAAa,EAAE,OAAO;IACtB,eAAe,EAAE,SAAS;IAC1B,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,MAAM;IACpB,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,cAAc,EAAE,QAAQ;IACxB,eAAe,EAAE,SAAS;IAC1B,YAAY,EAAE,MAAM;IACpB,YAAY,EAAE,MAAM;CACrB,CAAC"}
@@ -1,3 +1,2 @@
1
1
  export * from './invitationStatusValue';
2
- export * from './toEmoji';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/util/index.ts"],"names":[],"mappings":"AAIA,cAAc,yBAAyB,CAAC;AACxC,cAAc,WAAW,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;AACxC,4CAA0B"}
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-main.731b147",
3
+ "version": "0.4.7-main.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
- "lodash.toarray": "^4.4.0",
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/async": "0.4.7-main.731b147",
43
- "@dxos/client-protocol": "0.4.7-main.731b147",
44
- "@dxos/debug": "0.4.7-main.731b147",
45
- "@dxos/invariant": "0.4.7-main.731b147",
46
- "@dxos/client-services": "0.4.7-main.731b147",
47
- "@dxos/log": "0.4.7-main.731b147",
48
- "@dxos/display-name": "0.4.7-main.731b147",
49
- "@dxos/react-ui-theme": "0.4.7-main.731b147",
50
- "@dxos/react-ui": "0.4.7-main.731b147",
51
- "@dxos/react-client": "0.4.7-main.731b147",
52
- "@dxos/react-ui-types": "0.4.7-main.731b147",
53
- "@dxos/rpc-tunnel": "0.4.7-main.731b147",
54
- "@dxos/util": "0.4.7-main.731b147"
44
+ "@dxos/async": "0.4.7-main.76c1dea",
45
+ "@dxos/client-protocol": "0.4.7-main.76c1dea",
46
+ "@dxos/debug": "0.4.7-main.76c1dea",
47
+ "@dxos/client-services": "0.4.7-main.76c1dea",
48
+ "@dxos/display-name": "0.4.7-main.76c1dea",
49
+ "@dxos/invariant": "0.4.7-main.76c1dea",
50
+ "@dxos/log": "0.4.7-main.76c1dea",
51
+ "@dxos/react-client": "0.4.7-main.76c1dea",
52
+ "@dxos/react-ui-theme": "0.4.7-main.76c1dea",
53
+ "@dxos/react-ui-types": "0.4.7-main.76c1dea",
54
+ "@dxos/react-ui": "0.4.7-main.76c1dea",
55
+ "@dxos/rpc-tunnel": "0.4.7-main.76c1dea",
56
+ "@dxos/util": "0.4.7-main.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.3",
65
+ "vite": "^5.1.5",
65
66
  "vite-plugin-turbosnap": "^1.0.2",
66
- "@dxos/config": "0.4.7-main.731b147",
67
- "@dxos/random": "0.4.7-main.731b147",
68
- "@dxos/react-async": "0.4.7-main.731b147",
69
- "@dxos/react-ui-theme": "0.4.7-main.731b147",
70
- "@dxos/storybook-utils": "0.4.7-main.731b147"
67
+ "@dxos/config": "0.4.7-main.76c1dea",
68
+ "@dxos/react-async": "0.4.7-main.76c1dea",
69
+ "@dxos/react-ui-theme": "0.4.7-main.76c1dea",
70
+ "@dxos/storybook-utils": "0.4.7-main.76c1dea",
71
+ "@dxos/random": "0.4.7-main.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
+ };
@@ -35,6 +35,7 @@ export const DeviceList = ({ devices, onSelect }: DeviceListProps) => {
35
35
  <IdentityListItem
36
36
  key={device.deviceKey.toHex()}
37
37
  identity={identity}
38
+ presence={device.presence}
38
39
  onClick={onSelect && (() => onSelect(device))}
39
40
  />
40
41
  );
@@ -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, useJdenticonHref, useId, type ThemedClassName } from '@dxos/react-ui';
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.toHex();
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 status={presence === SpaceMember.PresenceState.ONLINE ? 'active' : 'inactive'} labelId={labelId}>
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 href={jdenticon} />
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={toEmoji(invitationId)} />
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, useJdenticonHref } from '@dxos/react-ui';
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.toHex();
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 href={jdenticon} />
27
+ <Avatar.Fallback text={fallbackValue} />
29
28
  </Avatar.Frame>
30
29
  <Avatar.Label classNames='text-sm truncate'>{displayName}</Avatar.Label>
31
30
  </Avatar.Root>
@@ -4,6 +4,8 @@
4
4
 
5
5
  export * from './Clipboard';
6
6
  export * from './CompoundButton';
7
+ export * from './EmojiPicker';
8
+ export * from './HuePicker';
7
9
  export * from './IdentityList';
8
10
  export * from './InvitationList';
9
11
  export * from './Panel';
@@ -8,7 +8,7 @@ import React from 'react';
8
8
 
9
9
  import { faker } from '@dxos/random';
10
10
  import { PublicKey } from '@dxos/react-client';
11
- import { DeviceKind } from '@dxos/react-client/halo';
11
+ import { Device, DeviceKind } from '@dxos/react-client/halo';
12
12
  import { Invitation } from '@dxos/react-client/invitations';
13
13
  import { withTheme } from '@dxos/storybook-utils';
14
14
 
@@ -71,10 +71,23 @@ export const DeviceManager = () => {
71
71
  <IdentityPanelImpl
72
72
  {...{
73
73
  ...noOpProps,
74
+ // TODO(nf): update
74
75
  devices: [
75
- { deviceKey: PublicKey.random(), kind: DeviceKind.CURRENT },
76
- { deviceKey: PublicKey.random(), kind: DeviceKind.TRUSTED },
77
- { deviceKey: PublicKey.random(), kind: DeviceKind.TRUSTED },
76
+ {
77
+ deviceKey: PublicKey.random(),
78
+ kind: DeviceKind.CURRENT,
79
+ presence: Device.PresenceState.ONLINE,
80
+ },
81
+ {
82
+ deviceKey: PublicKey.random(),
83
+ kind: DeviceKind.TRUSTED,
84
+ presence: Device.PresenceState.ONLINE,
85
+ },
86
+ {
87
+ deviceKey: PublicKey.random(),
88
+ kind: DeviceKind.TRUSTED,
89
+ presence: Device.PresenceState.OFFLINE,
90
+ },
78
91
  ],
79
92
  }}
80
93
  activeView='device manager'
@@ -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, useJdenticonHref, useTranslation } from '@dxos/react-ui';
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 fallbackHref = useJdenticonHref(identity.identityKey.toHex(), 12);
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 href={fallbackHref} />
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
- console.error('IdentityPanel rendered with no active identity.');
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
- console.log(JSON.stringify({ invitationCode, authCode: invitation.authCode }));
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 [inputValue, setInputValue] = useState(profile?.displayName ?? '');
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={inputValue}
59
- onChange={({ target: { value } }) => setInputValue(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: inputValue })}
109
+ onClick={() => onUpdateProfile?.({ displayName, data: { emoji, hue } })}
88
110
  data-testid='update-profile-form-continue'
89
111
  >
90
112
  {t('done label')}