@bigbinary/neeto-molecules 4.1.0-beta1 → 4.1.1

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 (298) hide show
  1. package/dist/AuditLogs.js +193 -63
  2. package/dist/AuditLogs.js.map +1 -1
  3. package/dist/Breadcrumbs.js +40 -24
  4. package/dist/Breadcrumbs.js.map +1 -1
  5. package/dist/BrowserSupport.js +17 -8
  6. package/dist/BrowserSupport.js.map +1 -1
  7. package/dist/Builder.js +16 -23
  8. package/dist/Builder.js.map +1 -1
  9. package/dist/CalendarView.js +35 -11
  10. package/dist/CalendarView.js.map +1 -1
  11. package/dist/CardLayout.js +0 -1
  12. package/dist/CardLayout.js.map +1 -1
  13. package/dist/{Chevron-Dtxc2piW.js → Chevron-DOz710Ei.js} +23 -20
  14. package/dist/Chevron-DOz710Ei.js.map +1 -0
  15. package/dist/Codeblock.js +3 -5
  16. package/dist/Codeblock.js.map +1 -1
  17. package/dist/{Columns-CsOYfWFt.js → Columns-D51hN86M.js} +8 -9
  18. package/dist/Columns-D51hN86M.js.map +1 -0
  19. package/dist/Columns.js +1 -1
  20. package/dist/ConfigurePageSidebar.js +3 -3
  21. package/dist/ConfigurePageSidebar.js.map +1 -1
  22. package/dist/ConfirmationModal.js +2 -2
  23. package/dist/ConfirmationModal.js.map +1 -1
  24. package/dist/CopyToClipboardButton.js +12 -7
  25. package/dist/CopyToClipboardButton.js.map +1 -1
  26. package/dist/DeleteArchiveModal.js +5 -7
  27. package/dist/DeleteArchiveModal.js.map +1 -1
  28. package/dist/DeviceIncompatibilityMessage.js +0 -1
  29. package/dist/DeviceIncompatibilityMessage.js.map +1 -1
  30. package/dist/DocumentEditor.js +3 -3
  31. package/dist/DocumentEditor.js.map +1 -1
  32. package/dist/DynamicVariables.js +5 -7
  33. package/dist/DynamicVariables.js.map +1 -1
  34. package/dist/EmailForm.js +107 -124
  35. package/dist/EmailForm.js.map +1 -1
  36. package/dist/EmailPreview.js +90 -73
  37. package/dist/EmailPreview.js.map +1 -1
  38. package/dist/EmojiPicker.js +6 -1
  39. package/dist/EmojiPicker.js.map +1 -1
  40. package/dist/EmojiReactions.js +1 -1
  41. package/dist/EmojiReactions.js.map +1 -1
  42. package/dist/ErrorPage.js +7 -5
  43. package/dist/ErrorPage.js.map +1 -1
  44. package/dist/FileUpload.js +14 -14
  45. package/dist/FileUpload.js.map +1 -1
  46. package/dist/FinderModal.js +61 -74
  47. package/dist/FinderModal.js.map +1 -1
  48. package/dist/FloatingActionMenu.js +233 -190
  49. package/dist/FloatingActionMenu.js.map +1 -1
  50. package/dist/Header.js +2 -4
  51. package/dist/Header.js.map +1 -1
  52. package/dist/HelpPopover.js +2 -6
  53. package/dist/HelpPopover.js.map +1 -1
  54. package/dist/IconPicker.js +2 -3
  55. package/dist/IconPicker.js.map +1 -1
  56. package/dist/InlineInput.js +6 -2
  57. package/dist/InlineInput.js.map +1 -1
  58. package/dist/Insights.js +3 -6
  59. package/dist/Insights.js.map +1 -1
  60. package/dist/IntegrationCard.js +10 -12
  61. package/dist/IntegrationCard.js.map +1 -1
  62. package/dist/IpRestriction.js +11 -13
  63. package/dist/IpRestriction.js.map +1 -1
  64. package/dist/KeyboardShortcuts.js +3 -4
  65. package/dist/KeyboardShortcuts.js.map +1 -1
  66. package/dist/LoginPage.js +4 -9
  67. package/dist/LoginPage.js.map +1 -1
  68. package/dist/MadeWith.js +1 -2
  69. package/dist/MadeWith.js.map +1 -1
  70. package/dist/MenuBar.js +10 -8
  71. package/dist/MenuBar.js.map +1 -1
  72. package/dist/Metadata.js +5 -8
  73. package/dist/Metadata.js.map +1 -1
  74. package/dist/MobilePreviewHeader.js +1 -1
  75. package/dist/MobilePreviewHeader.js.map +1 -1
  76. package/dist/MoreDropdown.js +1 -2
  77. package/dist/MoreDropdown.js.map +1 -1
  78. package/dist/NavigationHeader.js +4 -8
  79. package/dist/NavigationHeader.js.map +1 -1
  80. package/dist/NeetoWidget.js +2 -3
  81. package/dist/NeetoWidget.js.map +1 -1
  82. package/dist/Onboarding.js +2 -10
  83. package/dist/Onboarding.js.map +1 -1
  84. package/dist/OptionFields.js +6 -22
  85. package/dist/OptionFields.js.map +1 -1
  86. package/dist/PageLoader.js +1 -1
  87. package/dist/PageLoader.js.map +1 -1
  88. package/dist/PhoneNumber.js +0 -1
  89. package/dist/PhoneNumber.js.map +1 -1
  90. package/dist/ProductEmbed.js +35 -36
  91. package/dist/ProductEmbed.js.map +1 -1
  92. package/dist/PublishBlock.js +11 -22
  93. package/dist/PublishBlock.js.map +1 -1
  94. package/dist/PublishYourItem.js +2 -2
  95. package/dist/PublishYourItem.js.map +1 -1
  96. package/dist/Rename.js +18 -17
  97. package/dist/Rename.js.map +1 -1
  98. package/dist/Schedule.js +120 -69
  99. package/dist/Schedule.js.map +1 -1
  100. package/dist/SendToFields.js +31 -23
  101. package/dist/SendToFields.js.map +1 -1
  102. package/dist/SessionEnvironment.js +2 -8
  103. package/dist/SessionEnvironment.js.map +1 -1
  104. package/dist/Settings.js +8 -9
  105. package/dist/Settings.js.map +1 -1
  106. package/dist/ShareRecordingPane.js +69 -52
  107. package/dist/ShareRecordingPane.js.map +1 -1
  108. package/dist/ShareViaEmail.js +6 -9
  109. package/dist/ShareViaEmail.js.map +1 -1
  110. package/dist/ShareViaLink.js +6 -22
  111. package/dist/ShareViaLink.js.map +1 -1
  112. package/dist/Sidebar.js +24 -20
  113. package/dist/Sidebar.js.map +1 -1
  114. package/dist/StatusDropdown.js +7 -10
  115. package/dist/StatusDropdown.js.map +1 -1
  116. package/dist/StickyRibbonsContainer.js +3 -3
  117. package/dist/StickyRibbonsContainer.js.map +1 -1
  118. package/dist/SubHeader.js +12 -15
  119. package/dist/SubHeader.js.map +1 -1
  120. package/dist/Taxonomy.js +4 -6
  121. package/dist/Taxonomy.js.map +1 -1
  122. package/dist/ToggleFeatureCard.js +18 -24
  123. package/dist/ToggleFeatureCard.js.map +1 -1
  124. package/dist/VersionHistory.js +1 -3
  125. package/dist/VersionHistory.js.map +1 -1
  126. package/dist/cjs/AuditLogs.js +190 -60
  127. package/dist/cjs/AuditLogs.js.map +1 -1
  128. package/dist/cjs/Breadcrumbs.js +40 -24
  129. package/dist/cjs/Breadcrumbs.js.map +1 -1
  130. package/dist/cjs/BrowserSupport.js +17 -8
  131. package/dist/cjs/BrowserSupport.js.map +1 -1
  132. package/dist/cjs/Builder.js +16 -23
  133. package/dist/cjs/Builder.js.map +1 -1
  134. package/dist/cjs/CalendarView.js +35 -11
  135. package/dist/cjs/CalendarView.js.map +1 -1
  136. package/dist/cjs/CardLayout.js +0 -1
  137. package/dist/cjs/CardLayout.js.map +1 -1
  138. package/dist/cjs/{Chevron-DzdbGPJI.js → Chevron-brQURuT5.js} +23 -20
  139. package/dist/cjs/Chevron-brQURuT5.js.map +1 -0
  140. package/dist/cjs/Codeblock.js +3 -5
  141. package/dist/cjs/Codeblock.js.map +1 -1
  142. package/dist/cjs/{Columns-DHPNrFgq.js → Columns-7xltEL2z.js} +8 -9
  143. package/dist/cjs/Columns-7xltEL2z.js.map +1 -0
  144. package/dist/cjs/Columns.js +1 -1
  145. package/dist/cjs/ConfigurePageSidebar.js +3 -3
  146. package/dist/cjs/ConfigurePageSidebar.js.map +1 -1
  147. package/dist/cjs/ConfirmationModal.js +2 -2
  148. package/dist/cjs/ConfirmationModal.js.map +1 -1
  149. package/dist/cjs/CopyToClipboardButton.js +11 -6
  150. package/dist/cjs/CopyToClipboardButton.js.map +1 -1
  151. package/dist/cjs/DeleteArchiveModal.js +5 -7
  152. package/dist/cjs/DeleteArchiveModal.js.map +1 -1
  153. package/dist/cjs/DeviceIncompatibilityMessage.js +0 -1
  154. package/dist/cjs/DeviceIncompatibilityMessage.js.map +1 -1
  155. package/dist/cjs/DocumentEditor.js +3 -3
  156. package/dist/cjs/DocumentEditor.js.map +1 -1
  157. package/dist/cjs/DynamicVariables.js +5 -7
  158. package/dist/cjs/DynamicVariables.js.map +1 -1
  159. package/dist/cjs/EmailForm.js +105 -122
  160. package/dist/cjs/EmailForm.js.map +1 -1
  161. package/dist/cjs/EmailPreview.js +108 -73
  162. package/dist/cjs/EmailPreview.js.map +1 -1
  163. package/dist/cjs/EmojiPicker.js +6 -1
  164. package/dist/cjs/EmojiPicker.js.map +1 -1
  165. package/dist/cjs/EmojiReactions.js +1 -1
  166. package/dist/cjs/EmojiReactions.js.map +1 -1
  167. package/dist/cjs/ErrorPage.js +7 -5
  168. package/dist/cjs/ErrorPage.js.map +1 -1
  169. package/dist/cjs/FileUpload.js +13 -13
  170. package/dist/cjs/FileUpload.js.map +1 -1
  171. package/dist/cjs/FinderModal.js +59 -72
  172. package/dist/cjs/FinderModal.js.map +1 -1
  173. package/dist/cjs/FloatingActionMenu.js +232 -189
  174. package/dist/cjs/FloatingActionMenu.js.map +1 -1
  175. package/dist/cjs/Header.js +2 -4
  176. package/dist/cjs/Header.js.map +1 -1
  177. package/dist/cjs/HelpPopover.js +2 -6
  178. package/dist/cjs/HelpPopover.js.map +1 -1
  179. package/dist/cjs/IconPicker.js +2 -3
  180. package/dist/cjs/IconPicker.js.map +1 -1
  181. package/dist/cjs/InlineInput.js +6 -2
  182. package/dist/cjs/InlineInput.js.map +1 -1
  183. package/dist/cjs/Insights.js +3 -6
  184. package/dist/cjs/Insights.js.map +1 -1
  185. package/dist/cjs/IntegrationCard.js +9 -11
  186. package/dist/cjs/IntegrationCard.js.map +1 -1
  187. package/dist/cjs/IpRestriction.js +11 -13
  188. package/dist/cjs/IpRestriction.js.map +1 -1
  189. package/dist/cjs/KeyboardShortcuts.js +3 -4
  190. package/dist/cjs/KeyboardShortcuts.js.map +1 -1
  191. package/dist/cjs/LoginPage.js +4 -9
  192. package/dist/cjs/LoginPage.js.map +1 -1
  193. package/dist/cjs/MadeWith.js +1 -2
  194. package/dist/cjs/MadeWith.js.map +1 -1
  195. package/dist/cjs/MenuBar.js +10 -8
  196. package/dist/cjs/MenuBar.js.map +1 -1
  197. package/dist/cjs/Metadata.js +5 -8
  198. package/dist/cjs/Metadata.js.map +1 -1
  199. package/dist/cjs/MobilePreviewHeader.js +1 -1
  200. package/dist/cjs/MobilePreviewHeader.js.map +1 -1
  201. package/dist/cjs/MoreDropdown.js +1 -2
  202. package/dist/cjs/MoreDropdown.js.map +1 -1
  203. package/dist/cjs/NavigationHeader.js +4 -8
  204. package/dist/cjs/NavigationHeader.js.map +1 -1
  205. package/dist/cjs/NeetoWidget.js +2 -3
  206. package/dist/cjs/NeetoWidget.js.map +1 -1
  207. package/dist/cjs/Onboarding.js +2 -10
  208. package/dist/cjs/Onboarding.js.map +1 -1
  209. package/dist/cjs/OptionFields.js +6 -22
  210. package/dist/cjs/OptionFields.js.map +1 -1
  211. package/dist/cjs/PageLoader.js +1 -1
  212. package/dist/cjs/PageLoader.js.map +1 -1
  213. package/dist/cjs/PhoneNumber.js +0 -1
  214. package/dist/cjs/PhoneNumber.js.map +1 -1
  215. package/dist/cjs/ProductEmbed.js +35 -36
  216. package/dist/cjs/ProductEmbed.js.map +1 -1
  217. package/dist/cjs/PublishBlock.js +11 -22
  218. package/dist/cjs/PublishBlock.js.map +1 -1
  219. package/dist/cjs/PublishYourItem.js +2 -2
  220. package/dist/cjs/PublishYourItem.js.map +1 -1
  221. package/dist/cjs/Rename.js +18 -17
  222. package/dist/cjs/Rename.js.map +1 -1
  223. package/dist/cjs/Schedule.js +119 -68
  224. package/dist/cjs/Schedule.js.map +1 -1
  225. package/dist/cjs/SendToFields.js +31 -23
  226. package/dist/cjs/SendToFields.js.map +1 -1
  227. package/dist/cjs/SessionEnvironment.js +2 -8
  228. package/dist/cjs/SessionEnvironment.js.map +1 -1
  229. package/dist/cjs/Settings.js +8 -9
  230. package/dist/cjs/Settings.js.map +1 -1
  231. package/dist/cjs/ShareRecordingPane.js +68 -51
  232. package/dist/cjs/ShareRecordingPane.js.map +1 -1
  233. package/dist/cjs/ShareViaEmail.js +6 -9
  234. package/dist/cjs/ShareViaEmail.js.map +1 -1
  235. package/dist/cjs/ShareViaLink.js +6 -22
  236. package/dist/cjs/ShareViaLink.js.map +1 -1
  237. package/dist/cjs/Sidebar.js +24 -20
  238. package/dist/cjs/Sidebar.js.map +1 -1
  239. package/dist/cjs/StatusDropdown.js +6 -9
  240. package/dist/cjs/StatusDropdown.js.map +1 -1
  241. package/dist/cjs/StickyRibbonsContainer.js +3 -3
  242. package/dist/cjs/StickyRibbonsContainer.js.map +1 -1
  243. package/dist/cjs/SubHeader.js +12 -15
  244. package/dist/cjs/SubHeader.js.map +1 -1
  245. package/dist/cjs/Taxonomy.js +4 -6
  246. package/dist/cjs/Taxonomy.js.map +1 -1
  247. package/dist/cjs/ToggleFeatureCard.js +17 -23
  248. package/dist/cjs/ToggleFeatureCard.js.map +1 -1
  249. package/dist/cjs/VersionHistory.js +1 -3
  250. package/dist/cjs/VersionHistory.js.map +1 -1
  251. package/package.json +5 -5
  252. package/src/translations/ar.json +52 -14
  253. package/src/translations/bg.json +52 -14
  254. package/src/translations/ca.json +53 -15
  255. package/src/translations/cs.json +52 -14
  256. package/src/translations/da.json +52 -14
  257. package/src/translations/de.json +52 -14
  258. package/src/translations/en.json +51 -15
  259. package/src/translations/es-MX.json +53 -15
  260. package/src/translations/es.json +52 -14
  261. package/src/translations/et.json +52 -14
  262. package/src/translations/fi.json +53 -15
  263. package/src/translations/fil.json +53 -15
  264. package/src/translations/fr.json +52 -14
  265. package/src/translations/he.json +52 -14
  266. package/src/translations/hi.json +52 -14
  267. package/src/translations/hr.json +53 -15
  268. package/src/translations/id.json +53 -15
  269. package/src/translations/it.json +53 -15
  270. package/src/translations/ja.json +53 -15
  271. package/src/translations/ko.json +52 -14
  272. package/src/translations/nl.json +53 -15
  273. package/src/translations/pl.json +53 -15
  274. package/src/translations/pt-BR.json +53 -15
  275. package/src/translations/pt.json +53 -15
  276. package/src/translations/ro.json +53 -15
  277. package/src/translations/ru.json +51 -13
  278. package/src/translations/sk.json +52 -14
  279. package/src/translations/sl.json +52 -14
  280. package/src/translations/sv.json +53 -15
  281. package/src/translations/th.json +53 -15
  282. package/src/translations/tr.json +53 -15
  283. package/src/translations/uk.json +51 -13
  284. package/src/translations/vi.json +50 -12
  285. package/src/translations/zh-CN.json +50 -12
  286. package/src/translations/zh-TW.json +50 -12
  287. package/types/EmailForm.d.ts +5 -3
  288. package/types/FinderModal.d.ts +0 -8
  289. package/types/IntegrationCard.d.ts +1 -1
  290. package/types/Rename.d.ts +2 -0
  291. package/types/Settings.d.ts +2 -2
  292. package/types/ShareViaLink.d.ts +2 -2
  293. package/types/SubHeader.d.ts +2 -2
  294. package/types/ToggleFeatureCard.d.ts +3 -3
  295. package/dist/Chevron-Dtxc2piW.js.map +0 -1
  296. package/dist/Columns-CsOYfWFt.js.map +0 -1
  297. package/dist/cjs/Chevron-DzdbGPJI.js.map +0 -1
  298. package/dist/cjs/Columns-DHPNrFgq.js.map +0 -1
