@opengeni/react 6.5.2-canary.41607687019001 → 6.7.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 (1154) hide show
  1. package/dist/app/app-state.d.ts +4 -0
  2. package/dist/app/app-state.js +19 -14
  3. package/dist/app/components/Composer.js +25 -23
  4. package/dist/app/components/agent/agent-capability-picker.js +10 -8
  5. package/dist/app/components/artifacts/artifact-browse-controls.js +4 -4
  6. package/dist/app/components/artifacts/artifact-library.js +21 -19
  7. package/dist/app/components/artifacts/artifact-page-chrome.js +3 -3
  8. package/dist/app/components/artifacts/artifact-viewer.js +23 -22
  9. package/dist/app/components/artifacts/artifact-viewer.js.map +1 -1
  10. package/dist/app/components/artifacts/chat-interactive-block.js +12 -12
  11. package/dist/app/components/artifacts/copy-artifact-link.js +7 -5
  12. package/dist/app/components/artifacts/file-reach-dialog.js +11 -9
  13. package/dist/app/components/artifacts/inline-chat-image.js +18 -18
  14. package/dist/app/components/artifacts/retained-file-preview.js +24 -23
  15. package/dist/app/components/artifacts/retained-text-preview.js +3 -3
  16. package/dist/app/components/artifacts/site-audience.js +6 -5
  17. package/dist/app/components/artifacts/site-conversations.js +16 -14
  18. package/dist/app/components/artifacts/site-data.js +18 -16
  19. package/dist/app/components/artifacts/site-public-link.js +3 -2
  20. package/dist/app/components/artifacts/site-publishing-page.js +39 -37
  21. package/dist/app/components/artifacts/site-publishing.js +34 -32
  22. package/dist/app/components/artifacts/site-settings.js +38 -36
  23. package/dist/app/components/artifacts/site-version-menu.js +8 -7
  24. package/dist/app/components/billing-class-mark.js +3 -3
  25. package/dist/app/components/bots/bot-launch-strip.js +17 -17
  26. package/dist/app/components/bots/bot-template-dialog.js +30 -28
  27. package/dist/app/components/bots/bot-template-shortcuts.js +19 -19
  28. package/dist/app/components/bots/bot-templates-page.js +38 -36
  29. package/dist/app/components/bots/bot-templates-page.js.map +1 -1
  30. package/dist/app/components/capabilities/capability-detail-sheet.js +13 -11
  31. package/dist/app/components/capabilities/capability-logo-source.js +13 -13
  32. package/dist/app/components/capabilities/capability-logo.js +4 -3
  33. package/dist/app/components/capabilities/connector-tool-permissions.js +8 -6
  34. package/dist/app/components/capabilities/native-connect-setup.js +14 -14
  35. package/dist/app/components/capabilities/own-logins-shared-heads-up.js +7 -6
  36. package/dist/app/components/capabilities/perform-capability-action.js +7 -6
  37. package/dist/app/components/capabilities/prepared-mcp-setup-card.js +17 -17
  38. package/dist/app/components/capabilities/session-capability-card.js +72 -70
  39. package/dist/app/components/capabilities/session-capability-card.js.map +1 -1
  40. package/dist/app/components/capabilities/session-chrome-card.js +28 -26
  41. package/dist/app/components/capabilities/session-connection-accounts.js +4 -3
  42. package/dist/app/components/capabilities/session-custom-mcp-card.js +20 -19
  43. package/dist/app/components/capabilities/session-github-card.js +22 -20
  44. package/dist/app/components/capabilities/session-machine-card.js +27 -25
  45. package/dist/app/components/capabilities/session-personal-github-card.js +16 -16
  46. package/dist/app/components/capabilities/session-plugin-card.js +10 -9
  47. package/dist/app/components/capabilities/use-capabilities-catalog.js +4 -3
  48. package/dist/app/components/capabilities/use-connection-accounts.js +5 -4
  49. package/dist/app/components/command-menu/chat-status.js +15 -13
  50. package/dist/app/components/command-menu/chat-switcher.js +35 -33
  51. package/dist/app/components/command-menu/chat-switcher.js.map +1 -1
  52. package/dist/app/components/command-menu/command-menu.js +53 -50
  53. package/dist/app/components/command-menu/command-menu.js.map +1 -1
  54. package/dist/app/components/command-menu/shortcut-sheet.js +18 -16
  55. package/dist/app/components/command-menu/shortcut-sheet.js.map +1 -1
  56. package/dist/app/components/common.js +4 -3
  57. package/dist/app/components/composer-capabilities-menu-body.js +4 -4
  58. package/dist/app/components/composer-mobile-plus-panel.js +8 -8
  59. package/dist/app/components/composer-mobile-plus.js +1 -1
  60. package/dist/app/components/credit-required-gate.js +3 -3
  61. package/dist/app/components/credit-required-prompt.js +10 -8
  62. package/dist/app/components/credit-required-prompt.js.map +1 -1
  63. package/dist/app/components/credits/checkout-credits-celebration.js +3 -2
  64. package/dist/app/components/credits/checkout-return.js +3 -2
  65. package/dist/app/components/credits/checkout-return.js.map +1 -1
  66. package/dist/app/components/credits/coupon-redeem.js +5 -4
  67. package/dist/app/components/credits/credit-refusal-notice.js +7 -5
  68. package/dist/app/components/cross-slot-deep-link-recovery.js +5 -4
  69. package/dist/app/components/desktop/app-shots.js +13 -11
  70. package/dist/app/components/desktop/computer-use.js +6 -4
  71. package/dist/app/components/desktop/this-computer.js +9 -7
  72. package/dist/app/components/feedback.js +5 -4
  73. package/dist/app/components/follow-up-repository-menu-body.js +8 -6
  74. package/dist/app/components/follow-up-repository-menu-body.js.map +1 -1
  75. package/dist/app/components/follow-up-repository-picker.js +1 -1
  76. package/dist/app/components/github-app-connect-launcher.js +5 -4
  77. package/dist/app/components/in-app-help-link.js +3 -3
  78. package/dist/app/components/knowledge/agent-learning-settings.js +3 -2
  79. package/dist/app/components/knowledge/agent-learning-settings.js.map +1 -1
  80. package/dist/app/components/machines/connect-machine-dialog.js +18 -16
  81. package/dist/app/components/manual-repository-editor.js +3 -2
  82. package/dist/app/components/markdown.js +6 -6
  83. package/dist/app/components/models/models-ui.js +12 -10
  84. package/dist/app/components/my-things.js +12 -10
  85. package/dist/app/components/my-things.js.map +1 -1
  86. package/dist/app/components/new-session-starters.js +3 -3
  87. package/dist/app/components/own-where-it-works.js +9 -7
  88. package/dist/app/components/personal-resource-attachment-surface.js +4 -4
  89. package/dist/app/components/pickers.js +5 -5
  90. package/dist/app/components/rail/channel-create-dialog.js +7 -5
  91. package/dist/app/components/rail/project-glyph.js +17 -17
  92. package/dist/app/components/rail/project-profile.js +31 -29
  93. package/dist/app/components/rail/rail-context.js +3 -3
  94. package/dist/app/components/rail/rail-sections.js +68 -66
  95. package/dist/app/components/rail/session-header.js +59 -57
  96. package/dist/app/components/rail/session-list.js +66 -64
  97. package/dist/app/components/rail/session-row-content.js +4 -4
  98. package/dist/app/components/rail/session-row-hover-details.js +14 -12
  99. package/dist/app/components/rail/session-shell.js +90 -88
  100. package/dist/app/components/rail/site-session-group-heading.js +8 -8
  101. package/dist/app/components/repository-picker.js +8 -6
  102. package/dist/app/components/secrets/session-secrets-panel.js +4 -3
  103. package/dist/app/components/secrets/vault-model.js +3 -2
  104. package/dist/app/components/session/agent-configuration-panel.js +25 -23
  105. package/dist/app/components/session/agent-configuration-panel.js.map +1 -1
  106. package/dist/app/components/session/artifact-link-boundary.js +3 -3
  107. package/dist/app/components/session/artifact-session-page.js +11 -9
  108. package/dist/app/components/session/banners.js +8 -8
  109. package/dist/app/components/session/codex-usage-notice.js +5 -3
  110. package/dist/app/components/session/console-new-conversation.js +42 -40
  111. package/dist/app/components/session/context-text-reader.js +3 -2
  112. package/dist/app/components/session/descendant-requests.js +39 -37
  113. package/dist/app/components/session/descendant-requests.js.map +1 -1
  114. package/dist/app/components/session/editable-artifacts-workspace.js +36 -34
  115. package/dist/app/components/session/editable-artifacts-workspace.js.map +1 -1
  116. package/dist/app/components/session/failed-session-banner.js +13 -11
  117. package/dist/app/components/session/failed-session-banner.js.map +1 -1
  118. package/dist/app/components/session/failure-recovery-boundary.js +3 -3
  119. package/dist/app/components/session/human-input-delegation-record.js +2 -2
  120. package/dist/app/components/session/human-input.js +33 -31
  121. package/dist/app/components/session/inspector.js +57 -55
  122. package/dist/app/components/session/inspector.js.map +1 -1
  123. package/dist/app/components/session/message-actions.js +5 -4
  124. package/dist/app/components/session/message-actions.js.map +1 -1
  125. package/dist/app/components/session/message-resource-attachments.js +12 -11
  126. package/dist/app/components/session/message-resource-attachments.js.map +1 -1
  127. package/dist/app/components/session/model-context-inspector.js +6 -4
  128. package/dist/app/components/session/model-recovery-notice.js +3 -3
  129. package/dist/app/components/session/new-session-settings-menu.js +11 -9
  130. package/dist/app/components/session/new-session-setup-strip.js +18 -18
  131. package/dist/app/components/session/sandbox-recovery-actions.js +3 -3
  132. package/dist/app/components/session/sandbox-switcher.js +10 -9
  133. package/dist/app/components/session/sandbox-workspace.js +47 -46
  134. package/dist/app/components/session/search-markdown-highlight.js +7 -7
  135. package/dist/app/components/session/search-results-view.js +8 -8
  136. package/dist/app/components/session/session-admin-access.js +13 -11
  137. package/dist/app/components/session/session-admission-notice.js +7 -5
  138. package/dist/app/components/session/session-avatar-picker.js +22 -20
  139. package/dist/app/components/session/session-avatar.js +16 -16
  140. package/dist/app/components/session/session-machine-access-notice.js +7 -5
  141. package/dist/app/components/session/session-profile-dialog.js +29 -27
  142. package/dist/app/components/session/session-profile-editor.js +30 -28
  143. package/dist/app/components/session/session-retention.js +10 -8
  144. package/dist/app/components/session/session-search-dialog.js +10 -10
  145. package/dist/app/components/session/session-skill-reviews.js +2 -1
  146. package/dist/app/components/session/session-skill-reviews.js.map +1 -1
  147. package/dist/app/components/session/session-tenancy-control.js +13 -11
  148. package/dist/app/components/session/session-tenancy-control.js.map +1 -1
  149. package/dist/app/components/session/session-unattended-setting.js +7 -5
  150. package/dist/app/components/session/session-usage-limit-section.js +11 -9
  151. package/dist/app/components/session/share-chat-dialog.js +9 -7
  152. package/dist/app/components/session/site-origin-link.js +3 -3
  153. package/dist/app/components/session/subagents.js +8 -8
  154. package/dist/app/components/session/subscription-account-indicator.js +6 -6
  155. package/dist/app/components/session-connectors-menu-body.js +4 -3
  156. package/dist/app/components/session-connectors-menu-body.js.map +1 -1
  157. package/dist/app/components/settings/row-select.js +7 -5
  158. package/dist/app/components/toaster.js +3 -2
  159. package/dist/app/components/transcription-settings.js +11 -9
  160. package/dist/app/components/ui/destructive-confirm.js +11 -9
  161. package/dist/app/components/usage/usage-entry.js +5 -5
  162. package/dist/app/components/window-bar.js +16 -14
  163. package/dist/app/components/workspace-composer-plus.js +22 -21
  164. package/dist/app/components/workspace-reach.js +6 -4
  165. package/dist/app/components/workspace-tenant-boundary.js +5 -4
  166. package/dist/app/embed/memory-navigation.js +3 -3
  167. package/dist/app/embed/session-app.js +211 -209
  168. package/dist/app/lib/actions/actions-provider.js +15 -13
  169. package/dist/app/lib/agent-capabilities.js +3 -3
  170. package/dist/app/lib/app-surfaces.js +7 -6
  171. package/dist/app/lib/archive-session.d.ts +9 -4
  172. package/dist/app/lib/archive-session.js +4 -2
  173. package/dist/app/lib/bot-templates.js +3 -2
  174. package/dist/app/lib/capabilities.js +3 -2
  175. package/dist/app/lib/codex-usage-query.js +2 -2
  176. package/dist/app/lib/composer-connectors.js +17 -16
  177. package/dist/app/lib/console-site.js +2 -2
  178. package/dist/app/lib/console-text.js +2 -2
  179. package/dist/app/lib/events.js +9 -9
  180. package/dist/app/lib/failed-session-copy.js +3 -3
  181. package/dist/app/lib/inbox.js +4 -2
  182. package/dist/app/lib/model-access-onboarding.js +3 -3
  183. package/dist/app/lib/move-chat-to-machine.js +3 -3
  184. package/dist/app/lib/navigation.js +2 -2
  185. package/dist/app/lib/session-branch-cache.js +6 -6
  186. package/dist/app/lib/session-create.js +4 -4
  187. package/dist/app/lib/session-group-pagination.js +6 -6
  188. package/dist/app/lib/session-hover-facts.js +13 -11
  189. package/dist/app/lib/session-model.js +2 -2
  190. package/dist/app/lib/session-rail.js +3 -3
  191. package/dist/app/lib/session-rename.js +3 -3
  192. package/dist/app/lib/session-restart-operation-controller.js +4 -3
  193. package/dist/app/lib/session-tenancy.js +3 -2
  194. package/dist/app/lib/session-usage-limit.js +3 -2
  195. package/dist/app/lib/sessions-group.js +5 -5
  196. package/dist/app/lib/site-publishing.js +3 -2
  197. package/dist/app/lib/site-tool-consent-dialog.js +9 -7
  198. package/dist/app/lib/site-tool-consent-dialog.js.map +1 -1
  199. package/dist/app/lib/site-tool-consent.js +1 -1
  200. package/dist/app/lib/subscription-plans.js +3 -2
  201. package/dist/app/lib/toast.js +2 -1
  202. package/dist/app/lib/turn-failure-analytics.js +4 -4
  203. package/dist/app/lib/use-duplicate-site.js +6 -5
  204. package/dist/app/lib/use-follow-up-repositories.js +6 -5
  205. package/dist/app/lib/use-workspace-integrations.js +4 -3
  206. package/dist/app/lib/use-workspace-machines.js +4 -4
  207. package/dist/app/lib/use-workspace-model-catalog.js +5 -4
  208. package/dist/app/lib/use-workspace-rigs.js +2 -2
  209. package/dist/app/lib/workspace-navigation-preference.js +4 -4
  210. package/dist/app/lib/workspace-scope-context.js +3 -3
  211. package/dist/app/routes/artifacts.js +67 -66
  212. package/dist/app/routes/artifacts.js.map +1 -1
  213. package/dist/app/routes/retained-artifact.js +42 -40
  214. package/dist/app/routes/retained-artifact.js.map +1 -1
  215. package/dist/app/routes/session-unavailable.js +8 -7
  216. package/dist/app/routes/session.js +119 -117
  217. package/dist/app/routes/sessions-index-hydration.js +5 -5
  218. package/dist/app/routes/sessions-index.js +104 -102
  219. package/dist/app/routes/site-view.js +67 -65
  220. package/dist/app/routes/site-view.js.map +1 -1
  221. package/dist/artifacts-document.js +4 -4
  222. package/dist/artifacts-presentation.js +4 -4
  223. package/dist/artifacts-spreadsheet.js +4 -4
  224. package/dist/artifacts.js +10 -10
  225. package/dist/automations.js +17 -15
  226. package/dist/automations.js.map +1 -1
  227. package/dist/browser-viewer-TC27OCIP.js +23 -0
  228. package/dist/chat-interactive-block-RWPQBHVS.js +18 -0
  229. package/dist/chunk-2BDT3UZQ.js +229 -0
  230. package/dist/chunk-2CLNIEK4.js +373 -0
  231. package/dist/chunk-2FSBSCZJ.js +451 -0
  232. package/dist/chunk-2I7HDP53.js +199 -0
  233. package/dist/chunk-2INLDVK3.js +15 -0
  234. package/dist/chunk-2KALVELR.js +126 -0
  235. package/dist/chunk-2M3J7ZWQ.js +418 -0
  236. package/dist/chunk-2OP6WLGV.js +708 -0
  237. package/dist/chunk-2RG7NIAS.js +2936 -0
  238. package/dist/chunk-2STUPWEL.js +135 -0
  239. package/dist/chunk-2YUOVM3G.js +271 -0
  240. package/dist/chunk-2Z3NQNTM.js +3670 -0
  241. package/dist/chunk-3CPWWGNK.js +920 -0
  242. package/dist/chunk-3ED2U6XE.js +37 -0
  243. package/dist/chunk-3GZA4BUW.js +216 -0
  244. package/dist/chunk-3IK6UYO6.js +1022 -0
  245. package/dist/chunk-3PZ7JZI2.js +431 -0
  246. package/dist/chunk-4DVJ6ONS.js +50 -0
  247. package/dist/chunk-4DVNUCRR.js +2386 -0
  248. package/dist/chunk-4DVNUCRR.js.map +1 -0
  249. package/dist/chunk-4E3ZJRTZ.js +41 -0
  250. package/dist/chunk-4SAWSRAA.js +141 -0
  251. package/dist/chunk-53AGXXZM.js +307 -0
  252. package/dist/chunk-54YW6SZZ.js +818 -0
  253. package/dist/chunk-57AZS3IE.js +2317 -0
  254. package/dist/chunk-5CPEEAFD.js +143 -0
  255. package/dist/chunk-5EWSRZ2Y.js +340 -0
  256. package/dist/chunk-5IE76VCY.js +387 -0
  257. package/dist/chunk-5NWEKLDZ.js +170 -0
  258. package/dist/chunk-5O2FCCHZ.js +198 -0
  259. package/dist/chunk-5QAY6K77.js +399 -0
  260. package/dist/chunk-5YKW2K6I.js +625 -0
  261. package/dist/chunk-5YKW2K6I.js.map +1 -0
  262. package/dist/chunk-6BCXNDEI.js +4116 -0
  263. package/dist/chunk-6BCXNDEI.js.map +1 -0
  264. package/dist/chunk-6DK6Z4UN.js +2599 -0
  265. package/dist/chunk-6DVCC7QS.js +702 -0
  266. package/dist/chunk-6JHU2UBS.js +2058 -0
  267. package/dist/chunk-6PZ7OBYU.js +490 -0
  268. package/dist/chunk-6WD2INST.js +539 -0
  269. package/dist/chunk-6WD2INST.js.map +1 -0
  270. package/dist/chunk-6WGRDRMA.js +163 -0
  271. package/dist/chunk-77WAKEAH.js +186 -0
  272. package/dist/chunk-7T2ZE3VT.js +5558 -0
  273. package/dist/chunk-7T2ZE3VT.js.map +1 -0
  274. package/dist/chunk-7TDO3CUM.js +393 -0
  275. package/dist/chunk-7TIX2UAR.js +247 -0
  276. package/dist/chunk-7V5REBCP.js +148 -0
  277. package/dist/chunk-7VMZGLYI.js +339 -0
  278. package/dist/chunk-7W37NS3I.js +236 -0
  279. package/dist/chunk-7X6SDK2C.js +111 -0
  280. package/dist/chunk-7ZNUHRP5.js +95 -0
  281. package/dist/chunk-A36PZALD.js +84 -0
  282. package/dist/chunk-AUI6VA63.js +107 -0
  283. package/dist/chunk-AW2MQB37.js +24 -0
  284. package/dist/chunk-AWKES45Y.js +198 -0
  285. package/dist/chunk-AXHZYXUV.js +132 -0
  286. package/dist/chunk-BHNSJVBC.js +129 -0
  287. package/dist/chunk-BJEJFISW.js +50 -0
  288. package/dist/chunk-BJFH6JI5.js +422 -0
  289. package/dist/chunk-BMICEQZQ.js +960 -0
  290. package/dist/chunk-BTLBYBLU.js +29 -0
  291. package/dist/chunk-BXBDYNRP.js +89 -0
  292. package/dist/chunk-C372BFOV.js +357 -0
  293. package/dist/chunk-C43KRXGA.js +234 -0
  294. package/dist/chunk-C43KRXGA.js.map +1 -0
  295. package/dist/chunk-CMKGILJK.js +4824 -0
  296. package/dist/chunk-CRAOSVHC.js +50 -0
  297. package/dist/chunk-CRU35QQH.js +281 -0
  298. package/dist/chunk-CUIWCGMA.js +172 -0
  299. package/dist/chunk-D5TWNFFE.js +38 -0
  300. package/dist/chunk-DF5EAHDN.js +4461 -0
  301. package/dist/chunk-DJAXC5OK.js +56 -0
  302. package/dist/chunk-DXBYWSL5.js +3550 -0
  303. package/dist/chunk-DXR5PDFP.js +84 -0
  304. package/dist/chunk-DZWARC4M.js +267 -0
  305. package/dist/chunk-DZXEDSQI.js +106 -0
  306. package/dist/chunk-E7XERZWC.js +48 -0
  307. package/dist/chunk-ECJBYNLJ.js +79 -0
  308. package/dist/chunk-EDI6SJ2N.js +43 -0
  309. package/dist/chunk-EWSOC6WF.js +114 -0
  310. package/dist/chunk-F2OPHAUN.js +103 -0
  311. package/dist/chunk-F4ISQGGM.js +81 -0
  312. package/dist/chunk-FO4LYKJL.js +197 -0
  313. package/dist/chunk-FPXASDG5.js +73 -0
  314. package/dist/chunk-FSOQDUCG.js +117 -0
  315. package/dist/chunk-FSOQDUCG.js.map +1 -0
  316. package/dist/chunk-FVXBNBHO.js +157 -0
  317. package/dist/chunk-FYWT2O76.js +34 -0
  318. package/dist/chunk-FYWT2O76.js.map +1 -0
  319. package/dist/chunk-FZC5N55X.js +981 -0
  320. package/dist/chunk-GAVYGBFI.js +99 -0
  321. package/dist/chunk-GFIMOUDT.js +846 -0
  322. package/dist/chunk-GFIMOUDT.js.map +1 -0
  323. package/dist/chunk-GKVJIDHF.js +33 -0
  324. package/dist/chunk-GVN5SZLX.js +212 -0
  325. package/dist/chunk-H3T7IWNA.js +134 -0
  326. package/dist/chunk-HAX4LCR5.js +261 -0
  327. package/dist/chunk-HC4JFZVU.js +121 -0
  328. package/dist/chunk-HEFPPMBQ.js +581 -0
  329. package/dist/chunk-HGKTHF2U.js +1356 -0
  330. package/dist/chunk-HGKTHF2U.js.map +1 -0
  331. package/dist/chunk-HNLR7Q4Z.js +83 -0
  332. package/dist/chunk-HSOXMJOT.js +12 -0
  333. package/dist/chunk-I4MRDSUF.js +281 -0
  334. package/dist/chunk-I4QEJ62Y.js +202 -0
  335. package/dist/chunk-I5B5L6Q4.js +56 -0
  336. package/dist/chunk-I5QZJODL.js +264 -0
  337. package/dist/chunk-I7ITSXSJ.js +603 -0
  338. package/dist/chunk-I7XIZRFD.js +390 -0
  339. package/dist/chunk-IDANQPRH.js +82 -0
  340. package/dist/chunk-IFB3WJ36.js +212 -0
  341. package/dist/chunk-IHTAKKTK.js +264 -0
  342. package/dist/chunk-IKXNLWAL.js +205 -0
  343. package/dist/chunk-IKXNLWAL.js.map +1 -0
  344. package/dist/chunk-ILDXWY37.js +173 -0
  345. package/dist/chunk-IMDQUHBJ.js +570 -0
  346. package/dist/chunk-IMZCQBOT.js +119 -0
  347. package/dist/chunk-IXPTECSC.js +403 -0
  348. package/dist/chunk-J255A3N5.js +71 -0
  349. package/dist/chunk-J5F5HPPW.js +141 -0
  350. package/dist/chunk-JDTGRRNU.js +5045 -0
  351. package/dist/chunk-JDTGRRNU.js.map +1 -0
  352. package/dist/chunk-JEA3QDX7.js +2469 -0
  353. package/dist/chunk-JEUPAVYY.js +156 -0
  354. package/dist/chunk-JKHKLL5W.js +194 -0
  355. package/dist/chunk-JQL7ZH6C.js +650 -0
  356. package/dist/chunk-JWB44UGJ.js +57 -0
  357. package/dist/chunk-JZ4NLCAP.js +333 -0
  358. package/dist/chunk-K2A5PXQ5.js +412 -0
  359. package/dist/chunk-K56XV3C3.js +623 -0
  360. package/dist/chunk-K6GAXXVA.js +23 -0
  361. package/dist/chunk-KCBMFSMS.js +199 -0
  362. package/dist/chunk-KF2FV3ZJ.js +268 -0
  363. package/dist/chunk-KJD65EJP.js +278 -0
  364. package/dist/chunk-KLEUWIMZ.js +386 -0
  365. package/dist/chunk-KODELWYT.js +309 -0
  366. package/dist/chunk-KRDR5RJD.js +83 -0
  367. package/dist/chunk-KUDGXAF7.js +914 -0
  368. package/dist/chunk-KY2R73CG.js +171 -0
  369. package/dist/chunk-KY2R73CG.js.map +1 -0
  370. package/dist/chunk-KYS77RPN.js +85 -0
  371. package/dist/chunk-L7YTNTIK.js +368 -0
  372. package/dist/chunk-LHPNABDH.js +686 -0
  373. package/dist/chunk-MFROMEKA.js +401 -0
  374. package/dist/chunk-MIHN76LX.js +2656 -0
  375. package/dist/chunk-MIYFS2XN.js +42 -0
  376. package/dist/chunk-MJUCFQMS.js +65 -0
  377. package/dist/chunk-MM4FNWI4.js +3064 -0
  378. package/dist/chunk-MNZG4OHU.js +790 -0
  379. package/dist/chunk-MVW6HNPI.js +250 -0
  380. package/dist/chunk-MVW6HNPI.js.map +1 -0
  381. package/dist/chunk-N6AACDUW.js +200 -0
  382. package/dist/chunk-NC55IFN3.js +781 -0
  383. package/dist/chunk-NC7PVOEK.js +98 -0
  384. package/dist/chunk-NCYMNCJO.js +70 -0
  385. package/dist/chunk-ND2BXV3P.js +259 -0
  386. package/dist/chunk-NDBTFUO6.js +272 -0
  387. package/dist/chunk-NDQJZ7HF.js +206 -0
  388. package/dist/chunk-NGJJJPZZ.js +162 -0
  389. package/dist/chunk-NJTSNNE7.js +251 -0
  390. package/dist/chunk-NPGISCU6.js +4159 -0
  391. package/dist/chunk-NPGISCU6.js.map +1 -0
  392. package/dist/chunk-NRTE7DNV.js +1270 -0
  393. package/dist/chunk-NULUNM7H.js +290 -0
  394. package/dist/chunk-NUNZS36W.js +227 -0
  395. package/dist/chunk-NW53H5RW.js +2424 -0
  396. package/dist/chunk-NXCMHIKI.js +263 -0
  397. package/dist/chunk-O3LKCBP5.js +159 -0
  398. package/dist/chunk-O4EA4F3W.js +103 -0
  399. package/dist/chunk-O4EA4F3W.js.map +1 -0
  400. package/dist/chunk-O4OOG3D6.js +116 -0
  401. package/dist/chunk-O4OOG3D6.js.map +1 -0
  402. package/dist/chunk-O6N4ABCA.js +376 -0
  403. package/dist/chunk-O732GAFC.js +112 -0
  404. package/dist/chunk-OF4TIKYC.js +690 -0
  405. package/dist/chunk-OMPVOMPP.js +70 -0
  406. package/dist/chunk-OPJJSKUK.js +118 -0
  407. package/dist/chunk-OPWCMA4D.js +196 -0
  408. package/dist/chunk-ORJPS5VN.js +1193 -0
  409. package/dist/chunk-OSY5K7L7.js +187 -0
  410. package/dist/chunk-OV6QJRT4.js +45 -0
  411. package/dist/chunk-OVKYVZMW.js +108 -0
  412. package/dist/chunk-OZCBM3UC.js +171 -0
  413. package/dist/chunk-P3A2EINJ.js +61 -0
  414. package/dist/chunk-PTAG4PDC.js +27 -0
  415. package/dist/chunk-PTF5B7TJ.js +298 -0
  416. package/dist/chunk-Q3DPEYX4.js +848 -0
  417. package/dist/chunk-Q6CGOPJD.js +215 -0
  418. package/dist/chunk-Q6CGOPJD.js.map +1 -0
  419. package/dist/chunk-QB2KMIDP.js +100 -0
  420. package/dist/chunk-QCSJ4CWE.js +1067 -0
  421. package/dist/chunk-QIOQ2NPQ.js +414 -0
  422. package/dist/chunk-QK5EFEUT.js +353 -0
  423. package/dist/chunk-QPQBLYQJ.js +41 -0
  424. package/dist/chunk-QPSGCC5D.js +184 -0
  425. package/dist/chunk-QZAAUQRN.js +474 -0
  426. package/dist/chunk-QZM6YDJW.js +489 -0
  427. package/dist/chunk-QZM6YDJW.js.map +1 -0
  428. package/dist/chunk-RGBI63KJ.js +188 -0
  429. package/dist/chunk-RLBKLAEY.js +138 -0
  430. package/dist/chunk-RMFKVOM7.js +304 -0
  431. package/dist/chunk-ROKQU7WG.js +258 -0
  432. package/dist/chunk-RPVREAU7.js +251 -0
  433. package/dist/chunk-RQKLF42C.js +723 -0
  434. package/dist/chunk-SC6RRD2D.js +38 -0
  435. package/dist/chunk-SC6RRD2D.js.map +1 -0
  436. package/dist/chunk-SEO7TICN.js +94 -0
  437. package/dist/chunk-SHHJCL7X.js +432 -0
  438. package/dist/chunk-SIRLACNZ.js +114 -0
  439. package/dist/chunk-SKPHMYAA.js +237 -0
  440. package/dist/chunk-SODC7T6L.js +1583 -0
  441. package/dist/chunk-SQJIKMN3.js +366 -0
  442. package/dist/chunk-SVINDKVW.js +26 -0
  443. package/dist/chunk-SYCDHPZF.js +335 -0
  444. package/dist/chunk-T2QX3FDP.js +133 -0
  445. package/dist/chunk-T3OWFVMS.js +1187 -0
  446. package/dist/chunk-T6XI5FLY.js +61 -0
  447. package/dist/chunk-T7OXJZCX.js +62 -0
  448. package/dist/chunk-TAT5USZN.js +353 -0
  449. package/dist/chunk-TPQTRNER.js +172 -0
  450. package/dist/chunk-TUIN4MB7.js +266 -0
  451. package/dist/chunk-TX3VECZU.js +71 -0
  452. package/dist/chunk-TXLIEOJX.js +9624 -0
  453. package/dist/chunk-U3DN4HEY.js +27 -0
  454. package/dist/chunk-U7XM7CB4.js +191 -0
  455. package/dist/chunk-UJK53QFL.js +140 -0
  456. package/dist/chunk-UMTXA2TH.js +319 -0
  457. package/dist/chunk-UPDSXFK5.js +199 -0
  458. package/dist/chunk-UTIAXH52.js +269 -0
  459. package/dist/chunk-UVN5TMHU.js +1184 -0
  460. package/dist/chunk-V4Z4B2E3.js +52 -0
  461. package/dist/chunk-V4Z4B2E3.js.map +1 -0
  462. package/dist/chunk-VGYXW3VG.js +246 -0
  463. package/dist/chunk-VS7AHPCZ.js +255 -0
  464. package/dist/chunk-VTTAJOQ7.js +121 -0
  465. package/dist/chunk-VWPOLUAO.js +99 -0
  466. package/dist/chunk-X3MWB2QU.js +3851 -0
  467. package/dist/chunk-X6KAJI3V.js +211 -0
  468. package/dist/chunk-XBLRHV5R.js +50 -0
  469. package/dist/chunk-XDFP2LMW.js +605 -0
  470. package/dist/chunk-XEQMZB3C.js +525 -0
  471. package/dist/chunk-XEYLT5VA.js +223 -0
  472. package/dist/chunk-XHIQ5I6N.js +918 -0
  473. package/dist/chunk-XLH7QY2R.js +378 -0
  474. package/dist/chunk-XWFAMUZQ.js +113 -0
  475. package/dist/chunk-Y4BB2KS2.js +294 -0
  476. package/dist/chunk-Y4BB2KS2.js.map +1 -0
  477. package/dist/chunk-Y4OBB2VN.js +84 -0
  478. package/dist/chunk-YCVD6CI3.js +234 -0
  479. package/dist/chunk-YENLNISG.js +270 -0
  480. package/dist/chunk-YIRVLKAX.js +351 -0
  481. package/dist/chunk-YL73CVNK.js +390 -0
  482. package/dist/chunk-YLS6QE5G.js +288 -0
  483. package/dist/chunk-YNF2OC54.js +366 -0
  484. package/dist/chunk-YNF2OC54.js.map +1 -0
  485. package/dist/chunk-YPWU5KPE.js +147 -0
  486. package/dist/chunk-YQXTDZSU.js +2984 -0
  487. package/dist/chunk-YSJEAAOL.js +178 -0
  488. package/dist/chunk-YWIFM7D7.js +499 -0
  489. package/dist/chunk-YWVI6ZMK.js +103 -0
  490. package/dist/chunk-Z4FMAFNH.js +847 -0
  491. package/dist/chunk-Z654FWNU.js +136 -0
  492. package/dist/chunk-Z7Y523PS.js +130 -0
  493. package/dist/chunk-ZD67RM6G.js +60 -0
  494. package/dist/chunk-ZEG4VPBL.js +187 -0
  495. package/dist/chunk-ZHDFQITM.js +283 -0
  496. package/dist/chunk-ZHDFQITM.js.map +1 -0
  497. package/dist/chunk-ZLYCOBHW.js +75 -0
  498. package/dist/chunk-ZNJ5MTXV.js +89 -0
  499. package/dist/chunk-ZSGY3H53.js +155 -0
  500. package/dist/chunk-ZTPXACWB.js +1788 -0
  501. package/dist/chunk-ZUA3JMI6.js +107 -0
  502. package/dist/chunk-ZYAZUPPV.js +559 -0
  503. package/dist/composer.js +8 -8
  504. package/dist/computer-viewer-TDDO25AV.js +21 -0
  505. package/dist/connect.js +12 -12
  506. package/dist/desktop-dictation.js +12 -10
  507. package/dist/desktop-dictation.js.map +1 -1
  508. package/dist/desktop.js +2 -2
  509. package/dist/editor.js +2 -2
  510. package/dist/embedded-new-voice-2G3VLPVQ.js +24 -0
  511. package/dist/embedded-voice-T5IWOWGD.js +24 -0
  512. package/dist/fleet-decision-row-WM64KXP3.js +361 -0
  513. package/dist/in-chat-connect-model.js +5 -5
  514. package/dist/index.js +51 -51
  515. package/dist/interaction.js +5 -5
  516. package/dist/machines.js +3 -3
  517. package/dist/meetings-recorder.js +1 -1
  518. package/dist/meetings.js +40 -32
  519. package/dist/meetings.js.map +1 -1
  520. package/dist/messages/en.d.ts +3 -0
  521. package/dist/messages.js +1 -1
  522. package/dist/model-policy-picker-menu-SMC6J6QN.js +22 -0
  523. package/dist/payment-page-card-G4U63KUV.js +223 -0
  524. package/dist/platform-activity-row-BUZGZAKZ.js +128 -0
  525. package/dist/queue-surface-implementation-4KUZ4PJV.js +908 -0
  526. package/dist/realtime.js +4 -4
  527. package/dist/recorder-host-WF2RRR56.js +69 -0
  528. package/dist/recorder-host-WF2RRR56.js.map +1 -0
  529. package/dist/recordings.js +3 -3
  530. package/dist/sandbox-files-ESDMOFSD.js +27 -0
  531. package/dist/session-app.js +211 -209
  532. package/dist/session-connect-cards-Q53KMMYY.js +25 -0
  533. package/dist/session-list-model.js +2 -2
  534. package/dist/session-realtime-CF3I35WJ.js +30 -0
  535. package/dist/session-realtime.js +2 -2
  536. package/dist/session-ui.js +33 -31
  537. package/dist/session.js +5 -5
  538. package/dist/sites.js +2 -2
  539. package/dist/terminal.js +2 -2
  540. package/dist/this-computer.js +3 -3
  541. package/dist/timeline-annotation-markers-CJK4RYZ4.js +157 -0
  542. package/dist/timeline-annotation-selection-67GF5H26.js +208 -0
  543. package/dist/timeline-annotations-dialog-ONJPQDJQ.js +283 -0
  544. package/dist/ui/access-list.js +11 -9
  545. package/dist/ui/access-list.js.map +1 -1
  546. package/dist/ui/api-error.d.ts +6 -3
  547. package/dist/ui/api-error.js +2 -1
  548. package/dist/ui/cadence-picker.js +6 -4
  549. package/dist/ui/choice-cards.js +5 -3
  550. package/dist/ui/confirm-dialog.js +2 -2
  551. package/dist/ui/copy-field.js +5 -3
  552. package/dist/ui/detail-page.js +2 -2
  553. package/dist/ui/detail-sheet.js +2 -2
  554. package/dist/ui/diff-view.js +4 -3
  555. package/dist/ui/disclosure.js +3 -3
  556. package/dist/ui/email-chips-input.js +5 -3
  557. package/dist/ui/error-message.js +2 -1
  558. package/dist/ui/error-reference.d.ts +15 -0
  559. package/dist/ui/error-text.d.ts +10 -0
  560. package/dist/ui/error-text.js +9 -0
  561. package/dist/ui/error-text.js.map +1 -0
  562. package/dist/ui/field.js +4 -2
  563. package/dist/ui/flush-form-page.js +8 -6
  564. package/dist/ui/form-dialog.js +7 -5
  565. package/dist/ui/list-row.js +3 -3
  566. package/dist/ui/load-failure.js +3 -2
  567. package/dist/ui/load-failure.js.map +1 -1
  568. package/dist/ui/notice.js +3 -1
  569. package/dist/ui/relative-time.js +2 -2
  570. package/dist/ui/revision-history.js +9 -7
  571. package/dist/ui/revision-history.js.map +1 -1
  572. package/dist/ui/role-select.js +10 -8
  573. package/dist/ui/segmented-control.js +4 -2
  574. package/dist/ui/select-menu.js +5 -3
  575. package/dist/ui/setting-row.js +3 -1
  576. package/dist/ui/switch.js +4 -2
  577. package/dist/ui/usage-meter.js +3 -3
  578. package/dist/ui/word-list-row.js +4 -2
  579. package/dist/usage.js +2 -2
  580. package/dist/workbench.js +4 -4
  581. package/package.json +5 -6
  582. package/src/app/app-state.tsx +126 -14
  583. package/src/app/components/artifacts/site-data.tsx +2 -2
  584. package/src/app/components/artifacts/site-settings.tsx +2 -2
  585. package/src/app/components/rail/session-list.tsx +7 -8
  586. package/src/app/components/rail/session-shell.tsx +3 -3
  587. package/src/app/components/repository-picker.tsx +8 -1
  588. package/src/app/components/session/model-context-inspector.tsx +2 -1
  589. package/src/app/components/session/session-admin-access.tsx +2 -2
  590. package/src/app/lib/actions/chat-operations.ts +4 -4
  591. package/src/app/lib/archive-session.test.tsx +265 -2
  592. package/src/app/lib/archive-session.tsx +175 -9
  593. package/src/app/lib/copy-link.ts +2 -2
  594. package/src/app/lib/inbox.tsx +2 -2
  595. package/src/app/lib/session-failure-toasts.ts +3 -2
  596. package/src/app/lib/toast.test.tsx +215 -0
  597. package/src/app/lib/toast.tsx +67 -2
  598. package/src/app/personal-github-reconnect.test.tsx +356 -0
  599. package/src/app/routes/artifacts.tsx +1 -2
  600. package/src/components/tool-action-review.tsx +14 -1
  601. package/src/meetings/delete-meeting-dialog.tsx +2 -1
  602. package/src/meetings/meeting-ask.tsx +2 -1
  603. package/src/meetings/meeting-detail-page.tsx +2 -1
  604. package/src/meetings/meeting-notes.tsx +2 -1
  605. package/src/meetings/meeting-settings.tsx +4 -1
  606. package/src/meetings/meeting-transcript.tsx +4 -1
  607. package/src/meetings/recorder-context.tsx +10 -0
  608. package/src/meetings/recorder-host.test.tsx +60 -2
  609. package/src/meetings/recorder-host.tsx +16 -3
  610. package/src/meetings/recorder-panel.tsx +2 -1
  611. package/src/meetings/recorder-workspace.test.tsx +26 -1
  612. package/src/messages/en.ts +6 -0
  613. package/src/ui/api-error.test.ts +29 -5
  614. package/src/ui/api-error.tsx +10 -4
  615. package/src/ui/error-message.tsx +8 -0
  616. package/src/ui/error-reference.test.ts +54 -0
  617. package/src/ui/error-reference.ts +51 -0
  618. package/src/ui/error-text.test.tsx +66 -0
  619. package/src/ui/error-text.tsx +49 -0
  620. package/src/ui/field.tsx +4 -1
  621. package/src/ui/notice.tsx +7 -2
  622. package/src/ui/setting-row.tsx +4 -1
  623. package/styles/app.css +12 -0
  624. package/styles/compiled.css +9 -0
  625. package/dist/browser-viewer-NOP5EAUO.js +0 -23
  626. package/dist/chat-interactive-block-G7O44JHR.js +0 -18
  627. package/dist/chunk-26RWVLRD.js +0 -135
  628. package/dist/chunk-2AHTY7OT.js +0 -247
  629. package/dist/chunk-2GDNWKSC.js +0 -3670
  630. package/dist/chunk-2JENKGCE.js +0 -339
  631. package/dist/chunk-2KYQC4T5.js +0 -155
  632. package/dist/chunk-2RREGDQH.js +0 -708
  633. package/dist/chunk-2T7DX6KR.js +0 -353
  634. package/dist/chunk-2VB2O4FQ.js +0 -920
  635. package/dist/chunk-2VTTKH23.js +0 -94
  636. package/dist/chunk-2XNG2KNT.js +0 -172
  637. package/dist/chunk-2YC6JQRO.js +0 -399
  638. package/dist/chunk-2ZVRJRXC.js +0 -27
  639. package/dist/chunk-35737UT4.js +0 -162
  640. package/dist/chunk-366XZ4PM.js +0 -41
  641. package/dist/chunk-36MIDGAH.js +0 -199
  642. package/dist/chunk-3FD76LXM.js +0 -212
  643. package/dist/chunk-3OVIXY4O.js +0 -213
  644. package/dist/chunk-3OVIXY4O.js.map +0 -1
  645. package/dist/chunk-3QNRBEYH.js +0 -432
  646. package/dist/chunk-3QX55WLC.js +0 -15
  647. package/dist/chunk-3USJPT2S.js +0 -1022
  648. package/dist/chunk-42CMQ5VR.js +0 -251
  649. package/dist/chunk-4LPOWQJY.js +0 -42
  650. package/dist/chunk-4NBTZRKT.js +0 -79
  651. package/dist/chunk-4OXI6HCV.js +0 -118
  652. package/dist/chunk-4SZZAFYQ.js +0 -2317
  653. package/dist/chunk-4TQL3WP2.js +0 -140
  654. package/dist/chunk-4Y6BK7IU.js +0 -196
  655. package/dist/chunk-4YD7YZC5.js +0 -373
  656. package/dist/chunk-5DTST3TP.js +0 -81
  657. package/dist/chunk-5FH5LQVS.js +0 -130
  658. package/dist/chunk-5KWMYPJV.js +0 -847
  659. package/dist/chunk-5MUJDC6C.js +0 -84
  660. package/dist/chunk-5QM2WPKV.js +0 -41
  661. package/dist/chunk-5WUN7XPD.js +0 -1184
  662. package/dist/chunk-64PO2WXU.js +0 -1067
  663. package/dist/chunk-6AHATAAY.js +0 -431
  664. package/dist/chunk-6ED2YWBT.js +0 -56
  665. package/dist/chunk-6GXVYAGR.js +0 -170
  666. package/dist/chunk-6H4SJBPE.js +0 -85
  667. package/dist/chunk-6MT3HHUB.js +0 -84
  668. package/dist/chunk-6UHCBH4G.js +0 -198
  669. package/dist/chunk-6WLX3NR3.js +0 -198
  670. package/dist/chunk-73NXYYWE.js +0 -112
  671. package/dist/chunk-76ERNKIZ.js +0 -603
  672. package/dist/chunk-776QZ573.js +0 -57
  673. package/dist/chunk-7BYWOFVH.js +0 -171
  674. package/dist/chunk-7O5CGGIQ.js +0 -108
  675. package/dist/chunk-7QOHRZ67.js +0 -251
  676. package/dist/chunk-7WIDB4PL.js +0 -2058
  677. package/dist/chunk-7WKP3DYJ.js +0 -37
  678. package/dist/chunk-7XOVTPDI.js +0 -227
  679. package/dist/chunk-AB5MBIXY.js +0 -281
  680. package/dist/chunk-ADNMXBCX.js +0 -1193
  681. package/dist/chunk-AFBJTUFK.js +0 -202
  682. package/dist/chunk-ALVRWCXE.js +0 -61
  683. package/dist/chunk-AOHU6O3M.js +0 -247
  684. package/dist/chunk-AOHU6O3M.js.map +0 -1
  685. package/dist/chunk-APW4T4SW.js +0 -270
  686. package/dist/chunk-AXBSYWKX.js +0 -2656
  687. package/dist/chunk-B2I5ZW35.js +0 -422
  688. package/dist/chunk-B3LMRTRF.js +0 -223
  689. package/dist/chunk-BE2XENG2.js +0 -292
  690. package/dist/chunk-BE2XENG2.js.map +0 -1
  691. package/dist/chunk-BF4SADKX.js +0 -29
  692. package/dist/chunk-BKP43KK4.js +0 -1788
  693. package/dist/chunk-BM3NEZ6X.js +0 -781
  694. package/dist/chunk-BT3BAGB5.js +0 -216
  695. package/dist/chunk-BTSYDIVJ.js +0 -357
  696. package/dist/chunk-BUBNGKWG.js +0 -70
  697. package/dist/chunk-BVUJV5WR.js +0 -126
  698. package/dist/chunk-BZO5ZMUP.js +0 -27
  699. package/dist/chunk-C3HUF3M2.js +0 -157
  700. package/dist/chunk-C5QCAOES.js +0 -264
  701. package/dist/chunk-CGK6ALQU.js +0 -159
  702. package/dist/chunk-CPYGO76Q.js +0 -335
  703. package/dist/chunk-CQH4FWYA.js +0 -490
  704. package/dist/chunk-CZP5QXNB.js +0 -234
  705. package/dist/chunk-D2TOWEYH.js +0 -266
  706. package/dist/chunk-D6L4GHRH.js +0 -340
  707. package/dist/chunk-DKT3N37I.js +0 -50
  708. package/dist/chunk-DMMJIFKA.js +0 -84
  709. package/dist/chunk-DO74DQC7.js +0 -26
  710. package/dist/chunk-DOFJZ2JU.js +0 -83
  711. package/dist/chunk-DSXVY5WZ.js +0 -119
  712. package/dist/chunk-E337C2VK.js +0 -82
  713. package/dist/chunk-E6NRSRBE.js +0 -114
  714. package/dist/chunk-E6SQKHAU.js +0 -114
  715. package/dist/chunk-E7UIVD7F.js +0 -236
  716. package/dist/chunk-EGBII4CP.js +0 -229
  717. package/dist/chunk-EILSAQVJ.js +0 -200
  718. package/dist/chunk-ELL6HSYR.js +0 -307
  719. package/dist/chunk-EUBGLFFR.js +0 -73
  720. package/dist/chunk-EW6RNWSH.js +0 -212
  721. package/dist/chunk-EYUT5Y6V.js +0 -2599
  722. package/dist/chunk-F7U3QPZ3.js +0 -304
  723. package/dist/chunk-FBTJKSTM.js +0 -1270
  724. package/dist/chunk-FC2FTSK3.js +0 -2424
  725. package/dist/chunk-FOGNA3BU.js +0 -148
  726. package/dist/chunk-FQFKHNC7.js +0 -650
  727. package/dist/chunk-FTCHM755.js +0 -50
  728. package/dist/chunk-FXSHP4JZ.js +0 -3550
  729. package/dist/chunk-G6ZZC543.js +0 -818
  730. package/dist/chunk-G7FU6PUA.js +0 -100
  731. package/dist/chunk-GA4YEAMX.js +0 -3851
  732. package/dist/chunk-GE33BGB7.js +0 -12
  733. package/dist/chunk-GQ67HSJY.js +0 -570
  734. package/dist/chunk-GXXZ3WAK.js +0 -106
  735. package/dist/chunk-H2TCRX3H.js +0 -237
  736. package/dist/chunk-HLL4PBO7.js +0 -60
  737. package/dist/chunk-HLOEPV5C.js +0 -259
  738. package/dist/chunk-HUAGBS4O.js +0 -56
  739. package/dist/chunk-I36GSRUJ.js +0 -211
  740. package/dist/chunk-I6VBHT7S.js +0 -261
  741. package/dist/chunk-ICNNNOXE.js +0 -333
  742. package/dist/chunk-ICX64J4U.js +0 -172
  743. package/dist/chunk-ID36Y46W.js +0 -5046
  744. package/dist/chunk-ID36Y46W.js.map +0 -1
  745. package/dist/chunk-IGVVXLKJ.js +0 -559
  746. package/dist/chunk-IKJLSBUI.js +0 -2984
  747. package/dist/chunk-IKMUFDVS.js +0 -50
  748. package/dist/chunk-IKUNOX7F.js +0 -255
  749. package/dist/chunk-ILKDYBON.js +0 -288
  750. package/dist/chunk-IVYJX3OY.js +0 -187
  751. package/dist/chunk-JCY4CMDH.js +0 -107
  752. package/dist/chunk-JJZPLGIP.js +0 -474
  753. package/dist/chunk-JW33RV4V.js +0 -143
  754. package/dist/chunk-JWPA6ZPZ.js +0 -351
  755. package/dist/chunk-JZ4QXS6D.js +0 -50
  756. package/dist/chunk-K42OUZQ3.js +0 -386
  757. package/dist/chunk-K5TOVX5A.js +0 -206
  758. package/dist/chunk-K63HGHZX.js +0 -99
  759. package/dist/chunk-K6R5T44I.js +0 -75
  760. package/dist/chunk-KHJ5PXFM.js +0 -914
  761. package/dist/chunk-KJZRQ55O.js +0 -2319
  762. package/dist/chunk-KJZRQ55O.js.map +0 -1
  763. package/dist/chunk-KKI55ZMW.js +0 -65
  764. package/dist/chunk-KRPLAAFP.js +0 -199
  765. package/dist/chunk-KVFEZDBO.js +0 -134
  766. package/dist/chunk-L4I665WK.js +0 -45
  767. package/dist/chunk-L4OF77LE.js +0 -110
  768. package/dist/chunk-L4OF77LE.js.map +0 -1
  769. package/dist/chunk-LA5T52RM.js +0 -70
  770. package/dist/chunk-LM2W5YAT.js +0 -401
  771. package/dist/chunk-LQ62ECE6.js +0 -390
  772. package/dist/chunk-LQDUHU3Y.js +0 -71
  773. package/dist/chunk-LRJIYTZW.js +0 -4157
  774. package/dist/chunk-LRJIYTZW.js.map +0 -1
  775. package/dist/chunk-LRN6GYAZ.js +0 -138
  776. package/dist/chunk-M4SDVTKJ.js +0 -790
  777. package/dist/chunk-MA6O7CM6.js +0 -99
  778. package/dist/chunk-MBIBB6GI.js +0 -197
  779. package/dist/chunk-MF3ZFB4H.js +0 -199
  780. package/dist/chunk-MJJGJMYJ.js +0 -98
  781. package/dist/chunk-MLJADQFI.js +0 -4824
  782. package/dist/chunk-MQG7RV3B.js +0 -62
  783. package/dist/chunk-MTTGSQA5.js +0 -186
  784. package/dist/chunk-MW7Y3T55.js +0 -525
  785. package/dist/chunk-MYUFMVCH.js +0 -121
  786. package/dist/chunk-N3OARGH2.js +0 -61
  787. package/dist/chunk-NB2HMRT2.js +0 -353
  788. package/dist/chunk-NFDFYWMV.js +0 -141
  789. package/dist/chunk-NWGNFN3N.js +0 -1187
  790. package/dist/chunk-NWJRPDIO.js +0 -840
  791. package/dist/chunk-NWJRPDIO.js.map +0 -1
  792. package/dist/chunk-NXWBBZJV.js +0 -267
  793. package/dist/chunk-NY2QWROL.js +0 -71
  794. package/dist/chunk-O2IOPP3R.js +0 -848
  795. package/dist/chunk-O2UWH5RG.js +0 -141
  796. package/dist/chunk-O5YWDLYF.js +0 -393
  797. package/dist/chunk-OBMCZO7E.js +0 -121
  798. package/dist/chunk-OD3DCCCB.js +0 -132
  799. package/dist/chunk-OMH7R6I3.js +0 -390
  800. package/dist/chunk-OSA5EQG5.js +0 -113
  801. package/dist/chunk-OSJ3MUTZ.js +0 -2936
  802. package/dist/chunk-OWAYJ2OV.js +0 -368
  803. package/dist/chunk-OYXBFSGK.js +0 -269
  804. package/dist/chunk-PC2EBA5G.js +0 -4116
  805. package/dist/chunk-PC2EBA5G.js.map +0 -1
  806. package/dist/chunk-PC2MVXIP.js +0 -363
  807. package/dist/chunk-PC2MVXIP.js.map +0 -1
  808. package/dist/chunk-PENGLDR5.js +0 -309
  809. package/dist/chunk-PSMAWRPL.js +0 -191
  810. package/dist/chunk-PW4IMTYR.js +0 -702
  811. package/dist/chunk-PW54V7T5.js +0 -387
  812. package/dist/chunk-Q2EXYSMO.js +0 -24
  813. package/dist/chunk-Q2XJK5I4.js +0 -51
  814. package/dist/chunk-Q2XJK5I4.js.map +0 -1
  815. package/dist/chunk-Q4EFRI6X.js +0 -258
  816. package/dist/chunk-Q52CXW6C.js +0 -48
  817. package/dist/chunk-Q6XQ2R37.js +0 -184
  818. package/dist/chunk-QAJ53XBW.js +0 -23
  819. package/dist/chunk-QDTKECT4.js +0 -129
  820. package/dist/chunk-QE3ZFGI3.js +0 -43
  821. package/dist/chunk-QHHSUR2Y.js +0 -298
  822. package/dist/chunk-QHNVNR7B.js +0 -173
  823. package/dist/chunk-QIK2Q6N5.js +0 -376
  824. package/dist/chunk-QWL4L366.js +0 -38
  825. package/dist/chunk-R3J2PTVQ.js +0 -690
  826. package/dist/chunk-RBRX5ZS3.js +0 -319
  827. package/dist/chunk-REX6JIC7.js +0 -33
  828. package/dist/chunk-RGZ7EEC3.js +0 -537
  829. package/dist/chunk-RGZ7EEC3.js.map +0 -1
  830. package/dist/chunk-RIPS7GFR.js +0 -960
  831. package/dist/chunk-RTBZNFNV.js +0 -1354
  832. package/dist/chunk-RTBZNFNV.js.map +0 -1
  833. package/dist/chunk-SKMNW4SW.js +0 -187
  834. package/dist/chunk-SRFARKXC.js +0 -623
  835. package/dist/chunk-SWIHWCTW.js +0 -4461
  836. package/dist/chunk-TA5CFTO4.js +0 -103
  837. package/dist/chunk-TF4ZVJLI.js +0 -156
  838. package/dist/chunk-TG7DADJR.js +0 -9624
  839. package/dist/chunk-TI4R2ZD5.js +0 -623
  840. package/dist/chunk-TI4R2ZD5.js.map +0 -1
  841. package/dist/chunk-TNKWOUWP.js +0 -412
  842. package/dist/chunk-TNUSPXPW.js +0 -5555
  843. package/dist/chunk-TNUSPXPW.js.map +0 -1
  844. package/dist/chunk-TNYFHKVV.js +0 -366
  845. package/dist/chunk-TPMZBOFH.js +0 -178
  846. package/dist/chunk-TW3LKRJF.js +0 -263
  847. package/dist/chunk-TZAO65I4.js +0 -83
  848. package/dist/chunk-U5EFEMYU.js +0 -89
  849. package/dist/chunk-U6M4LS3M.js +0 -378
  850. package/dist/chunk-UI4HI5QK.js +0 -918
  851. package/dist/chunk-UJDOWCQ3.js +0 -272
  852. package/dist/chunk-UJUQ2QOX.js +0 -581
  853. package/dist/chunk-UQ3IM6FY.js +0 -133
  854. package/dist/chunk-UYE47LO6.js +0 -246
  855. package/dist/chunk-VADHIT26.js +0 -89
  856. package/dist/chunk-VFQ3H6CO.js +0 -163
  857. package/dist/chunk-VGUN6VB2.js +0 -188
  858. package/dist/chunk-VGWWEVSD.js +0 -723
  859. package/dist/chunk-VIEFJ2DM.js +0 -2469
  860. package/dist/chunk-VLXM36VS.js +0 -268
  861. package/dist/chunk-W3BFRR2G.js +0 -499
  862. package/dist/chunk-W5MPXR3A.js +0 -981
  863. package/dist/chunk-W5OWKVZG.js +0 -136
  864. package/dist/chunk-W6FRORMX.js +0 -486
  865. package/dist/chunk-W6FRORMX.js.map +0 -1
  866. package/dist/chunk-W7XROSZO.js +0 -232
  867. package/dist/chunk-W7XROSZO.js.map +0 -1
  868. package/dist/chunk-WEZ5PXZP.js +0 -403
  869. package/dist/chunk-WHWUWN2X.js +0 -197
  870. package/dist/chunk-WHWUWN2X.js.map +0 -1
  871. package/dist/chunk-WLEDGIVS.js +0 -114
  872. package/dist/chunk-WLEDGIVS.js.map +0 -1
  873. package/dist/chunk-WNDAKLHG.js +0 -281
  874. package/dist/chunk-WTJ4PLMU.js +0 -103
  875. package/dist/chunk-WV2KPJUW.js +0 -107
  876. package/dist/chunk-X3VY5EGY.js +0 -277
  877. package/dist/chunk-X3VY5EGY.js.map +0 -1
  878. package/dist/chunk-XDBYWVCW.js +0 -418
  879. package/dist/chunk-XF7MA4U5.js +0 -36
  880. package/dist/chunk-XF7MA4U5.js.map +0 -1
  881. package/dist/chunk-XOSQP3YA.js +0 -605
  882. package/dist/chunk-XYBV4ZJQ.js +0 -271
  883. package/dist/chunk-YBKVGLQR.js +0 -147
  884. package/dist/chunk-YDCUBUWH.js +0 -1583
  885. package/dist/chunk-YG6NARQY.js +0 -51
  886. package/dist/chunk-YG6NARQY.js.map +0 -1
  887. package/dist/chunk-YSVD5HI4.js +0 -278
  888. package/dist/chunk-YT3WGNG6.js +0 -290
  889. package/dist/chunk-YYICQDK4.js +0 -414
  890. package/dist/chunk-YYLMZLI6.js +0 -686
  891. package/dist/chunk-ZAMTKG5U.js +0 -95
  892. package/dist/chunk-ZDLYSXKN.js +0 -111
  893. package/dist/chunk-ZG447FSS.js +0 -194
  894. package/dist/chunk-ZIT5KD4Q.js +0 -264
  895. package/dist/chunk-ZUDOVDKR.js +0 -3064
  896. package/dist/chunk-ZW2ECJ3A.js +0 -451
  897. package/dist/computer-viewer-LPZ763KF.js +0 -21
  898. package/dist/embedded-new-voice-YVMKSLKJ.js +0 -24
  899. package/dist/embedded-voice-BJPQFXSU.js +0 -24
  900. package/dist/fleet-decision-row-AA4H5CDT.js +0 -361
  901. package/dist/model-policy-picker-menu-HSMWVO4P.js +0 -22
  902. package/dist/payment-page-card-3LTSFJGN.js +0 -223
  903. package/dist/platform-activity-row-5VYV6TX4.js +0 -128
  904. package/dist/queue-surface-implementation-NXHZUKD2.js +0 -908
  905. package/dist/recorder-host-ZKRWTDBM.js +0 -57
  906. package/dist/recorder-host-ZKRWTDBM.js.map +0 -1
  907. package/dist/sandbox-files-YCMLQUFU.js +0 -27
  908. package/dist/session-connect-cards-KSQLMRM5.js +0 -25
  909. package/dist/session-realtime-ZR6JLG3Y.js +0 -30
  910. package/dist/timeline-annotation-markers-YAHDPWVG.js +0 -157
  911. package/dist/timeline-annotation-selection-KHXNCEJP.js +0 -208
  912. package/dist/timeline-annotations-dialog-Y4XD3N7B.js +0 -283
  913. /package/dist/{browser-viewer-NOP5EAUO.js.map → browser-viewer-TC27OCIP.js.map} +0 -0
  914. /package/dist/{chat-interactive-block-G7O44JHR.js.map → chat-interactive-block-RWPQBHVS.js.map} +0 -0
  915. /package/dist/{chunk-EGBII4CP.js.map → chunk-2BDT3UZQ.js.map} +0 -0
  916. /package/dist/{chunk-4YD7YZC5.js.map → chunk-2CLNIEK4.js.map} +0 -0
  917. /package/dist/{chunk-ZW2ECJ3A.js.map → chunk-2FSBSCZJ.js.map} +0 -0
  918. /package/dist/{chunk-KRPLAAFP.js.map → chunk-2I7HDP53.js.map} +0 -0
  919. /package/dist/{chunk-3QX55WLC.js.map → chunk-2INLDVK3.js.map} +0 -0
  920. /package/dist/{chunk-BVUJV5WR.js.map → chunk-2KALVELR.js.map} +0 -0
  921. /package/dist/{chunk-XDBYWVCW.js.map → chunk-2M3J7ZWQ.js.map} +0 -0
  922. /package/dist/{chunk-2RREGDQH.js.map → chunk-2OP6WLGV.js.map} +0 -0
  923. /package/dist/{chunk-OSJ3MUTZ.js.map → chunk-2RG7NIAS.js.map} +0 -0
  924. /package/dist/{chunk-26RWVLRD.js.map → chunk-2STUPWEL.js.map} +0 -0
  925. /package/dist/{chunk-XYBV4ZJQ.js.map → chunk-2YUOVM3G.js.map} +0 -0
  926. /package/dist/{chunk-2GDNWKSC.js.map → chunk-2Z3NQNTM.js.map} +0 -0
  927. /package/dist/{chunk-2VB2O4FQ.js.map → chunk-3CPWWGNK.js.map} +0 -0
  928. /package/dist/{chunk-7WKP3DYJ.js.map → chunk-3ED2U6XE.js.map} +0 -0
  929. /package/dist/{chunk-BT3BAGB5.js.map → chunk-3GZA4BUW.js.map} +0 -0
  930. /package/dist/{chunk-3USJPT2S.js.map → chunk-3IK6UYO6.js.map} +0 -0
  931. /package/dist/{chunk-6AHATAAY.js.map → chunk-3PZ7JZI2.js.map} +0 -0
  932. /package/dist/{chunk-JZ4QXS6D.js.map → chunk-4DVJ6ONS.js.map} +0 -0
  933. /package/dist/{chunk-5QM2WPKV.js.map → chunk-4E3ZJRTZ.js.map} +0 -0
  934. /package/dist/{chunk-NFDFYWMV.js.map → chunk-4SAWSRAA.js.map} +0 -0
  935. /package/dist/{chunk-ELL6HSYR.js.map → chunk-53AGXXZM.js.map} +0 -0
  936. /package/dist/{chunk-G6ZZC543.js.map → chunk-54YW6SZZ.js.map} +0 -0
  937. /package/dist/{chunk-4SZZAFYQ.js.map → chunk-57AZS3IE.js.map} +0 -0
  938. /package/dist/{chunk-JW33RV4V.js.map → chunk-5CPEEAFD.js.map} +0 -0
  939. /package/dist/{chunk-D6L4GHRH.js.map → chunk-5EWSRZ2Y.js.map} +0 -0
  940. /package/dist/{chunk-PW54V7T5.js.map → chunk-5IE76VCY.js.map} +0 -0
  941. /package/dist/{chunk-6GXVYAGR.js.map → chunk-5NWEKLDZ.js.map} +0 -0
  942. /package/dist/{chunk-6UHCBH4G.js.map → chunk-5O2FCCHZ.js.map} +0 -0
  943. /package/dist/{chunk-2YC6JQRO.js.map → chunk-5QAY6K77.js.map} +0 -0
  944. /package/dist/{chunk-EYUT5Y6V.js.map → chunk-6DK6Z4UN.js.map} +0 -0
  945. /package/dist/{chunk-PW4IMTYR.js.map → chunk-6DVCC7QS.js.map} +0 -0
  946. /package/dist/{chunk-7WIDB4PL.js.map → chunk-6JHU2UBS.js.map} +0 -0
  947. /package/dist/{chunk-CQH4FWYA.js.map → chunk-6PZ7OBYU.js.map} +0 -0
  948. /package/dist/{chunk-VFQ3H6CO.js.map → chunk-6WGRDRMA.js.map} +0 -0
  949. /package/dist/{chunk-MTTGSQA5.js.map → chunk-77WAKEAH.js.map} +0 -0
  950. /package/dist/{chunk-O5YWDLYF.js.map → chunk-7TDO3CUM.js.map} +0 -0
  951. /package/dist/{chunk-2AHTY7OT.js.map → chunk-7TIX2UAR.js.map} +0 -0
  952. /package/dist/{chunk-FOGNA3BU.js.map → chunk-7V5REBCP.js.map} +0 -0
  953. /package/dist/{chunk-2JENKGCE.js.map → chunk-7VMZGLYI.js.map} +0 -0
  954. /package/dist/{chunk-E7UIVD7F.js.map → chunk-7W37NS3I.js.map} +0 -0
  955. /package/dist/{chunk-ZDLYSXKN.js.map → chunk-7X6SDK2C.js.map} +0 -0
  956. /package/dist/{chunk-ZAMTKG5U.js.map → chunk-7ZNUHRP5.js.map} +0 -0
  957. /package/dist/{chunk-DMMJIFKA.js.map → chunk-A36PZALD.js.map} +0 -0
  958. /package/dist/{chunk-WV2KPJUW.js.map → chunk-AUI6VA63.js.map} +0 -0
  959. /package/dist/{chunk-Q2EXYSMO.js.map → chunk-AW2MQB37.js.map} +0 -0
  960. /package/dist/{chunk-6WLX3NR3.js.map → chunk-AWKES45Y.js.map} +0 -0
  961. /package/dist/{chunk-OD3DCCCB.js.map → chunk-AXHZYXUV.js.map} +0 -0
  962. /package/dist/{chunk-QDTKECT4.js.map → chunk-BHNSJVBC.js.map} +0 -0
  963. /package/dist/{chunk-FTCHM755.js.map → chunk-BJEJFISW.js.map} +0 -0
  964. /package/dist/{chunk-B2I5ZW35.js.map → chunk-BJFH6JI5.js.map} +0 -0
  965. /package/dist/{chunk-RIPS7GFR.js.map → chunk-BMICEQZQ.js.map} +0 -0
  966. /package/dist/{chunk-BF4SADKX.js.map → chunk-BTLBYBLU.js.map} +0 -0
  967. /package/dist/{chunk-U5EFEMYU.js.map → chunk-BXBDYNRP.js.map} +0 -0
  968. /package/dist/{chunk-BTSYDIVJ.js.map → chunk-C372BFOV.js.map} +0 -0
  969. /package/dist/{chunk-MLJADQFI.js.map → chunk-CMKGILJK.js.map} +0 -0
  970. /package/dist/{chunk-DKT3N37I.js.map → chunk-CRAOSVHC.js.map} +0 -0
  971. /package/dist/{chunk-WNDAKLHG.js.map → chunk-CRU35QQH.js.map} +0 -0
  972. /package/dist/{chunk-2XNG2KNT.js.map → chunk-CUIWCGMA.js.map} +0 -0
  973. /package/dist/{chunk-QWL4L366.js.map → chunk-D5TWNFFE.js.map} +0 -0
  974. /package/dist/{chunk-SWIHWCTW.js.map → chunk-DF5EAHDN.js.map} +0 -0
  975. /package/dist/{chunk-HUAGBS4O.js.map → chunk-DJAXC5OK.js.map} +0 -0
  976. /package/dist/{chunk-FXSHP4JZ.js.map → chunk-DXBYWSL5.js.map} +0 -0
  977. /package/dist/{chunk-5MUJDC6C.js.map → chunk-DXR5PDFP.js.map} +0 -0
  978. /package/dist/{chunk-NXWBBZJV.js.map → chunk-DZWARC4M.js.map} +0 -0
  979. /package/dist/{chunk-GXXZ3WAK.js.map → chunk-DZXEDSQI.js.map} +0 -0
  980. /package/dist/{chunk-Q52CXW6C.js.map → chunk-E7XERZWC.js.map} +0 -0
  981. /package/dist/{chunk-4NBTZRKT.js.map → chunk-ECJBYNLJ.js.map} +0 -0
  982. /package/dist/{chunk-QE3ZFGI3.js.map → chunk-EDI6SJ2N.js.map} +0 -0
  983. /package/dist/{chunk-E6NRSRBE.js.map → chunk-EWSOC6WF.js.map} +0 -0
  984. /package/dist/{chunk-TA5CFTO4.js.map → chunk-F2OPHAUN.js.map} +0 -0
  985. /package/dist/{chunk-5DTST3TP.js.map → chunk-F4ISQGGM.js.map} +0 -0
  986. /package/dist/{chunk-MBIBB6GI.js.map → chunk-FO4LYKJL.js.map} +0 -0
  987. /package/dist/{chunk-EUBGLFFR.js.map → chunk-FPXASDG5.js.map} +0 -0
  988. /package/dist/{chunk-C3HUF3M2.js.map → chunk-FVXBNBHO.js.map} +0 -0
  989. /package/dist/{chunk-W5MPXR3A.js.map → chunk-FZC5N55X.js.map} +0 -0
  990. /package/dist/{chunk-MA6O7CM6.js.map → chunk-GAVYGBFI.js.map} +0 -0
  991. /package/dist/{chunk-REX6JIC7.js.map → chunk-GKVJIDHF.js.map} +0 -0
  992. /package/dist/{chunk-EW6RNWSH.js.map → chunk-GVN5SZLX.js.map} +0 -0
  993. /package/dist/{chunk-KVFEZDBO.js.map → chunk-H3T7IWNA.js.map} +0 -0
  994. /package/dist/{chunk-I6VBHT7S.js.map → chunk-HAX4LCR5.js.map} +0 -0
  995. /package/dist/{chunk-OBMCZO7E.js.map → chunk-HC4JFZVU.js.map} +0 -0
  996. /package/dist/{chunk-UJUQ2QOX.js.map → chunk-HEFPPMBQ.js.map} +0 -0
  997. /package/dist/{chunk-DOFJZ2JU.js.map → chunk-HNLR7Q4Z.js.map} +0 -0
  998. /package/dist/{chunk-GE33BGB7.js.map → chunk-HSOXMJOT.js.map} +0 -0
  999. /package/dist/{chunk-AB5MBIXY.js.map → chunk-I4MRDSUF.js.map} +0 -0
  1000. /package/dist/{chunk-AFBJTUFK.js.map → chunk-I4QEJ62Y.js.map} +0 -0
  1001. /package/dist/{chunk-6ED2YWBT.js.map → chunk-I5B5L6Q4.js.map} +0 -0
  1002. /package/dist/{chunk-C5QCAOES.js.map → chunk-I5QZJODL.js.map} +0 -0
  1003. /package/dist/{chunk-76ERNKIZ.js.map → chunk-I7ITSXSJ.js.map} +0 -0
  1004. /package/dist/{chunk-OMH7R6I3.js.map → chunk-I7XIZRFD.js.map} +0 -0
  1005. /package/dist/{chunk-E337C2VK.js.map → chunk-IDANQPRH.js.map} +0 -0
  1006. /package/dist/{chunk-3FD76LXM.js.map → chunk-IFB3WJ36.js.map} +0 -0
  1007. /package/dist/{chunk-ZIT5KD4Q.js.map → chunk-IHTAKKTK.js.map} +0 -0
  1008. /package/dist/{chunk-QHNVNR7B.js.map → chunk-ILDXWY37.js.map} +0 -0
  1009. /package/dist/{chunk-GQ67HSJY.js.map → chunk-IMDQUHBJ.js.map} +0 -0
  1010. /package/dist/{chunk-DSXVY5WZ.js.map → chunk-IMZCQBOT.js.map} +0 -0
  1011. /package/dist/{chunk-WEZ5PXZP.js.map → chunk-IXPTECSC.js.map} +0 -0
  1012. /package/dist/{chunk-NY2QWROL.js.map → chunk-J255A3N5.js.map} +0 -0
  1013. /package/dist/{chunk-O2UWH5RG.js.map → chunk-J5F5HPPW.js.map} +0 -0
  1014. /package/dist/{chunk-VIEFJ2DM.js.map → chunk-JEA3QDX7.js.map} +0 -0
  1015. /package/dist/{chunk-TF4ZVJLI.js.map → chunk-JEUPAVYY.js.map} +0 -0
  1016. /package/dist/{chunk-ZG447FSS.js.map → chunk-JKHKLL5W.js.map} +0 -0
  1017. /package/dist/{chunk-FQFKHNC7.js.map → chunk-JQL7ZH6C.js.map} +0 -0
  1018. /package/dist/{chunk-776QZ573.js.map → chunk-JWB44UGJ.js.map} +0 -0
  1019. /package/dist/{chunk-ICNNNOXE.js.map → chunk-JZ4NLCAP.js.map} +0 -0
  1020. /package/dist/{chunk-TNKWOUWP.js.map → chunk-K2A5PXQ5.js.map} +0 -0
  1021. /package/dist/{chunk-SRFARKXC.js.map → chunk-K56XV3C3.js.map} +0 -0
  1022. /package/dist/{chunk-QAJ53XBW.js.map → chunk-K6GAXXVA.js.map} +0 -0
  1023. /package/dist/{chunk-MF3ZFB4H.js.map → chunk-KCBMFSMS.js.map} +0 -0
  1024. /package/dist/{chunk-VLXM36VS.js.map → chunk-KF2FV3ZJ.js.map} +0 -0
  1025. /package/dist/{chunk-YSVD5HI4.js.map → chunk-KJD65EJP.js.map} +0 -0
  1026. /package/dist/{chunk-K42OUZQ3.js.map → chunk-KLEUWIMZ.js.map} +0 -0
  1027. /package/dist/{chunk-PENGLDR5.js.map → chunk-KODELWYT.js.map} +0 -0
  1028. /package/dist/{chunk-TZAO65I4.js.map → chunk-KRDR5RJD.js.map} +0 -0
  1029. /package/dist/{chunk-KHJ5PXFM.js.map → chunk-KUDGXAF7.js.map} +0 -0
  1030. /package/dist/{chunk-6H4SJBPE.js.map → chunk-KYS77RPN.js.map} +0 -0
  1031. /package/dist/{chunk-OWAYJ2OV.js.map → chunk-L7YTNTIK.js.map} +0 -0
  1032. /package/dist/{chunk-YYLMZLI6.js.map → chunk-LHPNABDH.js.map} +0 -0
  1033. /package/dist/{chunk-LM2W5YAT.js.map → chunk-MFROMEKA.js.map} +0 -0
  1034. /package/dist/{chunk-AXBSYWKX.js.map → chunk-MIHN76LX.js.map} +0 -0
  1035. /package/dist/{chunk-4LPOWQJY.js.map → chunk-MIYFS2XN.js.map} +0 -0
  1036. /package/dist/{chunk-KKI55ZMW.js.map → chunk-MJUCFQMS.js.map} +0 -0
  1037. /package/dist/{chunk-ZUDOVDKR.js.map → chunk-MM4FNWI4.js.map} +0 -0
  1038. /package/dist/{chunk-M4SDVTKJ.js.map → chunk-MNZG4OHU.js.map} +0 -0
  1039. /package/dist/{chunk-EILSAQVJ.js.map → chunk-N6AACDUW.js.map} +0 -0
  1040. /package/dist/{chunk-BM3NEZ6X.js.map → chunk-NC55IFN3.js.map} +0 -0
  1041. /package/dist/{chunk-MJJGJMYJ.js.map → chunk-NC7PVOEK.js.map} +0 -0
  1042. /package/dist/{chunk-LA5T52RM.js.map → chunk-NCYMNCJO.js.map} +0 -0
  1043. /package/dist/{chunk-HLOEPV5C.js.map → chunk-ND2BXV3P.js.map} +0 -0
  1044. /package/dist/{chunk-UJDOWCQ3.js.map → chunk-NDBTFUO6.js.map} +0 -0
  1045. /package/dist/{chunk-K5TOVX5A.js.map → chunk-NDQJZ7HF.js.map} +0 -0
  1046. /package/dist/{chunk-35737UT4.js.map → chunk-NGJJJPZZ.js.map} +0 -0
  1047. /package/dist/{chunk-42CMQ5VR.js.map → chunk-NJTSNNE7.js.map} +0 -0
  1048. /package/dist/{chunk-FBTJKSTM.js.map → chunk-NRTE7DNV.js.map} +0 -0
  1049. /package/dist/{chunk-YT3WGNG6.js.map → chunk-NULUNM7H.js.map} +0 -0
  1050. /package/dist/{chunk-7XOVTPDI.js.map → chunk-NUNZS36W.js.map} +0 -0
  1051. /package/dist/{chunk-FC2FTSK3.js.map → chunk-NW53H5RW.js.map} +0 -0
  1052. /package/dist/{chunk-TW3LKRJF.js.map → chunk-NXCMHIKI.js.map} +0 -0
  1053. /package/dist/{chunk-CGK6ALQU.js.map → chunk-O3LKCBP5.js.map} +0 -0
  1054. /package/dist/{chunk-QIK2Q6N5.js.map → chunk-O6N4ABCA.js.map} +0 -0
  1055. /package/dist/{chunk-73NXYYWE.js.map → chunk-O732GAFC.js.map} +0 -0
  1056. /package/dist/{chunk-R3J2PTVQ.js.map → chunk-OF4TIKYC.js.map} +0 -0
  1057. /package/dist/{chunk-BUBNGKWG.js.map → chunk-OMPVOMPP.js.map} +0 -0
  1058. /package/dist/{chunk-4OXI6HCV.js.map → chunk-OPJJSKUK.js.map} +0 -0
  1059. /package/dist/{chunk-4Y6BK7IU.js.map → chunk-OPWCMA4D.js.map} +0 -0
  1060. /package/dist/{chunk-ADNMXBCX.js.map → chunk-ORJPS5VN.js.map} +0 -0
  1061. /package/dist/{chunk-SKMNW4SW.js.map → chunk-OSY5K7L7.js.map} +0 -0
  1062. /package/dist/{chunk-L4I665WK.js.map → chunk-OV6QJRT4.js.map} +0 -0
  1063. /package/dist/{chunk-7O5CGGIQ.js.map → chunk-OVKYVZMW.js.map} +0 -0
  1064. /package/dist/{chunk-7BYWOFVH.js.map → chunk-OZCBM3UC.js.map} +0 -0
  1065. /package/dist/{chunk-ALVRWCXE.js.map → chunk-P3A2EINJ.js.map} +0 -0
  1066. /package/dist/{chunk-BZO5ZMUP.js.map → chunk-PTAG4PDC.js.map} +0 -0
  1067. /package/dist/{chunk-QHHSUR2Y.js.map → chunk-PTF5B7TJ.js.map} +0 -0
  1068. /package/dist/{chunk-O2IOPP3R.js.map → chunk-Q3DPEYX4.js.map} +0 -0
  1069. /package/dist/{chunk-G7FU6PUA.js.map → chunk-QB2KMIDP.js.map} +0 -0
  1070. /package/dist/{chunk-64PO2WXU.js.map → chunk-QCSJ4CWE.js.map} +0 -0
  1071. /package/dist/{chunk-YYICQDK4.js.map → chunk-QIOQ2NPQ.js.map} +0 -0
  1072. /package/dist/{chunk-NB2HMRT2.js.map → chunk-QK5EFEUT.js.map} +0 -0
  1073. /package/dist/{chunk-366XZ4PM.js.map → chunk-QPQBLYQJ.js.map} +0 -0
  1074. /package/dist/{chunk-Q6XQ2R37.js.map → chunk-QPSGCC5D.js.map} +0 -0
  1075. /package/dist/{chunk-JJZPLGIP.js.map → chunk-QZAAUQRN.js.map} +0 -0
  1076. /package/dist/{chunk-VGUN6VB2.js.map → chunk-RGBI63KJ.js.map} +0 -0
  1077. /package/dist/{chunk-LRN6GYAZ.js.map → chunk-RLBKLAEY.js.map} +0 -0
  1078. /package/dist/{chunk-F7U3QPZ3.js.map → chunk-RMFKVOM7.js.map} +0 -0
  1079. /package/dist/{chunk-Q4EFRI6X.js.map → chunk-ROKQU7WG.js.map} +0 -0
  1080. /package/dist/{chunk-7QOHRZ67.js.map → chunk-RPVREAU7.js.map} +0 -0
  1081. /package/dist/{chunk-VGWWEVSD.js.map → chunk-RQKLF42C.js.map} +0 -0
  1082. /package/dist/{chunk-2VTTKH23.js.map → chunk-SEO7TICN.js.map} +0 -0
  1083. /package/dist/{chunk-3QNRBEYH.js.map → chunk-SHHJCL7X.js.map} +0 -0
  1084. /package/dist/{chunk-E6SQKHAU.js.map → chunk-SIRLACNZ.js.map} +0 -0
  1085. /package/dist/{chunk-H2TCRX3H.js.map → chunk-SKPHMYAA.js.map} +0 -0
  1086. /package/dist/{chunk-YDCUBUWH.js.map → chunk-SODC7T6L.js.map} +0 -0
  1087. /package/dist/{chunk-TNYFHKVV.js.map → chunk-SQJIKMN3.js.map} +0 -0
  1088. /package/dist/{chunk-DO74DQC7.js.map → chunk-SVINDKVW.js.map} +0 -0
  1089. /package/dist/{chunk-CPYGO76Q.js.map → chunk-SYCDHPZF.js.map} +0 -0
  1090. /package/dist/{chunk-UQ3IM6FY.js.map → chunk-T2QX3FDP.js.map} +0 -0
  1091. /package/dist/{chunk-NWGNFN3N.js.map → chunk-T3OWFVMS.js.map} +0 -0
  1092. /package/dist/{chunk-N3OARGH2.js.map → chunk-T6XI5FLY.js.map} +0 -0
  1093. /package/dist/{chunk-MQG7RV3B.js.map → chunk-T7OXJZCX.js.map} +0 -0
  1094. /package/dist/{chunk-2T7DX6KR.js.map → chunk-TAT5USZN.js.map} +0 -0
  1095. /package/dist/{chunk-ICX64J4U.js.map → chunk-TPQTRNER.js.map} +0 -0
  1096. /package/dist/{chunk-D2TOWEYH.js.map → chunk-TUIN4MB7.js.map} +0 -0
  1097. /package/dist/{chunk-LQDUHU3Y.js.map → chunk-TX3VECZU.js.map} +0 -0
  1098. /package/dist/{chunk-TG7DADJR.js.map → chunk-TXLIEOJX.js.map} +0 -0
  1099. /package/dist/{chunk-2ZVRJRXC.js.map → chunk-U3DN4HEY.js.map} +0 -0
  1100. /package/dist/{chunk-PSMAWRPL.js.map → chunk-U7XM7CB4.js.map} +0 -0
  1101. /package/dist/{chunk-4TQL3WP2.js.map → chunk-UJK53QFL.js.map} +0 -0
  1102. /package/dist/{chunk-RBRX5ZS3.js.map → chunk-UMTXA2TH.js.map} +0 -0
  1103. /package/dist/{chunk-36MIDGAH.js.map → chunk-UPDSXFK5.js.map} +0 -0
  1104. /package/dist/{chunk-OYXBFSGK.js.map → chunk-UTIAXH52.js.map} +0 -0
  1105. /package/dist/{chunk-5WUN7XPD.js.map → chunk-UVN5TMHU.js.map} +0 -0
  1106. /package/dist/{chunk-UYE47LO6.js.map → chunk-VGYXW3VG.js.map} +0 -0
  1107. /package/dist/{chunk-IKUNOX7F.js.map → chunk-VS7AHPCZ.js.map} +0 -0
  1108. /package/dist/{chunk-MYUFMVCH.js.map → chunk-VTTAJOQ7.js.map} +0 -0
  1109. /package/dist/{chunk-K63HGHZX.js.map → chunk-VWPOLUAO.js.map} +0 -0
  1110. /package/dist/{chunk-GA4YEAMX.js.map → chunk-X3MWB2QU.js.map} +0 -0
  1111. /package/dist/{chunk-I36GSRUJ.js.map → chunk-X6KAJI3V.js.map} +0 -0
  1112. /package/dist/{chunk-IKMUFDVS.js.map → chunk-XBLRHV5R.js.map} +0 -0
  1113. /package/dist/{chunk-XOSQP3YA.js.map → chunk-XDFP2LMW.js.map} +0 -0
  1114. /package/dist/{chunk-MW7Y3T55.js.map → chunk-XEQMZB3C.js.map} +0 -0
  1115. /package/dist/{chunk-B3LMRTRF.js.map → chunk-XEYLT5VA.js.map} +0 -0
  1116. /package/dist/{chunk-UI4HI5QK.js.map → chunk-XHIQ5I6N.js.map} +0 -0
  1117. /package/dist/{chunk-U6M4LS3M.js.map → chunk-XLH7QY2R.js.map} +0 -0
  1118. /package/dist/{chunk-OSA5EQG5.js.map → chunk-XWFAMUZQ.js.map} +0 -0
  1119. /package/dist/{chunk-6MT3HHUB.js.map → chunk-Y4OBB2VN.js.map} +0 -0
  1120. /package/dist/{chunk-CZP5QXNB.js.map → chunk-YCVD6CI3.js.map} +0 -0
  1121. /package/dist/{chunk-APW4T4SW.js.map → chunk-YENLNISG.js.map} +0 -0
  1122. /package/dist/{chunk-JWPA6ZPZ.js.map → chunk-YIRVLKAX.js.map} +0 -0
  1123. /package/dist/{chunk-LQ62ECE6.js.map → chunk-YL73CVNK.js.map} +0 -0
  1124. /package/dist/{chunk-ILKDYBON.js.map → chunk-YLS6QE5G.js.map} +0 -0
  1125. /package/dist/{chunk-YBKVGLQR.js.map → chunk-YPWU5KPE.js.map} +0 -0
  1126. /package/dist/{chunk-IKJLSBUI.js.map → chunk-YQXTDZSU.js.map} +0 -0
  1127. /package/dist/{chunk-TPMZBOFH.js.map → chunk-YSJEAAOL.js.map} +0 -0
  1128. /package/dist/{chunk-W3BFRR2G.js.map → chunk-YWIFM7D7.js.map} +0 -0
  1129. /package/dist/{chunk-WTJ4PLMU.js.map → chunk-YWVI6ZMK.js.map} +0 -0
  1130. /package/dist/{chunk-5KWMYPJV.js.map → chunk-Z4FMAFNH.js.map} +0 -0
  1131. /package/dist/{chunk-W5OWKVZG.js.map → chunk-Z654FWNU.js.map} +0 -0
  1132. /package/dist/{chunk-5FH5LQVS.js.map → chunk-Z7Y523PS.js.map} +0 -0
  1133. /package/dist/{chunk-HLL4PBO7.js.map → chunk-ZD67RM6G.js.map} +0 -0
  1134. /package/dist/{chunk-IVYJX3OY.js.map → chunk-ZEG4VPBL.js.map} +0 -0
  1135. /package/dist/{chunk-K6R5T44I.js.map → chunk-ZLYCOBHW.js.map} +0 -0
  1136. /package/dist/{chunk-VADHIT26.js.map → chunk-ZNJ5MTXV.js.map} +0 -0
  1137. /package/dist/{chunk-2KYQC4T5.js.map → chunk-ZSGY3H53.js.map} +0 -0
  1138. /package/dist/{chunk-BKP43KK4.js.map → chunk-ZTPXACWB.js.map} +0 -0
  1139. /package/dist/{chunk-JCY4CMDH.js.map → chunk-ZUA3JMI6.js.map} +0 -0
  1140. /package/dist/{chunk-IGVVXLKJ.js.map → chunk-ZYAZUPPV.js.map} +0 -0
  1141. /package/dist/{computer-viewer-LPZ763KF.js.map → computer-viewer-TDDO25AV.js.map} +0 -0
  1142. /package/dist/{embedded-new-voice-YVMKSLKJ.js.map → embedded-new-voice-2G3VLPVQ.js.map} +0 -0
  1143. /package/dist/{embedded-voice-BJPQFXSU.js.map → embedded-voice-T5IWOWGD.js.map} +0 -0
  1144. /package/dist/{fleet-decision-row-AA4H5CDT.js.map → fleet-decision-row-WM64KXP3.js.map} +0 -0
  1145. /package/dist/{model-policy-picker-menu-HSMWVO4P.js.map → model-policy-picker-menu-SMC6J6QN.js.map} +0 -0
  1146. /package/dist/{payment-page-card-3LTSFJGN.js.map → payment-page-card-G4U63KUV.js.map} +0 -0
  1147. /package/dist/{platform-activity-row-5VYV6TX4.js.map → platform-activity-row-BUZGZAKZ.js.map} +0 -0
  1148. /package/dist/{queue-surface-implementation-NXHZUKD2.js.map → queue-surface-implementation-4KUZ4PJV.js.map} +0 -0
  1149. /package/dist/{sandbox-files-YCMLQUFU.js.map → sandbox-files-ESDMOFSD.js.map} +0 -0
  1150. /package/dist/{session-connect-cards-KSQLMRM5.js.map → session-connect-cards-Q53KMMYY.js.map} +0 -0
  1151. /package/dist/{session-realtime-ZR6JLG3Y.js.map → session-realtime-CF3I35WJ.js.map} +0 -0
  1152. /package/dist/{timeline-annotation-markers-YAHDPWVG.js.map → timeline-annotation-markers-CJK4RYZ4.js.map} +0 -0
  1153. /package/dist/{timeline-annotation-selection-KHXNCEJP.js.map → timeline-annotation-selection-67GF5H26.js.map} +0 -0
  1154. /package/dist/{timeline-annotations-dialog-Y4XD3N7B.js.map → timeline-annotations-dialog-ONJPQDJQ.js.map} +0 -0
