@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.
Files changed (164) hide show
  1. package/dist/cdn/nylas-scheduler-editor/nylas-scheduler-editor.es.js +212 -212
  2. package/dist/cdn/nylas-scheduling/nylas-scheduling.es.js +1044 -1044
  3. package/dist/cjs/{abstract-provider-b37458c4.js → abstract-provider-85a616a9.js} +2 -2
  4. package/dist/cjs/{abstract-provider-b37458c4.js.map → abstract-provider-85a616a9.js.map} +1 -1
  5. package/dist/cjs/calendar-agenda-fill-icon_37.cjs.entry.js +55 -55
  6. package/dist/cjs/calendar-agenda-fill-icon_37.cjs.entry.js.map +1 -1
  7. package/dist/cjs/checkbox-group_4.cjs.entry.js +3 -3
  8. package/dist/cjs/checkmark-icon_15.cjs.entry.js +2 -2
  9. package/dist/cjs/{customParseFormat-61a3a302.js → customParseFormat-dc3b45aa.js} +2 -2
  10. package/dist/cjs/{customParseFormat-61a3a302.js.map → customParseFormat-dc3b45aa.js.map} +1 -1
  11. package/dist/cjs/{feedbackSync-2c4d37fe.js → feedbackSync-eaa01d21.js} +2 -2
  12. package/dist/cjs/feedbackSync-eaa01d21.js.map +1 -0
  13. package/dist/cjs/google-logo-icon_6.cjs.entry.js +18 -18
  14. package/dist/cjs/google-logo-icon_6.cjs.entry.js.map +1 -1
  15. package/dist/cjs/index.cjs.js +2 -2
  16. package/dist/cjs/{index.es-e4fc6d92.js → index.es-a962dedb.js} +2 -2
  17. package/dist/cjs/{index.es-e4fc6d92.js.map → index.es-a962dedb.js.map} +1 -1
  18. package/dist/cjs/input-component.cjs.entry.js +1 -1
  19. package/dist/cjs/input-dropdown_2.cjs.entry.js +1 -1
  20. package/dist/cjs/loader.cjs.js +1 -1
  21. package/dist/cjs/multi-select-dropdown.cjs.entry.js +1 -1
  22. package/dist/cjs/{nylas-api-request-5b2f7ec0.js → nylas-api-request-d263af93.js} +2 -2
  23. package/dist/cjs/{nylas-api-request-5b2f7ec0.js.map → nylas-api-request-d263af93.js.map} +1 -1
  24. package/dist/cjs/nylas-booked-event-card_11.cjs.entry.js +2 -2
  25. package/dist/cjs/nylas-date-component_2.cjs.entry.js +2 -2
  26. package/dist/cjs/nylas-form-card.cjs.entry.js +2 -2
  27. package/dist/cjs/nylas-notification_2.cjs.entry.js +1 -1
  28. package/dist/cjs/nylas-scheduler-editor.cjs.entry.js +6 -6
  29. package/dist/cjs/nylas-scheduling.cjs.entry.js +8 -8
  30. package/dist/cjs/nylas-scheduling.cjs.entry.js.map +1 -1
  31. package/dist/cjs/nylas-web-elements.cjs.js +1 -1
  32. package/dist/cjs/{register-component-8a9c40ee.js → register-component-2eefbf66.js} +2 -2
  33. package/dist/cjs/{register-component-8a9c40ee.js.map → register-component-2eefbf66.js.map} +1 -1
  34. package/dist/cjs/textarea-component.cjs.entry.js +1 -1
  35. package/dist/cjs/{utils-c923f1a8.js → utils-e37da320.js} +113 -113
  36. package/dist/cjs/{utils-c923f1a8.js.map → utils-e37da320.js.map} +1 -1
  37. package/dist/collection/collection-manifest.json +1 -1
  38. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js +1 -1
  39. package/dist/collection/components/scheduler/nylas-scheduling/nylas-scheduling.js.map +1 -1
  40. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js +10 -10
  41. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.js.map +1 -1
  42. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/test/nylas-editor-tabs.spec.js +1 -1
  43. package/dist/collection/components/scheduler-editor/nylas-editor-tabs/test/nylas-editor-tabs.spec.js.map +1 -1
  44. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js +18 -18
  45. package/dist/collection/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.js.map +1 -1
  46. 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
  47. 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
  48. package/dist/collection/components/scheduler-editor/nylas-specific-time-availability-picker/nylas-specific-time-availability-picker.js.map +1 -0
  49. 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
  50. package/dist/collection/components/scheduler-editor/nylas-specific-time-availability-picker/test/nylas-specific-time-availability-picker.spec.js.map +1 -0
  51. package/dist/collection/types/index.js.map +1 -1
  52. package/dist/components/index3.js.map +1 -1
  53. package/dist/components/nylas-editor-tabs-group2.js +2 -2
  54. package/dist/components/nylas-editor-tabs2.js +15 -15
  55. package/dist/components/nylas-editor-tabs2.js.map +1 -1
  56. package/dist/components/nylas-participants-custom-availability2.js +21 -21
  57. package/dist/components/nylas-participants-custom-availability2.js.map +1 -1
  58. package/dist/components/nylas-scheduler-editor.js +5 -5
  59. package/dist/components/nylas-scheduling.js +4 -4
  60. package/dist/components/nylas-scheduling.js.map +1 -1
  61. package/dist/components/nylas-specific-time-availability-picker.d.ts +11 -0
  62. package/dist/components/nylas-specific-time-availability-picker.js +8 -0
  63. package/dist/components/nylas-specific-time-availability-picker.js.map +1 -0
  64. package/dist/components/{nylas-specific-date-availability-picker2.js → nylas-specific-time-availability-picker2.js} +41 -41
  65. package/dist/components/nylas-specific-time-availability-picker2.js.map +1 -0
  66. package/dist/components/utils.js +112 -112
  67. package/dist/esm/{abstract-provider-45ada3b4.js → abstract-provider-a502b54d.js} +2 -2
  68. package/dist/esm/{abstract-provider-45ada3b4.js.map → abstract-provider-a502b54d.js.map} +1 -1
  69. package/dist/esm/calendar-agenda-fill-icon_37.entry.js +55 -55
  70. package/dist/esm/calendar-agenda-fill-icon_37.entry.js.map +1 -1
  71. package/dist/esm/checkbox-group_4.entry.js +3 -3
  72. package/dist/esm/checkmark-icon_15.entry.js +2 -2
  73. package/dist/esm/{customParseFormat-eeec04f5.js → customParseFormat-b5d95b34.js} +2 -2
  74. package/dist/esm/{customParseFormat-eeec04f5.js.map → customParseFormat-b5d95b34.js.map} +1 -1
  75. package/dist/esm/{feedbackSync-0ebd0eda.js → feedbackSync-92220b42.js} +2 -2
  76. package/dist/esm/feedbackSync-92220b42.js.map +1 -0
  77. package/dist/esm/google-logo-icon_6.entry.js +18 -18
  78. package/dist/esm/google-logo-icon_6.entry.js.map +1 -1
  79. package/dist/esm/{index.es-57d4a08f.js → index.es-488bc919.js} +2 -2
  80. package/dist/esm/{index.es-57d4a08f.js.map → index.es-488bc919.js.map} +1 -1
  81. package/dist/esm/index.js +2 -2
  82. package/dist/esm/input-component.entry.js +1 -1
  83. package/dist/esm/input-dropdown_2.entry.js +1 -1
  84. package/dist/esm/loader.js +1 -1
  85. package/dist/esm/multi-select-dropdown.entry.js +1 -1
  86. package/dist/esm/{nylas-api-request-ad1909c6.js → nylas-api-request-9f7ac6c5.js} +2 -2
  87. package/dist/esm/{nylas-api-request-ad1909c6.js.map → nylas-api-request-9f7ac6c5.js.map} +1 -1
  88. package/dist/esm/nylas-booked-event-card_11.entry.js +2 -2
  89. package/dist/esm/nylas-date-component_2.entry.js +2 -2
  90. package/dist/esm/nylas-form-card.entry.js +2 -2
  91. package/dist/esm/nylas-notification_2.entry.js +1 -1
  92. package/dist/esm/nylas-scheduler-editor.entry.js +6 -6
  93. package/dist/esm/nylas-scheduling.entry.js +8 -8
  94. package/dist/esm/nylas-scheduling.entry.js.map +1 -1
  95. package/dist/esm/nylas-web-elements.js +1 -1
  96. package/dist/esm/{register-component-0aad9e3d.js → register-component-3acd57e7.js} +2 -2
  97. package/dist/esm/{register-component-0aad9e3d.js.map → register-component-3acd57e7.js.map} +1 -1
  98. package/dist/esm/textarea-component.entry.js +1 -1
  99. package/dist/esm/{utils-d3c0b941.js → utils-31933f5d.js} +113 -113
  100. package/dist/esm/{utils-d3c0b941.js.map → utils-31933f5d.js.map} +1 -1
  101. package/dist/nylas-web-elements/index.esm.js +1 -1
  102. package/dist/nylas-web-elements/nylas-web-elements.esm.js +1 -1
  103. package/dist/nylas-web-elements/nylas-web-elements.esm.js.map +1 -1
  104. package/dist/nylas-web-elements/{p-3216af1e.entry.js → p-20f50696.entry.js} +2 -2
  105. package/dist/nylas-web-elements/p-341f1a4c.entry.js +2 -0
  106. package/dist/nylas-web-elements/p-341f1a4c.entry.js.map +1 -0
  107. package/dist/nylas-web-elements/{p-1591deba.js → p-34c9fc7d.js} +2 -2
  108. package/dist/nylas-web-elements/{p-38fa873f.js → p-3524dab1.js} +2 -2
  109. package/dist/nylas-web-elements/p-3524dab1.js.map +1 -0
  110. package/dist/nylas-web-elements/{p-d45012f2.js → p-438d4542.js} +2 -2
  111. package/dist/nylas-web-elements/{p-21ab4e47.entry.js → p-536c5ef3.entry.js} +2 -2
  112. package/dist/nylas-web-elements/{p-a4678661.entry.js → p-5a6c2efd.entry.js} +2 -2
  113. package/dist/nylas-web-elements/p-66a89e65.js +14 -0
  114. package/dist/nylas-web-elements/{p-17c5fb16.js.map → p-66a89e65.js.map} +1 -1
  115. package/dist/nylas-web-elements/{p-88e68e14.entry.js → p-6adb19cf.entry.js} +2 -2
  116. package/dist/nylas-web-elements/{p-8937a53f.entry.js → p-6bda61cf.entry.js} +3 -3
  117. package/dist/nylas-web-elements/p-6bda61cf.entry.js.map +1 -0
  118. package/dist/nylas-web-elements/{p-30d92734.entry.js → p-7c02e476.entry.js} +2 -2
  119. package/dist/nylas-web-elements/{p-8072aa07.js → p-803a1695.js} +2 -2
  120. package/dist/nylas-web-elements/{p-186bbd43.entry.js → p-81925b89.entry.js} +2 -2
  121. package/dist/nylas-web-elements/{p-186bbd43.entry.js.map → p-81925b89.entry.js.map} +1 -1
  122. package/dist/nylas-web-elements/{p-855fe5b3.entry.js → p-83d2ff21.entry.js} +2 -2
  123. package/dist/nylas-web-elements/{p-f83aa456.entry.js → p-8673dcf1.entry.js} +2 -2
  124. package/dist/nylas-web-elements/{p-24c390bd.js → p-86e217f4.js} +2 -2
  125. package/dist/nylas-web-elements/{p-d0f51520.entry.js → p-8d5efa5e.entry.js} +2 -2
  126. package/dist/nylas-web-elements/{p-0271cef3.entry.js → p-d7323440.entry.js} +3 -3
  127. package/dist/nylas-web-elements/{p-59ff0231.entry.js → p-da25d877.entry.js} +2 -2
  128. package/dist/nylas-web-elements/{p-f0e1688e.js → p-e42db60f.js} +2 -2
  129. package/dist/nylas-web-elements/{p-c11e1016.entry.js → p-ff122d1e.entry.js} +2 -2
  130. package/dist/types/components/scheduler-editor/nylas-editor-tabs/nylas-editor-tabs.d.ts +5 -5
  131. package/dist/types/components/scheduler-editor/nylas-participants-custom-availability/nylas-participants-custom-availability.d.ts +3 -3
  132. 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
  133. package/dist/types/components.d.ts +19 -19
  134. package/dist/types/types/index.d.ts +2 -2
  135. package/package.json +2 -2
  136. package/dist/cjs/feedbackSync-2c4d37fe.js.map +0 -1
  137. package/dist/collection/components/scheduler-editor/nylas-specific-date-availability-picker/nylas-specific-date-availability-picker.js.map +0 -1
  138. package/dist/collection/components/scheduler-editor/nylas-specific-date-availability-picker/test/nylas-specific-date-availability-picker.spec.js.map +0 -1
  139. package/dist/components/nylas-specific-date-availability-picker.d.ts +0 -11
  140. package/dist/components/nylas-specific-date-availability-picker.js +0 -8
  141. package/dist/components/nylas-specific-date-availability-picker.js.map +0 -1
  142. package/dist/components/nylas-specific-date-availability-picker2.js.map +0 -1
  143. package/dist/esm/feedbackSync-0ebd0eda.js.map +0 -1
  144. package/dist/nylas-web-elements/p-17c5fb16.js +0 -14
  145. package/dist/nylas-web-elements/p-38fa873f.js.map +0 -1
  146. package/dist/nylas-web-elements/p-3ddcb355.entry.js +0 -2
  147. package/dist/nylas-web-elements/p-3ddcb355.entry.js.map +0 -1
  148. package/dist/nylas-web-elements/p-8937a53f.entry.js.map +0 -1
  149. /package/dist/nylas-web-elements/{p-3216af1e.entry.js.map → p-20f50696.entry.js.map} +0 -0
  150. /package/dist/nylas-web-elements/{p-1591deba.js.map → p-34c9fc7d.js.map} +0 -0
  151. /package/dist/nylas-web-elements/{p-d45012f2.js.map → p-438d4542.js.map} +0 -0
  152. /package/dist/nylas-web-elements/{p-21ab4e47.entry.js.map → p-536c5ef3.entry.js.map} +0 -0
  153. /package/dist/nylas-web-elements/{p-a4678661.entry.js.map → p-5a6c2efd.entry.js.map} +0 -0
  154. /package/dist/nylas-web-elements/{p-88e68e14.entry.js.map → p-6adb19cf.entry.js.map} +0 -0
  155. /package/dist/nylas-web-elements/{p-30d92734.entry.js.map → p-7c02e476.entry.js.map} +0 -0
  156. /package/dist/nylas-web-elements/{p-8072aa07.js.map → p-803a1695.js.map} +0 -0
  157. /package/dist/nylas-web-elements/{p-855fe5b3.entry.js.map → p-83d2ff21.entry.js.map} +0 -0
  158. /package/dist/nylas-web-elements/{p-f83aa456.entry.js.map → p-8673dcf1.entry.js.map} +0 -0
  159. /package/dist/nylas-web-elements/{p-24c390bd.js.map → p-86e217f4.js.map} +0 -0
  160. /package/dist/nylas-web-elements/{p-d0f51520.entry.js.map → p-8d5efa5e.entry.js.map} +0 -0
  161. /package/dist/nylas-web-elements/{p-0271cef3.entry.js.map → p-d7323440.entry.js.map} +0 -0
  162. /package/dist/nylas-web-elements/{p-59ff0231.entry.js.map → p-da25d877.entry.js.map} +0 -0
  163. /package/dist/nylas-web-elements/{p-f0e1688e.js.map → p-e42db60f.js.map} +0 -0
  164. /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 { NylasSpecificDateAvailabilityPicker } from "../nylas-specific-date-availability-picker";
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-date-availability-picker', () => {
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: [NylasSpecificDateAvailabilityPicker],
25
+ components: [NylasSpecificTimeAvailabilityPicker],
26
26
  template: () => {
27
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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 specificDateOpenHours', async () => {
33
- const specificDateOpenHours = [
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: [NylasSpecificDateAvailabilityPicker],
46
+ components: [NylasSpecificTimeAvailabilityPicker],
47
47
  template: () => {
48
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability", specificDateOpenHours: specificDateOpenHours })));
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: [NylasSpecificDateAvailabilityPicker],
56
+ components: [NylasSpecificTimeAvailabilityPicker],
57
57
  template: () => {
58
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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: [NylasSpecificDateAvailabilityPicker, ButtonComponent],
69
+ components: [NylasSpecificTimeAvailabilityPicker, ButtonComponent],
70
70
  template: () => {
71
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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: [NylasSpecificDateAvailabilityPicker],
85
+ components: [NylasSpecificTimeAvailabilityPicker],
86
86
  template: () => {
87
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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.removeSpecificDateOpenHour(entryId);
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: [NylasSpecificDateAvailabilityPicker],
101
+ components: [NylasSpecificTimeAvailabilityPicker],
102
102
  template: () => {
103
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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: [NylasSpecificDateAvailabilityPicker, TimeInput],
120
+ components: [NylasSpecificTimeAvailabilityPicker, TimeInput],
121
121
  template: () => {
122
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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: [NylasSpecificDateAvailabilityPicker],
138
+ components: [NylasSpecificTimeAvailabilityPicker],
139
139
  template: () => {
140
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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: [NylasSpecificDateAvailabilityPicker],
159
+ components: [NylasSpecificTimeAvailabilityPicker],
160
160
  template: () => {
161
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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: [NylasSpecificDateAvailabilityPicker],
183
+ components: [NylasSpecificTimeAvailabilityPicker],
184
184
  template: () => {
185
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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: [NylasSpecificDateAvailabilityPicker],
200
+ components: [NylasSpecificTimeAvailabilityPicker],
201
201
  template: () => {
202
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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-date-availability');
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: [NylasSpecificDateAvailabilityPicker],
225
+ components: [NylasSpecificTimeAvailabilityPicker],
226
226
  template: () => {
227
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability" })));
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.addSpecificDateOpenHour();
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 specificDateOpenHours from props correctly', async () => {
246
- const specificDateOpenHours = [
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: [NylasSpecificDateAvailabilityPicker],
259
+ components: [NylasSpecificTimeAvailabilityPicker],
260
260
  template: () => {
261
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability", specificDateOpenHours: specificDateOpenHours })));
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: [NylasSpecificDateAvailabilityPicker],
276
+ components: [NylasSpecificTimeAvailabilityPicker],
277
277
  template: () => {
278
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "custom-name" })));
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: [NylasSpecificDateAvailabilityPicker],
286
+ components: [NylasSpecificTimeAvailabilityPicker],
287
287
  template: () => {
288
- return (h("form", { id: "specific-date-availability-picker" }, h("nylas-specific-date-availability-picker", { name: "specific-date-availability", selectedLanguage: LANGUAGE_CODE.en })));
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-date-availability-picker.spec.js.map
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":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,mCAAmC,EAAE,MAAM,4CAA4C,CAAC;AACjG,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,yDAAyD,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,0DAA0D,CAAC;AAE3F,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;IACvD,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,YAAY,GAAG,IAAI,CAAC;QAE1B,MAAM,CAAC,IAAI,GAAG;YACZ,GAAG,YAAY;YACf,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC;gBAClD,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;oBACtB,QAAQ,EAAE,kBAAkB;iBAC7B,CAAC;gBACF,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;aAC9B,CAAC,CAAQ;SACX,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QACvB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,yBAAyB,GAAG;YAChC;gBACE,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,OAAO;gBACd,GAAG,EAAE,OAAO;aACb;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,OAAO;gBACd,GAAG,EAAE,OAAO;aACb;SACF,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CACE,IAAI,EAAC,4BAA4B,EACjC,yBAAyB,EAAE,yBAAyB,GACX,CACtC,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QACxE,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,EAAE,eAAe,CAAC;YAClE,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAGnD,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAGnD,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAGjE,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAGhE,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,EAAE,SAAS,CAAC;YAC5D,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;QACrD,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC;QACnD,OAAO,CAAC,mBAAmB,GAAG,CAAC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAG/D,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAGlD,MAAM,eAAe,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE;YACpD,MAAM,EAAE;gBACN,GAAG,EAAE,GAAG,OAAO,QAAQ;gBACvB,KAAK,EAAE,SAAS;aACjB;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAC1C,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAGlD,MAAM,gBAAgB,GAAG,IAAI,WAAW,CAAC,uBAAuB,EAAE;YAChE,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ,OAAO,EAAE;gBACvB,KAAK,EAAE,YAAY;gBACnB,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAG5B,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,gBAAgB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,oCAAoC,EAAE,CAAC;QAC/E,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC5E,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAEzE,IAAI,YAAiB,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACnD,YAAY,GAAG,IAAI,CAAC;YACpB,OAAO,IAAI,WAAW,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,QAAe,CAAC;QAG5C,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;QACnD,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAE3B,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAE7D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,GAA2C,CAChH,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,2BAA2B,EAAE,CAAC;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC;QAEnD,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAG3B,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAClC,OAAO,CAAC,YAAY,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5C,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAE3B,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,yBAAyB,GAAG;YAChC;gBACE,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,OAAO;gBACd,GAAG,EAAE,OAAO;aACb;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,KAAK,EAAE,OAAO;gBACd,GAAG,EAAE,OAAO;aACb;SACF,CAAC;QAEF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CACE,IAAI,EAAC,4BAA4B,EACjC,yBAAyB,EAAE,yBAAyB,GACX,CACtC,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QACzE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEjE,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/D,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,aAAa,GAA2C,CACjG,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC7B,UAAU,EAAE,CAAC,mCAAmC,CAAC;YACjD,QAAQ,EAAE,GAAG,EAAE;gBACb,OAAO,CACL,YAAM,EAAE,EAAC,mCAAmC;oBAC1C,+CAAyC,IAAI,EAAC,4BAA4B,EAAC,gBAAgB,EAAE,aAAa,CAAC,EAAE,GAA4C,CACpJ,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,IAAI,CAAC,YAAmD,CAAC;QAGzE,OAAO,CAAC,gBAAgB,GAAG,aAAa,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,8BAA8B,CAAC,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC,CAAC;QAC3E,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","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"]}