@dxos/shell 0.6.14-staging.77003c1 → 0.6.14-staging.7b35391
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle/shell.mjs +4338 -4245
- package/dist/bundle/shell.mjs.map +1 -1
- package/dist/bundle/shell.umd.js +45 -45
- package/dist/bundle/shell.umd.js.map +1 -1
- package/dist/bundle/style.css +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react.mjs +40 -46
- package/dist/lib/browser/react.mjs.map +3 -3
- package/dist/lib/browser/testing/index.mjs +2 -0
- package/dist/lib/browser/testing/index.mjs.map +2 -2
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/react.cjs +23 -29
- package/dist/lib/node/react.cjs.map +3 -3
- package/dist/lib/node/testing/index.cjs +2 -0
- package/dist/lib/node/testing/index.cjs.map +2 -2
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/react.mjs +40 -46
- package/dist/lib/node-esm/react.mjs.map +3 -3
- package/dist/lib/node-esm/testing/index.mjs +2 -0
- package/dist/lib/node-esm/testing/index.mjs.map +2 -2
- package/dist/types/src/components/DeviceList/DeviceListItem.d.ts.map +1 -1
- package/dist/types/src/components/DeviceList/DeviceListItem.js +4 -10
- package/dist/types/src/components/DeviceList/DeviceListItem.js.map +1 -1
- package/dist/types/src/components/Panel/Action.d.ts +2 -0
- package/dist/types/src/components/Panel/Action.d.ts.map +1 -1
- package/dist/types/src/components/Panel/Action.js +16 -14
- package/dist/types/src/components/Panel/Action.js.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -1
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +2 -2
- package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanel.js +2 -2
- package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts +1 -0
- package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +5 -3
- package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
- package/dist/types/src/playwright/invitations-manager.d.ts.map +1 -1
- package/dist/types/src/playwright/invitations-manager.js +9 -1
- package/dist/types/src/playwright/invitations-manager.js.map +1 -1
- package/dist/types/src/testing/shell-manager.d.ts.map +1 -1
- package/dist/types/src/testing/shell-manager.js +2 -0
- package/dist/types/src/testing/shell-manager.js.map +1 -1
- package/package.json +25 -25
- package/src/components/DeviceList/DeviceListItem.tsx +38 -42
- package/src/components/Panel/Action.tsx +40 -31
- package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +4 -2
- package/src/panels/SpacePanel/SpacePanel.tsx +2 -1
- package/src/panels/SpacePanel/SpacePanelProps.ts +1 -0
- package/src/panels/SpacePanel/steps/SpaceManager.tsx +5 -3
- package/src/playwright/invitations-manager.ts +8 -1
- package/src/testing/shell-manager.ts +2 -0
|
@@ -126,6 +126,8 @@ var ShellManager = class extends ScopedShellManager {
|
|
|
126
126
|
async createSpaceInvitation() {
|
|
127
127
|
this._invitationCode = new Trigger();
|
|
128
128
|
this._authCode = new Trigger();
|
|
129
|
+
await this.shell.getByTestId("spaces-panel.create-invitation.more").click();
|
|
130
|
+
await this.shell.getByTestId("spaces-panel.invite-one").click();
|
|
129
131
|
await this.shell.getByTestId("spaces-panel.create-invitation").click();
|
|
130
132
|
return await this._invitationCode.wait();
|
|
131
133
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/testing/scoped-shell-manager.ts", "../../../../src/testing/shell-manager.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport type { Locator, Page, FrameLocator } from '@playwright/test';\n\ntype Scope = Locator | FrameLocator | Page;\n\nexport class ScopedShellManager {\n page!: Page;\n\n authenticatorIsVisible(type: 'device' | 'space', scope?: Scope) {\n return (scope || this.page).getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).isVisible();\n }\n\n async invitationFailed(scope?: Scope, timeout = 3000) {\n const peer = scope || this.page;\n try {\n await peer.locator('[data-testid=invitation-rescuer-reset]:not([disabled])').waitFor({ timeout });\n return true;\n } catch {\n return false;\n }\n }\n\n async inputInvitation(type: 'device' | 'space', invitation: string, scope?: Scope) {\n await (scope || this.page).getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-input`).fill(invitation);\n await this.page.keyboard.press('Enter');\n }\n\n async invitationInputContinue(type: 'device' | 'space', scope?: Scope) {\n await (scope || this.page).getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-input-continue`).click();\n }\n\n async cancelInvitation(type: 'device' | 'space', kind: 'host' | 'guest', scope?: Scope) {\n if (kind === 'guest') {\n await (scope || this.page)\n .getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-authenticator-cancel`)\n .click();\n } else {\n await (scope || this.page).getByTestId('cancel-invitation').nth(0).click();\n }\n }\n\n async readyToAuthenticate(type: 'device' | 'space', scope?: Scope, timeout = 3000) {\n const peer = scope || this.page;\n try {\n await peer\n .locator(`[data-testid=${type === 'device' ? 'halo' : 'space'}-auth-code-input]:not([disabled])`)\n .waitFor({ timeout });\n return true;\n } catch {\n return false;\n }\n }\n\n async authenticateInvitation(type: 'device' | 'space', authCode: string, scope?: Scope) {\n const peer = scope || this.page;\n // TODO(wittjosiah): Update ids.\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).fill(authCode);\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-authenticator-next`).click();\n }\n\n async clearAuthCode(type: 'device' | 'space', scope?: Scope) {\n const peer = scope || this.page;\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).fill('');\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).focus();\n }\n\n async resetInvitation(scope?: Scope) {\n await (scope || this.page).getByTestId('invitation-rescuer-reset').click();\n }\n\n async doneInvitation(type: 'device' | 'space', scope?: Scope) {\n await (scope || this.page)\n .getByTestId(type === 'device' ? 'halo-invitation-accepted-done' : 'space-invitation-accepted-done')\n .click();\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { ConsoleMessage, Page } from '@playwright/test';\n\nimport { sleep, Trigger } from '@dxos/async';\n\nimport { ScopedShellManager } from './scoped-shell-manager';\n\n// TODO(wittjosiah): Normalize data-testids between snake and camel case.\n\nconst CONFIRM_INPUT = 'RESET';\n\nexport class ShellManager extends ScopedShellManager {\n private _invitationCode = new Trigger<string>();\n private _authCode = new Trigger<string>();\n\n // prettier-ignore\n constructor(\n override readonly page: Page,\n readonly inIFrame = true,\n ) {\n super();\n this.page.on('console', (message) => this._onConsoleMessage(message));\n }\n\n get shell() {\n return this.inIFrame ? this.page.frameLocator('data-testid=dxos-shell') : this.page;\n }\n\n // Getters\n\n async getDisplayName(): Promise<string | null> {\n return this.shell.getByTestId('identityHeading.displayName').textContent();\n }\n\n async isCurrentSpaceViewVisible(): Promise<boolean> {\n return await this.shell.getByTestId('current-space-view').isVisible();\n }\n\n async isSpaceListViewVisible(): Promise<boolean> {\n return await this.shell.getByTestId('space-list-view').isVisible();\n }\n\n // Actions\n\n async createIdentity(name: string) {\n await this.shell.getByTestId('create-identity').click();\n await this.page.keyboard.type(name);\n await this.shell.getByTestId('create-identity-input-continue').click();\n await this.shell.getByTestId('halo-invitation-accepted-done').click();\n }\n\n async createDeviceInvitation(): Promise<string> {\n this._invitationCode = new Trigger<string>();\n this._authCode = new Trigger<string>();\n await this.shell.getByTestId('devices-panel.create-invitation').click();\n return await this._invitationCode.wait();\n }\n\n async resetDevice() {\n await this.shell.getByTestId('device-list-item-current.options').click();\n await this.shell.getByTestId('device-list-item-current.reset').click();\n await this.shell.getByTestId('reset-storage.reset-identity-input').fill(CONFIRM_INPUT);\n await this.shell.getByTestId('reset-storage.reset-identity-confirm').click();\n }\n\n async joinNewIdentity(invitationCode: string) {\n await this.shell.getByTestId('device-list-item-current.options').click();\n await this.shell.getByTestId('device-list-item-current.join-existing').click();\n await this.shell.getByTestId('join-new-identity.reset-identity-input').fill(CONFIRM_INPUT);\n await this.shell.getByTestId('join-new-identity.reset-identity-confirm').click();\n }\n\n async acceptDeviceInvitation(invitationCode: string) {\n await this.inputInvitation('device', invitationCode, this.shell);\n }\n\n async authenticateDevice(authCode: string, skipDone = true) {\n // Wait for focus to shift before typing.\n await sleep(1500);\n await this.authenticateInvitation('device', authCode, this.shell);\n // TODO(wittjosiah): When \"signing out\" and joinging a new identity, the done step seems to be skipped.\n if (!skipDone) {\n await this.doneInvitation('device', this.shell);\n }\n }\n\n async closeShell() {\n await this.page.keyboard.press('Escape');\n }\n\n async createSpaceInvitation(): Promise<string> {\n this._invitationCode = new Trigger<string>();\n this._authCode = new Trigger<string>();\n await this.shell.getByTestId('spaces-panel.create-invitation').click();\n return await this._invitationCode.wait();\n }\n\n async acceptSpaceInvitation(invitationCode: string) {\n await this.inputInvitation('space', invitationCode, this.shell);\n }\n\n async getAuthCode(): Promise<string> {\n return await this._authCode.wait();\n }\n\n async authenticate(authCode: string) {\n // Wait for focus to shift before typing.\n await sleep(1500);\n await this.authenticateInvitation('space', authCode, this.shell);\n }\n\n private async _onConsoleMessage(message: ConsoleMessage) {\n try {\n const text = message.text();\n const json = JSON.parse(text.slice(text.indexOf('{')));\n if (json.invitationCode) {\n this._invitationCode.wake(json.invitationCode);\n }\n if (json.authCode) {\n this._authCode.wake(json.authCode);\n }\n } catch {}\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport type { Locator, Page, FrameLocator } from '@playwright/test';\n\ntype Scope = Locator | FrameLocator | Page;\n\nexport class ScopedShellManager {\n page!: Page;\n\n authenticatorIsVisible(type: 'device' | 'space', scope?: Scope) {\n return (scope || this.page).getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).isVisible();\n }\n\n async invitationFailed(scope?: Scope, timeout = 3000) {\n const peer = scope || this.page;\n try {\n await peer.locator('[data-testid=invitation-rescuer-reset]:not([disabled])').waitFor({ timeout });\n return true;\n } catch {\n return false;\n }\n }\n\n async inputInvitation(type: 'device' | 'space', invitation: string, scope?: Scope) {\n await (scope || this.page).getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-input`).fill(invitation);\n await this.page.keyboard.press('Enter');\n }\n\n async invitationInputContinue(type: 'device' | 'space', scope?: Scope) {\n await (scope || this.page).getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-input-continue`).click();\n }\n\n async cancelInvitation(type: 'device' | 'space', kind: 'host' | 'guest', scope?: Scope) {\n if (kind === 'guest') {\n await (scope || this.page)\n .getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-authenticator-cancel`)\n .click();\n } else {\n await (scope || this.page).getByTestId('cancel-invitation').nth(0).click();\n }\n }\n\n async readyToAuthenticate(type: 'device' | 'space', scope?: Scope, timeout = 3000) {\n const peer = scope || this.page;\n try {\n await peer\n .locator(`[data-testid=${type === 'device' ? 'halo' : 'space'}-auth-code-input]:not([disabled])`)\n .waitFor({ timeout });\n return true;\n } catch {\n return false;\n }\n }\n\n async authenticateInvitation(type: 'device' | 'space', authCode: string, scope?: Scope) {\n const peer = scope || this.page;\n // TODO(wittjosiah): Update ids.\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).fill(authCode);\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-invitation-authenticator-next`).click();\n }\n\n async clearAuthCode(type: 'device' | 'space', scope?: Scope) {\n const peer = scope || this.page;\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).fill('');\n await peer.getByTestId(`${type === 'device' ? 'halo' : 'space'}-auth-code-input`).focus();\n }\n\n async resetInvitation(scope?: Scope) {\n await (scope || this.page).getByTestId('invitation-rescuer-reset').click();\n }\n\n async doneInvitation(type: 'device' | 'space', scope?: Scope) {\n await (scope || this.page)\n .getByTestId(type === 'device' ? 'halo-invitation-accepted-done' : 'space-invitation-accepted-done')\n .click();\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { ConsoleMessage, Page } from '@playwright/test';\n\nimport { sleep, Trigger } from '@dxos/async';\n\nimport { ScopedShellManager } from './scoped-shell-manager';\n\n// TODO(wittjosiah): Normalize data-testids between snake and camel case.\n\nconst CONFIRM_INPUT = 'RESET';\n\nexport class ShellManager extends ScopedShellManager {\n private _invitationCode = new Trigger<string>();\n private _authCode = new Trigger<string>();\n\n // prettier-ignore\n constructor(\n override readonly page: Page,\n readonly inIFrame = true,\n ) {\n super();\n this.page.on('console', (message) => this._onConsoleMessage(message));\n }\n\n get shell() {\n return this.inIFrame ? this.page.frameLocator('data-testid=dxos-shell') : this.page;\n }\n\n // Getters\n\n async getDisplayName(): Promise<string | null> {\n return this.shell.getByTestId('identityHeading.displayName').textContent();\n }\n\n async isCurrentSpaceViewVisible(): Promise<boolean> {\n return await this.shell.getByTestId('current-space-view').isVisible();\n }\n\n async isSpaceListViewVisible(): Promise<boolean> {\n return await this.shell.getByTestId('space-list-view').isVisible();\n }\n\n // Actions\n\n async createIdentity(name: string) {\n await this.shell.getByTestId('create-identity').click();\n await this.page.keyboard.type(name);\n await this.shell.getByTestId('create-identity-input-continue').click();\n await this.shell.getByTestId('halo-invitation-accepted-done').click();\n }\n\n async createDeviceInvitation(): Promise<string> {\n this._invitationCode = new Trigger<string>();\n this._authCode = new Trigger<string>();\n await this.shell.getByTestId('devices-panel.create-invitation').click();\n return await this._invitationCode.wait();\n }\n\n async resetDevice() {\n await this.shell.getByTestId('device-list-item-current.options').click();\n await this.shell.getByTestId('device-list-item-current.reset').click();\n await this.shell.getByTestId('reset-storage.reset-identity-input').fill(CONFIRM_INPUT);\n await this.shell.getByTestId('reset-storage.reset-identity-confirm').click();\n }\n\n async joinNewIdentity(invitationCode: string) {\n await this.shell.getByTestId('device-list-item-current.options').click();\n await this.shell.getByTestId('device-list-item-current.join-existing').click();\n await this.shell.getByTestId('join-new-identity.reset-identity-input').fill(CONFIRM_INPUT);\n await this.shell.getByTestId('join-new-identity.reset-identity-confirm').click();\n }\n\n async acceptDeviceInvitation(invitationCode: string) {\n await this.inputInvitation('device', invitationCode, this.shell);\n }\n\n async authenticateDevice(authCode: string, skipDone = true) {\n // Wait for focus to shift before typing.\n await sleep(1500);\n await this.authenticateInvitation('device', authCode, this.shell);\n // TODO(wittjosiah): When \"signing out\" and joinging a new identity, the done step seems to be skipped.\n if (!skipDone) {\n await this.doneInvitation('device', this.shell);\n }\n }\n\n async closeShell() {\n await this.page.keyboard.press('Escape');\n }\n\n async createSpaceInvitation(): Promise<string> {\n this._invitationCode = new Trigger<string>();\n this._authCode = new Trigger<string>();\n await this.shell.getByTestId('spaces-panel.create-invitation.more').click();\n await this.shell.getByTestId('spaces-panel.invite-one').click();\n await this.shell.getByTestId('spaces-panel.create-invitation').click();\n return await this._invitationCode.wait();\n }\n\n async acceptSpaceInvitation(invitationCode: string) {\n await this.inputInvitation('space', invitationCode, this.shell);\n }\n\n async getAuthCode(): Promise<string> {\n return await this._authCode.wait();\n }\n\n async authenticate(authCode: string) {\n // Wait for focus to shift before typing.\n await sleep(1500);\n await this.authenticateInvitation('space', authCode, this.shell);\n }\n\n private async _onConsoleMessage(message: ConsoleMessage) {\n try {\n const text = message.text();\n const json = JSON.parse(text.slice(text.indexOf('{')));\n if (json.invitationCode) {\n this._invitationCode.wake(json.invitationCode);\n }\n if (json.authCode) {\n this._authCode.wake(json.authCode);\n }\n } catch {}\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ScopedShellManager", "authenticatorIsVisible", "type", "scope", "page", "getByTestId", "isVisible", "invitationFailed", "timeout", "peer", "locator", "waitFor", "inputInvitation", "invitation", "fill", "keyboard", "press", "invitationInputContinue", "click", "cancelInvitation", "kind", "nth", "readyToAuthenticate", "authenticateInvitation", "authCode", "clearAuthCode", "focus", "resetInvitation", "doneInvitation", "sleep", "Trigger", "CONFIRM_INPUT", "ShellManager", "ScopedShellManager", "constructor", "page", "inIFrame", "_invitationCode", "Trigger", "_authCode", "on", "message", "_onConsoleMessage", "shell", "frameLocator", "getDisplayName", "getByTestId", "textContent", "isCurrentSpaceViewVisible", "isVisible", "isSpaceListViewVisible", "createIdentity", "name", "click", "keyboard", "type", "createDeviceInvitation", "wait", "resetDevice", "fill", "joinNewIdentity", "invitationCode", "acceptDeviceInvitation", "inputInvitation", "authenticateDevice", "authCode", "skipDone", "sleep", "authenticateInvitation", "doneInvitation", "closeShell", "press", "createSpaceInvitation", "acceptSpaceInvitation", "getAuthCode", "authenticate", "text", "json", "JSON", "parse", "slice", "indexOf", "wake"]
|
|
7
7
|
}
|