@dxos/shell 0.3.11-main.1caa3af
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/LICENSE +8 -0
- package/README.md +21 -0
- package/dist/lib/browser/chunk-ZSTKOCBT.mjs +10 -0
- package/dist/lib/browser/chunk-ZSTKOCBT.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -0
- package/dist/lib/browser/react.mjs +3617 -0
- package/dist/lib/browser/react.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +179 -0
- package/dist/lib/browser/testing/index.mjs.map +7 -0
- package/dist/types/src/components/AuthCode.d.ts +8 -0
- package/dist/types/src/components/AuthCode.d.ts.map +1 -0
- package/dist/types/src/components/AuthCode.js +26 -0
- package/dist/types/src/components/AuthCode.js.map +1 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts +9 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.js +46 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.js.map +1 -0
- package/dist/types/src/components/Clipboard/CopyButton.d.ts +9 -0
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/CopyButton.js +65 -0
- package/dist/types/src/components/Clipboard/CopyButton.js.map +1 -0
- package/dist/types/src/components/Clipboard/index.d.ts +3 -0
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/index.js +22 -0
- package/dist/types/src/components/Clipboard/index.js.map +1 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.d.ts +17 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.d.ts.map +1 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.js +29 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.js.map +1 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts +35 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts.map +1 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.stories.js +45 -0
- package/dist/types/src/components/CompoundButton/CompoundButton.stories.js.map +1 -0
- package/dist/types/src/components/CompoundButton/index.d.ts +2 -0
- package/dist/types/src/components/CompoundButton/index.d.ts.map +1 -0
- package/dist/types/src/components/CompoundButton/index.js +21 -0
- package/dist/types/src/components/CompoundButton/index.js.map +1 -0
- package/dist/types/src/components/IdentityList/DeviceList.d.ts +7 -0
- package/dist/types/src/components/IdentityList/DeviceList.d.ts.map +1 -0
- package/dist/types/src/components/IdentityList/DeviceList.js +29 -0
- package/dist/types/src/components/IdentityList/DeviceList.js.map +1 -0
- package/dist/types/src/components/IdentityList/IdentityListItem.d.ts +11 -0
- package/dist/types/src/components/IdentityList/IdentityListItem.d.ts.map +1 -0
- package/dist/types/src/components/IdentityList/IdentityListItem.js +47 -0
- package/dist/types/src/components/IdentityList/IdentityListItem.js.map +1 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts +13 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts.map +1 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.js +54 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.js.map +1 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts +17 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts.map +1 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js +26 -0
- package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js.map +1 -0
- package/dist/types/src/components/IdentityList/index.d.ts +4 -0
- package/dist/types/src/components/IdentityList/index.d.ts.map +1 -0
- package/dist/types/src/components/IdentityList/index.js +23 -0
- package/dist/types/src/components/IdentityList/index.js.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationList.d.ts +11 -0
- package/dist/types/src/components/InvitationList/InvitationList.d.ts.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationList.js +22 -0
- package/dist/types/src/components/InvitationList/InvitationList.js.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts +17 -0
- package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationList.stories.js +39 -0
- package/dist/types/src/components/InvitationList/InvitationList.stories.js.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts +7 -0
- package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationListContainer.js +42 -0
- package/dist/types/src/components/InvitationList/InvitationListContainer.js.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationListItem.d.ts +12 -0
- package/dist/types/src/components/InvitationList/InvitationListItem.d.ts.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationListItem.js +103 -0
- package/dist/types/src/components/InvitationList/InvitationListItem.js.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationListProps.d.ts +9 -0
- package/dist/types/src/components/InvitationList/InvitationListProps.d.ts.map +1 -0
- package/dist/types/src/components/InvitationList/InvitationListProps.js +3 -0
- package/dist/types/src/components/InvitationList/InvitationListProps.js.map +1 -0
- package/dist/types/src/components/InvitationList/index.d.ts +4 -0
- package/dist/types/src/components/InvitationList/index.d.ts.map +1 -0
- package/dist/types/src/components/InvitationList/index.js +23 -0
- package/dist/types/src/components/InvitationList/index.js.map +1 -0
- package/dist/types/src/components/Panel/Action.d.ts +20 -0
- package/dist/types/src/components/Panel/Action.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Action.js +93 -0
- package/dist/types/src/components/Panel/Action.js.map +1 -0
- package/dist/types/src/components/Panel/Actions.d.ts +11 -0
- package/dist/types/src/components/Panel/Actions.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Actions.js +36 -0
- package/dist/types/src/components/Panel/Actions.js.map +1 -0
- package/dist/types/src/components/Panel/CloseButton.d.ts +5 -0
- package/dist/types/src/components/Panel/CloseButton.d.ts.map +1 -0
- package/dist/types/src/components/Panel/CloseButton.js +21 -0
- package/dist/types/src/components/Panel/CloseButton.js.map +1 -0
- package/dist/types/src/components/Panel/Emoji.d.ts +7 -0
- package/dist/types/src/components/Panel/Emoji.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Emoji.js +24 -0
- package/dist/types/src/components/Panel/Emoji.js.map +1 -0
- package/dist/types/src/components/Panel/Heading.d.ts +16 -0
- package/dist/types/src/components/Panel/Heading.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Heading.js +39 -0
- package/dist/types/src/components/Panel/Heading.js.map +1 -0
- package/dist/types/src/components/Panel/Input.d.ts +11 -0
- package/dist/types/src/components/Panel/Input.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Input.js +19 -0
- package/dist/types/src/components/Panel/Input.js.map +1 -0
- package/dist/types/src/components/Panel/Label.d.ts +4 -0
- package/dist/types/src/components/Panel/Label.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Label.js +17 -0
- package/dist/types/src/components/Panel/Label.js.map +1 -0
- package/dist/types/src/components/Panel/Panel.stories.d.ts +13 -0
- package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Panel.stories.js +44 -0
- package/dist/types/src/components/Panel/Panel.stories.js.map +1 -0
- package/dist/types/src/components/Panel/StepHeading.d.ts +5 -0
- package/dist/types/src/components/Panel/StepHeading.d.ts.map +1 -0
- package/dist/types/src/components/Panel/StepHeading.js +35 -0
- package/dist/types/src/components/Panel/StepHeading.js.map +1 -0
- package/dist/types/src/components/Panel/index.d.ts +9 -0
- package/dist/types/src/components/Panel/index.d.ts.map +1 -0
- package/dist/types/src/components/Panel/index.js +28 -0
- package/dist/types/src/components/Panel/index.js.map +1 -0
- package/dist/types/src/components/SpaceListItem.d.ts +7 -0
- package/dist/types/src/components/SpaceListItem.d.ts.map +1 -0
- package/dist/types/src/components/SpaceListItem.js +46 -0
- package/dist/types/src/components/SpaceListItem.js.map +1 -0
- package/dist/types/src/components/StorybookDialog.d.ts +6 -0
- package/dist/types/src/components/StorybookDialog.d.ts.map +1 -0
- package/dist/types/src/components/StorybookDialog.js +23 -0
- package/dist/types/src/components/StorybookDialog.js.map +1 -0
- package/dist/types/src/components/Viewport/Viewport.d.ts +39 -0
- package/dist/types/src/components/Viewport/Viewport.d.ts.map +1 -0
- package/dist/types/src/components/Viewport/Viewport.js +73 -0
- package/dist/types/src/components/Viewport/Viewport.js.map +1 -0
- package/dist/types/src/components/Viewport/Viewport.stories.d.ts +17 -0
- package/dist/types/src/components/Viewport/Viewport.stories.d.ts.map +1 -0
- package/dist/types/src/components/Viewport/Viewport.stories.js +51 -0
- package/dist/types/src/components/Viewport/Viewport.stories.js.map +1 -0
- package/dist/types/src/components/Viewport/index.d.ts +2 -0
- package/dist/types/src/components/Viewport/index.d.ts.map +1 -0
- package/dist/types/src/components/Viewport/index.js +21 -0
- package/dist/types/src/components/Viewport/index.js.map +1 -0
- package/dist/types/src/components/index.d.ts +9 -0
- package/dist/types/src/components/index.d.ts.map +1 -0
- package/dist/types/src/components/index.js +28 -0
- package/dist/types/src/components/index.js.map +1 -0
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts +7 -0
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts.map +1 -0
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.js +26 -0
- package/dist/types/src/composites/IdentityDialog/IdentityDialog.js.map +1 -0
- package/dist/types/src/composites/IdentityDialog/index.d.ts +2 -0
- package/dist/types/src/composites/IdentityDialog/index.d.ts.map +1 -0
- package/dist/types/src/composites/IdentityDialog/index.js +21 -0
- package/dist/types/src/composites/IdentityDialog/index.js.map +1 -0
- package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts +6 -0
- package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts.map +1 -0
- package/dist/types/src/composites/JoinDialog/JoinDialog.js +27 -0
- package/dist/types/src/composites/JoinDialog/JoinDialog.js.map +1 -0
- package/dist/types/src/composites/JoinDialog/index.d.ts +2 -0
- package/dist/types/src/composites/JoinDialog/index.d.ts.map +1 -0
- package/dist/types/src/composites/JoinDialog/index.js +21 -0
- package/dist/types/src/composites/JoinDialog/index.js.map +1 -0
- package/dist/types/src/composites/Shell/Shell.d.ts +6 -0
- package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -0
- package/dist/types/src/composites/Shell/Shell.js +90 -0
- package/dist/types/src/composites/Shell/Shell.js.map +1 -0
- package/dist/types/src/composites/Shell/ShellContext.d.ts +30 -0
- package/dist/types/src/composites/Shell/ShellContext.d.ts.map +1 -0
- package/dist/types/src/composites/Shell/ShellContext.js +129 -0
- package/dist/types/src/composites/Shell/ShellContext.js.map +1 -0
- package/dist/types/src/composites/Shell/index.d.ts +4 -0
- package/dist/types/src/composites/Shell/index.d.ts.map +1 -0
- package/dist/types/src/composites/Shell/index.js +23 -0
- package/dist/types/src/composites/Shell/index.js.map +1 -0
- package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts +16 -0
- package/dist/types/src/composites/Shell/memory-shell-runtime.d.ts.map +1 -0
- package/dist/types/src/composites/Shell/memory-shell-runtime.js +38 -0
- package/dist/types/src/composites/Shell/memory-shell-runtime.js.map +1 -0
- package/dist/types/src/composites/Shell/run-shell.d.ts +3 -0
- package/dist/types/src/composites/Shell/run-shell.d.ts.map +1 -0
- package/dist/types/src/composites/Shell/run-shell.js +54 -0
- package/dist/types/src/composites/Shell/run-shell.js.map +1 -0
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts +6 -0
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts.map +1 -0
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.js +26 -0
- package/dist/types/src/composites/SpaceDialog/SpaceDialog.js.map +1 -0
- package/dist/types/src/composites/SpaceDialog/index.d.ts +2 -0
- package/dist/types/src/composites/SpaceDialog/index.d.ts.map +1 -0
- package/dist/types/src/composites/SpaceDialog/index.js +21 -0
- package/dist/types/src/composites/SpaceDialog/index.js.map +1 -0
- package/dist/types/src/composites/index.d.ts +5 -0
- package/dist/types/src/composites/index.d.ts.map +1 -0
- package/dist/types/src/composites/index.js +24 -0
- package/dist/types/src/composites/index.js.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/index.js +10 -0
- package/dist/types/src/index.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts +4 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +124 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts +22 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js +86 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts +27 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.js +6 -0
- package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/identityMachine.d.ts +46 -0
- package/dist/types/src/panels/IdentityPanel/identityMachine.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/identityMachine.js +79 -0
- package/dist/types/src/panels/IdentityPanel/identityMachine.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/index.d.ts +3 -0
- package/dist/types/src/panels/IdentityPanel/index.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/index.js +22 -0
- package/dist/types/src/panels/IdentityPanel/index.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts +9 -0
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +85 -0
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts +15 -0
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js +62 -0
- package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/index.d.ts +3 -0
- package/dist/types/src/panels/IdentityPanel/steps/index.d.ts.map +1 -0
- package/dist/types/src/panels/IdentityPanel/steps/index.js +22 -0
- package/dist/types/src/panels/IdentityPanel/steps/index.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinHeading.d.ts +10 -0
- package/dist/types/src/panels/JoinPanel/JoinHeading.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinHeading.js +45 -0
- package/dist/types/src/panels/JoinPanel/JoinHeading.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts +4 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.js +293 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts +92 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.stories.js +74 -0
- package/dist/types/src/panels/JoinPanel/JoinPanel.stories.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanelProps.d.ts +91 -0
- package/dist/types/src/panels/JoinPanel/JoinPanelProps.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/JoinPanelProps.js +6 -0
- package/dist/types/src/panels/JoinPanel/JoinPanelProps.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/index.d.ts +3 -0
- package/dist/types/src/panels/JoinPanel/index.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/index.js +22 -0
- package/dist/types/src/panels/JoinPanel/index.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/joinMachine.d.ts +87 -0
- package/dist/types/src/panels/JoinPanel/joinMachine.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/joinMachine.js +402 -0
- package/dist/types/src/panels/JoinPanel/joinMachine.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts +4 -0
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.js +34 -0
- package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts +8 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js +56 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts +12 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityInput.js +67 -0
- package/dist/types/src/panels/JoinPanel/steps/IdentityInput.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.d.ts +9 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.js +44 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts +11 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js +72 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts +8 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js +68 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts +11 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.js +49 -0
- package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.d.ts +12 -0
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.js +63 -0
- package/dist/types/src/panels/JoinPanel/steps/ResetIdentity.js.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/index.d.ts +9 -0
- package/dist/types/src/panels/JoinPanel/steps/index.d.ts.map +1 -0
- package/dist/types/src/panels/JoinPanel/steps/index.js +28 -0
- package/dist/types/src/panels/JoinPanel/steps/index.js.map +1 -0
- package/dist/types/src/panels/Panels.stories.d.ts +22 -0
- package/dist/types/src/panels/Panels.stories.d.ts.map +1 -0
- package/dist/types/src/panels/Panels.stories.js +71 -0
- package/dist/types/src/panels/Panels.stories.js.map +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts +4 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.js +93 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts +30 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts.map +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js +183 -0
- package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js.map +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts +30 -0
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts.map +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.js +6 -0
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.js.map +1 -0
- package/dist/types/src/panels/SpacePanel/index.d.ts +3 -0
- package/dist/types/src/panels/SpacePanel/index.d.ts.map +1 -0
- package/dist/types/src/panels/SpacePanel/index.js +22 -0
- package/dist/types/src/panels/SpacePanel/index.js.map +1 -0
- package/dist/types/src/panels/SpacePanel/spaceMachine.d.ts +35 -0
- package/dist/types/src/panels/SpacePanel/spaceMachine.d.ts.map +1 -0
- package/dist/types/src/panels/SpacePanel/spaceMachine.js +46 -0
- package/dist/types/src/panels/SpacePanel/spaceMachine.js.map +1 -0
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts +15 -0
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -0
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +120 -0
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -0
- package/dist/types/src/panels/SpacePanel/steps/index.d.ts +2 -0
- package/dist/types/src/panels/SpacePanel/steps/index.d.ts.map +1 -0
- package/dist/types/src/panels/SpacePanel/steps/index.js +21 -0
- package/dist/types/src/panels/SpacePanel/steps/index.js.map +1 -0
- package/dist/types/src/panels/index.d.ts +4 -0
- package/dist/types/src/panels/index.d.ts.map +1 -0
- package/dist/types/src/panels/index.js +23 -0
- package/dist/types/src/panels/index.js.map +1 -0
- package/dist/types/src/playwright/invitations-manager.d.ts +26 -0
- package/dist/types/src/playwright/invitations-manager.d.ts.map +1 -0
- package/dist/types/src/playwright/invitations-manager.js +142 -0
- package/dist/types/src/playwright/invitations-manager.js.map +1 -0
- package/dist/types/src/playwright/invitations.spec.d.ts +2 -0
- package/dist/types/src/playwright/invitations.spec.d.ts.map +1 -0
- package/dist/types/src/playwright/invitations.spec.js +298 -0
- package/dist/types/src/playwright/invitations.spec.js.map +1 -0
- package/dist/types/src/playwright/playwright.config.d.ts +3 -0
- package/dist/types/src/playwright/playwright.config.d.ts.map +1 -0
- package/dist/types/src/playwright/playwright.config.js +8 -0
- package/dist/types/src/playwright/playwright.config.js.map +1 -0
- package/dist/types/src/react.d.ts +6 -0
- package/dist/types/src/react.d.ts.map +1 -0
- package/dist/types/src/react.js +25 -0
- package/dist/types/src/react.js.map +1 -0
- package/dist/types/src/steps/InvitationManager.d.ts +7 -0
- package/dist/types/src/steps/InvitationManager.d.ts.map +1 -0
- package/dist/types/src/steps/InvitationManager.js +80 -0
- package/dist/types/src/steps/InvitationManager.js.map +1 -0
- package/dist/types/src/steps/StepProps.d.ts +14 -0
- package/dist/types/src/steps/StepProps.d.ts.map +1 -0
- package/dist/types/src/steps/StepProps.js +6 -0
- package/dist/types/src/steps/StepProps.js.map +1 -0
- package/dist/types/src/steps/index.d.ts +3 -0
- package/dist/types/src/steps/index.d.ts.map +1 -0
- package/dist/types/src/steps/index.js +22 -0
- package/dist/types/src/steps/index.js.map +1 -0
- package/dist/types/src/stories/Invitations.e2e-stories.d.ts +22 -0
- package/dist/types/src/stories/Invitations.e2e-stories.d.ts.map +1 -0
- package/dist/types/src/stories/Invitations.e2e-stories.js +146 -0
- package/dist/types/src/stories/Invitations.e2e-stories.js.map +1 -0
- package/dist/types/src/styles/index.d.ts +3 -0
- package/dist/types/src/styles/index.d.ts.map +1 -0
- package/dist/types/src/styles/index.js +22 -0
- package/dist/types/src/styles/index.js.map +1 -0
- package/dist/types/src/styles/invitationStatusStyles.d.ts +20 -0
- package/dist/types/src/styles/invitationStatusStyles.d.ts.map +1 -0
- package/dist/types/src/styles/invitationStatusStyles.js +41 -0
- package/dist/types/src/styles/invitationStatusStyles.js.map +1 -0
- package/dist/types/src/styles/panelStyles.d.ts +2 -0
- package/dist/types/src/styles/panelStyles.d.ts.map +1 -0
- package/dist/types/src/styles/panelStyles.js +8 -0
- package/dist/types/src/styles/panelStyles.js.map +1 -0
- package/dist/types/src/testing/fixtures/identities.d.ts +3 -0
- package/dist/types/src/testing/fixtures/identities.d.ts.map +1 -0
- package/dist/types/src/testing/fixtures/identities.js +18 -0
- package/dist/types/src/testing/fixtures/identities.js.map +1 -0
- package/dist/types/src/testing/fixtures/index.d.ts +3 -0
- package/dist/types/src/testing/fixtures/index.d.ts.map +1 -0
- package/dist/types/src/testing/fixtures/index.js +22 -0
- package/dist/types/src/testing/fixtures/index.js.map +1 -0
- package/dist/types/src/testing/fixtures/invitations.d.ts +3 -0
- package/dist/types/src/testing/fixtures/invitations.d.ts.map +1 -0
- package/dist/types/src/testing/fixtures/invitations.js +25 -0
- package/dist/types/src/testing/fixtures/invitations.js.map +1 -0
- package/dist/types/src/testing/index.d.ts +4 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/testing/index.js +23 -0
- package/dist/types/src/testing/index.js.map +1 -0
- package/dist/types/src/testing/scoped-shell-manager.d.ts +17 -0
- package/dist/types/src/testing/scoped-shell-manager.d.ts.map +1 -0
- package/dist/types/src/testing/scoped-shell-manager.js +71 -0
- package/dist/types/src/testing/scoped-shell-manager.js.map +1 -0
- package/dist/types/src/testing/shell-manager.d.ts +24 -0
- package/dist/types/src/testing/shell-manager.d.ts.map +1 -0
- package/dist/types/src/testing/shell-manager.js +85 -0
- package/dist/types/src/testing/shell-manager.js.map +1 -0
- package/dist/types/src/translations/index.d.ts +5 -0
- package/dist/types/src/translations/index.d.ts.map +1 -0
- package/dist/types/src/translations/index.js +32 -0
- package/dist/types/src/translations/index.js.map +1 -0
- package/dist/types/src/translations/locales/en-US.d.ts +97 -0
- package/dist/types/src/translations/locales/en-US.d.ts.map +1 -0
- package/dist/types/src/translations/locales/en-US.js +103 -0
- package/dist/types/src/translations/locales/en-US.js.map +1 -0
- package/dist/types/src/types/FailReason.d.ts +2 -0
- package/dist/types/src/types/FailReason.d.ts.map +1 -0
- package/dist/types/src/types/FailReason.js +6 -0
- package/dist/types/src/types/FailReason.js.map +1 -0
- package/dist/types/src/types/IInvitation.d.ts +7 -0
- package/dist/types/src/types/IInvitation.d.ts.map +1 -0
- package/dist/types/src/types/IInvitation.js +6 -0
- package/dist/types/src/types/IInvitation.js.map +1 -0
- package/dist/types/src/types/index.d.ts +3 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/src/types/index.js +22 -0
- package/dist/types/src/types/index.js.map +1 -0
- package/dist/types/src/util/index.d.ts +3 -0
- package/dist/types/src/util/index.d.ts.map +1 -0
- package/dist/types/src/util/index.js +22 -0
- package/dist/types/src/util/index.js.map +1 -0
- package/dist/types/src/util/invitationStatusValue.d.ts +8 -0
- package/dist/types/src/util/invitationStatusValue.d.ts.map +1 -0
- package/dist/types/src/util/invitationStatusValue.js +24 -0
- package/dist/types/src/util/invitationStatusValue.js.map +1 -0
- package/dist/types/src/util/toEmoji.d.ts +2 -0
- package/dist/types/src/util/toEmoji.d.ts.map +1 -0
- package/dist/types/src/util/toEmoji.js +26 -0
- package/dist/types/src/util/toEmoji.js.map +1 -0
- package/package.json +79 -0
- package/src/components/AuthCode.tsx +36 -0
- package/src/components/Clipboard/ClipboardProvider.tsx +26 -0
- package/src/components/Clipboard/CopyButton.tsx +70 -0
- package/src/components/Clipboard/index.ts +6 -0
- package/src/components/CompoundButton/CompoundButton.stories.tsx +49 -0
- package/src/components/CompoundButton/CompoundButton.tsx +89 -0
- package/src/components/CompoundButton/index.ts +5 -0
- package/src/components/IdentityList/DeviceList.tsx +45 -0
- package/src/components/IdentityList/IdentityListItem.tsx +42 -0
- package/src/components/IdentityList/SpaceMemberList.stories.tsx +24 -0
- package/src/components/IdentityList/SpaceMemberList.tsx +65 -0
- package/src/components/IdentityList/index.ts +7 -0
- package/src/components/InvitationList/InvitationList.stories.tsx +44 -0
- package/src/components/InvitationList/InvitationList.tsx +31 -0
- package/src/components/InvitationList/InvitationListContainer.tsx +27 -0
- package/src/components/InvitationList/InvitationListItem.tsx +183 -0
- package/src/components/InvitationList/InvitationListProps.ts +9 -0
- package/src/components/InvitationList/index.ts +7 -0
- package/src/components/Panel/Action.tsx +142 -0
- package/src/components/Panel/Actions.tsx +31 -0
- package/src/components/Panel/CloseButton.tsx +24 -0
- package/src/components/Panel/Emoji.tsx +36 -0
- package/src/components/Panel/Heading.tsx +32 -0
- package/src/components/Panel/Input.tsx +27 -0
- package/src/components/Panel/Label.tsx +14 -0
- package/src/components/Panel/Panel.stories.tsx +52 -0
- package/src/components/Panel/StepHeading.tsx +17 -0
- package/src/components/Panel/index.ts +12 -0
- package/src/components/SpaceListItem.tsx +35 -0
- package/src/components/StorybookDialog.tsx +33 -0
- package/src/components/Viewport/Viewport.stories.tsx +66 -0
- package/src/components/Viewport/Viewport.tsx +120 -0
- package/src/components/Viewport/index.tsx +5 -0
- package/src/components/index.ts +12 -0
- package/src/composites/IdentityDialog/IdentityDialog.tsx +39 -0
- package/src/composites/IdentityDialog/index.ts +5 -0
- package/src/composites/JoinDialog/JoinDialog.tsx +40 -0
- package/src/composites/JoinDialog/index.ts +5 -0
- package/src/composites/Shell/Shell.tsx +98 -0
- package/src/composites/Shell/ShellContext.tsx +163 -0
- package/src/composites/Shell/index.ts +7 -0
- package/src/composites/Shell/memory-shell-runtime.ts +50 -0
- package/src/composites/Shell/run-shell.tsx +38 -0
- package/src/composites/SpaceDialog/SpaceDialog.tsx +37 -0
- package/src/composites/SpaceDialog/index.ts +5 -0
- package/src/composites/index.ts +8 -0
- package/src/index.ts +7 -0
- package/src/panels/IdentityPanel/IdentityPanel.stories.tsx +113 -0
- package/src/panels/IdentityPanel/IdentityPanel.tsx +158 -0
- package/src/panels/IdentityPanel/IdentityPanelProps.ts +36 -0
- package/src/panels/IdentityPanel/identityMachine.ts +131 -0
- package/src/panels/IdentityPanel/index.ts +6 -0
- package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +96 -0
- package/src/panels/IdentityPanel/steps/ProfileForm.tsx +79 -0
- package/src/panels/IdentityPanel/steps/index.ts +6 -0
- package/src/panels/JoinPanel/JoinHeading.tsx +49 -0
- package/src/panels/JoinPanel/JoinPanel.stories.tsx +91 -0
- package/src/panels/JoinPanel/JoinPanel.tsx +415 -0
- package/src/panels/JoinPanel/JoinPanelProps.ts +132 -0
- package/src/panels/JoinPanel/index.ts +6 -0
- package/src/panels/JoinPanel/joinMachine.ts +536 -0
- package/src/panels/JoinPanel/steps/AdditionMethodChooser.tsx +65 -0
- package/src/panels/JoinPanel/steps/IdentityAdded.tsx +75 -0
- package/src/panels/JoinPanel/steps/IdentityInput.tsx +86 -0
- package/src/panels/JoinPanel/steps/InvitationAccepted.tsx +43 -0
- package/src/panels/JoinPanel/steps/InvitationAuthenticator.tsx +99 -0
- package/src/panels/JoinPanel/steps/InvitationInput.tsx +102 -0
- package/src/panels/JoinPanel/steps/InvitationRescuer.tsx +102 -0
- package/src/panels/JoinPanel/steps/ResetIdentity.tsx +71 -0
- package/src/panels/JoinPanel/steps/index.ts +12 -0
- package/src/panels/Panels.stories.tsx +61 -0
- package/src/panels/SpacePanel/SpacePanel.stories.tsx +328 -0
- package/src/panels/SpacePanel/SpacePanel.tsx +122 -0
- package/src/panels/SpacePanel/SpacePanelProps.ts +40 -0
- package/src/panels/SpacePanel/index.ts +6 -0
- package/src/panels/SpacePanel/spaceMachine.ts +72 -0
- package/src/panels/SpacePanel/steps/SpaceManager.tsx +157 -0
- package/src/panels/SpacePanel/steps/index.ts +5 -0
- package/src/panels/index.ts +7 -0
- package/src/playwright/invitations-manager.ts +168 -0
- package/src/playwright/invitations.spec.ts +364 -0
- package/src/playwright/playwright.config.ts +7 -0
- package/src/react.ts +9 -0
- package/src/steps/InvitationManager.tsx +116 -0
- package/src/steps/StepProps.ts +17 -0
- package/src/steps/index.ts +6 -0
- package/src/stories/Invitations.e2e-stories.tsx +231 -0
- package/src/styles/index.ts +6 -0
- package/src/styles/invitationStatusStyles.ts +42 -0
- package/src/styles/panelStyles.ts +5 -0
- package/src/testing/fixtures/identities.ts +16 -0
- package/src/testing/fixtures/index.ts +6 -0
- package/src/testing/fixtures/invitations.ts +23 -0
- package/src/testing/index.ts +7 -0
- package/src/testing/scoped-shell-manager.ts +79 -0
- package/src/testing/shell-manager.ts +102 -0
- package/src/translations/index.ts +7 -0
- package/src/translations/locales/en-US.ts +101 -0
- package/src/types/FailReason.ts +5 -0
- package/src/types/IInvitation.ts +14 -0
- package/src/types/index.ts +6 -0
- package/src/util/index.ts +6 -0
- package/src/util/invitationStatusValue.ts +22 -0
- package/src/util/toEmoji.ts +22 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import '@dxosTheme';
|
|
6
|
+
|
|
7
|
+
import React from 'react';
|
|
8
|
+
|
|
9
|
+
import { AlertDialog } from '@dxos/react-ui';
|
|
10
|
+
import { withTheme } from '@dxos/storybook-utils';
|
|
11
|
+
|
|
12
|
+
import { useViewportContext, Viewport, type ViewportScopedProps } from './Viewport';
|
|
13
|
+
import { Action } from '../Panel';
|
|
14
|
+
|
|
15
|
+
type StorybookViewportProps = {};
|
|
16
|
+
|
|
17
|
+
const Views = ({ __viewportScope }: ViewportScopedProps<{}>) => {
|
|
18
|
+
const { setActiveView } = useViewportContext('StorybookViews', __viewportScope);
|
|
19
|
+
return (
|
|
20
|
+
<Viewport.Views>
|
|
21
|
+
<Viewport.View id='one' classNames='p-4'>
|
|
22
|
+
<p>One</p>
|
|
23
|
+
<p className='invisible'>Two</p>
|
|
24
|
+
<p className='invisible'>Three</p>
|
|
25
|
+
<Action onClick={() => setActiveView('two')}>Next</Action>
|
|
26
|
+
</Viewport.View>
|
|
27
|
+
<Viewport.View id='two' classNames='p-4'>
|
|
28
|
+
<p className='invisible'>One</p>
|
|
29
|
+
<p>Two</p>
|
|
30
|
+
<p className='invisible'>Three</p>
|
|
31
|
+
<Action onClick={() => setActiveView('three')}>Next</Action>
|
|
32
|
+
</Viewport.View>
|
|
33
|
+
<Viewport.View id='three' classNames='p-4'>
|
|
34
|
+
<p className='invisible'>One</p>
|
|
35
|
+
<p className='invisible'>Two</p>
|
|
36
|
+
<p>Three</p>
|
|
37
|
+
<Action onClick={() => setActiveView('one')}>Next</Action>
|
|
38
|
+
</Viewport.View>
|
|
39
|
+
</Viewport.Views>
|
|
40
|
+
);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const StorybookViewport = (props: StorybookViewportProps) => {
|
|
44
|
+
return (
|
|
45
|
+
<AlertDialog.Root defaultOpen>
|
|
46
|
+
<AlertDialog.Overlay>
|
|
47
|
+
<AlertDialog.Content classNames='p-0'>
|
|
48
|
+
<Viewport.Root defaultActiveView='one'>
|
|
49
|
+
<Views />
|
|
50
|
+
</Viewport.Root>
|
|
51
|
+
</AlertDialog.Content>
|
|
52
|
+
</AlertDialog.Overlay>
|
|
53
|
+
</AlertDialog.Root>
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export default {
|
|
58
|
+
title: 'react-shell/StorybookViewport',
|
|
59
|
+
component: StorybookViewport,
|
|
60
|
+
decorators: [withTheme],
|
|
61
|
+
parameters: { chromatic: { disableSnapshot: false } },
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const Default = {
|
|
65
|
+
args: {},
|
|
66
|
+
};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useFocusFinders } from '@fluentui/react-tabster';
|
|
6
|
+
import { createContextScope, type Scope } from '@radix-ui/react-context';
|
|
7
|
+
import { useControllableState } from '@radix-ui/react-use-controllable-state';
|
|
8
|
+
import React, {
|
|
9
|
+
type ComponentPropsWithRef,
|
|
10
|
+
type Dispatch,
|
|
11
|
+
forwardRef,
|
|
12
|
+
type ReactNode,
|
|
13
|
+
type SetStateAction,
|
|
14
|
+
useEffect,
|
|
15
|
+
} from 'react';
|
|
16
|
+
|
|
17
|
+
import { type ThemedClassName, useForwardedRef } from '@dxos/react-ui';
|
|
18
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
19
|
+
|
|
20
|
+
const VIEWPORT_NAME = 'Viewport';
|
|
21
|
+
const VIEWS_NAME = 'ViewportViews';
|
|
22
|
+
const VIEW_NAME = 'ViewportView';
|
|
23
|
+
|
|
24
|
+
type ViewportContextValue = {
|
|
25
|
+
focusManaged: boolean;
|
|
26
|
+
activeView: string;
|
|
27
|
+
setActiveView: Dispatch<SetStateAction<string | undefined>>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type ViewportScopedProps<P> = P & { __viewportScope?: Scope };
|
|
31
|
+
|
|
32
|
+
const [createViewportContext, createViewportScope] = createContextScope(VIEWPORT_NAME, []);
|
|
33
|
+
|
|
34
|
+
const [ViewportProvider, useViewportContext] = createViewportContext<ViewportContextValue>(VIEWPORT_NAME);
|
|
35
|
+
|
|
36
|
+
type ViewportRootProps = ThemedClassName<ComponentPropsWithRef<'div'>> &
|
|
37
|
+
Partial<{
|
|
38
|
+
focusManaged: boolean;
|
|
39
|
+
defaultActiveView: string;
|
|
40
|
+
activeView: string;
|
|
41
|
+
onActiveViewChange: Dispatch<SetStateAction<string>>;
|
|
42
|
+
}>;
|
|
43
|
+
|
|
44
|
+
const ViewportRoot = ({
|
|
45
|
+
__viewportScope,
|
|
46
|
+
classNames,
|
|
47
|
+
children,
|
|
48
|
+
defaultActiveView,
|
|
49
|
+
activeView: propsActiveView,
|
|
50
|
+
focusManaged = false,
|
|
51
|
+
onActiveViewChange,
|
|
52
|
+
...props
|
|
53
|
+
}: ViewportScopedProps<ViewportRootProps>) => {
|
|
54
|
+
const [activeView = 'never', setActiveView] = useControllableState({
|
|
55
|
+
prop: propsActiveView,
|
|
56
|
+
defaultProp: defaultActiveView,
|
|
57
|
+
onChange: onActiveViewChange,
|
|
58
|
+
});
|
|
59
|
+
return (
|
|
60
|
+
<ViewportProvider
|
|
61
|
+
focusManaged={focusManaged}
|
|
62
|
+
activeView={activeView}
|
|
63
|
+
setActiveView={setActiveView}
|
|
64
|
+
scope={__viewportScope}
|
|
65
|
+
>
|
|
66
|
+
<div role='region' aria-live='polite' {...props} className={mx('is-full overflow-hidden', classNames)}>
|
|
67
|
+
{children}
|
|
68
|
+
</div>
|
|
69
|
+
</ViewportProvider>
|
|
70
|
+
);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
ViewportRoot.displayName = VIEWPORT_NAME;
|
|
74
|
+
|
|
75
|
+
type ViewportViewsProps = ThemedClassName<Omit<ComponentPropsWithRef<'div'>, 'children'>> & { children: ReactNode[] };
|
|
76
|
+
|
|
77
|
+
const ViewportViews = ({ classNames, children, ...props }: ViewportViewsProps) => {
|
|
78
|
+
const size = { inlineSize: `${Math.ceil(children.length) * 100}%` };
|
|
79
|
+
return (
|
|
80
|
+
<div role='none' style={size} {...props} className={mx('flex', classNames)}>
|
|
81
|
+
{children}
|
|
82
|
+
</div>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
ViewportViews.displayName = VIEWS_NAME;
|
|
87
|
+
|
|
88
|
+
type ViewportViewProps = ThemedClassName<Omit<ComponentPropsWithRef<'div'>, 'id'>> & {
|
|
89
|
+
id: string;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const ViewportView = forwardRef<HTMLDivElement, ViewportScopedProps<ViewportViewProps>>(
|
|
93
|
+
({ __viewportScope, classNames, children, id, ...props }, forwardedRef) => {
|
|
94
|
+
const { activeView, focusManaged }: ViewportContextValue = useViewportContext(VIEW_NAME, __viewportScope);
|
|
95
|
+
const isActive = id === activeView;
|
|
96
|
+
const ref = useForwardedRef(forwardedRef);
|
|
97
|
+
const { findFirstFocusable } = useFocusFinders();
|
|
98
|
+
useEffect(() => {
|
|
99
|
+
if (!focusManaged && isActive && document.body.hasAttribute('data-is-keyboard') && ref.current) {
|
|
100
|
+
findFirstFocusable(ref.current)?.focus();
|
|
101
|
+
}
|
|
102
|
+
}, [focusManaged, ref.current, isActive]);
|
|
103
|
+
return (
|
|
104
|
+
<section
|
|
105
|
+
{...props}
|
|
106
|
+
{...(!isActive && { 'aria-hidden': true })}
|
|
107
|
+
className={mx('min-is-0 flex-1 flex flex-col', isActive ? 'order-2' : 'order-4 invisible', classNames)}
|
|
108
|
+
ref={ref}
|
|
109
|
+
>
|
|
110
|
+
{children}
|
|
111
|
+
</section>
|
|
112
|
+
);
|
|
113
|
+
},
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
ViewportView.displayName = VIEW_NAME;
|
|
117
|
+
|
|
118
|
+
export const Viewport = { Root: ViewportRoot, Views: ViewportViews, View: ViewportView };
|
|
119
|
+
export { useViewportContext, createViewportScope };
|
|
120
|
+
export type { ViewportRootProps, ViewportViewsProps, ViewportViewProps, ViewportScopedProps };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
export * from './Clipboard';
|
|
6
|
+
export * from './CompoundButton';
|
|
7
|
+
export * from './IdentityList';
|
|
8
|
+
export * from './InvitationList';
|
|
9
|
+
export * from './Panel';
|
|
10
|
+
export * from './Viewport';
|
|
11
|
+
export * from './AuthCode';
|
|
12
|
+
export * from './SpaceListItem';
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { type DialogContentProps, Dialog, useId } from '@dxos/react-ui';
|
|
8
|
+
|
|
9
|
+
import { ClipboardProvider } from '../../components';
|
|
10
|
+
import { IdentityPanel, type IdentityPanelProps } from '../../panels';
|
|
11
|
+
|
|
12
|
+
export interface IdentityDialogProps
|
|
13
|
+
extends Omit<DialogContentProps, 'children'>,
|
|
14
|
+
Omit<IdentityPanelProps, 'doneActionParent'> {
|
|
15
|
+
onDone: () => void;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export const IdentityDialog = (props: IdentityDialogProps) => {
|
|
19
|
+
const titleId = useId('spaceDialog__title');
|
|
20
|
+
return (
|
|
21
|
+
<Dialog.Root defaultOpen onOpenChange={(open) => open || props.onDone?.()}>
|
|
22
|
+
<Dialog.Portal>
|
|
23
|
+
<Dialog.Overlay>
|
|
24
|
+
<Dialog.Content aria-labelledby={titleId} onOpenAutoFocus={(e) => e.preventDefault()}>
|
|
25
|
+
<ClipboardProvider>
|
|
26
|
+
<IdentityPanel
|
|
27
|
+
{...{
|
|
28
|
+
...props,
|
|
29
|
+
titleId,
|
|
30
|
+
doneActionParent: <Dialog.Close asChild />,
|
|
31
|
+
}}
|
|
32
|
+
/>
|
|
33
|
+
</ClipboardProvider>
|
|
34
|
+
</Dialog.Content>
|
|
35
|
+
</Dialog.Overlay>
|
|
36
|
+
</Dialog.Portal>
|
|
37
|
+
</Dialog.Root>
|
|
38
|
+
);
|
|
39
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React from 'react';
|
|
6
|
+
|
|
7
|
+
import { AlertDialog, type AlertDialogContentProps, useId, useVisualViewport } from '@dxos/react-ui';
|
|
8
|
+
|
|
9
|
+
import { JoinPanel, type JoinPanelProps } from '../../panels';
|
|
10
|
+
|
|
11
|
+
export interface JoinDialogProps
|
|
12
|
+
extends Omit<AlertDialogContentProps, 'children'>,
|
|
13
|
+
Omit<JoinPanelProps, 'exitActionParent' | 'doneActionParent'> {}
|
|
14
|
+
|
|
15
|
+
export const JoinDialog = (joinPanelProps: JoinDialogProps) => {
|
|
16
|
+
const titleId = useId('joinDialog__title');
|
|
17
|
+
// todo(thure): This doesn’t work within an iframe on iOS Safari.
|
|
18
|
+
const { height } = useVisualViewport();
|
|
19
|
+
return (
|
|
20
|
+
<AlertDialog.Root
|
|
21
|
+
defaultOpen
|
|
22
|
+
onOpenChange={(open) => open || (joinPanelProps.onExit ? joinPanelProps.onExit() : joinPanelProps.onDone?.(null))}
|
|
23
|
+
>
|
|
24
|
+
<AlertDialog.Portal>
|
|
25
|
+
<AlertDialog.Overlay classNames='backdrop-blur' {...(height && { style: { blockSize: `${height}px` } })}>
|
|
26
|
+
<AlertDialog.Content aria-labelledby={titleId}>
|
|
27
|
+
<JoinPanel
|
|
28
|
+
{...{
|
|
29
|
+
...joinPanelProps,
|
|
30
|
+
titleId,
|
|
31
|
+
exitActionParent: <AlertDialog.Cancel asChild />,
|
|
32
|
+
doneActionParent: <AlertDialog.Action asChild />,
|
|
33
|
+
}}
|
|
34
|
+
/>
|
|
35
|
+
</AlertDialog.Content>
|
|
36
|
+
</AlertDialog.Overlay>
|
|
37
|
+
</AlertDialog.Portal>
|
|
38
|
+
</AlertDialog.Root>
|
|
39
|
+
);
|
|
40
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { useEffect, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import { log } from '@dxos/log';
|
|
8
|
+
import { type LayoutRequest, ShellDisplay, ShellLayout, type ShellRuntime } from '@dxos/react-client';
|
|
9
|
+
import { useSpace } from '@dxos/react-client/echo';
|
|
10
|
+
|
|
11
|
+
import { IdentityDialog } from '../IdentityDialog';
|
|
12
|
+
import { JoinDialog } from '../JoinDialog';
|
|
13
|
+
import { SpaceDialog } from '../SpaceDialog';
|
|
14
|
+
|
|
15
|
+
export const Shell = ({ runtime, origin }: { runtime: ShellRuntime; origin: string }) => {
|
|
16
|
+
const [{ layout, invitationCode, spaceKey }, setLayout] = useState<LayoutRequest>({
|
|
17
|
+
layout: runtime.layout,
|
|
18
|
+
invitationCode: runtime.invitationCode,
|
|
19
|
+
spaceKey: runtime.spaceKey,
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const space = useSpace(spaceKey);
|
|
23
|
+
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
return runtime.layoutUpdate.on((request) => setLayout(request));
|
|
26
|
+
}, [runtime]);
|
|
27
|
+
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
if (layout === ShellLayout.SPACE && !space) {
|
|
30
|
+
log.warn('No space found for shell space invitations.');
|
|
31
|
+
|
|
32
|
+
const timeout = setTimeout(async () => {
|
|
33
|
+
await runtime.setAppContext({ display: ShellDisplay.NONE });
|
|
34
|
+
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
return () => clearTimeout(timeout);
|
|
38
|
+
}
|
|
39
|
+
}, [runtime, layout, space]);
|
|
40
|
+
|
|
41
|
+
switch (layout) {
|
|
42
|
+
case ShellLayout.INITIALIZE_IDENTITY:
|
|
43
|
+
return (
|
|
44
|
+
<JoinDialog
|
|
45
|
+
mode='halo-only'
|
|
46
|
+
initialInvitationCode={invitationCode}
|
|
47
|
+
onDone={() => {
|
|
48
|
+
void runtime.setAppContext({ display: ShellDisplay.NONE });
|
|
49
|
+
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
50
|
+
}}
|
|
51
|
+
/>
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
// TODO(wittjosiah): Jump straight to specific step if SHARE or EDIT are specified.
|
|
55
|
+
case ShellLayout.IDENTITY:
|
|
56
|
+
case ShellLayout.SHARE_IDENTITY:
|
|
57
|
+
case ShellLayout.EDIT_PROFILE:
|
|
58
|
+
return (
|
|
59
|
+
<IdentityDialog
|
|
60
|
+
createInvitationUrl={(invitationCode) => `${origin}?deviceInvitationCode=${invitationCode}`}
|
|
61
|
+
onDone={async () => {
|
|
62
|
+
await runtime.setAppContext({ display: ShellDisplay.NONE });
|
|
63
|
+
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
64
|
+
}}
|
|
65
|
+
/>
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
case ShellLayout.SPACE:
|
|
69
|
+
return space ? (
|
|
70
|
+
<SpaceDialog
|
|
71
|
+
space={space}
|
|
72
|
+
createInvitationUrl={(invitationCode) => `${origin}?spaceInvitationCode=${invitationCode}`}
|
|
73
|
+
onDone={async () => {
|
|
74
|
+
await runtime.setAppContext({ display: ShellDisplay.NONE });
|
|
75
|
+
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
76
|
+
}}
|
|
77
|
+
/>
|
|
78
|
+
) : null;
|
|
79
|
+
|
|
80
|
+
case ShellLayout.JOIN_SPACE:
|
|
81
|
+
return (
|
|
82
|
+
<JoinDialog
|
|
83
|
+
initialInvitationCode={invitationCode}
|
|
84
|
+
onDone={async (result) => {
|
|
85
|
+
await runtime.setAppContext({ display: ShellDisplay.NONE, spaceKey: result?.spaceKey ?? undefined });
|
|
86
|
+
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
87
|
+
}}
|
|
88
|
+
onExit={async () => {
|
|
89
|
+
await runtime.setAppContext({ display: ShellDisplay.NONE });
|
|
90
|
+
runtime.setLayout({ layout: ShellLayout.DEFAULT });
|
|
91
|
+
}}
|
|
92
|
+
/>
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
default:
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, {
|
|
6
|
+
type Context,
|
|
7
|
+
createContext,
|
|
8
|
+
type PropsWithChildren,
|
|
9
|
+
useCallback,
|
|
10
|
+
useContext,
|
|
11
|
+
useEffect,
|
|
12
|
+
useMemo,
|
|
13
|
+
useState,
|
|
14
|
+
} from 'react';
|
|
15
|
+
|
|
16
|
+
import { type PublicKey, ShellDisplay, ShellLayout, useClient, type LayoutRequest } from '@dxos/react-client';
|
|
17
|
+
import type { Space } from '@dxos/react-client/echo';
|
|
18
|
+
import { useIdentity } from '@dxos/react-client/halo';
|
|
19
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
20
|
+
|
|
21
|
+
import { Shell } from './Shell';
|
|
22
|
+
import { MemoryShellRuntime } from './memory-shell-runtime';
|
|
23
|
+
|
|
24
|
+
export type ShellContextProps = {
|
|
25
|
+
runtime?: MemoryShellRuntime;
|
|
26
|
+
setDisplay?: (display: ShellDisplay) => void;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const ShellContext: Context<ShellContextProps> = createContext<ShellContextProps>({});
|
|
30
|
+
|
|
31
|
+
type SetLayout = (layout: ShellLayout, options?: Omit<LayoutRequest, 'layout'>) => void;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* @deprecated
|
|
35
|
+
*/
|
|
36
|
+
export const useShell = (): { setLayout: SetLayout } => {
|
|
37
|
+
const client = useClient();
|
|
38
|
+
const { runtime, setDisplay } = useContext(ShellContext);
|
|
39
|
+
|
|
40
|
+
const setLayout: SetLayout = async (layout, options) => {
|
|
41
|
+
if (runtime) {
|
|
42
|
+
if (layout === ShellLayout.DEFAULT) {
|
|
43
|
+
setDisplay?.(ShellDisplay.NONE);
|
|
44
|
+
} else {
|
|
45
|
+
setDisplay?.(ShellDisplay.FULLSCREEN);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
runtime.setLayout({ layout, ...options });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
await client.shell.open(layout, options);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
return {
|
|
55
|
+
setLayout,
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export type ShellProviderProps = PropsWithChildren<{
|
|
60
|
+
space?: Space;
|
|
61
|
+
deviceInvitationCode?: string | null;
|
|
62
|
+
spaceInvitationCode?: string | null;
|
|
63
|
+
onJoinedSpace?: (spaceKey?: PublicKey) => void;
|
|
64
|
+
}>;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Renders the DXOS shell and provides a way to set the layout of the shell from the rest of the app.
|
|
68
|
+
*
|
|
69
|
+
* @deprecated
|
|
70
|
+
*/
|
|
71
|
+
// TODO(wittjosiah): Remove? Is MemoryShellRuntime needed? We now can use shell with monolithic client.
|
|
72
|
+
export const ShellProvider = ({
|
|
73
|
+
space,
|
|
74
|
+
deviceInvitationCode,
|
|
75
|
+
spaceInvitationCode,
|
|
76
|
+
onJoinedSpace,
|
|
77
|
+
children,
|
|
78
|
+
}: ShellProviderProps) => {
|
|
79
|
+
const client = useClient();
|
|
80
|
+
|
|
81
|
+
//
|
|
82
|
+
// Component Shell
|
|
83
|
+
//
|
|
84
|
+
|
|
85
|
+
const identity = useIdentity();
|
|
86
|
+
const [display, setDisplay] = useState(
|
|
87
|
+
!identity || spaceInvitationCode || deviceInvitationCode ? ShellDisplay.FULLSCREEN : ShellDisplay.NONE,
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
const shellRuntime = useMemo(() => {
|
|
91
|
+
if (client.config.get('runtime.app.env.DX_VAULT') !== 'false') {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (spaceInvitationCode) {
|
|
96
|
+
return new MemoryShellRuntime({
|
|
97
|
+
layout: ShellLayout.JOIN_SPACE,
|
|
98
|
+
invitationCode: spaceInvitationCode,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (deviceInvitationCode) {
|
|
103
|
+
return new MemoryShellRuntime({
|
|
104
|
+
layout: ShellLayout.INITIALIZE_IDENTITY,
|
|
105
|
+
invitationCode: deviceInvitationCode,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return new MemoryShellRuntime({ layout: identity ? ShellLayout.DEFAULT : ShellLayout.INITIALIZE_IDENTITY });
|
|
110
|
+
}, [client, identity, spaceInvitationCode, deviceInvitationCode]);
|
|
111
|
+
|
|
112
|
+
const handleKeyDown = useCallback(
|
|
113
|
+
(event: KeyboardEvent) => {
|
|
114
|
+
if (!space || !shellRuntime) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const modifier = event.ctrlKey || event.metaKey;
|
|
119
|
+
if (event.key === '>' && event.shiftKey && modifier) {
|
|
120
|
+
shellRuntime.setLayout({ layout: ShellLayout.SHARE_IDENTITY });
|
|
121
|
+
setDisplay(ShellDisplay.FULLSCREEN);
|
|
122
|
+
} else if (event.key === '.' && modifier) {
|
|
123
|
+
shellRuntime.setLayout({ layout: ShellLayout.SPACE, spaceKey: space.key });
|
|
124
|
+
setDisplay(ShellDisplay.FULLSCREEN);
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
[space, shellRuntime],
|
|
128
|
+
);
|
|
129
|
+
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
if (!shellRuntime) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
window.addEventListener('keydown', handleKeyDown);
|
|
136
|
+
return () => window.removeEventListener('keydown', handleKeyDown);
|
|
137
|
+
}, [shellRuntime, handleKeyDown]);
|
|
138
|
+
|
|
139
|
+
useEffect(() => {
|
|
140
|
+
if (!shellRuntime) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return shellRuntime.contextUpdate.on(({ display, spaceKey }) => {
|
|
145
|
+
if (display) {
|
|
146
|
+
setDisplay(display);
|
|
147
|
+
}
|
|
148
|
+
onJoinedSpace?.(spaceKey);
|
|
149
|
+
});
|
|
150
|
+
}, [shellRuntime]);
|
|
151
|
+
|
|
152
|
+
return (
|
|
153
|
+
<>
|
|
154
|
+
{shellRuntime && (
|
|
155
|
+
<div className={mx(display === ShellDisplay.NONE ? 'hidden' : '')}>
|
|
156
|
+
<Shell runtime={shellRuntime} origin={window.location.origin} />
|
|
157
|
+
</div>
|
|
158
|
+
)}
|
|
159
|
+
|
|
160
|
+
<ShellContext.Provider value={{ runtime: shellRuntime, setDisplay }}>{children}</ShellContext.Provider>
|
|
161
|
+
</>
|
|
162
|
+
);
|
|
163
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { Event } from '@dxos/async';
|
|
6
|
+
import {
|
|
7
|
+
type AppContextRequest,
|
|
8
|
+
type LayoutRequest,
|
|
9
|
+
type PublicKey,
|
|
10
|
+
ShellLayout,
|
|
11
|
+
type ShellRuntime,
|
|
12
|
+
} from '@dxos/react-client';
|
|
13
|
+
|
|
14
|
+
// TODO(wittjosiah): Remove?
|
|
15
|
+
export class MemoryShellRuntime implements ShellRuntime {
|
|
16
|
+
readonly layoutUpdate = new Event<LayoutRequest>();
|
|
17
|
+
readonly contextUpdate = new Event<AppContextRequest>();
|
|
18
|
+
private _layout: ShellLayout;
|
|
19
|
+
private _invitationCode?: string;
|
|
20
|
+
private _spaceKey?: PublicKey;
|
|
21
|
+
|
|
22
|
+
constructor({ layout, invitationCode, spaceKey }: Partial<LayoutRequest> & Partial<AppContextRequest> = {}) {
|
|
23
|
+
this._layout = layout ?? ShellLayout.DEFAULT;
|
|
24
|
+
this._invitationCode = invitationCode;
|
|
25
|
+
this._spaceKey = spaceKey;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
get layout() {
|
|
29
|
+
return this._layout;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
get invitationCode() {
|
|
33
|
+
return this._invitationCode;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
get spaceKey() {
|
|
37
|
+
return this._spaceKey;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
setLayout(request: LayoutRequest) {
|
|
41
|
+
this._layout = request.layout;
|
|
42
|
+
this._invitationCode = request.invitationCode;
|
|
43
|
+
this._spaceKey = request.spaceKey;
|
|
44
|
+
this.layoutUpdate.emit(request);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async setAppContext(context: AppContextRequest) {
|
|
48
|
+
this.contextUpdate.emit(context);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { StrictMode } from 'react';
|
|
6
|
+
import { createRoot } from 'react-dom/client';
|
|
7
|
+
|
|
8
|
+
import { DEFAULT_CLIENT_CHANNEL, DEFAULT_SHELL_CHANNEL } from '@dxos/client-protocol';
|
|
9
|
+
import { ShellRuntimeImpl } from '@dxos/client-services';
|
|
10
|
+
import { Client, ClientContext, ClientServicesProxy, Config, SystemStatus } from '@dxos/react-client';
|
|
11
|
+
import { ThemeProvider, Tooltip } from '@dxos/react-ui';
|
|
12
|
+
import { defaultTx } from '@dxos/react-ui-theme';
|
|
13
|
+
import { createIFramePort } from '@dxos/rpc-tunnel';
|
|
14
|
+
|
|
15
|
+
import { Shell } from './Shell';
|
|
16
|
+
import { ClipboardProvider } from '../../components';
|
|
17
|
+
import { osTranslations } from '../../translations';
|
|
18
|
+
|
|
19
|
+
export const runShell = async (config: Config = new Config()) => {
|
|
20
|
+
const services = new ClientServicesProxy(createIFramePort({ channel: DEFAULT_CLIENT_CHANNEL }));
|
|
21
|
+
const client = new Client({ config, services });
|
|
22
|
+
const runtime = new ShellRuntimeImpl(createIFramePort({ channel: DEFAULT_SHELL_CHANNEL }));
|
|
23
|
+
await Promise.all([runtime.open(), client.initialize()]);
|
|
24
|
+
|
|
25
|
+
createRoot(document.getElementById('root')!).render(
|
|
26
|
+
<StrictMode>
|
|
27
|
+
<ThemeProvider tx={defaultTx} resourceExtensions={[osTranslations]}>
|
|
28
|
+
<ClientContext.Provider value={{ client, status: SystemStatus.ACTIVE }}>
|
|
29
|
+
<ClipboardProvider>
|
|
30
|
+
<Tooltip.Provider>
|
|
31
|
+
<Shell runtime={runtime} origin={location.origin} />
|
|
32
|
+
</Tooltip.Provider>
|
|
33
|
+
</ClipboardProvider>
|
|
34
|
+
</ClientContext.Provider>
|
|
35
|
+
</ThemeProvider>
|
|
36
|
+
</StrictMode>,
|
|
37
|
+
);
|
|
38
|
+
};
|