package/dist/Schedule.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createContext, useContext, memo, useMemo, useState, useEffect, useImperativeHandle, forwardRef } from 'react';
2
2
  import { useFormikContext, FieldArray, ErrorMessage, Formik, Form as Form$2 } from 'formik';
3
- import { findIndexBy, isNotPresent, isPresent, toLabelAndValue, isNotEmpty, noop } from '@bigbinary/neeto-cist';
3
+ import { findIndexBy, isNotPresent, isPresent, toLabelAndValue, isNotEmpty, findBy, noop } from '@bigbinary/neeto-cist';
4
4
  import { joinHyphenCase } from '@bigbinary/neeto-commons-frontend/utils/general';
5
5
  import Typography from '@bigbinary/neetoui/Typography';
6
6
  import { useTranslation } from 'react-i18next';
@@ -38,12 +38,17 @@ import '@bigbinary/neeto-commons-frontend/react-utils';
38
38
 
39
39
  var DAYS = ["sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
40
40
  var DEFAULT_SLOT_INTERVAL = 30;
41
+ var HOUR_FORMATS = {
42
+ H24: "24h"};
43
+ var DEFAULT_HOUR_FORMAT = HOUR_FORMATS.H24;
41
44
 
42
45
  // To avoid prop drilling `allowAddPeriod` to `ScheduleRow` component
43
46
  // eslint-disable-next-line @bigbinary/neeto/use-zustand-for-global-state-management
44
47
  var ScheduleContext = /*#__PURE__*/createContext({
45
48
  allowAddPeriod: true,
46
- firstDay: 0
49
+ firstDay: 0,
50
+ slotInterval: DEFAULT_SLOT_INTERVAL,
51
+ hourFormat: DEFAULT_HOUR_FORMAT
47
52
  });
48
53
 
49
54
  var INTERVALS = ["year", "quarter", "month", "week", "day", "hour", "minute", "second"];
@@ -66,9 +71,10 @@ var BLUR_TEXT_WHEN_SELECT_MENU_IS_OPEN = {
66
71
  }
67
72
  };
