@dxos/shell 0.6.14-staging.8758a12 → 0.6.14-staging.9b873ce
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 +4344 -4251
- 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
|
@@ -146,6 +146,8 @@ var ShellManager = class extends ScopedShellManager {
|
|
|
146
146
|
async createSpaceInvitation() {
|
|
147
147
|
this._invitationCode = new import_async.Trigger();
|
|
148
148
|
this._authCode = new import_async.Trigger();
|
|
149
|
+
await this.shell.getByTestId("spaces-panel.create-invitation.more").click();
|
|
150
|
+
await this.shell.getByTestId("spaces-panel.invite-one").click();
|
|
149
151
|
await this.shell.getByTestId("spaces-panel.create-invitation").click();
|
|
150
152
|
return await this._invitationCode.wait();
|
|
151
153
|
}
|
|
@@ -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", "CONFIRM_INPUT", "ShellManager", "constructor", "inIFrame", "_invitationCode", "Trigger", "_authCode", "on", "message", "_onConsoleMessage", "shell", "frameLocator", "getDisplayName", "textContent", "isCurrentSpaceViewVisible", "isSpaceListViewVisible", "createIdentity", "name", "createDeviceInvitation", "wait", "resetDevice", "joinNewIdentity", "invitationCode", "acceptDeviceInvitation", "authenticateDevice", "skipDone", "sleep", "closeShell", "createSpaceInvitation", "acceptSpaceInvitation", "getAuthCode", "authenticate", "text", "json", "JSON", "parse", "slice", "indexOf", "wake"]
|
|
7
7
|
}
|