@sprucelabs/spruce-people-utils 0.8.0

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/README.md ADDED
@@ -0,0 +1,4 @@
1
+ # [Your Skill Name]
2
+
3
+ ## Useful links
4
+ * [Spruce Developer Documentation: https://developer.spruce.ai](https://developer.spruce.ai)
@@ -0,0 +1,5 @@
1
+ import InvitePersonCardViewController from '../../../inviting/InvitePersonCard.vc';
2
+ export default class SpyPersonInviteViewController extends InvitePersonCardViewController {
3
+ getLocationId(): string | undefined;
4
+ getOrganizationId(): string;
5
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const InvitePersonCard_vc_1 = __importDefault(require("../../../inviting/InvitePersonCard.vc"));
7
+ class SpyPersonInviteViewController extends InvitePersonCard_vc_1.default {
8
+ getLocationId() {
9
+ return this.locationId;
10
+ }
11
+ getOrganizationId() {
12
+ return this.organizationId;
13
+ }
14
+ }
15
+ exports.default = SpyPersonInviteViewController;
@@ -0,0 +1,8 @@
1
+ import PersonSelectInputViewController from '../../../viewControllers/PersonSelectInput.vc';
2
+ import SpyPersonInviteViewController from '../inviting/SpyPersonInviteViewController';
3
+ export default class SpyPersonSelectInput extends PersonSelectInputViewController {
4
+ getLocationId(): string | undefined;
5
+ getAutocompleteVc(): import("@sprucelabs/heartwood-view-controllers").AutocompleteInputViewController;
6
+ clearOrgId(): void;
7
+ InvitePersonVc(): SpyPersonInviteViewController;
8
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const PersonSelectInput_vc_1 = __importDefault(require("../../../viewControllers/PersonSelectInput.vc"));
7
+ class SpyPersonSelectInput extends PersonSelectInput_vc_1.default {
8
+ getLocationId() {
9
+ return this.locationId;
10
+ }
11
+ getAutocompleteVc() {
12
+ return this.autoCompleteVc;
13
+ }
14
+ clearOrgId() {
15
+ this.organizationId = undefined;
16
+ }
17
+ InvitePersonVc() {
18
+ const vc = super.InvitePersonVc();
19
+ return vc;
20
+ }
21
+ }
22
+ exports.default = SpyPersonSelectInput;
@@ -0,0 +1,5 @@
1
+ import InvitePersonCardViewController from '../../../inviting/InvitePersonCard.vc';
2
+ export default class SpyPersonInviteViewController extends InvitePersonCardViewController {
3
+ getLocationId(): string | undefined;
4
+ getOrganizationId(): string;
5
+ }
@@ -0,0 +1,9 @@
1
+ import InvitePersonCardViewController from '../../../inviting/InvitePersonCard.vc.js';
2
+ export default class SpyPersonInviteViewController extends InvitePersonCardViewController {
3
+ getLocationId() {
4
+ return this.locationId;
5
+ }
6
+ getOrganizationId() {
7
+ return this.organizationId;
8
+ }
9
+ }
@@ -0,0 +1,8 @@
1
+ import PersonSelectInputViewController from '../../../viewControllers/PersonSelectInput.vc';
2
+ import SpyPersonInviteViewController from '../inviting/SpyPersonInviteViewController';
3
+ export default class SpyPersonSelectInput extends PersonSelectInputViewController {
4
+ getLocationId(): string | undefined;
5
+ getAutocompleteVc(): import("@sprucelabs/heartwood-view-controllers").AutocompleteInputViewController;
6
+ clearOrgId(): void;
7
+ InvitePersonVc(): SpyPersonInviteViewController;
8
+ }
@@ -0,0 +1,16 @@
1
+ import PersonSelectInputViewController from '../../../viewControllers/PersonSelectInput.vc.js';
2
+ export default class SpyPersonSelectInput extends PersonSelectInputViewController {
3
+ getLocationId() {
4
+ return this.locationId;
5
+ }
6
+ getAutocompleteVc() {
7
+ return this.autoCompleteVc;
8
+ }
9
+ clearOrgId() {
10
+ this.organizationId = undefined;
11
+ }
12
+ InvitePersonVc() {
13
+ const vc = super.InvitePersonVc();
14
+ return vc;
15
+ }
16
+ }
@@ -0,0 +1,4 @@
1
+ export { default as PersonSelectInput } from './viewControllers/PersonSelectInput.vc';
2
+ export * from './viewControllers/PersonSelectInput.vc';
3
+ export { default as SpyPersonSelectInput } from './__tests__/behavioral/searching/SpyPersonSelectInput';
4
+ export { default as SpyPersonInviteViewController } from './__tests__/behavioral/inviting/SpyPersonInviteViewController';
@@ -0,0 +1,4 @@
1
+ export { default as PersonSelectInput } from './viewControllers/PersonSelectInput.vc.js';
2
+ export * from './viewControllers/PersonSelectInput.vc.js';
3
+ export { default as SpyPersonSelectInput } from './__tests__/behavioral/searching/SpyPersonSelectInput.js';
4
+ export { default as SpyPersonInviteViewController } from './__tests__/behavioral/inviting/SpyPersonInviteViewController.js';
@@ -0,0 +1,26 @@
1
+ import { AbstractViewController, AutocompleteInputViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
+ export default class PersonSelectInputViewController extends AbstractViewController<AutocompleteInput> {
3
+ static id: string;
4
+ protected autoCompleteVc: AutocompleteInputViewController;
5
+ protected organizationId?: string;
6
+ protected locationId?: string;
7
+ protected shouldIgnoreNextChange: boolean;
8
+ constructor(options: ViewControllerOptions & PersonSelectInputOptions);
9
+ private handleFocusInput;
10
+ private handleOnChangeRenderedValue;
11
+ private populateSuggestions;
12
+ private handleClickInviteAnonymous;
13
+ private handleClickInvitePerson;
14
+ protected InvitePersonVc(): import("../inviting/InvitePersonCard.vc").default;
15
+ private search;
16
+ private handleClickSuggestion;
17
+ setOrganizationId(orgId: string): void;
18
+ setLocationId(locationId: string): void;
19
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.AutocompleteInput;
20
+ }
21
+ declare type AutocompleteInput = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.AutocompleteInput;
22
+ export interface PersonSelectInputOptions {
23
+ organizationId?: string;
24
+ locationId?: string;
25
+ }
26
+ export {};
@@ -0,0 +1,133 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { AbstractViewController, } from '@sprucelabs/heartwood-view-controllers';
11
+ import { assertOptions } from '@sprucelabs/schema';
12
+ import searchPeopleToSuggestions, { renderLabel, } from './searchPeopleToSuggestions.js';
13
+ export default class PersonSelectInputViewController extends AbstractViewController {
14
+ constructor(options) {
15
+ super(options);
16
+ this.shouldIgnoreNextChange = false;
17
+ this.organizationId = options.organizationId;
18
+ this.locationId = options.locationId;
19
+ this.autoCompleteVc = this.Controller('autocompleteInput', {
20
+ onChangeRenderedValue: this.handleOnChangeRenderedValue.bind(this),
21
+ renderedValue: '',
22
+ onFocus: this.handleFocusInput.bind(this),
23
+ });
24
+ }
25
+ handleFocusInput() {
26
+ return __awaiter(this, void 0, void 0, function* () {
27
+ if (this.autoCompleteVc.getRenderedValue() === '') {
28
+ this.autoCompleteVc.showSuggestions([
29
+ {
30
+ id: 'anonymous',
31
+ label: 'Add anonymous',
32
+ onClick: this.handleClickInviteAnonymous.bind(this),
33
+ },
34
+ ]);
35
+ }
36
+ });
37
+ }
38
+ handleOnChangeRenderedValue(value) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ if (!this.shouldIgnoreNextChange && value.length > 2) {
41
+ yield this.populateSuggestions(value);
42
+ }
43
+ this.shouldIgnoreNextChange = false;
44
+ });
45
+ }
46
+ populateSuggestions(value) {
47
+ return __awaiter(this, void 0, void 0, function* () {
48
+ const people = yield this.search(value);
49
+ const suggestions = searchPeopleToSuggestions(people, (person) => __awaiter(this, void 0, void 0, function* () { return this.handleClickSuggestion(person); }));
50
+ this.autoCompleteVc.showSuggestions([
51
+ ...suggestions,
52
+ {
53
+ id: 'invite',
54
+ label: 'Invite person',
55
+ onClick: this.handleClickInvitePerson.bind(this),
56
+ },
57
+ {
58
+ id: 'anonymous',
59
+ label: 'Add anonymously',
60
+ onClick: this.handleClickInviteAnonymous.bind(this),
61
+ },
62
+ ]);
63
+ });
64
+ }
65
+ handleClickInviteAnonymous() {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ this.autoCompleteVc.hideSuggestions();
68
+ const confirm = yield this.confirm({
69
+ message: "You wanna add this person under the anonymous account? They won't get any messages or be able to login!",
70
+ });
71
+ if (!confirm) {
72
+ return;
73
+ }
74
+ const client = yield this.connectToApi();
75
+ const [{ person }] = yield client.emitAndFlattenResponses('get-anonymous-person::v2020_12_25', {
76
+ target: {
77
+ organizationId: this.organizationId,
78
+ locationId: this.locationId,
79
+ },
80
+ });
81
+ this.shouldIgnoreNextChange = true;
82
+ yield this.autoCompleteVc.setValue(person.id);
83
+ yield this.autoCompleteVc.setRenderedValue(person.casualName);
84
+ });
85
+ }
86
+ handleClickInvitePerson() {
87
+ return __awaiter(this, void 0, void 0, function* () {
88
+ const vc = this.InvitePersonVc();
89
+ this.renderInDialog(vc.render());
90
+ yield vc.load();
91
+ });
92
+ }
93
+ InvitePersonVc() {
94
+ const vc = this.Controller('people.invite-person-card', {
95
+ organizationId: this.organizationId,
96
+ locationId: this.locationId,
97
+ });
98
+ return vc;
99
+ }
100
+ search(value) {
101
+ return __awaiter(this, void 0, void 0, function* () {
102
+ const { organizationId } = assertOptions({ organizationId: this.organizationId }, ['organizationId'], `You gotta set an organizationId to your person select input for it to function. Try using 'this.vc.setOrganizationId(...)'!`);
103
+ const client = yield this.connectToApi();
104
+ const [{ people }] = yield client.emitAndFlattenResponses('people.search::v2022_05_29', {
105
+ target: {
106
+ organizationId,
107
+ },
108
+ payload: {
109
+ query: value,
110
+ },
111
+ });
112
+ return people;
113
+ });
114
+ }
115
+ handleClickSuggestion(person) {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ this.shouldIgnoreNextChange = true;
118
+ yield this.autoCompleteVc.setRenderedValue(renderLabel(person));
119
+ yield this.autoCompleteVc.setValue(person.id);
120
+ this.autoCompleteVc.hideSuggestions();
121
+ });
122
+ }
123
+ setOrganizationId(orgId) {
124
+ this.organizationId = orgId;
125
+ }
126
+ setLocationId(locationId) {
127
+ this.locationId = locationId;
128
+ }
129
+ render() {
130
+ return this.autoCompleteVc.render();
131
+ }
132
+ }
133
+ PersonSelectInputViewController.id = 'person-select-input';
@@ -0,0 +1,4 @@
1
+ export { default as PersonSelectInput } from './viewControllers/PersonSelectInput.vc';
2
+ export * from './viewControllers/PersonSelectInput.vc';
3
+ export { default as SpyPersonSelectInput } from './__tests__/behavioral/searching/SpyPersonSelectInput';
4
+ export { default as SpyPersonInviteViewController } from './__tests__/behavioral/inviting/SpyPersonInviteViewController';
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.SpyPersonInviteViewController = exports.SpyPersonSelectInput = exports.PersonSelectInput = void 0;
21
+ var PersonSelectInput_vc_1 = require("./viewControllers/PersonSelectInput.vc");
22
+ Object.defineProperty(exports, "PersonSelectInput", { enumerable: true, get: function () { return __importDefault(PersonSelectInput_vc_1).default; } });
23
+ __exportStar(require("./viewControllers/PersonSelectInput.vc"), exports);
24
+ var SpyPersonSelectInput_1 = require("./__tests__/behavioral/searching/SpyPersonSelectInput");
25
+ Object.defineProperty(exports, "SpyPersonSelectInput", { enumerable: true, get: function () { return __importDefault(SpyPersonSelectInput_1).default; } });
26
+ var SpyPersonInviteViewController_1 = require("./__tests__/behavioral/inviting/SpyPersonInviteViewController");
27
+ Object.defineProperty(exports, "SpyPersonInviteViewController", { enumerable: true, get: function () { return __importDefault(SpyPersonInviteViewController_1).default; } });
@@ -0,0 +1,26 @@
1
+ import { AbstractViewController, AutocompleteInputViewController, SpruceSchemas, ViewControllerOptions } from '@sprucelabs/heartwood-view-controllers';
2
+ export default class PersonSelectInputViewController extends AbstractViewController<AutocompleteInput> {
3
+ static id: string;
4
+ protected autoCompleteVc: AutocompleteInputViewController;
5
+ protected organizationId?: string;
6
+ protected locationId?: string;
7
+ protected shouldIgnoreNextChange: boolean;
8
+ constructor(options: ViewControllerOptions & PersonSelectInputOptions);
9
+ private handleFocusInput;
10
+ private handleOnChangeRenderedValue;
11
+ private populateSuggestions;
12
+ private handleClickInviteAnonymous;
13
+ private handleClickInvitePerson;
14
+ protected InvitePersonVc(): import("../inviting/InvitePersonCard.vc").default;
15
+ private search;
16
+ private handleClickSuggestion;
17
+ setOrganizationId(orgId: string): void;
18
+ setLocationId(locationId: string): void;
19
+ render(): SpruceSchemas.HeartwoodViewControllers.v2021_02_11.AutocompleteInput;
20
+ }
21
+ declare type AutocompleteInput = SpruceSchemas.HeartwoodViewControllers.v2021_02_11.AutocompleteInput;
22
+ export interface PersonSelectInputOptions {
23
+ organizationId?: string;
24
+ locationId?: string;
25
+ }
26
+ export {};
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const heartwood_view_controllers_1 = require("@sprucelabs/heartwood-view-controllers");
27
+ const schema_1 = require("@sprucelabs/schema");
28
+ const searchPeopleToSuggestions_1 = __importStar(require("./searchPeopleToSuggestions"));
29
+ class PersonSelectInputViewController extends heartwood_view_controllers_1.AbstractViewController {
30
+ constructor(options) {
31
+ super(options);
32
+ this.shouldIgnoreNextChange = false;
33
+ this.organizationId = options.organizationId;
34
+ this.locationId = options.locationId;
35
+ this.autoCompleteVc = this.Controller('autocompleteInput', {
36
+ onChangeRenderedValue: this.handleOnChangeRenderedValue.bind(this),
37
+ renderedValue: '',
38
+ onFocus: this.handleFocusInput.bind(this),
39
+ });
40
+ }
41
+ async handleFocusInput() {
42
+ if (this.autoCompleteVc.getRenderedValue() === '') {
43
+ this.autoCompleteVc.showSuggestions([
44
+ {
45
+ id: 'anonymous',
46
+ label: 'Add anonymous',
47
+ onClick: this.handleClickInviteAnonymous.bind(this),
48
+ },
49
+ ]);
50
+ }
51
+ }
52
+ async handleOnChangeRenderedValue(value) {
53
+ if (!this.shouldIgnoreNextChange && value.length > 2) {
54
+ await this.populateSuggestions(value);
55
+ }
56
+ this.shouldIgnoreNextChange = false;
57
+ }
58
+ async populateSuggestions(value) {
59
+ const people = await this.search(value);
60
+ const suggestions = (0, searchPeopleToSuggestions_1.default)(people, async (person) => this.handleClickSuggestion(person));
61
+ this.autoCompleteVc.showSuggestions([
62
+ ...suggestions,
63
+ {
64
+ id: 'invite',
65
+ label: 'Invite person',
66
+ onClick: this.handleClickInvitePerson.bind(this),
67
+ },
68
+ {
69
+ id: 'anonymous',
70
+ label: 'Add anonymously',
71
+ onClick: this.handleClickInviteAnonymous.bind(this),
72
+ },
73
+ ]);
74
+ }
75
+ async handleClickInviteAnonymous() {
76
+ this.autoCompleteVc.hideSuggestions();
77
+ const confirm = await this.confirm({
78
+ message: "You wanna add this person under the anonymous account? They won't get any messages or be able to login!",
79
+ });
80
+ if (!confirm) {
81
+ return;
82
+ }
83
+ const client = await this.connectToApi();
84
+ const [{ person }] = await client.emitAndFlattenResponses('get-anonymous-person::v2020_12_25', {
85
+ target: {
86
+ organizationId: this.organizationId,
87
+ locationId: this.locationId,
88
+ },
89
+ });
90
+ this.shouldIgnoreNextChange = true;
91
+ await this.autoCompleteVc.setValue(person.id);
92
+ await this.autoCompleteVc.setRenderedValue(person.casualName);
93
+ }
94
+ async handleClickInvitePerson() {
95
+ const vc = this.InvitePersonVc();
96
+ this.renderInDialog(vc.render());
97
+ await vc.load();
98
+ }
99
+ InvitePersonVc() {
100
+ const vc = this.Controller('people.invite-person-card', {
101
+ organizationId: this.organizationId,
102
+ locationId: this.locationId,
103
+ });
104
+ return vc;
105
+ }
106
+ async search(value) {
107
+ const { organizationId } = (0, schema_1.assertOptions)({ organizationId: this.organizationId }, ['organizationId'], `You gotta set an organizationId to your person select input for it to function. Try using 'this.vc.setOrganizationId(...)'!`);
108
+ const client = await this.connectToApi();
109
+ const [{ people }] = await client.emitAndFlattenResponses('people.search::v2022_05_29', {
110
+ target: {
111
+ organizationId,
112
+ },
113
+ payload: {
114
+ query: value,
115
+ },
116
+ });
117
+ return people;
118
+ }
119
+ async handleClickSuggestion(person) {
120
+ this.shouldIgnoreNextChange = true;
121
+ await this.autoCompleteVc.setRenderedValue((0, searchPeopleToSuggestions_1.renderLabel)(person));
122
+ await this.autoCompleteVc.setValue(person.id);
123
+ this.autoCompleteVc.hideSuggestions();
124
+ }
125
+ setOrganizationId(orgId) {
126
+ this.organizationId = orgId;
127
+ }
128
+ setLocationId(locationId) {
129
+ this.locationId = locationId;
130
+ }
131
+ render() {
132
+ return this.autoCompleteVc.render();
133
+ }
134
+ }
135
+ exports.default = PersonSelectInputViewController;
136
+ PersonSelectInputViewController.id = 'person-select-input';
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@sprucelabs/spruce-people-utils",
3
+ "description": "People Utilities",
4
+ "version": "0.8.0",
5
+ "skill": {
6
+ "namespace": "invite"
7
+ },
8
+ "homepage": "https://github.com/sprucelabsai/spruce-people-skill",
9
+ "bugs": {
10
+ "url": "https://github.com/sprucelabsai/spruce-people-skill/issues"
11
+ },
12
+ "main": "./build/index-module.js",
13
+ "types": "./build/index-module.d.ts",
14
+ "module": "./build/esm/index-module.js",
15
+ "sideEffects": false,
16
+ "files": [
17
+ "build/index-module.js",
18
+ "build/index-module.d.ts",
19
+ "build/esm/index-module.js",
20
+ "build/esm/index-module.d.ts",
21
+ "build/viewControllers/PersonSelectInput.vc.js",
22
+ "build/viewControllers/PersonSelectInput.vc.d.ts",
23
+ "build/__tests__/behavioral/searching/SpyPersonSelectInput.js",
24
+ "build/__tests__/behavioral/searching/SpyPersonSelectInput.d.ts",
25
+ "build/__tests__/behavioral/inviting/SpyPersonInviteViewController.js",
26
+ "build/__tests__/behavioral/inviting/SpyPersonInviteViewController.d.ts",
27
+ "build/esm/viewControllers/PersonSelectInput.vc.js",
28
+ "build/esm/viewControllers/PersonSelectInput.vc.d.ts",
29
+ "build/esm/__tests__/behavioral/searching/SpyPersonSelectInput.js",
30
+ "build/esm/__tests__/behavioral/searching/SpyPersonSelectInput.d.ts",
31
+ "build/esm/__tests__/behavioral/inviting/SpyPersonInviteViewController.js",
32
+ "build/esm/__tests__/behavioral/inviting/SpyPersonInviteViewController.d.ts"
33
+ ],
34
+ "keywords": [],
35
+ "scripts": {
36
+ "release": "npm publish"
37
+ },
38
+ "dependencies": {
39
+ "@sprucelabs/schema": "latest"
40
+ },
41
+ "engines": {
42
+ "node": "16.x",
43
+ "yarn": "1.x"
44
+ }
45
+ }