68
73
  var SLOT_TIME_FORMAT = "hh:mm A";
74
+ var SLOT_TIME_FORMAT_24H = "HH:mm";
69
75
 
70
76
  // eslint-disable-next-line @bigbinary/neeto/use-standard-date-time-formats
71
- var END_OF_DAY = dayjs().endOf("day").format(SLOT_TIME_FORMAT);
77
+ var END_OF_DAY = dayjs().endOf("day").format(SLOT_TIME_FORMAT_24H);
72
78
 
73
79
  var DayjsRange = /*#__PURE__*/function () {
74
80
  function DayjsRange(startDate, endDate) {
@@ -106,7 +112,7 @@ var DayjsRange = /*#__PURE__*/function () {
106
112
  var endTime = this.endDate.add(1, "days");
107
113
  var allTimes = [];
108
114
  while (startTime < endTime) {
109
- allTimes.push(startTime.format(SLOT_TIME_FORMAT));
115
+ allTimes.push(startTime.format(SLOT_TIME_FORMAT_24H));
110
116
  startTime = startTime.add(interval, "minutes");
111
117
  }
112
118
  return allTimes;
@@ -172,7 +178,7 @@ yup.addMethod(yup.array, "ensureSlotsCantOverlap", function () {
172
178
  });
173
179
  var isFromAndToSame = function isFromAndToSame(startTime, endTime) {
174
180
  if (!startTime || !endTime) return true;
175
- return dayjs(startTime, SLOT_TIME_FORMAT).isSame(dayjs(endTime, SLOT_TIME_FORMAT));
181
+ return dayjs(startTime, SLOT_TIME_FORMAT_24H).isSame(dayjs(endTime, SLOT_TIME_FORMAT_24H));
176
182
  };
177
183
  var sortDays = function sortDays(chosenIndex) {
178
184
  if (chosenIndex < 0 || chosenIndex >= 7) return DAYS;
@@ -212,7 +218,7 @@ var getTimeZoneAndTime = function getTimeZoneAndTime() {
212
218
  return "".concat(humanReadableTimezone, ": ").concat(dayjs().tz(timeZone).format(SLOT_TIME_FORMAT));
213
219
  };
214
220
  var isTimeBehind = function isTimeBehind(timeA, timeB) {
215
- return dayjs(timeA, SLOT_TIME_FORMAT).isBefore(dayjs(timeB, SLOT_TIME_FORMAT));
221
+ return dayjs(timeA, SLOT_TIME_FORMAT_24H).isBefore(dayjs(timeB, SLOT_TIME_FORMAT_24H));
216
222
  };
217
223
  var sortPeriodsByKey = function sortPeriodsByKey(_ref) {
218
224
  var periods = _ref.periods,
@@ -253,8 +259,8 @@ var checkForOverlapBetweenPeriods = function checkForOverlapBetweenPeriods(perio
253
259
  value = _step$value[1];
254
260
  var seg1 = value;
255
261
  var seg2 = slotsSortedByStartTime[index + 1];
256
- var range1 = dayjsExtended.range(dayjsExtended(seg1.startTime, SLOT_TIME_FORMAT), dayjsExtended(seg1.endTime, SLOT_TIME_FORMAT));
257
- var range2 = dayjsExtended.range(dayjsExtended(seg2.startTime, SLOT_TIME_FORMAT), dayjsExtended(seg2.endTime, SLOT_TIME_FORMAT));
262
+ var range1 = dayjsExtended.range(dayjsExtended(seg1.startTime, SLOT_TIME_FORMAT_24H), dayjsExtended(seg1.endTime, SLOT_TIME_FORMAT_24H));
263
+ var range2 = dayjsExtended.range(dayjsExtended(seg2.startTime, SLOT_TIME_FORMAT_24H), dayjsExtended(seg2.endTime, SLOT_TIME_FORMAT_24H));
258
264
  if (range1.isOverlap(range2)) {
259
265
  response = {
260
266
  exists: true,
@@ -276,10 +282,10 @@ var findIndicesOfOverlappingRangesInPeriods = function findIndicesOfOverlappingR
276
282
  range2 = _ref2.range2,
277
283
  periods = _ref2.periods;
278
284
  var firstIndex = findIndexBy({
279
- startTime: range1.startDate.format(SLOT_TIME_FORMAT)
285
+ startTime: range1.startDate.format(SLOT_TIME_FORMAT_24H)
280
286
  }, periods);
281
287
  var secondIndex = periods.findIndex(function (slot, index) {
282
- return index > firstIndex && slot.startTime === range2.startDate.format(SLOT_TIME_FORMAT);
288
+ return index > firstIndex && slot.startTime === range2.startDate.format(SLOT_TIME_FORMAT_24H);
283
289
  });
284
290
  return {
285
291
  firstIndex: firstIndex,
@@ -342,23 +348,36 @@ var processFormValues = function processFormValues(values, firstDay) {
342
348
  })
343
349
  };
344
350
  };
351
+ var convert24hTo12h = function convert24hTo12h(time) {
352
+ return (
353
+ // eslint-disable-next-line @bigbinary/neeto/use-standard-date-time-formats
354
+ dayjs(time, SLOT_TIME_FORMAT_24H).format(SLOT_TIME_FORMAT)
355
+ );
356
+ };
345
357
 
346
358
  var DisplayAvailability = function DisplayAvailability(_ref) {
347
359
  var periods = _ref.periods;
348
360
  var _useTranslation = useTranslation(),
349
361
  t = _useTranslation.t;
350
362
  var _useContext = useContext(ScheduleContext),
351
- firstDay = _useContext.firstDay;
363
+ firstDay = _useContext.firstDay,
364
+ hourFormat = _useContext.hourFormat;
365
+ var formatHour = function formatHour(hour) {
366
+ if (hourFormat === HOUR_FORMATS.H24) {
367
+ return hour;
368
+ }
369
+ return convert24hTo12h(hour);
370
+ };
352
371
  return /*#__PURE__*/jsx("div", {
353
372
  className: "flex w-full flex-col gap-y-3",
354
373
  children: sortDays(firstDay).map(function (day) {
355
374
  var _sortPeriodsByKey;
356
375
  return /*#__PURE__*/jsxs("div", {
357
376
  className: "neeto-ui-rounded-md neeto-ui-border-gray-300 neeto-ui-bg-white flex w-full flex-wrap items-center justify-center gap-2 border px-6 py-4 sm:items-start sm:justify-start",
358
- "data-cy": "day-cards-".concat(day),
377
+ "data-testid": "day-cards-".concat(day),
359
378
  children: [/*#__PURE__*/jsx(Typography, {
360
379
  className: "mt-0.5 w-24 text-center sm:w-1/4 sm:text-start",
361
- "data-cy": joinHyphenCase(day, "day-text"),
380
+ "data-testid": joinHyphenCase(day, "day-text"),
362
381
  style: "h5",
363
382
  weight: "semibold",
364
383
  children: t("neetoMolecules.schedule.days.".concat(day))
@@ -376,8 +395,8 @@ var DisplayAvailability = function DisplayAvailability(_ref) {
376
395
  lineHeight: "relaxed",
377
396
  style: "h5",
378
397
  weight: "semibold",
379
- "data-cy": joinHyphenCase(day, period.startTime, "start-time-text"),
380
- children: period.startTime
398
+ "data-testid": joinHyphenCase(day, period.startTime, "start-time-text"),
399
+ children: formatHour(period.startTime)
381
400
  }), /*#__PURE__*/jsx(Typography, {
382
401
  className: "neeto-ui-text-gray-600",
383
402
  component: "span",
@@ -387,13 +406,13 @@ var DisplayAvailability = function DisplayAvailability(_ref) {
387
406
  lineHeight: "relaxed",
388
407
  style: "h5",
389
408
  weight: "semibold",
390
- "data-cy": joinHyphenCase(day, period.endTime, "start-time-text"),
391
- children: period.endTime
409
+ "data-testid": joinHyphenCase(day, period.endTime, "start-time-text"),
410
+ children: formatHour(period.endTime)
392
411
  })]
393
412
  }, period.id);
394
413
  }) : /*#__PURE__*/jsx(Typography, {
395
414
  className: "mx-8 flex-grow text-center",
396
- "data-cy": joinHyphenCase(day, "unavailable-time-text"),
415
+ "data-testid": joinHyphenCase(day, "unavailable-time-text"),
397
416
  lineHeight: "relaxed",
398
417
  style: "h5",
399
418
  children: t("neetoMolecules.schedule.unavailable")
@@ -406,16 +425,32 @@ var DisplayAvailability = function DisplayAvailability(_ref) {
406
425
 
407
426
  var buildSlotIntervals = function buildSlotIntervals(_ref) {
408
427
  var interval = _ref.interval,
409
- bookedSlots = _ref.bookedSlots;
428
+ bookedSlots = _ref.bookedSlots,
429
+ _ref$hourFormat = _ref.hourFormat,
430
+ hourFormat = _ref$hourFormat === void 0 ? DEFAULT_HOUR_FORMAT : _ref$hourFormat;
410
431
  var allIntervalsForADay = dayjsExtended.timeIntervalsForDay(interval);
411
432
  allIntervalsForADay.push(END_OF_DAY);
412
433
  return function (slotType) {
413
434
  var selectedValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
414
435
  var uniqBookedSlots = uniq(pluck(slotType, bookedSlots));
415
436
  var slotsAvailableForBooking = difference(allIntervalsForADay, uniqBookedSlots);
416
- var slots = slotsAvailableForBooking.map(toLabelAndValue);
437
+ var slots;
438
+ if (hourFormat === "12h") {
439
+ slots = slotsAvailableForBooking.map(function (value) {
440
+ return {
441
+ value: value,
442
+ label: convert24hTo12h(value)
443
+ };
444
+ });
445
+ } else {
446
+ slots = slotsAvailableForBooking.map(toLabelAndValue);
447
+ }
417
448
  if (!selectedValue) return slots;
418
- return sortSlots([toLabelAndValue(selectedValue)].concat(_toConsumableArray(slots)));
449
+ var selectedSlot = {
450
+ value: selectedValue,
451
+ label: hourFormat === "12h" ? convert24hTo12h(selectedValue) : selectedValue
452
+ };
453
+ return sortSlots([selectedSlot].concat(_toConsumableArray(slots)));
419
454
  };
420
455
  };
421
456
  var sortSlots = function sortSlots(slots) {
@@ -437,28 +472,33 @@ var filterSlots = function filterSlots(option, searchTerm) {
437
472
  };
438
473
  var formatCreateLabel = identity;
439
474
  var isValidTimeSlotOption = function isValidTimeSlotOption(value) {
440
- // Allow HH:MM AM/PM, H:MM AM/PM, H:MM am/pm, or HH:MM (24h)
441
- // Accepts 1 or 2 digit hour (1-12) with AM/PM OR 00-23:00-59 for 24h, AM/PM (any case) optional, optional leading zero
442
- // eslint-disable-next-line prettier/prettier
443
- var timeRegex = /^(((0?[1-9]|1[0-2]):[0-5]\d ?[AaPp][Mm])|([01]?\d|2[0-3]):[0-5]\d)$/;
444
- return timeRegex.test(value);
475
+ if (!value || typeof value !== "string") return false;
476
+ var valueTrimmed = value.trim();
477
+
478
+ // Try 24h format (e.g. "14:30")
479
+ var time = dayjsExtended(valueTrimmed, SLOT_TIME_FORMAT_24H, true);
480
+ if (time.isValid()) return true;
481
+
482
+ // Try 12h format with padded hour
483
+ time = dayjsExtended(valueTrimmed, SLOT_TIME_FORMAT, true);
484
+ return time.isValid();
445
485
  };
446
486
  var formatTimeSlotOption = function formatTimeSlotOption(v) {
447
- var value = (v || "").toUpperCase();
487
+ var value = v || "";
448
488
  if (isNotEmpty(value)) {
449
489
  // If value is in 24h format and missing AM/PM, convert to 12h with AM/PM
450
- var time24hMatch = value.match(/^([01]?\d|2[0-3]):([0-5]\d)$/);
451
- if (time24hMatch) {
452
- var _time24hMatch = _slicedToArray(time24hMatch, 3),
453
- hours = _time24hMatch[1],
454
- minutes = _time24hMatch[2];
455
- var hoursInt = parseInt(hours, 10);
456
- var suffix = hoursInt >= 12 ? "PM" : "AM";
457
- var hour12 = hoursInt % 12 || 12;
458
- value = "".concat(hour12.toString().padStart(2, "0"), ":").concat(minutes, " ").concat(suffix);
459
- } else if (value[1] === ":") {
460
- // Pad hour with 0 if single digit (legacy logic)
461
- value = "0".concat(value);
490
+ // Use dayjs to parse and format instead of manual regex, etc.
491
+ var parsed24h = dayjsExtended(value, SLOT_TIME_FORMAT_24H, true);
492
+ if (parsed24h.isValid()) {
493
+ value = parsed24h.format(SLOT_TIME_FORMAT_24H);
494
+ } else {
495
+ var parsed12h = dayjsExtended(value, SLOT_TIME_FORMAT, true);
496
+ if (parsed12h.isValid()) {
497
+ value = parsed12h.format(SLOT_TIME_FORMAT_24H);
498
+ } else if (value[1] === ":") {
499
+ // Pad hour with 0 if single digit (legacy logic)
500
+ value = "0".concat(value);
501
+ }
462
502
  }
463
503
  }
464
504
  return value;
@@ -470,19 +510,19 @@ var roundToNearestHour = function roundToNearestHour(time) {
470
510
  };
471
511
  var generateNewPeriod = function generateNewPeriod(periods, wday) {
472
512
  var lastEndTime = periods[periods.length - 1].endTime;
473
- var newStartTime = roundToNearestHour(dayjsExtended(lastEndTime, SLOT_TIME_FORMAT));
474
- var newEndTime = dayjsExtended(newStartTime, SLOT_TIME_FORMAT).add(1, "hour");
513
+ var newStartTime = roundToNearestHour(dayjsExtended(lastEndTime, SLOT_TIME_FORMAT_24H));
514
+ var newEndTime = dayjsExtended(newStartTime, SLOT_TIME_FORMAT_24H).add(1, "hour");
475
515
  return {
476
- startTime: dayjsExtended(newStartTime).format(SLOT_TIME_FORMAT),
477
- endTime: dayjsExtended(newEndTime).format(SLOT_TIME_FORMAT),
516
+ startTime: dayjsExtended(newStartTime).format(SLOT_TIME_FORMAT_24H),
517
+ endTime: dayjsExtended(newEndTime).format(SLOT_TIME_FORMAT_24H),
478
518
  wday: wday
479
519
  };
480
520
  };
481
521
  var addDefaultPeriod = function addDefaultPeriod(wday) {
482
522
  return {
483
523
  wday: wday,
484
- startTime: dayjsExtended().hour(9).minute(0).format(SLOT_TIME_FORMAT),
485
- endTime: dayjsExtended().hour(17).minute(0).format(SLOT_TIME_FORMAT)
524
+ startTime: dayjsExtended().hour(9).minute(0).format(SLOT_TIME_FORMAT_24H),
525
+ endTime: dayjsExtended().hour(17).minute(0).format(SLOT_TIME_FORMAT_24H)
486
526
  };
487
527
  };
488
528
 
@@ -494,15 +534,23 @@ var ScheduleRow = function ScheduleRow(_ref) {
494
534
  var bookedSlots = values.wdays[day].periods;
495
535
  var _useContext = useContext(ScheduleContext),
496
536
  allowAddPeriod = _useContext.allowAddPeriod,
497
- slotInterval = _useContext.slotInterval;
537
+ slotInterval = _useContext.slotInterval,
538
+ hourFormat = _useContext.hourFormat;
498
539
  var _useTranslation = useTranslation(),
499
540
  t = _useTranslation.t;
500
541
  var sortSlotsInterval = useMemo(function () {
501
542
  return buildSlotIntervals({
502
543
  interval: slotInterval,
503
- bookedSlots: bookedSlots
544
+ bookedSlots: bookedSlots,
545
+ hourFormat: hourFormat
504
546
  });
505
- }, [slotInterval, bookedSlots]);
547
+ }, [slotInterval, bookedSlots, hourFormat]);
548
+ var startTimeOptions = function startTimeOptions(period) {
549
+ return sortSlotsInterval("startTime", period === null || period === void 0 ? void 0 : period.startTime);
550
+ };
551
+ var endTimeOptions = function endTimeOptions(period) {
552
+ return sortSlotsInterval("endTime", period === null || period === void 0 ? void 0 : period.endTime);
553
+ };
506
554
  var handleChange = function handleChange(index, field, e) {
507
555
  var value = formatTimeSlotOption(e === null || e === void 0 ? void 0 : e.value);
508
556
  setFieldValue("wdays.".concat(day, ".periods[").concat(index, "].").concat(field), value);
@@ -532,7 +580,7 @@ var ScheduleRow = function ScheduleRow(_ref) {
532
580
  className: "flex w-full flex-col @xl:mx-auto @xl:w-80",
533
581
  children: [/*#__PURE__*/jsxs("div", {
534
582
  className: "flex items-start gap-2 @xl:gap-3",
535
- "data-cy": "schedule-row",
583
+ "data-testid": "schedule-row",
536
584
  children: [/*#__PURE__*/jsx(Select, {
537
585
  formatCreateLabel: formatCreateLabel,
538
586
  isClearable: true,
@@ -543,11 +591,13 @@ var ScheduleRow = function ScheduleRow(_ref) {
543
591
  filterOption: filterSlots,
544
592
  isValidNewOption: isValidTimeSlotOption,
545
593
  name: "wdays.".concat(day, ".periods[").concat(index, "].startTime"),
594
+ options: startTimeOptions(period),
546
595
  placeholder: t("neetoMolecules.schedule.startTime"),
547
596
  strategy: "fixed",
548
597
  styles: BLUR_TEXT_WHEN_SELECT_MENU_IS_OPEN,
549
- options: sortSlotsInterval("startTime", period === null || period === void 0 ? void 0 : period.startTime),
550
- value: slotsSelectComponentDefaultValue(period === null || period === void 0 ? void 0 : period.startTime),
598
+ value: findBy({
599
+ value: period === null || period === void 0 ? void 0 : period.startTime
600
+ }, startTimeOptions(period)),
551
601
  onChange: function onChange(e) {
552
602
  return handleChange(index, "startTime", e);
553
603
  }
@@ -561,17 +611,18 @@ var ScheduleRow = function ScheduleRow(_ref) {
561
611
  filterOption: filterSlots,
562
612
  isValidNewOption: isValidTimeSlotOption,
563
613
  name: "wdays.".concat(day, ".periods[").concat(index, "].endTime"),
564
- options: sortSlotsInterval("endTime", period === null || period === void 0 ? void 0 : period.endTime),
614
+ options: endTimeOptions(period),
565
615
  placeholder: t("neetoMolecules.schedule.endTime"),
566
616
  strategy: "fixed",
567
617
  styles: BLUR_TEXT_WHEN_SELECT_MENU_IS_OPEN,
568
- value: slotsSelectComponentDefaultValue(period === null || period === void 0 ? void 0 : period.endTime),
618
+ value: findBy({
619
+ value: period === null || period === void 0 ? void 0 : period.endTime
620
+ }, endTimeOptions(period)),
569
621
  onChange: function onChange(e) {
570
622
  return handleChange(index, "endTime", e);
571
623
  }
572
624
  }), /*#__PURE__*/jsx(Button, {
573
625
  className: "flex-shrink-0 self-start",
574
- "data-cy": "delete-period-button",
575
626
  "data-testid": "delete-period-button",
576
627
  icon: Delete,
577
628
  style: "text",
@@ -592,7 +643,6 @@ var ScheduleRow = function ScheduleRow(_ref) {
592
643
  })
593
644
  }), values.wdays[day].available && allowAddPeriod && /*#__PURE__*/jsx(Button, {
594
645
  className: "absolute end-14 top-3 ms-auto flex-shrink-0 @xl:static",
595
- "data-cy": "add-new-period-button",
596
646
  "data-testid": "add-new-period-button",
597
647
  icon: Plus,
598
648
  style: "secondary",
@@ -669,7 +719,7 @@ var Form = function Form(_ref) {
669
719
  children: /*#__PURE__*/jsxs("div", {
670
720
  className: "@xl:flex-no-wrap my-4 flex w-full flex-wrap items-start gap-2 @xl:flex-nowrap @xl:gap-4" // Added `@xl:flex-no-wrap` since neetoCal is using old version of tailwind
671
721
  ,
672
- "data-cy": "working-day-container",
722
+ "data-testid": "working-day-container",
673
723
  children: [/*#__PURE__*/jsxs("div", {
674
724
  className: classnames("flex w-36 flex-shrink-0 items-center justify-start @xl:mt-1", {
675
725
  "mb-3 @xl:mb-0": isPresent((_values$wdays$day = values.wdays[day]) === null || _values$wdays$day === void 0 ? void 0 : _values$wdays$day.periods)
@@ -678,13 +728,13 @@ var Form = function Form(_ref) {
678
728
  "aria-label": "wdays.".concat(day, ".available"),
679
729
  checked: values.wdays[day].available,
680
730
  className: "flex-grow-0",
681
- "data-cy": joinHyphenCase(day, "weekly-hours-checkbox"),
731
+ "data-testid": joinHyphenCase(day, "weekly-hours-checkbox"),
682
732
  id: "day",
683
733
  name: "wdays.".concat(day, ".available"),
684
734
  onChange: handleCheckbox
685
735
  }), /*#__PURE__*/jsx(Typography, {
686
736
  component: "span",
687
- "data-cy": joinHyphenCase(day, "day-text"),
737
+ "data-testid": joinHyphenCase(day, "day-text"),
688
738
  style: "body2",
689
739
  weight: values.wdays[day].available ? "semibold" : "normal",
690
740
  className: classnames("ms-2 capitalize", {
@@ -707,8 +757,7 @@ var Form = function Form(_ref) {
707
757
  touch: ["hold", 500]
708
758
  },
709
759
  className: "absolute end-4 top-3 @xl:static flex-shrink-0",
710
- "data-testid": joinHyphenCase(day, "copy-schedule-icon"),
711
- "data-cy": joinHyphenCase(day, "copy-schedule-icon")
760
+ "data-testid": joinHyphenCase(day, "copy-schedule-icon")
712
761
  },
713
762
  dropdownProps: {
714
763
  className: "neeto-ui-dropdown__popup neeto-molecules-schedule__dropdown"
@@ -742,7 +791,7 @@ var Form = function Form(_ref) {
742
791
  }, day);
743
792
  }), /*#__PURE__*/jsx("li", {
744
793
  children: /*#__PURE__*/jsx(Button, {
745
- "data-cy": "copy-schedule-submit-button",
794
+ "data-testid": "copy-schedule-submit-button",
746
795
  disabled: isNotPresent(wdaysToCopy),
747
796
  label: t("neetoMolecules.common.actions.submit"),
748
797
  size: "small",
@@ -832,7 +881,7 @@ var Header = function Header(_ref) {
832
881
  touch: ["hold", 500],
833
882
  children: /*#__PURE__*/jsx(Typography, {
834
883
  component: "h4",
835
- "data-cy": "timezone-text",
884
+ "data-testid": "timezone-text",
836
885
  style: "h5",
837
886
  weight: "medium",
838
887
  children: timeZoneAndTime
@@ -848,19 +897,18 @@ var Header = function Header(_ref) {
848
897
  label: t("neetoMolecules.common.actions.changeTimezone"),
849
898
  target: "_blank",
850
899
  key: "change-timezone-option",
851
- "data-testid": "change-timezone-option",
852
- "data-cy": "change-timezone-option"
900
+ "data-testid": "change-timezone-option"
853
901
  }]
854
902
  })]
855
903
  }), isEditing ? /*#__PURE__*/jsxs("div", {
856
904
  className: "flex items-center gap-2",
857
905
  children: [/*#__PURE__*/jsx(Button, {
858
- "data-cy": "reset-button",
906
+ "data-testid": "reset-button",
859
907
  style: "secondary",
860
908
  label: !dirty ? t("neetoMolecules.common.actions.cancel") : t("neetoMolecules.common.actions.reset"),
861
909
  onClick: handleReset
862
910
  }), /*#__PURE__*/jsx(Button, {
863
- "data-cy": "weekly-hours-save-changes-button",
911
+ "data-testid": "weekly-hours-save-changes-button",
864
912
  disabled: !dirty && !isCreating || isSubmitting,
865
913
  label: t("neetoMolecules.common.actions.saveChanges"),
866
914
  loading: isSubmitting,
@@ -868,7 +916,7 @@ var Header = function Header(_ref) {
868
916
  })]
869
917
  }) : isEditable && /*#__PURE__*/jsx("div", {
870
918
  children: /*#__PURE__*/jsx(Button, {
871
- "data-cy": "weekly-schedule-header",
919
+ "data-testid": "weekly-schedule-header",
872
920
  label: t("neetoMolecules.schedule.changeAvailability"),
873
921
  style: "primary",
874
922
  weight: "semibold",
@@ -905,7 +953,9 @@ var Schedule = /*#__PURE__*/forwardRef(function (_ref, scheduleRef) {
905
953
  _ref$showTimeZone = _ref.showTimeZone,
906
954
  showTimeZone = _ref$showTimeZone === void 0 ? true : _ref$showTimeZone,
907
955
  _ref$slotInterval = _ref.slotInterval,
908
- slotInterval = _ref$slotInterval === void 0 ? DEFAULT_SLOT_INTERVAL : _ref$slotInterval;
956
+ slotInterval = _ref$slotInterval === void 0 ? DEFAULT_SLOT_INTERVAL : _ref$slotInterval,
957
+ _ref$hourFormat = _ref.hourFormat,
958
+ hourFormat = _ref$hourFormat === void 0 ? DEFAULT_HOUR_FORMAT : _ref$hourFormat;
909
959
  var validationSchema = useMemo(getScheduleValidationSchema, []);
910
960
  var getInitialFormValues = function getInitialFormValues() {
911
961
  var isSubmitHandler = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
@@ -923,7 +973,8 @@ var Schedule = /*#__PURE__*/forwardRef(function (_ref, scheduleRef) {
923
973
  value: {
924
974
  allowAddPeriod: allowAddPeriod,
925
975
  firstDay: firstDay,
926
- slotInterval: slotInterval
976
+ slotInterval: slotInterval,
977
+ hourFormat: hourFormat
927
978
  },
928
979
  children: /*#__PURE__*/jsx("div", {
929
980
  className: "neeto-molecules-schedule neeto-ui-border-gray-200 flex-shrink-0",