@nylas/web-elements 2.0.6 → 2.1.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/dist/cdn/nylas-scheduler-editor/nylas-scheduler-editor.es.js +212 -212
- package/dist/cdn/nylas-scheduling/nylas-scheduling.es.js +1044 -1044
- package/dist/cjs/{abstract-provider-b37458c4.js → abstract-provider-85a616a9.js} +2 -2
- package/dist/cjs/{abstract-provider-b37458c4.js.map → abstract-provider-85a616a9.js.map} +1 -1
- package/dist/cjs/calendar-agenda-fill-icon_37.cjs.entry.js +55 -55
- package/dist/cjs/calendar-agenda-fill-icon_37.cjs.entry.js.map +1 -1
- package/dist/cjs/checkbox-group_4.cjs.entry.js +3 -3
- package/dist/cjs/checkmark-icon_15.cjs.entry.js +2 -2
- package/dist/cjs/{customParseFormat-61a3a302.js → customParseFormat-dc3b45aa.js} +2 -2
- package/dist/cjs/{customParseFormat-61a3a302.js.map → customParseFormat-dc3b45aa.js.map} +1 -1
- package/dist/cjs/{feedbackSync-2c4d37fe.js → feedbackSync-eaa01d21.js} +2 -2
- package/dist/cjs/feedbackSync-eaa01d21.js.map +1 -0
- package/dist/cjs/google-logo-icon_6.cjs.entry.js +18 -18
- package/dist/cjs/google-logo-icon_6.cjs.entry.js.map +1 -1
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/{index.es-e4fc6d92.js → index.es-a962dedb.js} +2 -2
- package/dist/cjs/{index.es-e4fc6d92.js.map → index.es-a962dedb.js.map} +1 -1
- package/dist/cjs/input-component.cjs.entry.js +1 -1
- package/dist/cjs/input-dropdown_2.cjs.entry.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/multi-select-dropdown.cjs.entry.js +1 -1
- package/dist/cjs/{nylas-api-request-5b2f7ec0.js → nylas-api-request-d263af93.js} +2 -2
- package/dist/cjs/{nylas-api-request-5b2f7ec0.js.map → nylas-api-request-d263af93.js.map} +1 -1
- package/dist/cjs/nylas-booked-event-card_11.cjs.entry.js +2 -2
- package/dist/cjs/nylas-date-component_2.cjs.entry.js +2 -2
- package/dist/cjs/nylas-form-card.cjs.entry.js +2 -2
- package/dist/cjs/nylas-notification_2.cjs.entry.js +1 -1
- package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +6 -6
- package/dist/cjs/nylas-scheduling.cjs.entry.js +8 -8
- package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
- package/dist/cjs/nylas-web-elements.cjs.js +1 -1
- package/dist/cjs/{register-component-8a9c40ee.js → register-component-2eefbf66.js} +2 -2
- package/dist/cjs/{register-component-8a9c40ee.js.map → register-component-2eefbf66.js.map} +1 -1
- package/dist/cjs/textarea-component.cjs.entry.js +1 -1
- package/dist/cjs/{utils-c923f1a8.js → utils-e37da320.js} +113 -113
- package/dist/cjs/{utils-c923f1a8.js.map → utils-e37da320.js.map} +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js +1 -1
- package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js.map +1 -1
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js +10 -10
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js.map +1 -1
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs/test/nylas-editor-tabs.spec.js +1 -1
- package/dist/collection/components/scheduler-editor/nylas-editor-tabs/test/nylas-editor-tabs.spec.js.map +1 -1
- package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js +18 -18
- package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js.map +1 -1
- package/dist/collection/components/scheduler-editor/{nylas-specific-date-availability-picker/nylas-specific-date-availability-picker.css → nylas-specific-time-availability-picker/nylas-specific-time-availability-picker.css} +46 -46
- package/dist/collection/components/scheduler-editor/{nylas-specific-date-availability-picker/nylas-specific-date-availability-picker.js → nylas-specific-time-availability-picker/nylas-specific-time-availability-picker.js} +41 -41
- package/dist/collection/components/scheduler-editor/nylas-specific-time-availability-picker/nylas-specific-time-availability-picker.js.map +1 -0
- package/dist/collection/components/scheduler-editor/{nylas-specific-date-availability-picker/test/nylas-specific-date-availability-picker.spec.js → nylas-specific-time-availability-picker/test/nylas-specific-time-availability-picker.spec.js} +48 -48
- package/dist/collection/components/scheduler-editor/nylas-specific-time-availability-picker/test/nylas-specific-time-availability-picker.spec.js.map +1 -0
- package/dist/collection/types/index.js.map +1 -1
- package/dist/components/index3.js.map +1 -1
- package/dist/components/nylas-editor-tabs-group2.js +2 -2
- package/dist/components/nylas-editor-tabs2.js +15 -15
- package/dist/components/nylas-editor-tabs2.js.map +1 -1
- package/dist/components/nylas-participants-custom-availability2.js +21 -21
- package/dist/components/nylas-participants-custom-availability2.js.map +1 -1
- package/dist/components/nylas-scheduler-editor.js +5 -5
- package/dist/components/nylas-scheduling.js +4 -4
- package/dist/components/nylas-scheduling.js.map +1 -1
- package/dist/components/nylas-specific-time-availability-picker.d.ts +11 -0
- package/dist/components/nylas-specific-time-availability-picker.js +8 -0
- package/dist/components/nylas-specific-time-availability-picker.js.map +1 -0
- package/dist/components/{nylas-specific-date-availability-picker2.js → nylas-specific-time-availability-picker2.js} +41 -41
- package/dist/components/nylas-specific-time-availability-picker2.js.map +1 -0
- package/dist/components/utils.js +112 -112
- package/dist/esm/{abstract-provider-45ada3b4.js → abstract-provider-a502b54d.js} +2 -2
- package/dist/esm/{abstract-provider-45ada3b4.js.map → abstract-provider-a502b54d.js.map} +1 -1
- package/dist/esm/calendar-agenda-fill-icon_37.entry.js +55 -55
- package/dist/esm/calendar-agenda-fill-icon_37.entry.js.map +1 -1
- package/dist/esm/checkbox-group_4.entry.js +3 -3
- package/dist/esm/checkmark-icon_15.entry.js +2 -2
- package/dist/esm/{customParseFormat-eeec04f5.js → customParseFormat-b5d95b34.js} +2 -2
- package/dist/esm/{customParseFormat-eeec04f5.js.map → customParseFormat-b5d95b34.js.map} +1 -1
- package/dist/esm/{feedbackSync-0ebd0eda.js → feedbackSync-92220b42.js} +2 -2
- package/dist/esm/feedbackSync-92220b42.js.map +1 -0
- package/dist/esm/google-logo-icon_6.entry.js +18 -18
- package/dist/esm/google-logo-icon_6.entry.js.map +1 -1
- package/dist/esm/{index.es-57d4a08f.js → index.es-488bc919.js} +2 -2
- package/dist/esm/{index.es-57d4a08f.js.map → index.es-488bc919.js.map} +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/input-component.entry.js +1 -1
- package/dist/esm/input-dropdown_2.entry.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/multi-select-dropdown.entry.js +1 -1
- package/dist/esm/{nylas-api-request-ad1909c6.js → nylas-api-request-9f7ac6c5.js} +2 -2
- package/dist/esm/{nylas-api-request-ad1909c6.js.map → nylas-api-request-9f7ac6c5.js.map} +1 -1
- package/dist/esm/nylas-booked-event-card_11.entry.js +2 -2
- package/dist/esm/nylas-date-component_2.entry.js +2 -2
- package/dist/esm/nylas-form-card.entry.js +2 -2
- package/dist/esm/nylas-notification_2.entry.js +1 -1
- package/dist/esm/nylas-scheduler-editor.entry.js +6 -6
- package/dist/esm/nylas-scheduling.entry.js +8 -8
- package/dist/esm/nylas-scheduling.entry.js.map +1 -1
- package/dist/esm/nylas-web-elements.js +1 -1
- package/dist/esm/{register-component-0aad9e3d.js → register-component-3acd57e7.js} +2 -2
- package/dist/esm/{register-component-0aad9e3d.js.map → register-component-3acd57e7.js.map} +1 -1
- package/dist/esm/textarea-component.entry.js +1 -1
- package/dist/esm/{utils-d3c0b941.js → utils-31933f5d.js} +113 -113
- package/dist/esm/{utils-d3c0b941.js.map → utils-31933f5d.js.map} +1 -1
- package/dist/nylas-web-elements/index.esm.js +1 -1
- package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
- package/dist/nylas-web-elements/nylas-web-elements.esm.js.map +1 -1
- package/dist/nylas-web-elements/{p-3216af1e.entry.js → p-20f50696.entry.js} +2 -2
- package/dist/nylas-web-elements/p-341f1a4c.entry.js +2 -0
- package/dist/nylas-web-elements/p-341f1a4c.entry.js.map +1 -0
- package/dist/nylas-web-elements/{p-1591deba.js → p-34c9fc7d.js} +2 -2
- package/dist/nylas-web-elements/{p-38fa873f.js → p-3524dab1.js} +2 -2
- package/dist/nylas-web-elements/p-3524dab1.js.map +1 -0
- package/dist/nylas-web-elements/{p-d45012f2.js → p-438d4542.js} +2 -2
- package/dist/nylas-web-elements/{p-21ab4e47.entry.js → p-536c5ef3.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-a4678661.entry.js → p-5a6c2efd.entry.js} +2 -2
- package/dist/nylas-web-elements/p-66a89e65.js +14 -0
- package/dist/nylas-web-elements/{p-17c5fb16.js.map → p-66a89e65.js.map} +1 -1
- package/dist/nylas-web-elements/{p-88e68e14.entry.js → p-6adb19cf.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-8937a53f.entry.js → p-6bda61cf.entry.js} +3 -3
- package/dist/nylas-web-elements/p-6bda61cf.entry.js.map +1 -0
- package/dist/nylas-web-elements/{p-30d92734.entry.js → p-7c02e476.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-8072aa07.js → p-803a1695.js} +2 -2
- package/dist/nylas-web-elements/{p-186bbd43.entry.js → p-81925b89.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-186bbd43.entry.js.map → p-81925b89.entry.js.map} +1 -1
- package/dist/nylas-web-elements/{p-855fe5b3.entry.js → p-83d2ff21.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-f83aa456.entry.js → p-8673dcf1.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-24c390bd.js → p-86e217f4.js} +2 -2
- package/dist/nylas-web-elements/{p-d0f51520.entry.js → p-8d5efa5e.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-0271cef3.entry.js → p-d7323440.entry.js} +3 -3
- package/dist/nylas-web-elements/{p-59ff0231.entry.js → p-da25d877.entry.js} +2 -2
- package/dist/nylas-web-elements/{p-f0e1688e.js → p-e42db60f.js} +2 -2
- package/dist/nylas-web-elements/{p-c11e1016.entry.js → p-ff122d1e.entry.js} +2 -2
- package/dist/types/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.d.ts +5 -5
- package/dist/types/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.d.ts +3 -3
- package/dist/types/components/scheduler-editor/{nylas-specific-date-availability-picker/nylas-specific-date-availability-picker.d.ts → nylas-specific-time-availability-picker/nylas-specific-time-availability-picker.d.ts} +7 -7
- package/dist/types/components.d.ts +19 -19
- package/dist/types/types/index.d.ts +2 -2
- package/package.json +2 -2
- package/dist/cjs/feedbackSync-2c4d37fe.js.map +0 -1
- package/dist/collection/components/scheduler-editor/nylas-specific-date-availability-picker/nylas-specific-date-availability-picker.js.map +0 -1
- package/dist/collection/components/scheduler-editor/nylas-specific-date-availability-picker/test/nylas-specific-date-availability-picker.spec.js.map +0 -1
- package/dist/components/nylas-specific-date-availability-picker.d.ts +0 -11
- package/dist/components/nylas-specific-date-availability-picker.js +0 -8
- package/dist/components/nylas-specific-date-availability-picker.js.map +0 -1
- package/dist/components/nylas-specific-date-availability-picker2.js.map +0 -1
- package/dist/esm/feedbackSync-0ebd0eda.js.map +0 -1
- package/dist/nylas-web-elements/p-17c5fb16.js +0 -14
- package/dist/nylas-web-elements/p-38fa873f.js.map +0 -1
- package/dist/nylas-web-elements/p-3ddcb355.entry.js +0 -2
- package/dist/nylas-web-elements/p-3ddcb355.entry.js.map +0 -1
- package/dist/nylas-web-elements/p-8937a53f.entry.js.map +0 -1
- /package/dist/nylas-web-elements/{p-3216af1e.entry.js.map → p-20f50696.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-1591deba.js.map → p-34c9fc7d.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-d45012f2.js.map → p-438d4542.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-21ab4e47.entry.js.map → p-536c5ef3.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-a4678661.entry.js.map → p-5a6c2efd.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-88e68e14.entry.js.map → p-6adb19cf.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-30d92734.entry.js.map → p-7c02e476.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-8072aa07.js.map → p-803a1695.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-855fe5b3.entry.js.map → p-83d2ff21.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-f83aa456.entry.js.map → p-8673dcf1.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-24c390bd.js.map → p-86e217f4.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-d0f51520.entry.js.map → p-8d5efa5e.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-0271cef3.entry.js.map → p-d7323440.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-59ff0231.entry.js.map → p-da25d877.entry.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-f0e1688e.js.map → p-e42db60f.js.map} +0 -0
- /package/dist/nylas-web-elements/{p-c11e1016.entry.js.map → p-ff122d1e.entry.js.map} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
-
import {
|
|
2
|
+
import { NylasSpecificTimeAvailabilityPicker } from "../nylas-specific-time-availability-picker";
|
|
3
3
|
import { h } from "@stencil/core";
|
|
4
4
|
import { LANGUAGE_CODE } from "../../../../common/constants";
|
|
5
5
|
import { TimeInput } from "../../nylas-time-window-picker/nylas-time-window-picker";
|
|
6
6
|
import { ButtonComponent } from "../../../design-system/button-component/button-component";
|
|
7
|
-
describe('nylas-specific-
|
|
7
|
+
describe('nylas-specific-time-availability-picker', () => {
|
|
8
8
|
beforeEach(() => {
|
|
9
9
|
const originalIntl = Intl;
|
|
10
10
|
global.Intl = {
|
|
@@ -22,15 +22,15 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
22
22
|
});
|
|
23
23
|
it('renders', async () => {
|
|
24
24
|
const page = await newSpecPage({
|
|
25
|
-
components: [
|
|
25
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
26
26
|
template: () => {
|
|
27
|
-
return (h("form", { id: "specific-
|
|
27
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
30
|
expect(page.root).toMatchSnapshot();
|
|
31
31
|
});
|
|
32
|
-
it('renders with initial
|
|
33
|
-
const
|
|
32
|
+
it('renders with initial specificTimesAvailability', async () => {
|
|
33
|
+
const specificTimesAvailability = [
|
|
34
34
|
{
|
|
35
35
|
date: '2024-01-15',
|
|
36
36
|
start: '09:00',
|
|
@@ -43,9 +43,9 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
43
43
|
},
|
|
44
44
|
];
|
|
45
45
|
const page = await newSpecPage({
|
|
46
|
-
components: [
|
|
46
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
47
47
|
template: () => {
|
|
48
|
-
return (h("form", { id: "specific-
|
|
48
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability", specificTimesAvailability: specificTimesAvailability })));
|
|
49
49
|
},
|
|
50
50
|
});
|
|
51
51
|
await page.waitForChanges();
|
|
@@ -53,9 +53,9 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
53
53
|
});
|
|
54
54
|
it('shows empty state when no entries exist', async () => {
|
|
55
55
|
const page = await newSpecPage({
|
|
56
|
-
components: [
|
|
56
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
57
57
|
template: () => {
|
|
58
|
-
return (h("form", { id: "specific-
|
|
58
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
59
59
|
},
|
|
60
60
|
});
|
|
61
61
|
await page.waitForChanges();
|
|
@@ -66,14 +66,14 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
66
66
|
});
|
|
67
67
|
it('adds a new specific date entry', async () => {
|
|
68
68
|
const page = await newSpecPage({
|
|
69
|
-
components: [
|
|
69
|
+
components: [NylasSpecificTimeAvailabilityPicker, ButtonComponent],
|
|
70
70
|
template: () => {
|
|
71
|
-
return (h("form", { id: "specific-
|
|
71
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
72
72
|
},
|
|
73
73
|
});
|
|
74
74
|
const element = page.rootInstance;
|
|
75
75
|
expect(element.specificDateEntries.length).toBe(0);
|
|
76
|
-
element.
|
|
76
|
+
element.addSpecificTimeAvailability();
|
|
77
77
|
await page.waitForChanges();
|
|
78
78
|
expect(element.specificDateEntries.length).toBe(1);
|
|
79
79
|
expect(element.specificDateEntries[0].startTime).toBe('09:00am');
|
|
@@ -82,29 +82,29 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
82
82
|
});
|
|
83
83
|
it('removes a specific date entry', async () => {
|
|
84
84
|
const page = await newSpecPage({
|
|
85
|
-
components: [
|
|
85
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
86
86
|
template: () => {
|
|
87
|
-
return (h("form", { id: "specific-
|
|
87
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
88
88
|
},
|
|
89
89
|
});
|
|
90
90
|
const element = page.rootInstance;
|
|
91
|
-
element.
|
|
91
|
+
element.addSpecificTimeAvailability();
|
|
92
92
|
await page.waitForChanges();
|
|
93
93
|
expect(element.specificDateEntries.length).toBe(1);
|
|
94
94
|
const entryId = element.specificDateEntries[0].id;
|
|
95
|
-
element.
|
|
95
|
+
element.removeSpecificTimeAvailability(entryId);
|
|
96
96
|
await page.waitForChanges();
|
|
97
97
|
expect(element.specificDateEntries.length).toBe(0);
|
|
98
98
|
});
|
|
99
99
|
it('toggles availability status', async () => {
|
|
100
100
|
const page = await newSpecPage({
|
|
101
|
-
components: [
|
|
101
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
102
102
|
template: () => {
|
|
103
|
-
return (h("form", { id: "specific-
|
|
103
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
104
104
|
},
|
|
105
105
|
});
|
|
106
106
|
const element = page.rootInstance;
|
|
107
|
-
element.
|
|
107
|
+
element.addSpecificTimeAvailability();
|
|
108
108
|
await page.waitForChanges();
|
|
109
109
|
const entryId = element.specificDateEntries[0].id;
|
|
110
110
|
expect(element.specificDateEntries[0].isUnavailable).toBe(false);
|
|
@@ -117,13 +117,13 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
117
117
|
});
|
|
118
118
|
it('shows validation error for invalid time range', async () => {
|
|
119
119
|
const page = await newSpecPage({
|
|
120
|
-
components: [
|
|
120
|
+
components: [NylasSpecificTimeAvailabilityPicker, TimeInput],
|
|
121
121
|
template: () => {
|
|
122
|
-
return (h("form", { id: "specific-
|
|
122
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
123
123
|
},
|
|
124
124
|
});
|
|
125
125
|
const element = page.rootInstance;
|
|
126
|
-
element.
|
|
126
|
+
element.addSpecificTimeAvailability();
|
|
127
127
|
await page.waitForChanges();
|
|
128
128
|
element.specificDateEntries[0].startTime = '05:00pm';
|
|
129
129
|
element.specificDateEntries[0].endTime = '09:00am';
|
|
@@ -135,13 +135,13 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
135
135
|
});
|
|
136
136
|
it('handles time change events', async () => {
|
|
137
137
|
const page = await newSpecPage({
|
|
138
|
-
components: [
|
|
138
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
139
139
|
template: () => {
|
|
140
|
-
return (h("form", { id: "specific-
|
|
140
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
141
141
|
},
|
|
142
142
|
});
|
|
143
143
|
const element = page.rootInstance;
|
|
144
|
-
element.
|
|
144
|
+
element.addSpecificTimeAvailability();
|
|
145
145
|
await page.waitForChanges();
|
|
146
146
|
const entryId = element.specificDateEntries[0].id;
|
|
147
147
|
const timeChangeEvent = new CustomEvent('timeChange', {
|
|
@@ -156,13 +156,13 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
156
156
|
});
|
|
157
157
|
it('handles form input change events', async () => {
|
|
158
158
|
const page = await newSpecPage({
|
|
159
|
-
components: [
|
|
159
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
160
160
|
template: () => {
|
|
161
|
-
return (h("form", { id: "specific-
|
|
161
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
162
162
|
},
|
|
163
163
|
});
|
|
164
164
|
const element = page.rootInstance;
|
|
165
|
-
element.
|
|
165
|
+
element.addSpecificTimeAvailability();
|
|
166
166
|
await page.waitForChanges();
|
|
167
167
|
const entryId = element.specificDateEntries[0].id;
|
|
168
168
|
const inputChangeEvent = new CustomEvent('nylasFormInputChanged', {
|
|
@@ -180,13 +180,13 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
180
180
|
});
|
|
181
181
|
it('validates entries and shows error messages', async () => {
|
|
182
182
|
const page = await newSpecPage({
|
|
183
|
-
components: [
|
|
183
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
184
184
|
template: () => {
|
|
185
|
-
return (h("form", { id: "specific-
|
|
185
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
186
186
|
},
|
|
187
187
|
});
|
|
188
188
|
const element = page.rootInstance;
|
|
189
|
-
element.
|
|
189
|
+
element.addSpecificTimeAvailability();
|
|
190
190
|
await page.waitForChanges();
|
|
191
191
|
const entryId = element.specificDateEntries[0].id;
|
|
192
192
|
element.validationErrors = { [entryId]: 'Start time must be before end time' };
|
|
@@ -197,9 +197,9 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
197
197
|
});
|
|
198
198
|
it('emits valueChanged event with correct data', async () => {
|
|
199
199
|
const page = await newSpecPage({
|
|
200
|
-
components: [
|
|
200
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
201
201
|
template: () => {
|
|
202
|
-
return (h("form", { id: "specific-
|
|
202
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
203
203
|
},
|
|
204
204
|
});
|
|
205
205
|
const element = page.rootInstance;
|
|
@@ -209,11 +209,11 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
209
209
|
return new CustomEvent('valueChanged', { detail: data });
|
|
210
210
|
});
|
|
211
211
|
element.valueChanged.emit = mockEmit;
|
|
212
|
-
element.
|
|
212
|
+
element.addSpecificTimeAvailability();
|
|
213
213
|
element.specificDateEntries[0].date = '2024-01-15';
|
|
214
214
|
element.emitValueChanged();
|
|
215
215
|
expect(emittedValue).toBeDefined();
|
|
216
|
-
expect(emittedValue.name).toBe('specific-
|
|
216
|
+
expect(emittedValue.name).toBe('specific-time-availability');
|
|
217
217
|
const parsedValue = JSON.parse(emittedValue.value);
|
|
218
218
|
expect(parsedValue).toHaveLength(1);
|
|
219
219
|
expect(parsedValue[0].date).toBe('2024-01-15');
|
|
@@ -222,13 +222,13 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
222
222
|
});
|
|
223
223
|
it('handles unavailable dates correctly', async () => {
|
|
224
224
|
const page = await newSpecPage({
|
|
225
|
-
components: [
|
|
225
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
226
226
|
template: () => {
|
|
227
|
-
return (h("form", { id: "specific-
|
|
227
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability" })));
|
|
228
228
|
},
|
|
229
229
|
});
|
|
230
230
|
const element = page.rootInstance;
|
|
231
|
-
element.
|
|
231
|
+
element.addSpecificTimeAvailability();
|
|
232
232
|
await page.waitForChanges();
|
|
233
233
|
const entryId = element.specificDateEntries[0].id;
|
|
234
234
|
element.toggleAvailability(entryId);
|
|
@@ -242,8 +242,8 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
242
242
|
expect(parsedValue[0].start).toBe('00:00');
|
|
243
243
|
expect(parsedValue[0].end).toBe('00:00');
|
|
244
244
|
});
|
|
245
|
-
it('loads
|
|
246
|
-
const
|
|
245
|
+
it('loads specificTimesAvailability from props correctly', async () => {
|
|
246
|
+
const specificTimesAvailability = [
|
|
247
247
|
{
|
|
248
248
|
date: '2024-01-15',
|
|
249
249
|
start: '10:00',
|
|
@@ -256,9 +256,9 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
256
256
|
},
|
|
257
257
|
];
|
|
258
258
|
const page = await newSpecPage({
|
|
259
|
-
components: [
|
|
259
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
260
260
|
template: () => {
|
|
261
|
-
return (h("form", { id: "specific-
|
|
261
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability", specificTimesAvailability: specificTimesAvailability })));
|
|
262
262
|
},
|
|
263
263
|
});
|
|
264
264
|
const element = page.rootInstance;
|
|
@@ -273,9 +273,9 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
273
273
|
});
|
|
274
274
|
it('sets name attribute correctly', async () => {
|
|
275
275
|
const page = await newSpecPage({
|
|
276
|
-
components: [
|
|
276
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
277
277
|
template: () => {
|
|
278
|
-
return (h("form", { id: "specific-
|
|
278
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "custom-name" })));
|
|
279
279
|
},
|
|
280
280
|
});
|
|
281
281
|
await page.waitForChanges();
|
|
@@ -283,9 +283,9 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
283
283
|
});
|
|
284
284
|
it('handles selectedLanguage change', async () => {
|
|
285
285
|
const page = await newSpecPage({
|
|
286
|
-
components: [
|
|
286
|
+
components: [NylasSpecificTimeAvailabilityPicker],
|
|
287
287
|
template: () => {
|
|
288
|
-
return (h("form", { id: "specific-
|
|
288
|
+
return (h("form", { id: "specific-time-availability-picker" }, h("nylas-specific-time-availability-picker", { name: "specific-time-availability", selectedLanguage: LANGUAGE_CODE.en })));
|
|
289
289
|
},
|
|
290
290
|
});
|
|
291
291
|
const element = page.rootInstance;
|
|
@@ -295,4 +295,4 @@ describe('nylas-specific-date-availability-picker', () => {
|
|
|
295
295
|
expect(page.root).toMatchSnapshot();
|
|
296
296
|
});
|
|
297
297
|
});
|
|
298
|
-
//# sourceMappingURL=nylas-specific-
|
|
298
|
+
//# sourceMappingURL=nylas-specific-time-availability-picker.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nylas-specific-time-availability-picker.spec.js","sourceRoot":"","sources":["../../../../../src/components/scheduler-editor/nylas-specific-time-availability-picker/test/nylas-specific-time-availability-picker.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { NylasSpecificTimeAvailabilityPicker } from '../nylas-specific-time-availability-picker';\nimport { h } from '@stencil/core';\nimport { LANGUAGE_CODE } from '@/common/constants';\nimport { TimeInput } from '../../nylas-time-window-picker/nylas-time-window-picker';\nimport { ButtonComponent } from '../../../design-system/button-component/button-component';\n\ndescribe('nylas-specific-time-availability-picker', () => {\n beforeEach(() => {\n const originalIntl = Intl;\n\n global.Intl = {\n ...originalIntl,\n DateTimeFormat: jest.fn().mockImplementation(() => ({\n resolvedOptions: () => ({\n timeZone: 'America/New_York',\n }),\n supportedLocalesOf: jest.fn(),\n })) as any,\n };\n });\n\n afterEach(() => {\n jest.restoreAllMocks();\n });\n\n it('renders', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n expect(page.root).toMatchSnapshot();\n });\n\n it('renders with initial specificTimesAvailability', async () => {\n const specificTimesAvailability = [\n {\n date: '2024-01-15',\n start: '09:00',\n end: '17:00',\n },\n {\n date: '2024-01-16',\n start: '00:00',\n end: '00:00',\n },\n ];\n\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker\n name=\"specific-time-availability\"\n specificTimesAvailability={specificTimesAvailability}\n ></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n expect(page.root).toMatchSnapshot();\n });\n\n it('shows empty state when no entries exist', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n const emptyState = page.root?.shadowRoot?.querySelector('.empty-state');\n expect(emptyState).not.toBeNull();\n const emptyTitle = emptyState?.querySelector('.empty-title');\n expect(emptyTitle).not.toBeNull();\n });\n\n it('adds a new specific date entry', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker, ButtonComponent],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Initially should have no entries\n expect(element.specificDateEntries.length).toBe(0);\n\n // Add a new entry\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n\n // Should now have one entry\n expect(element.specificDateEntries.length).toBe(1);\n expect(element.specificDateEntries[0].startTime).toBe('09:00am');\n expect(element.specificDateEntries[0].endTime).toBe('05:00pm');\n expect(element.specificDateEntries[0].isUnavailable).toBe(false);\n });\n\n it('removes a specific date entry', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Add an entry first\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n expect(element.specificDateEntries.length).toBe(1);\n\n // Remove the entry\n const entryId = element.specificDateEntries[0].id;\n element.removeSpecificTimeAvailability(entryId);\n await page.waitForChanges();\n\n // Should have no entries\n expect(element.specificDateEntries.length).toBe(0);\n });\n\n it('toggles availability status', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Add an entry first\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n\n const entryId = element.specificDateEntries[0].id;\n expect(element.specificDateEntries[0].isUnavailable).toBe(false);\n\n // Toggle to unavailable\n element.toggleAvailability(entryId);\n await page.waitForChanges();\n expect(element.specificDateEntries[0].isUnavailable).toBe(true);\n\n // Toggle back to available\n element.toggleAvailability(entryId);\n await page.waitForChanges();\n expect(element.specificDateEntries[0].isUnavailable).toBe(false);\n });\n\n it('shows validation error for invalid time range', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker, TimeInput],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Add an entry with invalid time range (end before start)\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n\n // Set invalid time range\n element.specificDateEntries[0].startTime = '05:00pm';\n element.specificDateEntries[0].endTime = '09:00am';\n element.specificDateEntries = [...element.specificDateEntries];\n\n // Trigger validation\n const isValid = element.validateAllEntries();\n await page.waitForChanges();\n\n expect(isValid).toBe(false);\n expect(Object.keys(element.validationErrors).length).toBeGreaterThan(0);\n });\n\n it('handles time change events', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Add an entry first\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n\n const entryId = element.specificDateEntries[0].id;\n\n // Simulate time change event\n const timeChangeEvent = new CustomEvent('timeChange', {\n detail: {\n key: `${entryId}_start`,\n value: '10:00am',\n },\n });\n\n element.handleTimeChange(timeChangeEvent);\n await page.waitForChanges();\n\n expect(element.specificDateEntries[0].startTime).toBe('10:00am');\n });\n\n it('handles form input change events', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Add an entry first\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n\n const entryId = element.specificDateEntries[0].id;\n\n // Simulate date input change event\n const inputChangeEvent = new CustomEvent('nylasFormInputChanged', {\n detail: {\n name: `date-${entryId}`,\n value: '2024-01-20',\n label: 'Date',\n type: 'date',\n error: '',\n },\n });\n\n element.handleFormInputChange(inputChangeEvent);\n await page.waitForChanges();\n\n expect(element.specificDateEntries[0].date).toBe('2024-01-20');\n });\n\n it('validates entries and shows error messages', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Add an entry with validation error\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n\n // Set validation error\n const entryId = element.specificDateEntries[0].id;\n element.validationErrors = { [entryId]: 'Start time must be before end time' };\n await page.waitForChanges();\n\n const errorMessage = page.root?.shadowRoot?.querySelector('.error-message');\n expect(errorMessage).not.toBeNull();\n expect(errorMessage?.textContent).toBe('Start time must be before end time');\n });\n\n it('emits valueChanged event with correct data', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n let emittedValue: any;\n const mockEmit = jest.fn().mockImplementation(data => {\n emittedValue = data;\n return new CustomEvent('valueChanged', { detail: data });\n });\n element.valueChanged.emit = mockEmit as any;\n\n // Add an entry\n element.addSpecificTimeAvailability();\n element.specificDateEntries[0].date = '2024-01-15';\n element.emitValueChanged();\n\n expect(emittedValue).toBeDefined();\n expect(emittedValue.name).toBe('specific-time-availability');\n\n const parsedValue = JSON.parse(emittedValue.value);\n expect(parsedValue).toHaveLength(1);\n expect(parsedValue[0].date).toBe('2024-01-15');\n expect(parsedValue[0].start).toBe('09:00');\n expect(parsedValue[0].end).toBe('17:00');\n });\n\n it('handles unavailable dates correctly', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Add an entry and mark as unavailable\n element.addSpecificTimeAvailability();\n await page.waitForChanges();\n\n const entryId = element.specificDateEntries[0].id;\n element.toggleAvailability(entryId);\n element.specificDateEntries[0].date = '2024-01-15';\n\n element.emitValueChanged();\n\n // Check that unavailable dates emit with 00:00 times\n const valueChangedSpy = jest.fn();\n element.valueChanged.emit = valueChangedSpy;\n element.emitValueChanged();\n\n const emittedData = valueChangedSpy.mock.calls[0][0];\n const parsedValue = JSON.parse(emittedData.value);\n expect(parsedValue[0].start).toBe('00:00');\n expect(parsedValue[0].end).toBe('00:00');\n });\n\n it('loads specificTimesAvailability from props correctly', async () => {\n const specificTimesAvailability = [\n {\n date: '2024-01-15',\n start: '10:00',\n end: '18:00',\n },\n {\n date: '2024-01-16',\n start: '00:00',\n end: '00:00',\n },\n ];\n\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker\n name=\"specific-time-availability\"\n specificTimesAvailability={specificTimesAvailability}\n ></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n await page.waitForChanges();\n\n expect(element.specificDateEntries.length).toBe(2);\n expect(element.specificDateEntries[0].date).toBe('2024-01-15');\n expect(element.specificDateEntries[0].startTime).toBe('10:00am');\n expect(element.specificDateEntries[0].endTime).toBe('06:00pm');\n expect(element.specificDateEntries[0].isUnavailable).toBe(false);\n\n expect(element.specificDateEntries[1].date).toBe('2024-01-16');\n expect(element.specificDateEntries[1].isUnavailable).toBe(true);\n });\n\n it('sets name attribute correctly', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"custom-name\"></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n await page.waitForChanges();\n expect(page.root?.getAttribute('name')).toBe('custom-name');\n });\n\n it('handles selectedLanguage change', async () => {\n const page = await newSpecPage({\n components: [NylasSpecificTimeAvailabilityPicker],\n template: () => {\n return (\n <form id=\"specific-time-availability-picker\">\n <nylas-specific-time-availability-picker name=\"specific-time-availability\" selectedLanguage={LANGUAGE_CODE.en}></nylas-specific-time-availability-picker>\n </form>\n );\n },\n });\n\n const element = page.rootInstance as NylasSpecificTimeAvailabilityPicker;\n\n // Change language\n element.selectedLanguage = LANGUAGE_CODE.de;\n element.selectedLanguageChangedHandler(LANGUAGE_CODE.de, LANGUAGE_CODE.en);\n await page.waitForChanges();\n\n expect(page.root).toMatchSnapshot();\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAoJA,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,uCAAmB,CAAA;IACnB,iCAAa,CAAA;IACb,uCAAmB,CAAA;AACrB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAsWD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,wCAAuB,CAAA;IACvB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAQD,MAAM,CAAN,IAAY,kBAWX;AAXD,WAAY,kBAAkB;IAC5B,qEAA+C,CAAA;IAC/C,yDAAmC,CAAA;IACnC,mEAA6C,CAAA;IAC7C,mEAA6C,CAAA;IAC7C,qDAA+B,CAAA;IAC/B,yCAAmB,CAAA;IACnB,+DAAyC,CAAA;IACzC,2DAAqC,CAAA;IACrC,2DAAqC,CAAA;IACrC,mDAA6B,CAAA;AAC/B,CAAC,EAXW,kBAAkB,KAAlB,kBAAkB,QAW7B","sourcesContent":["export interface NylasResponse<Data = any> {\n request_id: string;\n data?: Data;\n error?: {\n message: string;\n type: string;\n };\n}\n\n// Avaliability\nexport interface OpenHours {\n days: number[];\n exDates: string[];\n timezone: string;\n start: string;\n end: string;\n}\n\nexport interface SpecificDateOpenHours {\n date: string;\n start: string;\n end: string;\n}\n\nexport interface MeetingBuffer {\n before: number;\n after: number;\n}\n\n// Scheduling\nexport interface UpdateConfiguration extends Omit<Configuration, 'id'> {}\n\nexport interface ParticipantAvailability {\n calendar_ids: string[];\n open_hours?: OpenHours[];\n}\n\nexport type NylasSchedulerBookingParticipant = { name: string; email: string; nameReadOnly?: boolean; emailReadOnly?: boolean };\n\nexport type NylasSchedulerBookingData = {\n primaryParticipant: NylasSchedulerBookingParticipant;\n startTime?: Date;\n endTime?: Date;\n timezone?: string;\n language?: string;\n guests?: NylasSchedulerBookingParticipant[];\n additionalFields?: Record<\n string,\n {\n value: string;\n type?: string;\n readOnly?: boolean;\n }\n >;\n};\n\nexport type OpenHour = {\n days: number[]; // [1, 2, 3, 4, 5]\n start: string; // \"09:00\"\n end: string; // \"17:00\"\n timezone: string; // \"America/Los_Angeles\"\n};\n\nexport type Timeslot = {\n start_time: Date;\n end_time: Date;\n emails?: string[];\n capacity?: number;\n event_id?: string;\n master_id?: string;\n calendar_id?: string;\n};\n\nexport type ThemeConfig = Partial<{\n '--nylas-primary': string;\n '--nylas-info': string;\n '--nylas-success': string;\n '--nylas-warning': string;\n '--nylas-error': string;\n '--nylas-error-pressed': string;\n '--nylas-base-0': string;\n '--nylas-base-25': string;\n '--nylas-base-50': string;\n '--nylas-base-100': string;\n '--nylas-base-200': string;\n '--nylas-base-300': string;\n '--nylas-base-400': string;\n '--nylas-base-500': string;\n '--nylas-base-600': string;\n '--nylas-base-700': string;\n '--nylas-base-800': string;\n '--nylas-base-900': string;\n '--nylas-base-950': string;\n '--nylas-color-blue-50': string;\n '--nylas-color-blue-100': string;\n '--nylas-color-blue-300': string;\n '--nylas-color-blue-500': string;\n '--nylas-color-blue-700': string;\n '--nylas-color-blue-900': string;\n '--nylas-color-red-50': string;\n '--nylas-color-red-100': string;\n '--nylas-color-red-300': string;\n '--nylas-color-red-500': string;\n '--nylas-color-red-700': string;\n '--nylas-color-red-900': string;\n '--nylas-color-green-50': string;\n '--nylas-color-green-100': string;\n '--nylas-color-green-300': string;\n '--nylas-color-green-500': string;\n '--nylas-color-green-700': string;\n '--nylas-color-green-900': string;\n '--nylas-color-yellow-50': string;\n '--nylas-color-yellow-100': string;\n '--nylas-color-yellow-300': string;\n '--nylas-color-yellow-500': string;\n '--nylas-color-yellow-700': string;\n '--nylas-color-yellow-900': string;\n '--nylas-color-purple-50': string;\n '--nylas-color-purple-100': string;\n '--nylas-color-purple-300': string;\n '--nylas-color-purple-500': string;\n '--nylas-color-purple-700': string;\n '--nylas-color-purple-900': string;\n '--nylas-color-sky-50': string;\n '--nylas-color-sky-100': string;\n '--nylas-color-sky-300': string;\n '--nylas-color-sky-500': string;\n '--nylas-color-sky-700': string;\n '--nylas-color-sky-900': string;\n '--nylas-color-black': string;\n '--nylas-color-grey-900': string;\n '--nylas-color-grey-800': string;\n '--nylas-color-grey-700': string;\n '--nylas-color-grey-600': string;\n '--nylas-color-grey-500': string;\n '--nylas-color-grey-400': string;\n '--nylas-color-grey-300': string;\n '--nylas-color-grey-200': string;\n '--nylas-color-grey-100': string;\n '--nylas-color-grey-50': string;\n '--nylas-color-white': string;\n '--nylas-font-family': string;\n '--nylas-font-size': string;\n '--nylas-border-radius': string;\n '--nylas-border-radius-2x': string;\n '--nylas-border-radius-3x': string;\n}>;\n\nexport enum NotificationType {\n Error = 'error',\n Warning = 'warning',\n Info = 'info',\n Success = 'success',\n}\n\nexport type Notification = {\n id: string;\n type: NotificationType;\n title: string;\n code?: number;\n category: string;\n description?: string;\n ttl?: number | 'none';\n};\n\nexport type BookingType = 'booking' | 'organizer-confirmation' | 'custom-confirmation';\n\nexport type AvailabilityMethod = 'max-fairness' | 'max-availability' | 'collective';\n\nexport type ConferenceProvider = 'GoogleMeetConferenceProvider' | 'MicrosoftTeamsConferenceProvider' | 'ZoomConferenceProvider' | 'OnlineMeetingProviderMicrosoftTeams';\n\nexport type ReminderMethod = 'email' | 'webhook';\n\nexport interface Rules {\n availability_method: AvailabilityMethod;\n buffer: MeetingBuffer;\n default_open_hours: OpenHours[];\n round_robin_group_id: string;\n}\n\nexport interface ConferenceDetail {\n meeting_code?: string; // zoom, GTM, microsoft teams\n password?: string; // zoom, webex\n url?: string; // zoom, webex, GTM, meet, microsoft teams\n pin?: string; // webex, meet\n phone?: string[]; // GTM, meet, microsoft teams\n}\n\nexport interface Conference {\n provider?: ConferenceProvider;\n details?: ConferenceDetail;\n autocreate?: { [key: string]: any };\n}\n\nexport interface ParticipantBooking {\n calendar_id: string;\n}\n\nexport interface Participant {\n email: string;\n name?: string;\n is_organizer?: boolean;\n availability?: ParticipantAvailability;\n booking?: ParticipantBooking;\n specific_date_open_hours?: SpecificDateOpenHours[];\n timezone?: string;\n}\n\nexport interface EventReminder {\n type: ReminderMethod;\n minutes_before_event: number;\n recipient?: string;\n email_subject?: string;\n}\n\nexport interface Availability {\n duration_minutes: number;\n interval_minutes?: number;\n round_to?: number;\n availability_rules?: Rules;\n}\n\nexport interface EventBooking {\n title: string;\n description?: string;\n location?: string;\n timezone?: string;\n booking_type: BookingType;\n conferencing?: Conference;\n hide_participants?: boolean;\n disable_emails?: boolean;\n reminders?: EventReminder[];\n}\n\nexport interface Appearance {\n color?: string;\n submit_button_label?: string;\n thank_you_message?: string;\n company_logo_url?: string;\n}\n\nexport interface Scheduler {\n available_days_in_future?: number;\n min_cancellation_notice: number;\n min_booking_notice?: number;\n rescheduling_url?: string;\n cancellation_url?: string;\n organizer_confirmation_url?: string;\n cancellation_policy?: string;\n hide_additional_guests?: boolean;\n hide_cancellation_options?: boolean;\n hide_rescheduling_options?: boolean;\n additional_fields?: Record<string, AdditionalFields>;\n email_template?: EmailTemplate;\n confirmation_redirect_url?: string;\n}\nexport interface AdditionalFields {\n type: string;\n required: boolean;\n order: number;\n options?: string[];\n label?: string;\n default?: string;\n}\n\nexport interface EmailTemplate {\n logo: string;\n booking_confirmed: BookingConfirmed;\n show_nylas_branding: boolean;\n organizer_locale: string;\n}\n\nexport interface BookingConfirmed {\n title: string;\n body: string;\n}\n\nexport interface Configuration {\n id: string;\n version: string;\n type?: string;\n requires_session_auth?: boolean;\n participants: Participant[];\n availability: Availability;\n event_booking: EventBooking;\n scheduler: Partial<Scheduler>;\n slug: string;\n appearance: Appearance;\n name: string;\n}\n\nexport interface GroupBooking {\n booking_type: BookingType; // Only 'booking' is supported\n disable_emails?: boolean;\n reminders?: EventReminder[];\n conferencing?: Conference;\n calendar_id: string;\n default_capacity: number;\n}\n\nexport interface GroupConfiguration {\n id: string;\n name: string;\n slug: string;\n requires_session_auth?: boolean;\n type: 'group';\n group_booking: GroupBooking;\n scheduler: Scheduler;\n appearance: Appearance;\n}\n\nexport interface Creator {\n name: string;\n email: string;\n}\nexport interface AdditionalParticipant {\n name: string;\n email: string;\n calendars: {\n id: string;\n name: string;\n object?: 'calendar';\n is_primary?: boolean;\n is_owned_by_user?: boolean;\n read_only?: boolean;\n timezone?: string;\n }[];\n}\n\nexport interface GroupEvent {\n id?: string;\n title: string;\n busy: boolean;\n participants: NylasSchedulerBookingParticipant[];\n resources: {\n name: string;\n email: string;\n }[];\n description: string;\n when: {\n start_time: number;\n end_time: number;\n start_timezone?: string;\n end_timezone?: string;\n };\n location: string;\n recurrence: string[];\n capacity: number;\n}\n\nexport type RecurrenceUpdateOption = 'this' | 'future' | 'all';\nexport type RecurrenceDeleteOption = 'this' | 'future' | 'all';\n\nexport type Snapshot = {\n busy: boolean;\n calendar_id: string;\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: {\n email: string;\n status: string;\n }[];\n resources: any[];\n read_only: boolean;\n recurrence: string[];\n reminders: {\n use_default: boolean;\n overrides: any[];\n };\n title: string;\n description?: string;\n location?: string;\n conferencing?: Conference;\n visibility: string;\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n grant_id: string;\n id: string;\n object: string;\n status: string;\n when: {\n start_timezone: string;\n end_timezone: string;\n object: string;\n start_time: number; // Unix timestamp\n end_time: number; // Unix timestamp\n };\n created_at: number; // Unix timestamp\n updated_at: number; // Unix timestamp\n};\n\nexport interface GroupEventAPIData {\n event: EventDetails;\n group_event_info?: GroupEventInfo;\n}\n\nexport type EventDetails = {\n busy: boolean;\n calendar_id: string;\n conferencing: {\n provider: ConferenceProvider;\n details: {\n meeting_code: string;\n url: string;\n pin: string;\n phone: string[];\n };\n };\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: Array<{\n email: string;\n status: 'yes' | 'no' | 'noreply';\n comment?: string;\n }>;\n resources: string[];\n read_only: boolean;\n reminders: {\n use_default: boolean;\n overrides: Array<{\n method?: string;\n minutes?: number;\n }>;\n };\n title: string;\n description?: string;\n location?: string;\n visibility: 'default' | 'public' | 'private';\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n master_event_id: string;\n color_id: string;\n grant_id: string;\n id: string;\n object: 'event';\n status: 'confirmed' | 'tentative' | 'cancelled';\n when: {\n start_timezone: string;\n end_timezone: string;\n object: 'timespan';\n start_time: number;\n end_time: number;\n };\n created_at: number;\n updated_at: number;\n original_start_time: number;\n};\n\nexport type GroupEventInfo = {\n event_id: string;\n calendar_id: string;\n master_id: string;\n config_id: string;\n capacity: number;\n type: 'updated_event' | 'single_event' | 'master_event';\n booked: boolean;\n finished: boolean;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n snapshot: any | null;\n snapshot_expires_at: number;\n rrule: string[] | null;\n exceptions: {\n event_id: string;\n capacity: number;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n }[];\n};\n\nexport type ImportGroupEventDetails = {\n event_id: string;\n calendar_id: string;\n capacity: number;\n participants: Participant[];\n organizer: {\n name: string;\n email: string;\n };\n};\n\nexport type ImportGroupEventResponse = {\n imported_events: string[];\n import_failed: {\n event_id: string;\n reason: string;\n }[];\n};\n\nexport enum ErrorCategory {\n Component = 'component',\n Api = 'api',\n Auth = 'auth',\n}\n\nexport interface ErrorDetails {\n title: string;\n message: string;\n category: ErrorCategory;\n}\n\nexport enum ComponentErrorType {\n endtime_not_in_future = 'endtime_not_in_future',\n no_booking_info = 'no_booking_info',\n no_timeslot_selected = 'no_timeslot_selected',\n no_timezone_selected = 'no_timezone_selected',\n no_booking_id = 'no_booking_id',\n no_salt = 'no_salt',\n invalid_start_time = 'invalid_start_time',\n invalid_end_time = 'invalid_end_time',\n invalid_timezone = 'invalid_timezone',\n no_config_id = 'no_config_id',\n}\n\nexport interface KeyPoint {\n time: number;\n text: string;\n active?: boolean;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAoJA,MAAM,CAAN,IAAY,gBAKX;AALD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,uCAAmB,CAAA;IACnB,iCAAa,CAAA;IACb,uCAAmB,CAAA;AACrB,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,QAK3B;AAsWD,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,wCAAuB,CAAA;IACvB,4BAAW,CAAA;IACX,8BAAa,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAQD,MAAM,CAAN,IAAY,kBAWX;AAXD,WAAY,kBAAkB;IAC5B,qEAA+C,CAAA;IAC/C,yDAAmC,CAAA;IACnC,mEAA6C,CAAA;IAC7C,mEAA6C,CAAA;IAC7C,qDAA+B,CAAA;IAC/B,yCAAmB,CAAA;IACnB,+DAAyC,CAAA;IACzC,2DAAqC,CAAA;IACrC,2DAAqC,CAAA;IACrC,mDAA6B,CAAA;AAC/B,CAAC,EAXW,kBAAkB,KAAlB,kBAAkB,QAW7B","sourcesContent":["export interface NylasResponse<Data = any> {\n request_id: string;\n data?: Data;\n error?: {\n message: string;\n type: string;\n };\n}\n\n// Avaliability\nexport interface OpenHours {\n days: number[];\n exDates: string[];\n timezone: string;\n start: string;\n end: string;\n}\n\nexport interface SpecificTimeAvailability {\n date: string;\n start: string;\n end: string;\n}\n\nexport interface MeetingBuffer {\n before: number;\n after: number;\n}\n\n// Scheduling\nexport interface UpdateConfiguration extends Omit<Configuration, 'id'> {}\n\nexport interface ParticipantAvailability {\n calendar_ids: string[];\n open_hours?: OpenHours[];\n}\n\nexport type NylasSchedulerBookingParticipant = { name: string; email: string; nameReadOnly?: boolean; emailReadOnly?: boolean };\n\nexport type NylasSchedulerBookingData = {\n primaryParticipant: NylasSchedulerBookingParticipant;\n startTime?: Date;\n endTime?: Date;\n timezone?: string;\n language?: string;\n guests?: NylasSchedulerBookingParticipant[];\n additionalFields?: Record<\n string,\n {\n value: string;\n type?: string;\n readOnly?: boolean;\n }\n >;\n};\n\nexport type OpenHour = {\n days: number[]; // [1, 2, 3, 4, 5]\n start: string; // \"09:00\"\n end: string; // \"17:00\"\n timezone: string; // \"America/Los_Angeles\"\n};\n\nexport type Timeslot = {\n start_time: Date;\n end_time: Date;\n emails?: string[];\n capacity?: number;\n event_id?: string;\n master_id?: string;\n calendar_id?: string;\n};\n\nexport type ThemeConfig = Partial<{\n '--nylas-primary': string;\n '--nylas-info': string;\n '--nylas-success': string;\n '--nylas-warning': string;\n '--nylas-error': string;\n '--nylas-error-pressed': string;\n '--nylas-base-0': string;\n '--nylas-base-25': string;\n '--nylas-base-50': string;\n '--nylas-base-100': string;\n '--nylas-base-200': string;\n '--nylas-base-300': string;\n '--nylas-base-400': string;\n '--nylas-base-500': string;\n '--nylas-base-600': string;\n '--nylas-base-700': string;\n '--nylas-base-800': string;\n '--nylas-base-900': string;\n '--nylas-base-950': string;\n '--nylas-color-blue-50': string;\n '--nylas-color-blue-100': string;\n '--nylas-color-blue-300': string;\n '--nylas-color-blue-500': string;\n '--nylas-color-blue-700': string;\n '--nylas-color-blue-900': string;\n '--nylas-color-red-50': string;\n '--nylas-color-red-100': string;\n '--nylas-color-red-300': string;\n '--nylas-color-red-500': string;\n '--nylas-color-red-700': string;\n '--nylas-color-red-900': string;\n '--nylas-color-green-50': string;\n '--nylas-color-green-100': string;\n '--nylas-color-green-300': string;\n '--nylas-color-green-500': string;\n '--nylas-color-green-700': string;\n '--nylas-color-green-900': string;\n '--nylas-color-yellow-50': string;\n '--nylas-color-yellow-100': string;\n '--nylas-color-yellow-300': string;\n '--nylas-color-yellow-500': string;\n '--nylas-color-yellow-700': string;\n '--nylas-color-yellow-900': string;\n '--nylas-color-purple-50': string;\n '--nylas-color-purple-100': string;\n '--nylas-color-purple-300': string;\n '--nylas-color-purple-500': string;\n '--nylas-color-purple-700': string;\n '--nylas-color-purple-900': string;\n '--nylas-color-sky-50': string;\n '--nylas-color-sky-100': string;\n '--nylas-color-sky-300': string;\n '--nylas-color-sky-500': string;\n '--nylas-color-sky-700': string;\n '--nylas-color-sky-900': string;\n '--nylas-color-black': string;\n '--nylas-color-grey-900': string;\n '--nylas-color-grey-800': string;\n '--nylas-color-grey-700': string;\n '--nylas-color-grey-600': string;\n '--nylas-color-grey-500': string;\n '--nylas-color-grey-400': string;\n '--nylas-color-grey-300': string;\n '--nylas-color-grey-200': string;\n '--nylas-color-grey-100': string;\n '--nylas-color-grey-50': string;\n '--nylas-color-white': string;\n '--nylas-font-family': string;\n '--nylas-font-size': string;\n '--nylas-border-radius': string;\n '--nylas-border-radius-2x': string;\n '--nylas-border-radius-3x': string;\n}>;\n\nexport enum NotificationType {\n Error = 'error',\n Warning = 'warning',\n Info = 'info',\n Success = 'success',\n}\n\nexport type Notification = {\n id: string;\n type: NotificationType;\n title: string;\n code?: number;\n category: string;\n description?: string;\n ttl?: number | 'none';\n};\n\nexport type BookingType = 'booking' | 'organizer-confirmation' | 'custom-confirmation';\n\nexport type AvailabilityMethod = 'max-fairness' | 'max-availability' | 'collective';\n\nexport type ConferenceProvider = 'GoogleMeetConferenceProvider' | 'MicrosoftTeamsConferenceProvider' | 'ZoomConferenceProvider' | 'OnlineMeetingProviderMicrosoftTeams';\n\nexport type ReminderMethod = 'email' | 'webhook';\n\nexport interface Rules {\n availability_method: AvailabilityMethod;\n buffer: MeetingBuffer;\n default_open_hours: OpenHours[];\n round_robin_group_id: string;\n}\n\nexport interface ConferenceDetail {\n meeting_code?: string; // zoom, GTM, microsoft teams\n password?: string; // zoom, webex\n url?: string; // zoom, webex, GTM, meet, microsoft teams\n pin?: string; // webex, meet\n phone?: string[]; // GTM, meet, microsoft teams\n}\n\nexport interface Conference {\n provider?: ConferenceProvider;\n details?: ConferenceDetail;\n autocreate?: { [key: string]: any };\n}\n\nexport interface ParticipantBooking {\n calendar_id: string;\n}\n\nexport interface Participant {\n email: string;\n name?: string;\n is_organizer?: boolean;\n availability?: ParticipantAvailability;\n booking?: ParticipantBooking;\n specific_time_availability?: SpecificTimeAvailability[];\n timezone?: string;\n}\n\nexport interface EventReminder {\n type: ReminderMethod;\n minutes_before_event: number;\n recipient?: string;\n email_subject?: string;\n}\n\nexport interface Availability {\n duration_minutes: number;\n interval_minutes?: number;\n round_to?: number;\n availability_rules?: Rules;\n}\n\nexport interface EventBooking {\n title: string;\n description?: string;\n location?: string;\n timezone?: string;\n booking_type: BookingType;\n conferencing?: Conference;\n hide_participants?: boolean;\n disable_emails?: boolean;\n reminders?: EventReminder[];\n}\n\nexport interface Appearance {\n color?: string;\n submit_button_label?: string;\n thank_you_message?: string;\n company_logo_url?: string;\n}\n\nexport interface Scheduler {\n available_days_in_future?: number;\n min_cancellation_notice: number;\n min_booking_notice?: number;\n rescheduling_url?: string;\n cancellation_url?: string;\n organizer_confirmation_url?: string;\n cancellation_policy?: string;\n hide_additional_guests?: boolean;\n hide_cancellation_options?: boolean;\n hide_rescheduling_options?: boolean;\n additional_fields?: Record<string, AdditionalFields>;\n email_template?: EmailTemplate;\n confirmation_redirect_url?: string;\n}\nexport interface AdditionalFields {\n type: string;\n required: boolean;\n order: number;\n options?: string[];\n label?: string;\n default?: string;\n}\n\nexport interface EmailTemplate {\n logo: string;\n booking_confirmed: BookingConfirmed;\n show_nylas_branding: boolean;\n organizer_locale: string;\n}\n\nexport interface BookingConfirmed {\n title: string;\n body: string;\n}\n\nexport interface Configuration {\n id: string;\n version: string;\n type?: string;\n requires_session_auth?: boolean;\n participants: Participant[];\n availability: Availability;\n event_booking: EventBooking;\n scheduler: Partial<Scheduler>;\n slug: string;\n appearance: Appearance;\n name: string;\n}\n\nexport interface GroupBooking {\n booking_type: BookingType; // Only 'booking' is supported\n disable_emails?: boolean;\n reminders?: EventReminder[];\n conferencing?: Conference;\n calendar_id: string;\n default_capacity: number;\n}\n\nexport interface GroupConfiguration {\n id: string;\n name: string;\n slug: string;\n requires_session_auth?: boolean;\n type: 'group';\n group_booking: GroupBooking;\n scheduler: Scheduler;\n appearance: Appearance;\n}\n\nexport interface Creator {\n name: string;\n email: string;\n}\nexport interface AdditionalParticipant {\n name: string;\n email: string;\n calendars: {\n id: string;\n name: string;\n object?: 'calendar';\n is_primary?: boolean;\n is_owned_by_user?: boolean;\n read_only?: boolean;\n timezone?: string;\n }[];\n}\n\nexport interface GroupEvent {\n id?: string;\n title: string;\n busy: boolean;\n participants: NylasSchedulerBookingParticipant[];\n resources: {\n name: string;\n email: string;\n }[];\n description: string;\n when: {\n start_time: number;\n end_time: number;\n start_timezone?: string;\n end_timezone?: string;\n };\n location: string;\n recurrence: string[];\n capacity: number;\n}\n\nexport type RecurrenceUpdateOption = 'this' | 'future' | 'all';\nexport type RecurrenceDeleteOption = 'this' | 'future' | 'all';\n\nexport type Snapshot = {\n busy: boolean;\n calendar_id: string;\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: {\n email: string;\n status: string;\n }[];\n resources: any[];\n read_only: boolean;\n recurrence: string[];\n reminders: {\n use_default: boolean;\n overrides: any[];\n };\n title: string;\n description?: string;\n location?: string;\n conferencing?: Conference;\n visibility: string;\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n grant_id: string;\n id: string;\n object: string;\n status: string;\n when: {\n start_timezone: string;\n end_timezone: string;\n object: string;\n start_time: number; // Unix timestamp\n end_time: number; // Unix timestamp\n };\n created_at: number; // Unix timestamp\n updated_at: number; // Unix timestamp\n};\n\nexport interface GroupEventAPIData {\n event: EventDetails;\n group_event_info?: GroupEventInfo;\n}\n\nexport type EventDetails = {\n busy: boolean;\n calendar_id: string;\n conferencing: {\n provider: ConferenceProvider;\n details: {\n meeting_code: string;\n url: string;\n pin: string;\n phone: string[];\n };\n };\n hide_participants: boolean;\n ical_uid: string;\n organizer: {\n name: string;\n email: string;\n };\n participants: Array<{\n email: string;\n status: 'yes' | 'no' | 'noreply';\n comment?: string;\n }>;\n resources: string[];\n read_only: boolean;\n reminders: {\n use_default: boolean;\n overrides: Array<{\n method?: string;\n minutes?: number;\n }>;\n };\n title: string;\n description?: string;\n location?: string;\n visibility: 'default' | 'public' | 'private';\n creator: {\n name: string;\n email: string;\n };\n html_link: string;\n master_event_id: string;\n color_id: string;\n grant_id: string;\n id: string;\n object: 'event';\n status: 'confirmed' | 'tentative' | 'cancelled';\n when: {\n start_timezone: string;\n end_timezone: string;\n object: 'timespan';\n start_time: number;\n end_time: number;\n };\n created_at: number;\n updated_at: number;\n original_start_time: number;\n};\n\nexport type GroupEventInfo = {\n event_id: string;\n calendar_id: string;\n master_id: string;\n config_id: string;\n capacity: number;\n type: 'updated_event' | 'single_event' | 'master_event';\n booked: boolean;\n finished: boolean;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n snapshot: any | null;\n snapshot_expires_at: number;\n rrule: string[] | null;\n exceptions: {\n event_id: string;\n capacity: number;\n participants: Array<{\n email: string;\n is_organizer: boolean;\n name: string;\n timezone: string;\n }>;\n }[];\n};\n\nexport type ImportGroupEventDetails = {\n event_id: string;\n calendar_id: string;\n capacity: number;\n participants: Participant[];\n organizer: {\n name: string;\n email: string;\n };\n};\n\nexport type ImportGroupEventResponse = {\n imported_events: string[];\n import_failed: {\n event_id: string;\n reason: string;\n }[];\n};\n\nexport enum ErrorCategory {\n Component = 'component',\n Api = 'api',\n Auth = 'auth',\n}\n\nexport interface ErrorDetails {\n title: string;\n message: string;\n category: ErrorCategory;\n}\n\nexport enum ComponentErrorType {\n endtime_not_in_future = 'endtime_not_in_future',\n no_booking_info = 'no_booking_info',\n no_timeslot_selected = 'no_timeslot_selected',\n no_timezone_selected = 'no_timezone_selected',\n no_booking_id = 'no_booking_id',\n no_salt = 'no_salt',\n invalid_start_time = 'invalid_start_time',\n invalid_end_time = 'invalid_end_time',\n invalid_timezone = 'invalid_timezone',\n no_config_id = 'no_config_id',\n}\n\nexport interface KeyPoint {\n time: number;\n text: string;\n active?: boolean;\n}\n"]}
|