@@ -0,0 +1,2058 @@
1
+ "use client";
2
+ import {
3
+ InlineDisabledReason,
4
+ SelectMenuPanel
5
+ } from "./chunk-3CPWWGNK.js";
6
+ import {
7
+ MENU_CHECK_CLASS,
8
+ MENU_SURFACE_CLASS
9
+ } from "./chunk-5OTQA7CM.js";
10
+ import {
11
+ containedPortal
12
+ } from "./chunk-UD6AAZSC.js";
13
+ import {
14
+ cn
15
+ } from "./chunk-TXS65BB2.js";
16
+ import {
17
+ createOpenGeniText,
18
+ useOpenGeniText
19
+ } from "./chunk-7T2ZE3VT.js";
20
+
21
+ // src/ui/cadence-picker.tsx
22
+ import {
23
+ useEffect,
24
+ useId,
25
+ useMemo,
26
+ useRef,
27
+ useState
28
+ } from "react";
29
+ import {
30
+ CalendarClockIcon,
31
+ CalendarIcon,
32
+ CheckIcon,
33
+ ChevronDownIcon,
34
+ ChevronLeftIcon,
35
+ ChevronRightIcon,
36
+ CircleAlertIcon,
37
+ GlobeIcon,
38
+ SearchIcon
39
+ } from "lucide-react";
40
+ import { Popover as PopoverPrimitive, Select as SelectPrimitive } from "radix-ui";
41
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
42
+ var SelectContainedPortal = containedPortal(SelectPrimitive.Portal);
43
+ var PopoverContainedPortal = containedPortal(PopoverPrimitive.Portal);
44
+ var WEEKDAYS = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
45
+ var WORKDAYS = ["mon", "tue", "wed", "thu", "fri"];
46
+ var ENGLISH = createOpenGeniText();
47
+ var WEEKDAY_KEYS = {
48
+ mon: {
49
+ short: "cadence.day.mon.short",
50
+ long: "cadence.day.mon.long",
51
+ plural: "cadence.day.mon.plural"
52
+ },
53
+ tue: {
54
+ short: "cadence.day.tue.short",
55
+ long: "cadence.day.tue.long",
56
+ plural: "cadence.day.tue.plural"
57
+ },
58
+ wed: {
59
+ short: "cadence.day.wed.short",
60
+ long: "cadence.day.wed.long",
61
+ plural: "cadence.day.wed.plural"
62
+ },
63
+ thu: {
64
+ short: "cadence.day.thu.short",
65
+ long: "cadence.day.thu.long",
66
+ plural: "cadence.day.thu.plural"
67
+ },
68
+ fri: {
69
+ short: "cadence.day.fri.short",
70
+ long: "cadence.day.fri.long",
71
+ plural: "cadence.day.fri.plural"
72
+ },
73
+ sat: {
74
+ short: "cadence.day.sat.short",
75
+ long: "cadence.day.sat.long",
76
+ plural: "cadence.day.sat.plural"
77
+ },
78
+ sun: {
79
+ short: "cadence.day.sun.short",
80
+ long: "cadence.day.sun.long",
81
+ plural: "cadence.day.sun.plural"
82
+ }
83
+ };
84
+ function weekdayName(t, day, form) {
85
+ return t(WEEKDAY_KEYS[day][form]);
86
+ }
87
+ var API_WEEKDAYS = {
88
+ mon: "MONDAY",
89
+ tue: "TUESDAY",
90
+ wed: "WEDNESDAY",
91
+ thu: "THURSDAY",
92
+ fri: "FRIDAY",
93
+ sat: "SATURDAY",
94
+ sun: "SUNDAY"
95
+ };
96
+ var MONTH_KEYS = [
97
+ { short: "cadence.month.jan.short", long: "cadence.month.jan.long" },
98
+ { short: "cadence.month.feb.short", long: "cadence.month.feb.long" },
99
+ { short: "cadence.month.mar.short", long: "cadence.month.mar.long" },
100
+ { short: "cadence.month.apr.short", long: "cadence.month.apr.long" },
101
+ { short: "cadence.month.may.short", long: "cadence.month.may.long" },
102
+ { short: "cadence.month.jun.short", long: "cadence.month.jun.long" },
103
+ { short: "cadence.month.jul.short", long: "cadence.month.jul.long" },
104
+ { short: "cadence.month.aug.short", long: "cadence.month.aug.long" },
105
+ { short: "cadence.month.sep.short", long: "cadence.month.sep.long" },
106
+ { short: "cadence.month.oct.short", long: "cadence.month.oct.long" },
107
+ { short: "cadence.month.nov.short", long: "cadence.month.nov.long" },
108
+ { short: "cadence.month.dec.short", long: "cadence.month.dec.long" }
109
+ ];
110
+ function monthName(t, month, form) {
111
+ return t(MONTH_KEYS[month - 1][form]);
112
+ }
113
+ var TYPED_MONTHS = [
114
+ "january",
115
+ "february",
116
+ "march",
117
+ "april",
118
+ "may",
119
+ "june",
120
+ "july",
121
+ "august",
122
+ "september",
123
+ "october",
124
+ "november",
125
+ "december"
126
+ ];
127
+ var UNIT_SECONDS = { minutes: 60, hours: 3600, days: 86400 };
128
+ var UNIT_LIMITS = { minutes: 1440, hours: 168, days: 365 };
129
+ var DAY_MS = 864e5;
130
+ var DEFAULT_CADENCE_TIME = "09:00";
131
+ var partsFormatters = /* @__PURE__ */ new Map();
132
+ function partsFormatter(timeZone) {
133
+ let formatter = partsFormatters.get(timeZone);
134
+ if (!formatter) {
135
+ formatter = new Intl.DateTimeFormat("en-US", {
136
+ timeZone,
137
+ hourCycle: "h23",
138
+ year: "numeric",
139
+ month: "numeric",
140
+ day: "numeric",
141
+ hour: "numeric",
142
+ minute: "numeric",
143
+ second: "numeric"
144
+ });
145
+ partsFormatters.set(timeZone, formatter);
146
+ }
147
+ return formatter;
148
+ }
149
+ function zonedParts(date, timeZone) {
150
+ const values = {};
151
+ for (const part of partsFormatter(timeZone).formatToParts(date)) {
152
+ if (part.type !== "literal") values[part.type] = Number(part.value);
153
+ }
154
+ return {
155
+ year: values.year ?? 1970,
156
+ month: values.month ?? 1,
157
+ day: values.day ?? 1,
158
+ hour: (values.hour ?? 0) % 24,
159
+ minute: values.minute ?? 0,
160
+ second: values.second ?? 0
161
+ };
162
+ }
163
+ function offsetMs(date, timeZone) {
164
+ const p = zonedParts(date, timeZone);
165
+ const asUtc = Date.UTC(p.year, p.month - 1, p.day, p.hour, p.minute, p.second);
166
+ return asUtc - Math.floor(date.getTime() / 1e3) * 1e3;
167
+ }
168
+ function zonedTimeToUtc(date, time, timeZone) {
169
+ const guess = Date.UTC(date.year, date.month - 1, date.day, time.hour, time.minute);
170
+ const first = offsetMs(new Date(guess), timeZone);
171
+ let instant = guess - first;
172
+ const second = offsetMs(new Date(instant), timeZone);
173
+ if (second !== first) instant = guess - second;
174
+ return new Date(instant);
175
+ }
176
+ function localDateOf(date, timeZone) {
177
+ const { year, month, day } = zonedParts(date, timeZone);
178
+ return { year, month, day };
179
+ }
180
+ function addDays(date, days) {
181
+ const next = new Date(Date.UTC(date.year, date.month - 1, date.day + days));
182
+ return { year: next.getUTCFullYear(), month: next.getUTCMonth() + 1, day: next.getUTCDate() };
183
+ }
184
+ function dayNumber(date) {
185
+ return Date.UTC(date.year, date.month - 1, date.day) / DAY_MS;
186
+ }
187
+ function weekdayOf(date) {
188
+ const index = (new Date(Date.UTC(date.year, date.month - 1, date.day)).getUTCDay() + 6) % 7;
189
+ return WEEKDAYS[index];
190
+ }
191
+ function daysInMonth(year, month) {
192
+ return new Date(Date.UTC(year, month, 0)).getUTCDate();
193
+ }
194
+ function formatLocalDate(date) {
195
+ return `${date.year}-${pad(date.month)}-${pad(date.day)}`;
196
+ }
197
+ function parseLocalDate(value) {
198
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value);
199
+ if (!match) return null;
200
+ const date = { year: Number(match[1]), month: Number(match[2]), day: Number(match[3]) };
201
+ if (date.month < 1 || date.month > 12) return null;
202
+ if (date.day < 1 || date.day > daysInMonth(date.year, date.month)) return null;
203
+ return date;
204
+ }
205
+ function timeZoneLabels(timeZone, text = ENGLISH) {
206
+ if (timeZone === "UTC" || timeZone === "Etc/UTC") return { label: "UTC", shortLabel: "UTC" };
207
+ const city = (timeZone.split("/").pop() ?? timeZone).replaceAll("_", " ");
208
+ return { label: text("cadence.zoneTime", { city }), shortLabel: city };
209
+ }
210
+ function pad(value) {
211
+ return String(value).padStart(2, "0");
212
+ }
213
+ function parseTime(value) {
214
+ const match = /^([01]\d|2[0-3]):([0-5]\d)$/.exec(value);
215
+ if (!match) return null;
216
+ return { hour: Number(match[1]), minute: Number(match[2]) };
217
+ }
218
+ function normalizeTime(input) {
219
+ const text = input.trim().toLowerCase().replace(/\s+/g, "");
220
+ if (!text) return null;
221
+ const meridiem = /^(\d{1,2})(?:[:.]?(\d{2}))?(am|pm)$/.exec(text);
222
+ if (meridiem) {
223
+ let hour2 = Number(meridiem[1]);
224
+ const minute2 = Number(meridiem[2] ?? "0");
225
+ if (hour2 < 1 || hour2 > 12 || minute2 > 59) return null;
226
+ if (meridiem[3] === "am") hour2 = hour2 === 12 ? 0 : hour2;
227
+ else hour2 = hour2 === 12 ? 12 : hour2 + 12;
228
+ return `${pad(hour2)}:${pad(minute2)}`;
229
+ }
230
+ let hour;
231
+ let minute;
232
+ const separated = /^(\d{1,2})[:.h](\d{1,2})$/.exec(text);
233
+ if (separated) {
234
+ hour = Number(separated[1]);
235
+ minute = Number(separated[2].length === 1 ? `${separated[2]}0` : separated[2]);
236
+ } else if (/^\d{1,2}$/.test(text)) {
237
+ hour = Number(text);
238
+ minute = 0;
239
+ } else if (/^\d{3,4}$/.test(text)) {
240
+ hour = Number(text.slice(0, -2));
241
+ minute = Number(text.slice(-2));
242
+ } else {
243
+ return null;
244
+ }
245
+ if (hour > 23 || minute > 59) return null;
246
+ return `${pad(hour)}:${pad(minute)}`;
247
+ }
248
+ function stepTime(value, minutes) {
249
+ const time = parseTime(value) ?? parseTime(DEFAULT_CADENCE_TIME);
250
+ const total = ((time.hour * 60 + time.minute + minutes) % 1440 + 1440) % 1440;
251
+ return `${pad(Math.floor(total / 60))}:${pad(total % 60)}`;
252
+ }
253
+ function dateLabel(t, date, today) {
254
+ const words = {
255
+ weekday: weekdayName(t, weekdayOf(date), "short"),
256
+ day: date.day,
257
+ month: monthName(t, date.month, "short")
258
+ };
259
+ return date.year === today.year ? t("cadence.date", words) : t("cadence.dateWithYear", { ...words, year: date.year });
260
+ }
261
+ function relativeDateLabel(t, date, today) {
262
+ const delta = dayNumber(date) - dayNumber(today);
263
+ if (delta === 0) return t("cadence.today");
264
+ if (delta === 1) return t("cadence.tomorrow");
265
+ return dateLabel(t, date, today);
266
+ }
267
+ function joinList(t, items) {
268
+ if (items.length <= 1) return items.join("");
269
+ return t("cadence.and", { head: items.slice(0, -1).join(", "), last: items.at(-1) });
270
+ }
271
+ function formatRunTime(date, { timeZone, now, text = ENGLISH }) {
272
+ const parts = zonedParts(date, timeZone);
273
+ const today = localDateOf(now, timeZone);
274
+ return text("cadence.runTime", {
275
+ date: relativeDateLabel(text, parts, today),
276
+ time: `${pad(parts.hour)}:${pad(parts.minute)}`
277
+ });
278
+ }
279
+ function describeNextRuns(runs, options) {
280
+ const [first, ...rest] = runs;
281
+ if (!first) return "";
282
+ const t = options.text ?? ENGLISH;
283
+ const today = localDateOf(options.now, options.timeZone);
284
+ const firstParts = zonedParts(first, options.timeZone);
285
+ const labels = rest.map((run, index) => {
286
+ const parts = zonedParts(run, options.timeZone);
287
+ const previous = zonedParts(runs[index], options.timeZone);
288
+ const time = `${pad(parts.hour)}:${pad(parts.minute)}`;
289
+ if (dayNumber(parts) === dayNumber(previous)) return time;
290
+ if (parts.hour === firstParts.hour && parts.minute === firstParts.minute) {
291
+ return relativeDateLabel(t, parts, today);
292
+ }
293
+ return t("cadence.runTime", { date: relativeDateLabel(t, parts, today), time });
294
+ });
295
+ const head = formatRunTime(first, options);
296
+ if (labels.length === 0) return head;
297
+ return t("cadence.then", { first: head, rest: joinList(t, labels) });
298
+ }
299
+ function listDays(t, days, form) {
300
+ const names = sortDays(days).map((day) => weekdayName(t, day, form));
301
+ if (form === "short" && names.length > 2) return names.join(", ");
302
+ return joinList(t, names);
303
+ }
304
+ function sortDays(days) {
305
+ return WEEKDAYS.filter((day) => days.includes(day));
306
+ }
307
+ function sameDays(a, b) {
308
+ const left = sortDays(a);
309
+ const right = sortDays(b);
310
+ return left.length === right.length && left.every((day, index) => day === right[index]);
311
+ }
312
+ function unitLabel(t, every, unit) {
313
+ switch (unit) {
314
+ case "minutes":
315
+ return t("cadence.every.minutes", { count: every });
316
+ case "hours":
317
+ return t("cadence.every.hours", { count: every });
318
+ case "days":
319
+ return t("cadence.every.days", { count: every });
320
+ }
321
+ }
322
+ function describeCadence(rule, options) {
323
+ const t = options.text ?? ENGLISH;
324
+ const labels = timeZoneLabels(options.timeZone, t);
325
+ const zone = options.timeZoneLabel ?? labels.label;
326
+ const zoneShort = options.timeZoneShortLabel ?? labels.shortLabel;
327
+ const at = (time) => t("cadence.at", { time, zone }).trim();
328
+ const atShort = (time) => t("cadence.atShort", { time, zone: zoneShort });
329
+ switch (rule.frequency) {
330
+ case "hourly":
331
+ return {
332
+ sentence: t("cadence.describe.hourly"),
333
+ short: t("cadence.describe.hourlyShort")
334
+ };
335
+ case "daily":
336
+ return {
337
+ sentence: t("cadence.describe.daily", { at: at(rule.time) }),
338
+ short: t("cadence.describe.dailyShort", { at: atShort(rule.time) })
339
+ };
340
+ case "weekdays":
341
+ return {
342
+ sentence: t("cadence.describe.weekdays", { at: at(rule.time) }),
343
+ short: t("cadence.describe.weekdaysShort", { at: atShort(rule.time) })
344
+ };
345
+ case "weekly": {
346
+ if (sameDays(rule.days, WORKDAYS)) {
347
+ return describeCadence({ frequency: "weekdays", time: rule.time }, options);
348
+ }
349
+ if (sameDays(rule.days, WEEKDAYS)) {
350
+ return describeCadence({ frequency: "daily", time: rule.time }, options);
351
+ }
352
+ if (rule.days.length === 0) {
353
+ return {
354
+ sentence: t("cadence.describe.weeklyNoDays"),
355
+ short: t("cadence.describe.weeklyNoDaysShort")
356
+ };
357
+ }
358
+ return {
359
+ sentence: t("cadence.describe.weekly", {
360
+ days: listDays(t, rule.days, "long"),
361
+ at: at(rule.time)
362
+ }),
363
+ short: t("cadence.describe.weeklyShort", {
364
+ days: listDays(t, rule.days, "short"),
365
+ at: atShort(rule.time)
366
+ })
367
+ };
368
+ }
369
+ case "monthly":
370
+ return {
371
+ sentence: t("cadence.describe.monthly", { day: rule.dayOfMonth, at: at(rule.time) }),
372
+ short: t("cadence.describe.monthlyShort", { day: rule.dayOfMonth, at: atShort(rule.time) })
373
+ };
374
+ case "interval": {
375
+ const every = unitLabel(t, rule.every, rule.unit);
376
+ if (rule.unit === "days" && rule.time) {
377
+ return {
378
+ sentence: t("cadence.describe.intervalAt", { every, at: at(rule.time) }),
379
+ short: t("cadence.describe.intervalAtShort", { every, at: atShort(rule.time) })
380
+ };
381
+ }
382
+ return {
383
+ sentence: t("cadence.describe.interval", { every }),
384
+ short: t("cadence.describe.intervalShort", { every })
385
+ };
386
+ }
387
+ case "once": {
388
+ const once = onceParts(rule, options.timeZone);
389
+ if (!once) {
390
+ return { sentence: t("cadence.describe.once"), short: t("cadence.describe.onceShort") };
391
+ }
392
+ const today = options.now ? localDateOf(options.now, options.timeZone) : once.date;
393
+ const date = dateLabel(t, once.date, today);
394
+ return {
395
+ sentence: t("cadence.describe.onceOn", { date, at: at(once.time) }),
396
+ short: t("cadence.describe.onceOnShort", { date, time: once.time, zone: zoneShort })
397
+ };
398
+ }
399
+ }
400
+ }
401
+ function onceParts(rule, timeZone) {
402
+ if ("at" in rule) {
403
+ const instant = new Date(rule.at);
404
+ if (Number.isNaN(instant.getTime())) return null;
405
+ const parts = zonedParts(instant, timeZone);
406
+ return { date: parts, time: `${pad(parts.hour)}:${pad(parts.minute)}` };
407
+ }
408
+ const date = parseLocalDate(rule.date);
409
+ return date ? { date, time: rule.time } : null;
410
+ }
411
+ function normalizeCadenceRule(rule, timeZone) {
412
+ if (rule.frequency !== "once" || !("at" in rule)) return rule;
413
+ const once = onceParts(rule, timeZone);
414
+ if (!once) return rule;
415
+ return { frequency: "once", date: formatLocalDate(once.date), time: once.time };
416
+ }
417
+ function validateCadence(rule, { timeZone, now, text = ENGLISH }) {
418
+ const timeIssue = (time) => time !== void 0 && !parseTime(time) ? { field: "time", message: text("cadence.issue.time") } : null;
419
+ switch (rule.frequency) {
420
+ case "hourly":
421
+ return null;
422
+ case "daily":
423
+ case "weekdays":
424
+ return timeIssue(rule.time);
425
+ case "weekly":
426
+ if (rule.days.length === 0) return { field: "days", message: text("cadence.issue.days") };
427
+ return timeIssue(rule.time);
428
+ case "monthly":
429
+ if (!Number.isInteger(rule.dayOfMonth) || rule.dayOfMonth < 1 || rule.dayOfMonth > 31) {
430
+ return { field: "dayOfMonth", message: text("cadence.issue.dayOfMonth") };
431
+ }
432
+ return timeIssue(rule.time);
433
+ case "interval": {
434
+ const limit = UNIT_LIMITS[rule.unit];
435
+ if (!Number.isInteger(rule.every) || rule.every < 1 || rule.every > limit) {
436
+ return { field: "every", message: text("cadence.issue.every", { limit }) };
437
+ }
438
+ return rule.unit === "days" ? timeIssue(rule.time) : null;
439
+ }
440
+ case "once": {
441
+ if (!("at" in rule)) {
442
+ if (!parseLocalDate(rule.date))
443
+ return { field: "date", message: text("cadence.issue.date") };
444
+ const issue = timeIssue(rule.time);
445
+ if (issue) return issue;
446
+ }
447
+ const [run] = onceRun(rule, timeZone);
448
+ if (!run) return { field: "date", message: text("cadence.issue.date") };
449
+ if (run.getTime() <= now.getTime()) {
450
+ return {
451
+ field: "date",
452
+ message: text("cadence.issue.passed", {
453
+ time: formatRunTime(run, { timeZone, now, text })
454
+ })
455
+ };
456
+ }
457
+ return null;
458
+ }
459
+ }
460
+ }
461
+ function onceRun(rule, timeZone) {
462
+ if ("at" in rule) {
463
+ const instant = new Date(rule.at);
464
+ return Number.isNaN(instant.getTime()) ? [] : [instant];
465
+ }
466
+ const date = parseLocalDate(rule.date);
467
+ const time = parseTime(rule.time);
468
+ return date && time ? [zonedTimeToUtc(date, time, timeZone)] : [];
469
+ }
470
+ function intervalAnchor(rule, { timeZone, now }) {
471
+ if (rule.startAt) {
472
+ const start = new Date(rule.startAt).getTime();
473
+ if (!Number.isNaN(start)) return start;
474
+ }
475
+ const time = rule.unit === "days" && rule.time ? parseTime(rule.time) : null;
476
+ if (!time) return 0;
477
+ const today = localDateOf(now, timeZone);
478
+ const todayRun = zonedTimeToUtc(today, time, timeZone);
479
+ return todayRun.getTime() > now.getTime() ? todayRun.getTime() : zonedTimeToUtc(addDays(today, 1), time, timeZone).getTime();
480
+ }
481
+ function nextRuns(rule, options) {
482
+ const { timeZone, now } = options;
483
+ const count = options.count ?? 3;
484
+ if (validateCadence(rule, options)) return [];
485
+ const runs = [];
486
+ const nowMs = now.getTime();
487
+ const calendarRuns = (time, matches) => {
488
+ const clock = parseTime(time);
489
+ const today = localDateOf(now, timeZone);
490
+ for (let offset = 0; offset < 400 && runs.length < count; offset += 1) {
491
+ const date = addDays(today, offset);
492
+ if (!matches(date)) continue;
493
+ const run = zonedTimeToUtc(date, clock, timeZone);
494
+ if (run.getTime() > nowMs) runs.push(run);
495
+ }
496
+ };
497
+ switch (rule.frequency) {
498
+ case "hourly":
499
+ return nextRuns({ frequency: "interval", every: 1, unit: "hours" }, options);
500
+ case "daily":
501
+ calendarRuns(rule.time, () => true);
502
+ return runs;
503
+ case "weekdays":
504
+ calendarRuns(rule.time, (date) => WORKDAYS.includes(weekdayOf(date)));
505
+ return runs;
506
+ case "weekly":
507
+ calendarRuns(rule.time, (date) => rule.days.includes(weekdayOf(date)));
508
+ return runs;
509
+ case "monthly": {
510
+ const clock = parseTime(rule.time);
511
+ const today = localDateOf(now, timeZone);
512
+ for (let step = 0; step < 48 && runs.length < count; step += 1) {
513
+ const monthIndex = today.month - 1 + step;
514
+ const year = today.year + Math.floor(monthIndex / 12);
515
+ const month = monthIndex % 12 + 1;
516
+ if (rule.dayOfMonth > daysInMonth(year, month)) continue;
517
+ const run = zonedTimeToUtc({ year, month, day: rule.dayOfMonth }, clock, timeZone);
518
+ if (run.getTime() > nowMs) runs.push(run);
519
+ }
520
+ return runs;
521
+ }
522
+ case "interval": {
523
+ const period = rule.every * UNIT_SECONDS[rule.unit] * 1e3;
524
+ const anchor = intervalAnchor(rule, options);
525
+ let next = anchor > nowMs ? anchor : anchor + (Math.floor((nowMs - anchor) / period) + 1) * period;
526
+ while (runs.length < count) {
527
+ runs.push(new Date(next));
528
+ next += period;
529
+ }
530
+ return runs;
531
+ }
532
+ case "once":
533
+ return onceRun(rule, timeZone).filter((run) => run.getTime() > nowMs);
534
+ }
535
+ }
536
+ function toScheduleSpec(rule, { timeZone, now }) {
537
+ const calendar = (time, extra) => {
538
+ const clock = parseTime(time) ?? parseTime(DEFAULT_CADENCE_TIME);
539
+ return {
540
+ type: "calendar",
541
+ timeZone,
542
+ hour: clock.hour,
543
+ minute: clock.minute,
544
+ ...extra
545
+ };
546
+ };
547
+ switch (rule.frequency) {
548
+ case "hourly":
549
+ return { type: "interval", everySeconds: 3600 };
550
+ case "daily":
551
+ return calendar(rule.time, {});
552
+ case "weekdays":
553
+ return calendar(rule.time, { daysOfWeek: WORKDAYS.map((day) => API_WEEKDAYS[day]) });
554
+ case "weekly":
555
+ return calendar(rule.time, {
556
+ daysOfWeek: sortDays(rule.days).map((day) => API_WEEKDAYS[day])
557
+ });
558
+ case "monthly":
559
+ return calendar(rule.time, { daysOfMonth: [rule.dayOfMonth] });
560
+ case "interval": {
561
+ const everySeconds = rule.every * UNIT_SECONDS[rule.unit];
562
+ if (rule.startAt) return { type: "interval", everySeconds, startAt: rule.startAt };
563
+ if (rule.unit === "days" && rule.time) {
564
+ const anchor = intervalAnchor(rule, { timeZone, now });
565
+ return { type: "interval", everySeconds, startAt: new Date(anchor).toISOString() };
566
+ }
567
+ return { type: "interval", everySeconds };
568
+ }
569
+ case "once": {
570
+ const [run] = onceRun(rule, timeZone);
571
+ return { type: "once", runAt: (run ?? now).toISOString(), timeZone };
572
+ }
573
+ }
574
+ }
575
+ function cadenceFromScheduleSpec(spec, fallbackTimeZone) {
576
+ switch (spec.type) {
577
+ case "once": {
578
+ const instant = new Date(spec.runAt);
579
+ const parts = zonedParts(instant, spec.timeZone);
580
+ return {
581
+ timeZone: spec.timeZone,
582
+ rule: {
583
+ frequency: "once",
584
+ date: formatLocalDate(parts),
585
+ time: `${pad(parts.hour)}:${pad(parts.minute)}`
586
+ }
587
+ };
588
+ }
589
+ case "interval": {
590
+ const seconds = spec.everySeconds;
591
+ if (seconds === 3600 && !spec.startAt) {
592
+ return { timeZone: fallbackTimeZone, rule: { frequency: "hourly" } };
593
+ }
594
+ if (seconds % 86400 === 0) {
595
+ const time = spec.startAt ? zonedParts(new Date(spec.startAt), fallbackTimeZone) : null;
596
+ return {
597
+ timeZone: fallbackTimeZone,
598
+ rule: {
599
+ frequency: "interval",
600
+ every: seconds / 86400,
601
+ unit: "days",
602
+ ...time ? { time: `${pad(time.hour)}:${pad(time.minute)}` } : {},
603
+ ...spec.startAt ? { startAt: spec.startAt } : {}
604
+ }
605
+ };
606
+ }
607
+ const unit = seconds % 3600 === 0 ? "hours" : "minutes";
608
+ return {
609
+ timeZone: fallbackTimeZone,
610
+ rule: {
611
+ frequency: "interval",
612
+ every: Math.max(1, Math.round(seconds / UNIT_SECONDS[unit])),
613
+ unit,
614
+ ...spec.startAt ? { startAt: spec.startAt } : {}
615
+ }
616
+ };
617
+ }
618
+ case "calendar": {
619
+ const time = `${pad(spec.hour)}:${pad(spec.minute)}`;
620
+ const monthDay = spec.daysOfMonth?.[0];
621
+ if (monthDay !== void 0) {
622
+ return {
623
+ timeZone: spec.timeZone,
624
+ rule: { frequency: "monthly", dayOfMonth: monthDay, time }
625
+ };
626
+ }
627
+ const days = (spec.daysOfWeek ?? []).flatMap(
628
+ (apiDay) => WEEKDAYS.filter((day) => API_WEEKDAYS[day] === apiDay)
629
+ );
630
+ if (days.length === 0 || sameDays(days, WEEKDAYS)) {
631
+ return { timeZone: spec.timeZone, rule: { frequency: "daily", time } };
632
+ }
633
+ if (sameDays(days, WORKDAYS)) {
634
+ return { timeZone: spec.timeZone, rule: { frequency: "weekdays", time } };
635
+ }
636
+ return { timeZone: spec.timeZone, rule: { frequency: "weekly", days: sortDays(days), time } };
637
+ }
638
+ }
639
+ }
640
+ var DAY_TOKENS = [
641
+ [/\bmon(?:day)?s?\b/g, "mon"],
642
+ [/\btue(?:s|sday)?s?\b/g, "tue"],
643
+ [/\bwed(?:nesday)?s?\b/g, "wed"],
644
+ [/\bthu(?:r|rs|rsday)?s?\b/g, "thu"],
645
+ [/\bfri(?:day)?s?\b/g, "fri"],
646
+ [/\bsat(?:urday)?s?\b/g, "sat"],
647
+ [/\bsun(?:day)?s?\b/g, "sun"]
648
+ ];
649
+ var PARSE_HINT = 'Try "every weekday at 8" or "1st of every month at 9".';
650
+ function parseCadence(input, { timeZone, now }) {
651
+ let text = ` ${input.toLowerCase().replace(/[,;]/g, " ").replace(/\s+/g, " ").trim()} `;
652
+ text = text.replace(/^ (?:runs?|repeat|repeats) /, " ");
653
+ if (!text.trim()) {
654
+ return { ok: false, message: 'Describe when it should run, like "every weekday at 8".' };
655
+ }
656
+ let time = null;
657
+ let badTime = false;
658
+ const takeTime = (pattern, read) => {
659
+ if (time || badTime) return;
660
+ const match = pattern.exec(text);
661
+ if (!match) return;
662
+ const value = read(match);
663
+ if (value) time = value;
664
+ else badTime = true;
665
+ text = text.replace(match[0], " ");
666
+ };
667
+ takeTime(/\b(?:at )?(noon|midday)\b/, () => "12:00");
668
+ takeTime(/\b(?:at )?midnight\b/, () => "00:00");
669
+ takeTime(
670
+ /\b(?:at )?(\d{1,2})(?:[:.](\d{2}))? ?(am|pm)\b/,
671
+ (m) => normalizeTime(`${m[1]}${m[2] ? `:${m[2]}` : ""}${m[3]}`)
672
+ );
673
+ takeTime(
674
+ /\bat (\d{1,2})(?:[:.h](\d{2}))?\b/,
675
+ (m) => normalizeTime(`${m[1]}${m[2] ? `:${m[2]}` : ""}`)
676
+ );
677
+ takeTime(/\b(\d{1,2})[:.](\d{2})\b/, (m) => normalizeTime(`${m[1]}:${m[2]}`));
678
+ if (badTime) return { ok: false, message: "That time doesn't exist. Use a time like 08:00." };
679
+ const clock = time ?? DEFAULT_CADENCE_TIME;
680
+ const halfHour = /\bevery half(?: an)? hour\b/.exec(text);
681
+ if (halfHour) return { ok: true, rule: { frequency: "interval", every: 30, unit: "minutes" } };
682
+ if (/\bevery other day\b/.test(text)) {
683
+ return { ok: true, rule: { frequency: "interval", every: 2, unit: "days", time: clock } };
684
+ }
685
+ const interval = /\bevery (\d+) ?(minutes?|mins?|m|hours?|hrs?|h|days?|d)\b/.exec(text);
686
+ if (interval) {
687
+ const every = Number(interval[1]);
688
+ const token = interval[2];
689
+ const unit = token.startsWith("m") ? "minutes" : token.startsWith("h") ? "hours" : "days";
690
+ if (unit === "hours" && every === 1) return { ok: true, rule: { frequency: "hourly" } };
691
+ if (unit === "days" && every === 1)
692
+ return { ok: true, rule: { frequency: "daily", time: clock } };
693
+ const rule = unit === "days" ? { frequency: "interval", every, unit, time: clock } : { frequency: "interval", every, unit };
694
+ const issue = validateCadence(rule, { timeZone, now });
695
+ return issue ? { ok: false, message: issue.message } : { ok: true, rule };
696
+ }
697
+ if (/\b(?:every|each) minute\b/.test(text)) {
698
+ return { ok: true, rule: { frequency: "interval", every: 1, unit: "minutes" } };
699
+ }
700
+ if (/\b(?:hourly|(?:every|each) hour)\b/.test(text))
701
+ return { ok: true, rule: { frequency: "hourly" } };
702
+ if (/\b(?:monthly|(?:every|each|a|per) month|of (?:every|each|the) month)\b/.test(text)) {
703
+ if (/\blast day\b/.test(text)) {
704
+ return {
705
+ ok: false,
706
+ message: "The last day of the month isn't supported yet. Pick a day from 1 to 31."
707
+ };
708
+ }
709
+ const dayMatch = /\b(?:day )?(\d{1,2})(?:st|nd|rd|th)?\b/.exec(
710
+ text.replace(/\b(?:monthly|every|each|month|of|the|on)\b/g, " ")
711
+ );
712
+ const dayOfMonth = dayMatch ? Number(dayMatch[1]) : 1;
713
+ const rule = { frequency: "monthly", dayOfMonth, time: clock };
714
+ const issue = validateCadence(rule, { timeZone, now });
715
+ return issue ? { ok: false, message: issue.message } : { ok: true, rule };
716
+ }
717
+ if (/\b(?:weekdays?|workdays?|business days?|working days?)\b/.test(text) || /\bmon(?:day)? ?(?:-|to|through|until) ?fri(?:day)?\b/.test(text)) {
718
+ return { ok: true, rule: { frequency: "weekdays", time: clock } };
719
+ }
720
+ if (/\bweekends?\b/.test(text)) {
721
+ return { ok: true, rule: { frequency: "weekly", days: ["sat", "sun"], time: clock } };
722
+ }
723
+ const today = localDateOf(now, timeZone);
724
+ let onceDate = null;
725
+ if (/\btoday\b|\btonight\b/.test(text)) onceDate = today;
726
+ else if (/\btomorrow\b/.test(text)) onceDate = addDays(today, 1);
727
+ else {
728
+ const iso = /\b(\d{4}-\d{2}-\d{2})\b/.exec(text);
729
+ if (iso) onceDate = parseLocalDate(iso[1]);
730
+ const monthPattern = TYPED_MONTHS.map((name) => name.slice(0, 3)).join("|");
731
+ const dayMonth = new RegExp(
732
+ `\\b(\\d{1,2})(?:st|nd|rd|th)? (?:of )?(${monthPattern})[a-z]*\\b`
733
+ ).exec(text);
734
+ const monthDay = new RegExp(`\\b(${monthPattern})[a-z]* (\\d{1,2})(?:st|nd|rd|th)?\\b`).exec(
735
+ text
736
+ );
737
+ const found = dayMonth ? { day: Number(dayMonth[1]), month: dayMonth[2] } : monthDay ? { day: Number(monthDay[2]), month: monthDay[1] } : null;
738
+ if (!onceDate && found) {
739
+ const month = TYPED_MONTHS.findIndex((name) => name.startsWith(found.month)) + 1;
740
+ let year = today.year;
741
+ if (month < today.month || month === today.month && found.day < today.day) year += 1;
742
+ onceDate = found.day <= daysInMonth(year, month) ? { year, month, day: found.day } : null;
743
+ if (!onceDate) return { ok: false, message: "That date doesn't exist. Pick another day." };
744
+ }
745
+ const nextDay = /\b(next|this) (mon|tue|wed|thu|fri|sat|sun)(?:day)?\b/.exec(text);
746
+ if (!onceDate && nextDay && !/\b(?:every|each)\b/.test(text)) {
747
+ const target = WEEKDAYS.indexOf(nextDay[2]);
748
+ const current = WEEKDAYS.indexOf(weekdayOf(today));
749
+ const delta = (target - current + 7) % 7;
750
+ onceDate = addDays(today, delta === 0 && nextDay[1] === "next" ? 7 : delta);
751
+ }
752
+ }
753
+ if (onceDate) {
754
+ const rule = { frequency: "once", date: formatLocalDate(onceDate), time: clock };
755
+ const issue = validateCadence(rule, { timeZone, now });
756
+ return issue ? { ok: false, message: issue.message } : { ok: true, rule };
757
+ }
758
+ const days = /* @__PURE__ */ new Set();
759
+ for (const [pattern, day] of DAY_TOKENS) {
760
+ if (new RegExp(pattern.source).test(text)) days.add(day);
761
+ }
762
+ if (days.size > 0) {
763
+ const sorted = sortDays([...days]);
764
+ if (sameDays(sorted, WORKDAYS))
765
+ return { ok: true, rule: { frequency: "weekdays", time: clock } };
766
+ if (sameDays(sorted, WEEKDAYS)) return { ok: true, rule: { frequency: "daily", time: clock } };
767
+ return { ok: true, rule: { frequency: "weekly", days: sorted, time: clock } };
768
+ }
769
+ if (/\b(?:daily|(?:every|each) (?:day|morning|evening|night))\b/.test(text) || time && /\bevery\b/.test(text)) {
770
+ return { ok: true, rule: { frequency: "daily", time: clock } };
771
+ }
772
+ if (/\b(?:weekly|(?:every|each) week)\b/.test(text)) {
773
+ return { ok: true, rule: { frequency: "weekly", days: ["mon"], time: clock } };
774
+ }
775
+ return { ok: false, message: `Couldn't read that. ${PARSE_HINT}` };
776
+ }
777
+ var ALL_FREQUENCIES = [
778
+ "hourly",
779
+ "daily",
780
+ "weekdays",
781
+ "weekly",
782
+ "monthly",
783
+ "interval",
784
+ "once"
785
+ ];
786
+ function frequencyWords(t, frequency) {
787
+ switch (frequency) {
788
+ case "hourly":
789
+ return {
790
+ label: t("cadence.frequency.hourly"),
791
+ trigger: t("cadence.frequency.hourly"),
792
+ preset: t("cadence.frequency.hourlyPreset"),
793
+ description: t("cadence.frequency.hourlyDescription")
794
+ };
795
+ case "daily":
796
+ return {
797
+ label: t("cadence.frequency.daily"),
798
+ trigger: t("cadence.frequency.daily"),
799
+ preset: t("cadence.frequency.dailyPreset"),
800
+ description: t("cadence.frequency.dailyDescription")
801
+ };
802
+ case "weekdays":
803
+ return {
804
+ label: t("cadence.frequency.weekdays"),
805
+ trigger: t("cadence.frequency.weekdays"),
806
+ preset: t("cadence.frequency.weekdaysPreset"),
807
+ description: t("cadence.frequency.weekdaysDescription")
808
+ };
809
+ case "weekly":
810
+ return {
811
+ label: t("cadence.frequency.weekly"),
812
+ trigger: t("cadence.frequency.weekly"),
813
+ preset: t("cadence.frequency.weeklyPreset"),
814
+ description: t("cadence.frequency.weeklyDescription")
815
+ };
816
+ case "monthly":
817
+ return {
818
+ label: t("cadence.frequency.monthly"),
819
+ trigger: t("cadence.frequency.monthly"),
820
+ preset: t("cadence.frequency.monthlyPreset"),
821
+ description: t("cadence.frequency.monthlyDescription")
822
+ };
823
+ case "interval":
824
+ return {
825
+ label: t("cadence.frequency.interval"),
826
+ trigger: t("cadence.frequency.intervalTrigger"),
827
+ preset: t("cadence.frequency.intervalPreset"),
828
+ description: t("cadence.frequency.intervalDescription")
829
+ };
830
+ case "once":
831
+ return {
832
+ label: t("cadence.frequency.once"),
833
+ trigger: t("cadence.frequency.once"),
834
+ preset: t("cadence.frequency.oncePreset"),
835
+ description: t("cadence.frequency.onceDescription")
836
+ };
837
+ }
838
+ }
839
+ function unitOptions(t, every) {
840
+ const one = every === 1;
841
+ return [
842
+ { value: "minutes", label: one ? t("cadence.unit.minute") : t("cadence.unit.minutes") },
843
+ { value: "hours", label: one ? t("cadence.unit.hour") : t("cadence.unit.hours") },
844
+ { value: "days", label: one ? t("cadence.unit.day") : t("cadence.unit.days") }
845
+ ];
846
+ }
847
+ function ruleTime(rule) {
848
+ if (rule.frequency === "hourly") return void 0;
849
+ if (rule.frequency === "once") return "at" in rule ? void 0 : rule.time;
850
+ return rule.time;
851
+ }
852
+ function usesTime(rule) {
853
+ if (rule.frequency === "hourly") return false;
854
+ if (rule.frequency === "interval") return rule.unit === "days";
855
+ return true;
856
+ }
857
+ function switchFrequency(rule, frequency, { timeZone, now }) {
858
+ const time = ruleTime(rule) ?? DEFAULT_CADENCE_TIME;
859
+ switch (frequency) {
860
+ case "hourly":
861
+ return { frequency: "hourly" };
862
+ case "daily":
863
+ return { frequency: "daily", time };
864
+ case "weekdays":
865
+ return { frequency: "weekdays", time };
866
+ case "weekly":
867
+ return {
868
+ frequency: "weekly",
869
+ days: rule.frequency === "weekly" && rule.days.length > 0 ? rule.days : ["mon"],
870
+ time
871
+ };
872
+ case "monthly":
873
+ return { frequency: "monthly", dayOfMonth: 1, time };
874
+ case "interval":
875
+ return { frequency: "interval", every: 30, unit: "minutes" };
876
+ case "once":
877
+ return {
878
+ frequency: "once",
879
+ date: formatLocalDate(addDays(localDateOf(now, timeZone), 1)),
880
+ time
881
+ };
882
+ }
883
+ }
884
+ function withTime(rule, time) {
885
+ if (rule.frequency === "hourly") return rule;
886
+ if (rule.frequency === "once") return "at" in rule ? rule : { ...rule, time };
887
+ return { ...rule, time };
888
+ }
889
+ function cadencePhrase(rule, timeZone, now) {
890
+ const { sentence } = describeCadence(rule, { timeZone, timeZoneLabel: "", now });
891
+ return sentence.replace(/^Runs /, "").trim();
892
+ }
893
+ var fieldBase = "inline-flex h-9 min-w-0 items-center gap-2 rounded-[10px] border border-border bg-surface px-3 text-sm text-fg transition-colors duration-[120ms] hover:border-border-strong disabled:cursor-not-allowed disabled:border-border disabled:bg-surface-2 disabled:text-fg-muted aria-invalid:border-danger aria-invalid:hover:border-danger data-[state=open]:border-border-strong pointer-coarse:h-11";
894
+ var inputBase = cn(
895
+ fieldBase,
896
+ "cursor-text justify-center px-2 text-center tabular-nums focus-visible:border-brand pointer-coarse:text-base"
897
+ );
898
+ var popoverPanel = cn(MENU_SURFACE_CLASS, "z-50 overflow-hidden p-0 outline-hidden");
899
+ var menuContent = cn(
900
+ popoverPanel,
901
+ "max-h-(--radix-select-content-available-height) min-w-(--radix-select-trigger-width)"
902
+ );
903
+ var menuItem = "relative flex min-h-8 cursor-pointer items-start gap-2.5 rounded-[10px] py-1.5 pr-9 pl-2.5 text-sm text-fg outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:text-fg-muted data-[highlighted]:bg-surface-2 pointer-coarse:min-h-11";
904
+ var connector = "text-sm text-fg-muted";
905
+ function ValueSelect({
906
+ value,
907
+ options,
908
+ onValueChange,
909
+ triggerLabel,
910
+ label,
911
+ disabled,
912
+ invalid,
913
+ describedBy,
914
+ className,
915
+ contentClassName
916
+ }) {
917
+ const selected = options.find((option) => option.value === value);
918
+ return /* @__PURE__ */ jsxs(
919
+ SelectPrimitive.Root,
920
+ {
921
+ value,
922
+ onValueChange: (next) => onValueChange(next),
923
+ disabled: disabled ?? false,
924
+ children: [
925
+ /* @__PURE__ */ jsxs(
926
+ SelectPrimitive.Trigger,
927
+ {
928
+ "aria-label": label,
929
+ "aria-invalid": invalid || void 0,
930
+ "aria-describedby": describedBy,
931
+ className: cn(fieldBase, "group/value-select justify-between", className),
932
+ children: [
933
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: /* @__PURE__ */ jsx(SelectPrimitive.Value, { children: triggerLabel ?? selected?.label }) }),
934
+ /* @__PURE__ */ jsx(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx(
935
+ ChevronDownIcon,
936
+ {
937
+ "aria-hidden": "true",
938
+ className: "size-4 shrink-0 text-fg-subtle transition-transform duration-[120ms] group-data-[state=open]/value-select:rotate-180"
939
+ }
940
+ ) })
941
+ ]
942
+ }
943
+ ),
944
+ /* @__PURE__ */ jsx(SelectContainedPortal, { children: /* @__PURE__ */ jsx(
945
+ SelectPrimitive.Content,
946
+ {
947
+ position: "popper",
948
+ sideOffset: 6,
949
+ align: "start",
950
+ className: cn(menuContent, contentClassName),
951
+ children: /* @__PURE__ */ jsx(SelectPrimitive.Viewport, { className: "max-h-[26rem] p-1.5", children: options.map((option) => /* @__PURE__ */ jsxs(SelectPrimitive.Item, { value: option.value, className: menuItem, children: [
952
+ /* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
953
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemText, { children: /* @__PURE__ */ jsx("span", { children: option.label }) }),
954
+ option.description ? /* @__PURE__ */ jsx("span", { className: "mt-0.5 text-xs leading-4.5 text-fg-muted", children: option.description }) : null
955
+ ] }),
956
+ /* @__PURE__ */ jsx(SelectPrimitive.ItemIndicator, { className: "absolute top-2 right-2.5", children: /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": "true", className: MENU_CHECK_CLASS }) })
957
+ ] }, option.value)) })
958
+ }
959
+ ) })
960
+ ]
961
+ }
962
+ );
963
+ }
964
+ function TimeField({
965
+ value,
966
+ onChange,
967
+ label: labelProp,
968
+ disabled,
969
+ id,
970
+ className
971
+ }) {
972
+ const t = useOpenGeniText();
973
+ const label = labelProp ?? t("cadence.picker.time");
974
+ const [draft, setDraft] = useState(value);
975
+ const [focused, setFocused] = useState(false);
976
+ useEffect(() => {
977
+ if (!focused) setDraft(value);
978
+ }, [focused, value]);
979
+ const normalized = normalizeTime(draft);
980
+ const invalid = !normalized || !parseTime(value);
981
+ const commit = () => {
982
+ if (normalized) {
983
+ setDraft(normalized);
984
+ if (normalized !== value) onChange(normalized);
985
+ }
986
+ };
987
+ const onKeyDown = (event) => {
988
+ if (event.key === "ArrowUp" || event.key === "ArrowDown") {
989
+ event.preventDefault();
990
+ const next = stepTime(normalized ?? value, event.key === "ArrowUp" ? 15 : -15);
991
+ setDraft(next);
992
+ onChange(next);
993
+ } else if (event.key === "Enter") {
994
+ commit();
995
+ }
996
+ };
997
+ return /* @__PURE__ */ jsx(
998
+ "input",
999
+ {
1000
+ id,
1001
+ type: "text",
1002
+ inputMode: "numeric",
1003
+ autoComplete: "off",
1004
+ spellCheck: false,
1005
+ "aria-label": label,
1006
+ "aria-invalid": invalid || void 0,
1007
+ disabled,
1008
+ value: draft,
1009
+ maxLength: 8,
1010
+ placeholder: "08:00",
1011
+ onChange: (event) => {
1012
+ setDraft(event.target.value);
1013
+ const next = normalizeTime(event.target.value);
1014
+ if (next && /^\d{1,2}[:.]\d{2}$/.test(event.target.value.trim())) onChange(next);
1015
+ },
1016
+ onFocus: (event) => {
1017
+ setFocused(true);
1018
+ event.currentTarget.select();
1019
+ },
1020
+ onBlur: () => {
1021
+ setFocused(false);
1022
+ commit();
1023
+ },
1024
+ onKeyDown,
1025
+ className: cn(inputBase, "w-[4.75rem] placeholder:text-fg-subtle", className)
1026
+ }
1027
+ );
1028
+ }
1029
+ function NumberField({
1030
+ value,
1031
+ onChange,
1032
+ label,
1033
+ max,
1034
+ disabled,
1035
+ invalid,
1036
+ describedBy
1037
+ }) {
1038
+ const [draft, setDraft] = useState(String(value));
1039
+ useEffect(() => setDraft(String(value)), [value]);
1040
+ return /* @__PURE__ */ jsx(
1041
+ "input",
1042
+ {
1043
+ type: "text",
1044
+ inputMode: "numeric",
1045
+ autoComplete: "off",
1046
+ "aria-label": label,
1047
+ "aria-invalid": invalid || void 0,
1048
+ "aria-describedby": describedBy,
1049
+ disabled,
1050
+ value: draft,
1051
+ onChange: (event) => {
1052
+ const text = event.target.value.replace(/[^\d]/g, "").slice(0, 4);
1053
+ setDraft(text);
1054
+ if (text) onChange(Number(text));
1055
+ },
1056
+ onBlur: () => setDraft(String(value)),
1057
+ onKeyDown: (event) => {
1058
+ if (event.key !== "ArrowUp" && event.key !== "ArrowDown") return;
1059
+ event.preventDefault();
1060
+ onChange(Math.min(max, Math.max(1, value + (event.key === "ArrowUp" ? 1 : -1))));
1061
+ },
1062
+ className: cn(inputBase, "w-16")
1063
+ }
1064
+ );
1065
+ }
1066
+ function DayToggleGroup({
1067
+ days,
1068
+ onChange,
1069
+ disabled,
1070
+ invalid,
1071
+ describedBy
1072
+ }) {
1073
+ const t = useOpenGeniText();
1074
+ return /* @__PURE__ */ jsx(
1075
+ "div",
1076
+ {
1077
+ role: "group",
1078
+ "aria-label": t("cadence.picker.days"),
1079
+ "aria-invalid": invalid || void 0,
1080
+ "aria-describedby": describedBy,
1081
+ className: cn(
1082
+ "inline-flex h-9 shrink-0 items-center gap-0.5 rounded-[10px] border p-[3px] transition-colors duration-[120ms] pointer-coarse:h-11",
1083
+ invalid ? "border-danger" : "border-border",
1084
+ disabled ? "bg-surface-2" : "bg-surface"
1085
+ ),
1086
+ children: WEEKDAYS.map((day) => {
1087
+ const on = days.includes(day);
1088
+ return /* @__PURE__ */ jsx(
1089
+ "button",
1090
+ {
1091
+ type: "button",
1092
+ "aria-pressed": on,
1093
+ "aria-label": weekdayName(t, day, "long"),
1094
+ disabled,
1095
+ onClick: () => onChange(on ? days.filter((each) => each !== day) : sortDays([...days, day])),
1096
+ className: cn(
1097
+ "inline-flex h-7 w-9 items-center justify-center rounded-sm text-sm font-medium transition-colors duration-[120ms] disabled:cursor-not-allowed pointer-coarse:h-9 pointer-coarse:w-10",
1098
+ on ? "bg-brand/10 text-brand disabled:bg-surface-3 disabled:text-fg-muted" : "text-fg-muted hover:bg-surface-2 hover:text-fg disabled:text-fg-subtle disabled:hover:bg-transparent"
1099
+ ),
1100
+ children: weekdayName(t, day, "short").slice(0, 2)
1101
+ },
1102
+ day
1103
+ );
1104
+ })
1105
+ }
1106
+ );
1107
+ }
1108
+ var allZonesCache = /* @__PURE__ */ new WeakMap();
1109
+ var NO_TIME_ZONES = [];
1110
+ function offsetLabelFor(timeZone, at) {
1111
+ try {
1112
+ const name = new Intl.DateTimeFormat("en-US", { timeZone, timeZoneName: "shortOffset" }).formatToParts(at).find((part) => part.type === "timeZoneName")?.value;
1113
+ if (!name || name === "GMT") return "UTC";
1114
+ return name.replace("GMT", "UTC");
1115
+ } catch {
1116
+ return "";
1117
+ }
1118
+ }
1119
+ function allTimeZones(at, t) {
1120
+ const cached = allZonesCache.get(t);
1121
+ if (cached) return cached;
1122
+ const ids = typeof Intl.supportedValuesOf === "function" ? Intl.supportedValuesOf("timeZone") : [];
1123
+ const zones = ids.map((id) => ({
1124
+ id,
1125
+ ...timeZoneLabels(id, t),
1126
+ offsetLabel: offsetLabelFor(id, at)
1127
+ }));
1128
+ allZonesCache.set(t, zones);
1129
+ return zones;
1130
+ }
1131
+ function zoneOption(timeZone, suggested, at, t) {
1132
+ return suggested.find((zone) => zone.id === timeZone) ?? {
1133
+ id: timeZone,
1134
+ ...timeZoneLabels(timeZone, t),
1135
+ offsetLabel: offsetLabelFor(timeZone, at)
1136
+ };
1137
+ }
1138
+ function TimeZoneSearch({
1139
+ value,
1140
+ onSelect,
1141
+ timeZones = NO_TIME_ZONES,
1142
+ now,
1143
+ initialQuery = "",
1144
+ autoFocus = true,
1145
+ preview = false,
1146
+ className
1147
+ }) {
1148
+ const t = useOpenGeniText();
1149
+ const [clock] = useState(() => now ?? /* @__PURE__ */ new Date());
1150
+ const [query, setQuery] = useState(initialQuery);
1151
+ const listId = useId();
1152
+ const optionPrefix = useId();
1153
+ const options = useMemo(() => {
1154
+ const needle = query.trim().toLowerCase();
1155
+ if (!needle) return [...timeZones];
1156
+ const seen = /* @__PURE__ */ new Set();
1157
+ const results = [];
1158
+ for (const zone of [...timeZones, ...allTimeZones(clock, t)]) {
1159
+ if (seen.has(zone.id)) continue;
1160
+ const haystack = `${zone.label} ${zone.id} ${zone.offsetLabel ?? ""}`.toLowerCase();
1161
+ if (haystack.includes(needle)) {
1162
+ seen.add(zone.id);
1163
+ results.push(zone);
1164
+ }
1165
+ if (results.length >= 50) break;
1166
+ }
1167
+ return results;
1168
+ }, [clock, query, t, timeZones]);
1169
+ const [active, setActive] = useState(
1170
+ () => Math.max(
1171
+ 0,
1172
+ options.findIndex((zone) => zone.id === value)
1173
+ )
1174
+ );
1175
+ const activeIndex = Math.min(active, Math.max(0, options.length - 1));
1176
+ const searching = query.trim().length > 0;
1177
+ const panelOptions = useMemo(
1178
+ () => options.map((zone) => ({
1179
+ value: zone.id,
1180
+ label: zone.label,
1181
+ meta: zone.offsetLabel || void 0,
1182
+ // Search results name the region so "New Salem time" is findable and clear.
1183
+ description: searching && zone.id.includes("/") ? regionOf(zone.id) : void 0,
1184
+ group: searching ? void 0 : t("cadence.picker.suggested")
1185
+ })),
1186
+ [options, searching, t]
1187
+ );
1188
+ const onKeyDown = (event) => {
1189
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
1190
+ event.preventDefault();
1191
+ const delta = event.key === "ArrowDown" ? 1 : -1;
1192
+ setActive(
1193
+ (current) => options.length === 0 ? 0 : (Math.min(current, options.length - 1) + delta + options.length) % options.length
1194
+ );
1195
+ } else if (event.key === "Enter") {
1196
+ const zone = options[activeIndex];
1197
+ if (zone) {
1198
+ event.preventDefault();
1199
+ onSelect(zone.id);
1200
+ }
1201
+ }
1202
+ };
1203
+ return /* @__PURE__ */ jsx(
1204
+ SelectMenuPanel,
1205
+ {
1206
+ options: panelOptions,
1207
+ value,
1208
+ activeIndex: options.length > 0 ? activeIndex : -1,
1209
+ onActiveIndexChange: setActive,
1210
+ onSelect,
1211
+ listboxId: listId,
1212
+ idPrefix: optionPrefix,
1213
+ "aria-label": t("cadence.picker.timeZones"),
1214
+ preview,
1215
+ emptyMessage: t("cadence.picker.noZonesMatch", { query: query.trim() }),
1216
+ className,
1217
+ header: /* @__PURE__ */ jsxs("div", { className: "flex h-11 shrink-0 items-center gap-2 border-b border-border px-3.5", children: [
1218
+ /* @__PURE__ */ jsx(SearchIcon, { "aria-hidden": "true", className: "size-4 shrink-0 text-fg-subtle" }),
1219
+ /* @__PURE__ */ jsx(
1220
+ "input",
1221
+ {
1222
+ role: "combobox",
1223
+ "aria-expanded": !preview,
1224
+ "aria-controls": listId,
1225
+ "aria-autocomplete": "list",
1226
+ "aria-activedescendant": options[activeIndex] ? `${optionPrefix}-${activeIndex}` : void 0,
1227
+ "aria-label": t("cadence.picker.searchZones"),
1228
+ autoFocus: autoFocus && !preview,
1229
+ autoComplete: "off",
1230
+ spellCheck: false,
1231
+ readOnly: preview,
1232
+ value: query,
1233
+ placeholder: t("cadence.picker.searchZonesPlaceholder"),
1234
+ onChange: (event) => {
1235
+ setQuery(event.target.value);
1236
+ setActive(0);
1237
+ },
1238
+ onKeyDown,
1239
+ className: "h-full min-w-0 flex-1 bg-transparent text-sm text-fg outline-hidden! placeholder:text-fg-subtle pointer-coarse:text-base"
1240
+ }
1241
+ )
1242
+ ] })
1243
+ }
1244
+ );
1245
+ }
1246
+ function regionOf(timeZone) {
1247
+ return timeZone.split("/").slice(0, -1).join(" / ").replaceAll("_", " ");
1248
+ }
1249
+ function TimeZonePicker({
1250
+ value,
1251
+ onChange,
1252
+ timeZones = NO_TIME_ZONES,
1253
+ now,
1254
+ disabled,
1255
+ className,
1256
+ variant = "field"
1257
+ }) {
1258
+ const t = useOpenGeniText();
1259
+ const [open, setOpen] = useState(false);
1260
+ const [clock] = useState(() => now ?? /* @__PURE__ */ new Date());
1261
+ const current = zoneOption(value, timeZones, clock, t);
1262
+ return /* @__PURE__ */ jsxs(PopoverPrimitive.Root, { open, onOpenChange: setOpen, children: [
1263
+ /* @__PURE__ */ jsxs(
1264
+ PopoverPrimitive.Trigger,
1265
+ {
1266
+ type: "button",
1267
+ disabled,
1268
+ "aria-label": t("cadence.picker.timeZoneLabel", { zone: current.label }),
1269
+ className: cn(
1270
+ fieldBase,
1271
+ "group/zone justify-between",
1272
+ variant === "ghost" && "h-7 gap-1.5 border-transparent bg-transparent px-2 text-fg-muted hover:border-transparent hover:bg-surface-2 hover:text-fg disabled:bg-transparent data-[state=open]:border-transparent data-[state=open]:bg-surface-2 data-[state=open]:text-fg pointer-coarse:h-9",
1273
+ className
1274
+ ),
1275
+ children: [
1276
+ variant === "ghost" ? /* @__PURE__ */ jsx(GlobeIcon, { "aria-hidden": "true", className: "size-4 shrink-0" }) : null,
1277
+ variant === "ghost" && current.shortLabel ? (
1278
+ // Inside a narrow field the city alone is enough ("Oslo").
1279
+ /* @__PURE__ */ jsxs(Fragment, { children: [
1280
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate @max-[26rem]/cadence-text:hidden", children: current.label }),
1281
+ /* @__PURE__ */ jsx("span", { className: "hidden min-w-0 truncate @max-[26rem]/cadence-text:inline", children: current.shortLabel })
1282
+ ] })
1283
+ ) : /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: current.label }),
1284
+ /* @__PURE__ */ jsx(
1285
+ ChevronDownIcon,
1286
+ {
1287
+ "aria-hidden": "true",
1288
+ className: "size-4 shrink-0 text-fg-subtle transition-transform duration-[120ms] group-data-[state=open]/zone:rotate-180"
1289
+ }
1290
+ )
1291
+ ]
1292
+ }
1293
+ ),
1294
+ /* @__PURE__ */ jsx(PopoverContainedPortal, { children: /* @__PURE__ */ jsx(
1295
+ PopoverPrimitive.Content,
1296
+ {
1297
+ align: variant === "ghost" ? "end" : "start",
1298
+ sideOffset: 6,
1299
+ collisionPadding: 12,
1300
+ className: cn(
1301
+ popoverPanel,
1302
+ "flex max-h-[min(22rem,var(--radix-popover-content-available-height))] w-[min(20rem,calc(100vw-24px))] flex-col"
1303
+ ),
1304
+ children: /* @__PURE__ */ jsx(
1305
+ TimeZoneSearch,
1306
+ {
1307
+ value,
1308
+ timeZones,
1309
+ now: clock,
1310
+ onSelect: (zone) => {
1311
+ onChange(zone);
1312
+ setOpen(false);
1313
+ }
1314
+ }
1315
+ )
1316
+ }
1317
+ ) })
1318
+ ] });
1319
+ }
1320
+ function CalendarGrid({
1321
+ value,
1322
+ min,
1323
+ onSelect
1324
+ }) {
1325
+ const t = useOpenGeniText();
1326
+ const [focus, setFocus] = useState(value ?? min);
1327
+ const [view, setView] = useState({ year: focus.year, month: focus.month });
1328
+ const gridRef = useRef(null);
1329
+ const shouldFocus = useRef(true);
1330
+ useEffect(() => {
1331
+ if (!shouldFocus.current) return;
1332
+ gridRef.current?.querySelector(`[data-date="${formatLocalDate(focus)}"]`)?.focus();
1333
+ }, [focus, view]);
1334
+ const first = { year: view.year, month: view.month, day: 1 };
1335
+ const leading = WEEKDAYS.indexOf(weekdayOf(first));
1336
+ const total = daysInMonth(view.year, view.month);
1337
+ const cells = [
1338
+ ...Array.from({ length: leading }, () => null),
1339
+ ...Array.from({ length: total }, (_, index) => ({ ...first, day: index + 1 }))
1340
+ ];
1341
+ const minDay = dayNumber(min);
1342
+ const move = (date) => {
1343
+ const target = dayNumber(date) < minDay ? min : date;
1344
+ shouldFocus.current = true;
1345
+ setFocus(target);
1346
+ setView({ year: target.year, month: target.month });
1347
+ };
1348
+ const shiftMonth = (delta) => {
1349
+ const index = view.month - 1 + delta;
1350
+ const year = view.year + Math.floor(index / 12);
1351
+ const month = (index % 12 + 12) % 12 + 1;
1352
+ shouldFocus.current = false;
1353
+ setView({ year, month });
1354
+ };
1355
+ const onKeyDown = (event) => {
1356
+ const steps = {
1357
+ ArrowLeft: -1,
1358
+ ArrowRight: 1,
1359
+ ArrowUp: -7,
1360
+ ArrowDown: 7
1361
+ };
1362
+ const step = steps[event.key];
1363
+ if (step !== void 0) {
1364
+ event.preventDefault();
1365
+ move(addDays(focus, step));
1366
+ } else if (event.key === "PageUp" || event.key === "PageDown") {
1367
+ event.preventDefault();
1368
+ const delta = event.key === "PageUp" ? -1 : 1;
1369
+ const index = focus.month - 1 + delta;
1370
+ const year = focus.year + Math.floor(index / 12);
1371
+ const month = (index % 12 + 12) % 12 + 1;
1372
+ move({ year, month, day: Math.min(focus.day, daysInMonth(year, month)) });
1373
+ }
1374
+ };
1375
+ const canGoBack = view.year > min.year || view.year === min.year && view.month > min.month;
1376
+ return /* @__PURE__ */ jsxs("div", { className: "w-[17.5rem] p-3", children: [
1377
+ /* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between", children: [
1378
+ /* @__PURE__ */ jsx("p", { "aria-live": "polite", className: "text-sm font-semibold text-fg", children: t("cadence.picker.monthYear", {
1379
+ month: monthName(t, view.month, "long"),
1380
+ year: view.year
1381
+ }) }),
1382
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1", children: [
1383
+ /* @__PURE__ */ jsx(
1384
+ "button",
1385
+ {
1386
+ type: "button",
1387
+ "aria-label": t("cadence.picker.previousMonth"),
1388
+ disabled: !canGoBack,
1389
+ onClick: () => shiftMonth(-1),
1390
+ className: "grid size-8 place-items-center rounded-[10px] text-fg-muted transition-colors duration-[120ms] hover:bg-surface-2 hover:text-fg disabled:cursor-not-allowed disabled:text-fg-subtle disabled:hover:bg-transparent pointer-coarse:size-11",
1391
+ children: /* @__PURE__ */ jsx(ChevronLeftIcon, { "aria-hidden": "true", className: "size-4" })
1392
+ }
1393
+ ),
1394
+ /* @__PURE__ */ jsx(
1395
+ "button",
1396
+ {
1397
+ type: "button",
1398
+ "aria-label": t("cadence.picker.nextMonth"),
1399
+ onClick: () => shiftMonth(1),
1400
+ className: "grid size-8 place-items-center rounded-[10px] text-fg-muted transition-colors duration-[120ms] hover:bg-surface-2 hover:text-fg pointer-coarse:size-11",
1401
+ children: /* @__PURE__ */ jsx(ChevronRightIcon, { "aria-hidden": "true", className: "size-4" })
1402
+ }
1403
+ )
1404
+ ] })
1405
+ ] }),
1406
+ /* @__PURE__ */ jsxs(
1407
+ "div",
1408
+ {
1409
+ ref: gridRef,
1410
+ role: "grid",
1411
+ "aria-label": t("cadence.picker.monthYear", {
1412
+ month: monthName(t, view.month, "long"),
1413
+ year: view.year
1414
+ }),
1415
+ onKeyDown,
1416
+ children: [
1417
+ /* @__PURE__ */ jsx("div", { role: "row", className: "grid grid-cols-7", children: WEEKDAYS.map((day) => /* @__PURE__ */ jsx(
1418
+ "span",
1419
+ {
1420
+ role: "columnheader",
1421
+ "aria-label": weekdayName(t, day, "long"),
1422
+ className: "grid h-8 place-items-center text-xs font-medium text-fg-subtle",
1423
+ children: weekdayName(t, day, "short").slice(0, 2)
1424
+ },
1425
+ day
1426
+ )) }),
1427
+ Array.from({ length: Math.ceil(cells.length / 7) }, (_, row) => /* @__PURE__ */ jsx(
1428
+ "div",
1429
+ {
1430
+ role: "row",
1431
+ className: "grid grid-cols-7",
1432
+ children: cells.slice(row * 7, row * 7 + 7).map((date, column) => {
1433
+ if (!date) return /* @__PURE__ */ jsx("span", { role: "gridcell" }, `blank-${WEEKDAYS[column]}`);
1434
+ const iso = formatLocalDate(date);
1435
+ const selected = value !== null && dayNumber(value) === dayNumber(date);
1436
+ const isToday = dayNumber(date) === minDay;
1437
+ const past = dayNumber(date) < minDay;
1438
+ const focused = dayNumber(date) === dayNumber(focus);
1439
+ return /* @__PURE__ */ jsx("span", { role: "gridcell", "aria-selected": selected, children: /* @__PURE__ */ jsxs(
1440
+ "button",
1441
+ {
1442
+ type: "button",
1443
+ "data-date": iso,
1444
+ tabIndex: focused ? 0 : -1,
1445
+ disabled: past,
1446
+ "aria-label": t(
1447
+ isToday ? "cadence.picker.monthDayToday" : "cadence.picker.monthDay",
1448
+ {
1449
+ weekday: weekdayName(t, weekdayOf(date), "long"),
1450
+ day: date.day,
1451
+ month: monthName(t, date.month, "long"),
1452
+ year: date.year
1453
+ }
1454
+ ),
1455
+ onClick: () => onSelect(date),
1456
+ className: cn(
1457
+ "relative mx-auto grid size-9 place-items-center rounded-[10px] text-sm tabular-nums transition-colors duration-[120ms]",
1458
+ selected ? "border border-primary-border bg-primary font-medium text-primary-foreground" : past ? "cursor-not-allowed text-fg-subtle" : "text-fg hover:bg-surface-2"
1459
+ ),
1460
+ children: [
1461
+ date.day,
1462
+ isToday && !selected ? /* @__PURE__ */ jsx(
1463
+ "span",
1464
+ {
1465
+ "aria-hidden": "true",
1466
+ className: "absolute bottom-1 size-1 rounded-full bg-brand"
1467
+ }
1468
+ ) : null
1469
+ ]
1470
+ }
1471
+ ) }, iso);
1472
+ })
1473
+ },
1474
+ `week-${view.year}-${view.month}-${row}`
1475
+ ))
1476
+ ]
1477
+ }
1478
+ )
1479
+ ] });
1480
+ }
1481
+ function DateField({
1482
+ value,
1483
+ onChange,
1484
+ timeZone,
1485
+ now,
1486
+ disabled,
1487
+ invalid,
1488
+ describedBy,
1489
+ className
1490
+ }) {
1491
+ const t = useOpenGeniText();
1492
+ const [open, setOpen] = useState(false);
1493
+ const date = parseLocalDate(value);
1494
+ const today = localDateOf(now, timeZone);
1495
+ const label = date ? dateLabel(t, date, today) : t("cadence.picker.pickDate");
1496
+ return /* @__PURE__ */ jsxs(PopoverPrimitive.Root, { open, onOpenChange: setOpen, children: [
1497
+ /* @__PURE__ */ jsxs(
1498
+ PopoverPrimitive.Trigger,
1499
+ {
1500
+ type: "button",
1501
+ disabled,
1502
+ "aria-label": t("cadence.picker.dateLabel", { date: label }),
1503
+ "aria-invalid": invalid || void 0,
1504
+ "aria-describedby": describedBy,
1505
+ className: cn(fieldBase, "justify-between", className),
1506
+ children: [
1507
+ /* @__PURE__ */ jsx(CalendarIcon, { "aria-hidden": "true", className: "size-4 shrink-0 text-fg-subtle" }),
1508
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: label })
1509
+ ]
1510
+ }
1511
+ ),
1512
+ /* @__PURE__ */ jsx(PopoverContainedPortal, { children: /* @__PURE__ */ jsx(
1513
+ PopoverPrimitive.Content,
1514
+ {
1515
+ align: "start",
1516
+ sideOffset: 6,
1517
+ collisionPadding: 12,
1518
+ className: popoverPanel,
1519
+ children: /* @__PURE__ */ jsx(
1520
+ CalendarGrid,
1521
+ {
1522
+ value: date,
1523
+ min: today,
1524
+ onSelect: (picked) => {
1525
+ onChange(formatLocalDate(picked));
1526
+ setOpen(false);
1527
+ }
1528
+ }
1529
+ )
1530
+ }
1531
+ ) })
1532
+ ] });
1533
+ }
1534
+ function CadencePreview({
1535
+ value,
1536
+ now,
1537
+ timeZones = NO_TIME_ZONES,
1538
+ viewerTimeZone,
1539
+ count = 3,
1540
+ issue,
1541
+ id,
1542
+ className
1543
+ }) {
1544
+ const t = useOpenGeniText();
1545
+ const zone = zoneOption(value.timeZone, timeZones, now, t);
1546
+ const options = { timeZone: value.timeZone, now, text: t };
1547
+ const problem = issue ?? validateCadence(value.rule, options)?.message ?? null;
1548
+ const description = describeCadence(value.rule, {
1549
+ timeZone: value.timeZone,
1550
+ timeZoneLabel: zone.label,
1551
+ timeZoneShortLabel: zone.shortLabel,
1552
+ now,
1553
+ text: t
1554
+ });
1555
+ const runs = problem ? [] : nextRuns(value.rule, { ...options, count });
1556
+ const viewerZone = viewerTimeZone && viewerTimeZone !== value.timeZone && usesTime(value.rule) ? viewerTimeZone : null;
1557
+ const viewerLine = viewerZone && runs[0] ? (() => {
1558
+ const local = zonedParts(runs[0], viewerZone);
1559
+ const viewerLabel = zoneOption(viewerZone, timeZones, now, t).label;
1560
+ return t("cadence.picker.viewerTime", {
1561
+ time: `${pad(local.hour)}:${pad(local.minute)}`,
1562
+ zone: viewerLabel
1563
+ });
1564
+ })() : null;
1565
+ if (problem) {
1566
+ return /* @__PURE__ */ jsxs(
1567
+ "p",
1568
+ {
1569
+ id,
1570
+ role: "status",
1571
+ "aria-live": "polite",
1572
+ className: cn(
1573
+ "flex min-w-0 items-start gap-1.5 text-xs leading-4.5 text-danger",
1574
+ className
1575
+ ),
1576
+ children: [
1577
+ /* @__PURE__ */ jsx(CircleAlertIcon, { "aria-hidden": "true", className: "mt-0.5 size-3.5 shrink-0" }),
1578
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 break-words", children: problem })
1579
+ ]
1580
+ }
1581
+ );
1582
+ }
1583
+ return /* @__PURE__ */ jsxs(
1584
+ "div",
1585
+ {
1586
+ id,
1587
+ role: "status",
1588
+ "aria-live": "polite",
1589
+ className: cn(
1590
+ "flex min-w-0 items-start gap-2.5 rounded-[10px] bg-surface-2 px-3 py-2.5",
1591
+ className
1592
+ ),
1593
+ children: [
1594
+ /* @__PURE__ */ jsx(CalendarClockIcon, { "aria-hidden": "true", className: "mt-0.5 size-4 shrink-0 text-fg-subtle" }),
1595
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
1596
+ /* @__PURE__ */ jsxs("p", { className: "text-sm font-medium text-fg", children: [
1597
+ description.sentence,
1598
+ "."
1599
+ ] }),
1600
+ /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs leading-4.5 text-fg-muted", children: runs.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
1601
+ /* @__PURE__ */ jsx("span", { className: "text-fg-subtle", children: t("cadence.picker.next") }),
1602
+ describeNextRuns(runs, options)
1603
+ ] }) : t("cadence.picker.noUpcomingRuns") }),
1604
+ viewerLine ? /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs leading-4.5 text-fg-subtle", children: viewerLine }) : null
1605
+ ] })
1606
+ ]
1607
+ }
1608
+ );
1609
+ }
1610
+ function FrequencySelect({ value, update, now, disabled, frequencies }) {
1611
+ const rule = value.rule;
1612
+ const t = useOpenGeniText();
1613
+ return /* @__PURE__ */ jsx(
1614
+ ValueSelect,
1615
+ {
1616
+ label: t("cadence.picker.howOften"),
1617
+ value: rule.frequency,
1618
+ triggerLabel: frequencyWords(t, rule.frequency).trigger,
1619
+ disabled,
1620
+ options: frequencies.map((frequency) => {
1621
+ const words = frequencyWords(t, frequency);
1622
+ return { value: frequency, label: words.label, description: words.description };
1623
+ }),
1624
+ onValueChange: (frequency) => update(switchFrequency(rule, frequency, { timeZone: value.timeZone, now })),
1625
+ contentClassName: "w-64"
1626
+ }
1627
+ );
1628
+ }
1629
+ var DAY_OF_MONTH_OPTIONS = Array.from({ length: 31 }, (_, index) => ({
1630
+ value: String(index + 1),
1631
+ label: String(index + 1)
1632
+ }));
1633
+ function Phrase({ inline, children }) {
1634
+ return inline ? /* @__PURE__ */ jsx("span", { className: "inline-flex min-w-0 items-center gap-2", children }) : /* @__PURE__ */ jsx(Fragment, { children });
1635
+ }
1636
+ function RuleDetails({
1637
+ value,
1638
+ update,
1639
+ issue,
1640
+ issueId,
1641
+ now,
1642
+ disabled,
1643
+ layout
1644
+ }) {
1645
+ const rule = normalizeCadenceRule(value.rule, value.timeZone);
1646
+ const invalid = (field) => issue?.field === field;
1647
+ const described = (field) => issue?.field === field ? issueId : void 0;
1648
+ const t = useOpenGeniText();
1649
+ const word = (text) => layout === "inline" ? /* @__PURE__ */ jsx("span", { className: connector, children: text }) : null;
1650
+ const inline = layout === "inline";
1651
+ switch (rule.frequency) {
1652
+ case "weekly":
1653
+ return /* @__PURE__ */ jsxs(Phrase, { inline, children: [
1654
+ word(t("cadence.picker.wordOn")),
1655
+ /* @__PURE__ */ jsx(
1656
+ DayToggleGroup,
1657
+ {
1658
+ days: rule.days,
1659
+ disabled,
1660
+ invalid: invalid("days"),
1661
+ describedBy: described("days"),
1662
+ onChange: (days) => update({ ...rule, days })
1663
+ }
1664
+ )
1665
+ ] });
1666
+ case "monthly":
1667
+ return /* @__PURE__ */ jsxs(Phrase, { inline, children: [
1668
+ word(t("cadence.picker.wordOnDay")),
1669
+ /* @__PURE__ */ jsx(
1670
+ ValueSelect,
1671
+ {
1672
+ label: t("cadence.picker.dayOfMonth"),
1673
+ value: String(rule.dayOfMonth),
1674
+ options: DAY_OF_MONTH_OPTIONS,
1675
+ disabled,
1676
+ invalid: invalid("dayOfMonth"),
1677
+ describedBy: described("dayOfMonth"),
1678
+ onValueChange: (day) => update({ ...rule, dayOfMonth: Number(day) }),
1679
+ className: "w-[4.5rem]",
1680
+ contentClassName: "w-24"
1681
+ }
1682
+ )
1683
+ ] });
1684
+ case "interval":
1685
+ return /* @__PURE__ */ jsxs(Phrase, { inline, children: [
1686
+ /* @__PURE__ */ jsx(
1687
+ NumberField,
1688
+ {
1689
+ label: t("cadence.picker.everyHowMany"),
1690
+ value: rule.every,
1691
+ max: UNIT_LIMITS[rule.unit],
1692
+ disabled,
1693
+ invalid: invalid("every"),
1694
+ describedBy: described("every"),
1695
+ onChange: (every) => update({ ...rule, every })
1696
+ }
1697
+ ),
1698
+ /* @__PURE__ */ jsx(
1699
+ ValueSelect,
1700
+ {
1701
+ label: t("cadence.picker.unit"),
1702
+ value: rule.unit,
1703
+ options: unitOptions(t, rule.every),
1704
+ disabled,
1705
+ onValueChange: (unit) => update(
1706
+ unit === "days" ? {
1707
+ frequency: "interval",
1708
+ every: Math.min(rule.every, UNIT_LIMITS.days),
1709
+ unit,
1710
+ time: rule.time ?? DEFAULT_CADENCE_TIME
1711
+ } : { frequency: "interval", every: Math.min(rule.every, UNIT_LIMITS[unit]), unit }
1712
+ ),
1713
+ className: "w-[6.5rem]"
1714
+ }
1715
+ )
1716
+ ] });
1717
+ case "once":
1718
+ if ("at" in rule) return null;
1719
+ return /* @__PURE__ */ jsxs(Phrase, { inline, children: [
1720
+ word(t("cadence.picker.wordOn")),
1721
+ /* @__PURE__ */ jsx(
1722
+ DateField,
1723
+ {
1724
+ value: rule.date,
1725
+ timeZone: value.timeZone,
1726
+ now,
1727
+ disabled,
1728
+ invalid: invalid("date"),
1729
+ describedBy: described("date"),
1730
+ onChange: (date) => update({ ...rule, date })
1731
+ }
1732
+ )
1733
+ ] });
1734
+ default:
1735
+ return null;
1736
+ }
1737
+ }
1738
+ function monthDayHint(t, rule) {
1739
+ if (rule.frequency !== "monthly" || rule.dayOfMonth <= 28) return null;
1740
+ return rule.dayOfMonth === 29 ? t("cadence.picker.skipsFebruary") : t("cadence.picker.skipsShortMonths", { day: rule.dayOfMonth });
1741
+ }
1742
+ function SentenceVariant(props) {
1743
+ const { value, update, updateZone, now, disabled, timeZones } = props;
1744
+ const rule = value.rule;
1745
+ const time = ruleTime(normalizeCadenceRule(rule, value.timeZone));
1746
+ const showTime = usesTime(rule) && time !== void 0;
1747
+ const t = useOpenGeniText();
1748
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-x-2 gap-y-2", children: [
1749
+ /* @__PURE__ */ jsx(FrequencySelect, { ...props }),
1750
+ rule.frequency === "hourly" ? /* @__PURE__ */ jsx("span", { className: connector, children: t("cadence.picker.onTheHour") }) : null,
1751
+ /* @__PURE__ */ jsx(RuleDetails, { ...props, layout: "inline" }),
1752
+ showTime ? /* @__PURE__ */ jsxs("span", { className: "inline-flex min-w-0 items-center gap-2", children: [
1753
+ /* @__PURE__ */ jsx("span", { className: connector, children: t("cadence.picker.wordAt") }),
1754
+ /* @__PURE__ */ jsx(
1755
+ TimeField,
1756
+ {
1757
+ value: time,
1758
+ disabled,
1759
+ onChange: (next) => update(withTime(normalizeCadenceRule(rule, value.timeZone), next))
1760
+ }
1761
+ ),
1762
+ /* @__PURE__ */ jsx(
1763
+ TimeZonePicker,
1764
+ {
1765
+ value: value.timeZone,
1766
+ onChange: updateZone,
1767
+ timeZones,
1768
+ now,
1769
+ disabled
1770
+ }
1771
+ )
1772
+ ] }) : null
1773
+ ] });
1774
+ }
1775
+ function PresetChips({
1776
+ value,
1777
+ frequencies,
1778
+ onChange,
1779
+ disabled,
1780
+ labelledBy
1781
+ }) {
1782
+ const t = useOpenGeniText();
1783
+ const refs = useRef([]);
1784
+ const onKeyDown = (event, index) => {
1785
+ const delta = event.key === "ArrowRight" || event.key === "ArrowDown" ? 1 : event.key === "ArrowLeft" || event.key === "ArrowUp" ? -1 : 0;
1786
+ if (!delta) return;
1787
+ event.preventDefault();
1788
+ const next = (index + delta + frequencies.length) % frequencies.length;
1789
+ onChange(frequencies[next]);
1790
+ refs.current[next]?.focus();
1791
+ };
1792
+ return /* @__PURE__ */ jsx("div", { role: "radiogroup", "aria-labelledby": labelledBy, className: "flex min-w-0 flex-wrap gap-1.5", children: frequencies.map((frequency, index) => {
1793
+ const checked = frequency === value;
1794
+ return /* @__PURE__ */ jsx(
1795
+ "button",
1796
+ {
1797
+ ref: (node) => {
1798
+ refs.current[index] = node;
1799
+ },
1800
+ type: "button",
1801
+ role: "radio",
1802
+ "aria-checked": checked,
1803
+ tabIndex: checked ? 0 : -1,
1804
+ disabled,
1805
+ onClick: () => onChange(frequency),
1806
+ onKeyDown: (event) => onKeyDown(event, index),
1807
+ className: cn(
1808
+ "inline-flex h-8 items-center rounded-full border px-3 text-sm font-medium transition-colors duration-[120ms] disabled:cursor-not-allowed pointer-coarse:h-11",
1809
+ // Selected matches the outlined segmented control: brand tint, soft brand edge.
1810
+ checked ? "border-brand/45 bg-brand/10 text-brand disabled:border-border disabled:bg-surface-3 disabled:text-fg-muted" : "border-border bg-surface text-fg-muted hover:border-border-strong hover:text-fg disabled:bg-surface-2 disabled:text-fg-subtle disabled:hover:border-border"
1811
+ ),
1812
+ children: frequencyWords(t, frequency).preset
1813
+ },
1814
+ frequency
1815
+ );
1816
+ }) });
1817
+ }
1818
+ function PresetField({
1819
+ label,
1820
+ htmlFor,
1821
+ labelId,
1822
+ children
1823
+ }) {
1824
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-1.5", children: [
1825
+ htmlFor ? /* @__PURE__ */ jsx("label", { htmlFor, id: labelId, className: "text-xs leading-4.5 font-medium text-fg", children: label }) : /* @__PURE__ */ jsx("span", { id: labelId, className: "text-xs leading-4.5 font-medium text-fg", children: label }),
1826
+ /* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-wrap items-center gap-2", children })
1827
+ ] });
1828
+ }
1829
+ function PresetsVariant(props) {
1830
+ const { value, update, updateZone, now, disabled, timeZones, frequencies } = props;
1831
+ const rule = normalizeCadenceRule(value.rule, value.timeZone);
1832
+ const time = ruleTime(rule);
1833
+ const repeatsId = useId();
1834
+ const timeId = useId();
1835
+ const t = useOpenGeniText();
1836
+ const detailLabel = {
1837
+ weekly: t("cadence.picker.days"),
1838
+ monthly: t("cadence.picker.dayOfMonth"),
1839
+ interval: t("cadence.picker.every"),
1840
+ once: t("cadence.picker.date")
1841
+ };
1842
+ const detail = detailLabel[rule.frequency];
1843
+ return /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-4", children: [
1844
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-col gap-2", children: [
1845
+ /* @__PURE__ */ jsx("span", { id: repeatsId, className: "text-xs leading-4.5 font-medium text-fg", children: t("cadence.picker.repeats") }),
1846
+ /* @__PURE__ */ jsx(
1847
+ PresetChips,
1848
+ {
1849
+ value: rule.frequency,
1850
+ frequencies,
1851
+ labelledBy: repeatsId,
1852
+ disabled,
1853
+ onChange: (frequency) => update(switchFrequency(rule, frequency, { timeZone: value.timeZone, now }))
1854
+ }
1855
+ )
1856
+ ] }),
1857
+ detail ? /* @__PURE__ */ jsx(PresetField, { label: detail, children: /* @__PURE__ */ jsx(RuleDetails, { ...props, layout: "stacked" }) }) : null,
1858
+ usesTime(rule) && time !== void 0 ? /* @__PURE__ */ jsxs("div", { className: "grid min-w-0 grid-cols-[auto_minmax(0,1fr)] gap-4", children: [
1859
+ /* @__PURE__ */ jsx(PresetField, { label: t("cadence.picker.time"), htmlFor: timeId, children: /* @__PURE__ */ jsx(
1860
+ TimeField,
1861
+ {
1862
+ id: timeId,
1863
+ value: time,
1864
+ disabled,
1865
+ onChange: (next) => update(withTime(rule, next))
1866
+ }
1867
+ ) }),
1868
+ /* @__PURE__ */ jsx(PresetField, { label: t("cadence.picker.timeZone"), children: /* @__PURE__ */ jsx(
1869
+ TimeZonePicker,
1870
+ {
1871
+ value: value.timeZone,
1872
+ onChange: updateZone,
1873
+ timeZones,
1874
+ now,
1875
+ disabled,
1876
+ className: "w-full max-w-60"
1877
+ }
1878
+ ) })
1879
+ ] }) : null
1880
+ ] });
1881
+ }
1882
+ var TEXT_EXAMPLES = [
1883
+ "weekdays at 8",
1884
+ "mon and thu at 9:30",
1885
+ "1st of the month at 9",
1886
+ "every 30 min"
1887
+ ];
1888
+ function TextVariant({
1889
+ value,
1890
+ update,
1891
+ updateZone,
1892
+ now,
1893
+ disabled,
1894
+ timeZones,
1895
+ inputIssueId,
1896
+ onIssue
1897
+ }) {
1898
+ const [text, setText] = useState(() => cadencePhrase(value.rule, value.timeZone, now));
1899
+ const inputId = useId();
1900
+ const read = (next) => {
1901
+ setText(next);
1902
+ const result = parseCadence(next, { timeZone: value.timeZone, now });
1903
+ if (result.ok) {
1904
+ onIssue(null);
1905
+ update(result.rule);
1906
+ } else {
1907
+ onIssue(result.message);
1908
+ }
1909
+ };
1910
+ return /* @__PURE__ */ jsxs("div", { className: "@container/cadence-text flex min-w-0 flex-col gap-2.5", children: [
1911
+ /* @__PURE__ */ jsxs(
1912
+ "div",
1913
+ {
1914
+ className: cn(
1915
+ "flex h-9 min-w-0 items-center gap-1 rounded-[10px] border border-border pr-1 pl-3 transition-colors duration-[120ms] pointer-coarse:h-11",
1916
+ disabled ? "bg-surface-2 text-fg-muted" : "bg-surface hover:border-border-strong focus-within:border-brand focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-brand/55 focus-within:hover:border-brand"
1917
+ ),
1918
+ children: [
1919
+ /* @__PURE__ */ jsx(CalendarClockIcon, { "aria-hidden": "true", className: "size-4 shrink-0 text-fg-subtle" }),
1920
+ /* @__PURE__ */ jsx(
1921
+ "input",
1922
+ {
1923
+ id: inputId,
1924
+ type: "text",
1925
+ autoComplete: "off",
1926
+ spellCheck: false,
1927
+ "aria-label": "When it runs, in words",
1928
+ "aria-describedby": inputIssueId,
1929
+ disabled,
1930
+ value: text,
1931
+ placeholder: 'For example "every weekday at 8"',
1932
+ onChange: (event) => read(event.target.value),
1933
+ className: "h-full min-w-0 flex-1 bg-transparent px-1.5 text-sm text-fg outline-hidden! placeholder:text-fg-subtle disabled:cursor-not-allowed disabled:text-fg-muted pointer-coarse:text-base"
1934
+ }
1935
+ ),
1936
+ /* @__PURE__ */ jsx(
1937
+ TimeZonePicker,
1938
+ {
1939
+ value: value.timeZone,
1940
+ onChange: updateZone,
1941
+ timeZones,
1942
+ now,
1943
+ disabled,
1944
+ variant: "ghost",
1945
+ className: "max-w-44 shrink-0"
1946
+ }
1947
+ )
1948
+ ]
1949
+ }
1950
+ ),
1951
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-wrap items-center gap-1.5", children: [
1952
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-fg-subtle", children: "Try" }),
1953
+ TEXT_EXAMPLES.map((example) => /* @__PURE__ */ jsx(
1954
+ "button",
1955
+ {
1956
+ type: "button",
1957
+ disabled,
1958
+ onClick: () => read(example),
1959
+ className: "inline-flex h-7 items-center rounded-full border border-border bg-surface px-2.5 text-xs text-fg-muted transition-colors duration-[120ms] hover:border-border-strong hover:text-fg disabled:cursor-not-allowed disabled:bg-surface-2 disabled:text-fg-subtle disabled:hover:border-border pointer-coarse:h-9",
1960
+ children: example
1961
+ },
1962
+ example
1963
+ ))
1964
+ ] })
1965
+ ] });
1966
+ }
1967
+ function CadencePicker({
1968
+ value,
1969
+ onChange,
1970
+ variant = "sentence",
1971
+ timeZones = NO_TIME_ZONES,
1972
+ frequencies = ALL_FREQUENCIES,
1973
+ now: nowProp,
1974
+ viewerTimeZone,
1975
+ previewCount = 3,
1976
+ disabled,
1977
+ disabledReason,
1978
+ "aria-labelledby": labelledBy,
1979
+ className
1980
+ }) {
1981
+ const [firstRender] = useState(() => /* @__PURE__ */ new Date());
1982
+ const now = nowProp ?? firstRender;
1983
+ const issueId = useId();
1984
+ const reasonId = useId();
1985
+ const t = useOpenGeniText();
1986
+ const [parseIssue, setParseIssue] = useState(null);
1987
+ const issue = validateCadence(value.rule, { timeZone: value.timeZone, now, text: t });
1988
+ const hint = monthDayHint(t, value.rule);
1989
+ const parts = {
1990
+ value,
1991
+ update: (rule) => onChange({ ...value, rule }),
1992
+ updateZone: (timeZone) => onChange({ ...value, timeZone }),
1993
+ issue,
1994
+ issueId,
1995
+ now,
1996
+ disabled,
1997
+ timeZones,
1998
+ frequencies
1999
+ };
2000
+ return /* @__PURE__ */ jsxs(
2001
+ "div",
2002
+ {
2003
+ role: "group",
2004
+ "aria-labelledby": labelledBy,
2005
+ "aria-describedby": disabled && disabledReason ? reasonId : void 0,
2006
+ "data-variant": variant,
2007
+ className: cn("flex min-w-0 flex-col gap-3", className),
2008
+ children: [
2009
+ variant === "presets" ? /* @__PURE__ */ jsx(PresetsVariant, { ...parts }) : variant === "text" ? /* @__PURE__ */ jsx(TextVariant, { ...parts, inputIssueId: issueId, onIssue: setParseIssue }) : /* @__PURE__ */ jsx(SentenceVariant, { ...parts }),
2010
+ hint && !issue ? /* @__PURE__ */ jsx("p", { className: "-mt-1 text-xs leading-4.5 text-fg-muted", children: hint }) : null,
2011
+ /* @__PURE__ */ jsx(
2012
+ CadencePreview,
2013
+ {
2014
+ id: issueId,
2015
+ value,
2016
+ now,
2017
+ timeZones,
2018
+ viewerTimeZone,
2019
+ count: previewCount,
2020
+ issue: variant === "text" ? parseIssue : null,
2021
+ className: variant === "text" && parseIssue || issue ? "-mt-1.5" : void 0
2022
+ }
2023
+ ),
2024
+ disabled && disabledReason ? /* @__PURE__ */ jsx(InlineDisabledReason, { id: reasonId, children: disabledReason }) : null
2025
+ ]
2026
+ }
2027
+ );
2028
+ }
2029
+
2030
+ export {
2031
+ WEEKDAYS,
2032
+ DEFAULT_CADENCE_TIME,
2033
+ zonedParts,
2034
+ zonedTimeToUtc,
2035
+ formatLocalDate,
2036
+ parseLocalDate,
2037
+ timeZoneLabels,
2038
+ parseTime,
2039
+ normalizeTime,
2040
+ stepTime,
2041
+ formatRunTime,
2042
+ describeNextRuns,
2043
+ describeCadence,
2044
+ normalizeCadenceRule,
2045
+ validateCadence,
2046
+ nextRuns,
2047
+ toScheduleSpec,
2048
+ cadenceFromScheduleSpec,
2049
+ parseCadence,
2050
+ switchFrequency,
2051
+ cadencePhrase,
2052
+ TimeField,
2053
+ TimeZoneSearch,
2054
+ TimeZonePicker,
2055
+ CadencePreview,
2056
+ CadencePicker
2057
+ };
2058
+ //# sourceMappingURL=chunk-6JHU2UBS.js.map