@aeolus-fleet/gateway 0.37.1 → 0.37.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/prisma/changes.d.ts +8 -3
- package/dist/adapters/prisma/changes.js +18 -2
- package/dist/adapters/prisma/changes.js.map +1 -1
- package/dist/app.js +19 -11
- package/dist/app.js.map +1 -1
- package/dist/core/people/held-deliveries.d.ts +30 -0
- package/dist/core/people/held-deliveries.js +42 -0
- package/dist/core/people/held-deliveries.js.map +1 -0
- package/dist/core/people/opened-of.d.ts +2 -0
- package/dist/core/people/opened-of.js.map +1 -1
- package/dist/core/people/ports.d.ts +8 -0
- package/dist/core/people/read-basket.d.ts +2 -0
- package/dist/core/people/read-basket.js.map +1 -1
- package/dist/core/people/read-bridge-home.d.ts +2 -0
- package/dist/core/people/read-bridge-home.js.map +1 -1
- package/dist/core/people/read-inbox.d.ts +16 -8
- package/dist/core/people/read-inbox.js +21 -10
- package/dist/core/people/read-inbox.js.map +1 -1
- package/dist/core/people/send-stored-answers.d.ts +2 -0
- package/dist/core/people/send-stored-answers.js +1 -1
- package/dist/core/people/send-stored-answers.js.map +1 -1
- package/package.json +1 -1
- package/web/.next/BUILD_ID +1 -1
- package/web/.next/build-manifest.json +3 -3
- package/web/.next/diagnostics/route-bundle-stats.json +75 -75
- package/web/.next/fallback-build-manifest.json +3 -3
- package/web/.next/prerender-manifest.json +3 -3
- package/web/.next/server/app/(bridge)/bridge/basket/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/(bridge)/bridge/basket/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/basket/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/bridge/done/page/server-reference-manifest.json +4 -4
- package/web/.next/server/app/(bridge)/bridge/done/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/done/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/bridge/fleet/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/(bridge)/bridge/fleet/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/fleet/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/bridge/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/(bridge)/bridge/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/(bridge)/bridge/settings/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page/server-reference-manifest.json +4 -4
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/requests/[requestId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page/server-reference-manifest.json +7 -7
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/settings/routing/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/bridge/stay-aware/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page/server-reference-manifest.json +16 -16
- package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/[name]/change/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/[name]/page/server-reference-manifest.json +10 -10
- package/web/.next/server/app/(bridge)/outside-parties/[name]/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/[name]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page/server-reference-manifest.json +16 -16
- package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/[name]/retire/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/add/page/server-reference-manifest.json +12 -12
- package/web/.next/server/app/(bridge)/outside-parties/add/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/add/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page/server-reference-manifest.json +4 -4
- package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/add-a2a-agent/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page/server-reference-manifest.json +4 -4
- package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/add-a2a-client/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/page/server-reference-manifest.json +4 -4
- package/web/.next/server/app/(bridge)/outside-parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(bridge)/outside-parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/gateway-off/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/(console)/gateway-off/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/gateway-off/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/meetings/[meetingId]/page/server-reference-manifest.json +3 -3
- package/web/.next/server/app/(console)/meetings/[meetingId]/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/meetings/[meetingId]/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/parties/page/server-reference-manifest.json +9 -9
- package/web/.next/server/app/(console)/parties/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/parties/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/sign-in/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/disconnect/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/disconnect/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/disconnect/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/expose/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/expose/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/expose/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/(console)/slack/remove/page/server-reference-manifest.json +11 -11
- package/web/.next/server/app/(console)/slack/remove/page.js.nft.json +1 -1
- package/web/.next/server/app/(console)/slack/remove/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/_global-error.html +1 -1
- package/web/.next/server/app/_global-error.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/web/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/web/.next/server/app/_not-found/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/_not-found/page.js.nft.json +1 -1
- package/web/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/failed/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/failed/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/failed/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/pick/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/pick/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/pick/page_client-reference-manifest.js +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page/server-reference-manifest.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page.js.nft.json +1 -1
- package/web/.next/server/app/authorize/waiting/approval/page_client-reference-manifest.js +1 -1
- package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js +1 -1
- package/web/.next/server/chunks/ssr/01fr_app_(bridge)_bridge_settings_requests_[requestId]_page_actions_0o8g7_xshtmem.js.map +1 -1
- package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_settings_page_actions_0_te6h-2xxp7l.js +1 -1
- package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_settings_page_actions_0_te6h-2xxp7l.js.map +1 -1
- package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js +1 -1
- package/web/.next/server/chunks/ssr/0b9d__next-internal_server_app_(bridge)_bridge_stay-aware_page_actions_1u0xo0v3y9c34.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_bridge_settings_routing_page_actions_06_j7s24dy5ee.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_change_page_actions_1is-kjq5bubl4.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_change_page_actions_1is-kjq5bubl4.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_page_actions_1mctxtlzsa7xi.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_page_actions_1mctxtlzsa7xi.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_retire_page_actions_0xh6ok1un7s9k.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_[name]_retire_page_actions_0xh6ok1un7s9k.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add-a2a-agent_page_actions_1w1q5eavo_loo.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add-a2a-agent_page_actions_1w1q5eavo_loo.js.map +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add_page_actions_0urcbg_r0lo7j.js +1 -1
- package/web/.next/server/chunks/ssr/0vkm_server_app_(bridge)_outside-parties_add_page_actions_0urcbg_r0lo7j.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ipo8r1s1ntds._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ovcg5tg3nh49._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ovcg5tg3nh49._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ro-majrw7piv._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0ro-majrw7piv._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0xurmpdv5uqfl._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0zz6fx0keti4r._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__0zz6fx0keti4r._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__18-8taiduk1jn._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__19p4g16n2nh0b._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__19p4g16n2nh0b._.js.map +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1ncn4wx-1i09m._.js +1 -1
- package/web/.next/server/chunks/ssr/[root-of-the-server]__1ncn4wx-1i09m._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0d9el5z4r07h8._.js → _0-9rlwz3ujd0r._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0nmqkf1y-qsc2._.js.map → _0-9rlwz3ujd0r._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js +1 -1
- package/web/.next/server/chunks/ssr/_00hfzlqn1og18._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0_nfv33ug5g31._.js +1 -1
- package/web/.next/server/chunks/ssr/_0_nfv33ug5g31._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js +1 -1
- package/web/.next/server/chunks/ssr/_0ka_9elusb800._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js +1 -1
- package/web/.next/server/chunks/ssr/_0pyd1_y7w8ngp._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js +1 -1
- package/web/.next/server/chunks/ssr/_0xickgbbju_9-._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_0nmqkf1y-qsc2._.js → _15yv_08kq3cgn._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0d9el5z4r07h8._.js.map → _15yv_08kq3cgn._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{_0msh_lv5ns4e9._.js → _1ag569itedbet._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_1a-gh-psko_2f._.js.map → _1ag569itedbet._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_1cs_0d0h7mhw0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1cs_0d0h7mhw0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{_1a-gh-psko_2f._.js → _1m4bmxzmjr-8s._.js} +2 -2
- package/web/.next/server/chunks/ssr/{_0msh_lv5ns4e9._.js.map → _1m4bmxzmjr-8s._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js +1 -1
- package/web/.next/server/chunks/ssr/_1pjtire7rqla0._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js +1 -1
- package/web/.next/server/chunks/ssr/_1qbsmlji34yph._.js.map +1 -1
- package/web/.next/server/chunks/ssr/_1x3tv4gu7i2sy._.js +57 -0
- package/web/.next/server/chunks/ssr/_1x3tv4gu7i2sy._.js.map +1 -0
- package/web/.next/server/chunks/ssr/_1zcbk6s3j_jfy._.js +57 -0
- package/web/.next/server/chunks/ssr/_1zcbk6s3j_jfy._.js.map +1 -0
- package/web/.next/server/chunks/ssr/web_0a9n7acgjrk5c._.js +1 -1
- package/web/.next/server/chunks/ssr/web_0a9n7acgjrk5c._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_1vvrekkq5mirt._.js +1 -1
- package/web/.next/server/chunks/ssr/web_1vvrekkq5mirt._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_basket_page_actions_0g7q_rc5nma1e.js.map +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_done_page_actions_0kjm34arntdzv.js.map +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_fleet_page_actions_19wmo6phgvqfk.js +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_fleet_page_actions_19wmo6phgvqfk.js.map +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js +1 -1
- package/web/.next/server/chunks/ssr/web__next-internal_server_app_(bridge)_bridge_page_actions_1ok64rg3edm_u.js.map +1 -1
- package/web/.next/server/chunks/ssr/{web_features_11rwm0rhf5957._.js → web_features_16z82ve7t15n5._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_11rwm0rhf5957._.js.map → web_features_16z82ve7t15n5._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{web_features_0cgvngtsgzu24._.js → web_features_1e7_lwq7351pm._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_0cgvngtsgzu24._.js.map → web_features_1e7_lwq7351pm._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{web_features_1r2u065j-hgrq._.js → web_features_1fzx-ctm4ru39._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_1r2u065j-hgrq._.js.map → web_features_1fzx-ctm4ru39._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/{web_features_1loqabdanp8wi._.js → web_features_1wo7gr7bxvsi-._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_1loqabdanp8wi._.js.map → web_features_1wo7gr7bxvsi-._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-agent_ui_a2a-agent-form_tsx_0z8t1aalwzyl7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-a2a-client_ui_a2a-client-form_tsx_1anv88g385nwe._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_add-server_ui_add-server_tsx_1jnmar5xju49k._.js.map +1 -1
- package/web/.next/server/chunks/ssr/{web_features_bridge_17dx2edv4zsex._.js → web_features_bridge_0qdb9pmm6338t._.js} +2 -2
- package/web/.next/server/chunks/ssr/{web_features_bridge_17dx2edv4zsex._.js.map → web_features_bridge_0qdb9pmm6338t._.js.map} +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_decision-panel_tsx_1mzsixgc8zuxc._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_bridge_state_done-panel_tsx_1m844-qb1z9p_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_meeting_state_meeting-controls_tsx_12g4kzk2mbvvz._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-parties_ui_switch-card_tsx_1_xnu9bm4tc-_._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_1-lre9nfakki7._.js.map +1 -1
- package/web/.next/server/chunks/ssr/web_features_outside-party_actions_ts_102ar5pdowf8s._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_parties_actions_ts_0r-tbfsig2ty-._.js +1 -1
- package/web/.next/server/chunks/ssr/web_features_slack_actions_ts_1l3yg9vl20_vu._.js +1 -1
- package/web/.next/server/middleware-build-manifest.js +3 -3
- package/web/.next/server/pages/500.html +1 -1
- package/web/.next/server/preview-props.json +3 -3
- package/web/.next/server/server-reference-manifest.js +1 -1
- package/web/.next/server/server-reference-manifest.json +51 -51
- package/web/.next/static/chunks/{1az8wx3bt0tc-.js → 07km754q38z4c.js} +1 -1
- package/web/.next/static/chunks/{3c2whoiify4hd.js → 0ev65_p1z_ll0.js} +1 -1
- package/web/.next/static/chunks/17akrnci0j_nn.js +1 -0
- package/web/.next/static/chunks/{2ztqsnh1sq5f9.js → 1_f6w3i1t1svg.js} +1 -1
- package/web/.next/static/chunks/1e5_kej4hnnf_.js +1 -0
- package/web/.next/static/chunks/{3bvcgvk4m3hxh.js → 1edk_zyv9lbyy.js} +1 -1
- package/web/.next/static/chunks/{0klu03tcnjzsm.js → 1lq70vpqz6u1c.js} +1 -1
- package/web/.next/static/chunks/{1oipnf2j_m8oy.js → 1zqkns-nn-wz0.js} +4 -4
- package/web/.next/static/chunks/{3q_d1vlm22cy0.js → 2490rbe6dmnwe.js} +1 -1
- package/web/.next/static/chunks/{0jqdvhip5x6im.js → 27tnlhw9cxgul.js} +1 -1
- package/web/.next/static/chunks/{0d0fsf26a1ep_.js → 2_ayfyj3csc8m.js} +1 -1
- package/web/.next/static/chunks/2v-0k1odkn9cu.js +1 -0
- package/web/.next/static/chunks/{3po7blcdi5_y6.js → 2v4z6cjtqu95k.js} +1 -1
- package/web/.next/static/chunks/{12kwix3z2z-fs.js → 3ban8s8z3ah0y.js} +1 -1
- package/web/.next/static/chunks/{3nqasvqr8d81s.js → 3ik7w8wf5u23q.js} +1 -1
- package/web/.next/trace +1 -1
- package/web/.next/trace-build +1 -1
- package/web/.next/server/chunks/ssr/_1e720g1qty0xj._.js +0 -57
- package/web/.next/server/chunks/ssr/_1e720g1qty0xj._.js.map +0 -1
- package/web/.next/server/chunks/ssr/_1xjxj1ur-j87t._.js +0 -57
- package/web/.next/server/chunks/ssr/_1xjxj1ur-j87t._.js.map +0 -1
- package/web/.next/static/chunks/04r-53h_fb5rq.js +0 -1
- package/web/.next/static/chunks/2fjzmc7-5sf_m.js +0 -1
- package/web/.next/static/chunks/38w8690okopia.js +0 -1
- /package/web/.next/static/{waEyx88w-M7TBm3nu35s- → yJHYTb3NO7GRc3o3RS0f0}/_buildManifest.js +0 -0
- /package/web/.next/static/{waEyx88w-M7TBm3nu35s- → yJHYTb3NO7GRc3o3RS0f0}/_clientMiddlewareManifest.js +0 -0
- /package/web/.next/static/{waEyx88w-M7TBm3nu35s- → yJHYTb3NO7GRc3o3RS0f0}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/bridge/ui/place-icons.tsx","../../../../../web/features/bridge/hooks/data%3A87b671%20%3Ctext/javascript%3E","../../../../../node_modules/lucide-react/src/icons/message-circle-question-mark.ts","../../../../../web/features/bridge/hooks/data%3Aeac299%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3Abb5378%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A59ed8b%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/use-web-push.ts","../../../../../web/features/bridge/ui/place-card.tsx","../../../../../web/features/bridge/state/places-panel.tsx","../../../../../web/features/bridge/hooks/slack-link-path.ts","../../../../../node_modules/lucide-react/src/icons/circle-pause.ts","../../../../../web/features/bridge/services/web-push.ts","../../../../../web/features/bridge/state/routing-panel.tsx","../../../../../web/features/bridge/ui/routing-switch.tsx"],"sourcesContent":["import { Bell, CircleQuestionMark, Hand, Hash, Mail, MessageCircleQuestionMark, Ship, Sparkles, type LucideIcon } from 'lucide-react';\n\nimport type { RoutedJob, RoutedPlace } from '../services/routing';\n\n/** Each job's icon in its tone, as the routing mockup draws it: Decide active, Do waiting, the others muted. */\nexport const JOB_ICONS: Readonly<Record<RoutedJob, { readonly Icon: LucideIcon; readonly tone: string }>> = {\n decide: { Icon: CircleQuestionMark, tone: 'text-tone-active-fg' },\n do: { Icon: Hand, tone: 'text-tone-waiting-fg' },\n 'stay-aware': { Icon: Bell, tone: 'text-muted-foreground' },\n 'everything-else': { Icon: MessageCircleQuestionMark, tone: 'text-muted-foreground' },\n};\n\n/** Bridge's icon, the mark of the sidebar. */\nexport const BRIDGE_ICON: LucideIcon = Ship;\n\n/** Each place's icon, as the routing mockup draws it. */\nexport const PLACE_ICONS: Readonly<Record<RoutedPlace, LucideIcon>> = { slack: Hash, chat: Sparkles, 'web-push': Bell, email: Mail };\n","/* __next_internal_action_entry_do_not_use__ [{\"40b105461ed5180c1e4e9f65c6e5ee21504611accd\":{\"name\":\"turnRoute\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_10=/*#__PURE__*/createServerReference(\"40b105461ed5180c1e4e9f65c6e5ee21504611accd\",callServer,void 0,findSourceMapURL,\"turnRoute\");export{$$RSC_SERVER_ACTION_10 as turnRoute};","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'message-circle-question-mark',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n key: '1sd12s',\n },\n ],\n ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n ],\n aliases: ['message-circle-question'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessageCircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircleQuestionMark = createLucideIcon(__iconData);\n\nexport default MessageCircleQuestionMark;\n","/* __next_internal_action_entry_do_not_use__ [{\"6050542061a8722cadd772f635ab49f34ca8df98f3\":{\"name\":\"turnOffWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_12=/*#__PURE__*/createServerReference(\"6050542061a8722cadd772f635ab49f34ca8df98f3\",callServer,void 0,findSourceMapURL,\"turnOffWebPush\");export{$$RSC_SERVER_ACTION_12 as turnOffWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"607f1c42ea803f083c89d5ded23c2d6843d246b62d\":{\"name\":\"turnOnWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_11=/*#__PURE__*/createServerReference(\"607f1c42ea803f083c89d5ded23c2d6843d246b62d\",callServer,void 0,findSourceMapURL,\"turnOnWebPush\");export{$$RSC_SERVER_ACTION_11 as turnOnWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"40f4b4eb49279e8395359781351dbbf28623530f37\":{\"name\":\"unlinkSlack\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_13=/*#__PURE__*/createServerReference(\"40f4b4eb49279e8395359781351dbbf28623530f37\",callServer,void 0,findSourceMapURL,\"unlinkSlack\");export{$$RSC_SERVER_ACTION_13 as unlinkSlack};","'use client';\n\nimport { useEffect, useState, useTransition } from 'react';\n\nimport type { WakeChannels } from '../services/deliveries';\nimport { applicationServerKeyOf, browserNameOf, subscriptionInputOf } from '../services/web-push';\nimport { turnOffWebPush, turnOnWebPush } from './bridge-actions';\n\n/** The service worker that shows a wake and opens Bridge when it is pressed. */\nconst WORKER_PATH = '/wake-worker.js';\n\n/** Whether this browser takes web push at all. */\nfunction isPushTaken(): boolean {\n return 'serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window;\n}\n\n/** This browser's own push subscription with the gateway's worker, if it has one. */\nasync function ownSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.getRegistration(WORKER_PATH);\n return (await registration?.pushManager.getSubscription()) ?? null;\n}\n\n/** Asks the browser's permission, then subscribes it with the gateway's key: the subscription to send, or why there is none. */\nasync function subscribed(webPushKey: string): Promise<{ readonly isOk: true; readonly value: PushSubscription } | { readonly isOk: false; readonly message: string }> {\n if ((await Notification.requestPermission()) !== 'granted') {\n return { isOk: false, message: 'Your browser did not allow notifications from this site: allow them, then turn web push on again' };\n }\n const registration = await navigator.serviceWorker.register(WORKER_PATH);\n await navigator.serviceWorker.ready;\n return { isOk: true, value: await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKeyOf(webPushKey) }) };\n}\n\n/**\n * Web push in this browser (wake a person, W8): whether it takes web push,\n * its own subscription, turning it on, which asks the browser's permission\n * first, and removing a browser, this one or another.\n */\nexport function useWebPush({ fleetId, webPushKey }: { fleetId: string; webPushKey: string | null }) {\n const [isTaken, setIsTaken] = useState(true);\n const [ownEndpoint, setOwnEndpoint] = useState<string | undefined>();\n const [working, setWorking] = useState<string | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n useEffect(() => {\n if (!isPushTaken()) {\n setIsTaken(false);\n return;\n }\n void ownSubscription().then((own) => {\n setOwnEndpoint(own?.endpoint);\n });\n }, []);\n\n const turnOn = () => {\n if (webPushKey === null) {\n return;\n }\n setWorking('on');\n setFailure(undefined);\n startTransition(async () => {\n try {\n const subscription = await subscribed(webPushKey);\n if (!subscription.isOk) {\n setFailure(subscription.message);\n return;\n }\n const input = subscriptionInputOf(subscription.value.toJSON(), browserNameOf(navigator.userAgent));\n if (input === undefined) {\n setFailure('Your browser gave no push subscription: try again');\n return;\n }\n const outcome = await turnOnWebPush(fleetId, input);\n if (outcome.isOk) {\n setOwnEndpoint(input.endpoint);\n } else {\n setFailure(outcome.message);\n }\n } catch {\n setFailure('Your browser could not turn web push on: try again');\n } finally {\n setWorking(undefined);\n }\n });\n };\n\n const remove = (endpoint: string) => {\n setWorking(endpoint);\n setFailure(undefined);\n startTransition(async () => {\n if (endpoint === ownEndpoint) {\n await (await ownSubscription())?.unsubscribe();\n setOwnEndpoint(undefined);\n }\n const outcome = await turnOffWebPush(fleetId, endpoint);\n setWorking(undefined);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return { isTaken, ownEndpoint, working, failure, turnOn, remove };\n}\n\nexport type WebPushBrowsers = WakeChannels['webPush']['browsers'];\n","import { CircleCheck, CirclePause, type LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport type { PlaceCard as PlaceCardState } from '../services/routing';\n\n/**\n * A place on top of Where things show (the routing mockup): its icon and\n * name, its state on the right, what it does, and its one action below.\n */\nexport function PlaceCard({ place, name, Icon, card, children }: { place: string; name: string; Icon: LucideIcon; card: PlaceCardState; children?: ReactNode }) {\n const StateIcon = card.state.isOk ? CircleCheck : CirclePause;\n return (\n <div data-testid={`bridge-place-${place}`} className=\"flex flex-col gap-1.5 rounded-lg border border-border bg-card px-3 py-2.5\">\n <span className=\"flex items-center gap-2 font-medium\">\n <Icon aria-hidden className=\"size-4 shrink-0\" />\n {name}\n <span data-testid={`bridge-place-${place}-state`} className={`ml-auto inline-flex items-center gap-1 text-caption font-medium ${card.state.isOk ? 'text-tone-ok-fg' : 'text-muted-foreground'}`}>\n <StateIcon aria-hidden className=\"size-3.5\" />\n {card.state.label}\n </span>\n </span>\n <span className=\"text-caption text-muted-foreground\">{card.description}</span>\n {children === undefined ? null : <span className=\"mt-auto flex flex-col items-start gap-1.5\">{children}</span>}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute, unlinkSlack } from '../hooks/bridge-actions';\nimport type { SlackLink } from '../hooks/read-bridge';\nimport { SLACK_LINK_PATH } from '../hooks/slack-link-path';\nimport { useWebPush } from '../hooks/use-web-push';\nimport type { WakeChannels } from '../services/deliveries';\nimport { chatCardOf, emailCardOf, emailTurnsOf, PLACE_NAMES, slackCardOf, webPushCardOf, type RoutingView } from '../services/routing';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { PlaceCard } from '../ui/place-card';\nimport { PLACE_ICONS } from '../ui/place-icons';\n\nfunction SlackPlace({ fleetId, slackLink }: { fleetId: string; slackLink: SlackLink | null }) {\n const [isUnlinking, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = slackCardOf(slackLink);\n\n const unlink = () => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await unlinkSlack(fleetId);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <PlaceCard place=\"slack\" name={PLACE_NAMES.slack} Icon={PLACE_ICONS.slack} card={card}>\n {card.action === 'link' ? (\n <a\n href={`${SLACK_LINK_PATH}?${new URLSearchParams({ fleet: fleetId }).toString()}`}\n data-testid=\"bridge-slack-link\"\n className=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-caption font-medium text-primary-foreground hover:bg-primary-hover\"\n >\n Link Slack\n </a>\n ) : null}\n {card.action === 'unlink' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-slack-unlink\" isPending={isUnlinking} pendingLabel=\"Unlinking...\" onClick={unlink}>\n Unlink\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction WebPushPlace({ fleetId, webPush }: { fleetId: string; webPush: WakeChannels['webPush'] | undefined }) {\n const browsers = webPush?.browsers ?? [];\n const { isTaken, ownEndpoint, working, failure, turnOn, remove } = useWebPush({ fleetId, webPushKey: webPush?.publicKey ?? null });\n const card = webPushCardOf({ isOffered: webPush !== undefined && webPush.publicKey !== null, isTaken, ownEndpoint, browsers });\n const others = browsers.filter(({ endpoint }) => card.action !== 'remove' || endpoint !== ownEndpoint);\n return (\n <PlaceCard place=\"web-push\" name={PLACE_NAMES['web-push']} Icon={PLACE_ICONS['web-push']} card={card}>\n {card.action === 'remove' && ownEndpoint !== undefined ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-remove\" isPending={working === ownEndpoint} pendingLabel=\"Removing...\" disabled={working !== undefined} onClick={() => { remove(ownEndpoint); }}>\n Remove\n </ActionButton>\n ) : null}\n {card.action === 'turnOn' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-on\" isPending={working === 'on'} pendingLabel=\"Turning on...\" disabled={working !== undefined} onClick={turnOn}>\n Turn on\n </ActionButton>\n ) : null}\n {others.map(({ endpoint, browser, isGone }) => (\n <span key={endpoint} data-testid=\"bridge-web-push-browser\" className=\"flex w-full items-center gap-2 text-caption text-muted-foreground\">\n <span className=\"min-w-0 flex-1\">{isGone ? `${browser}: no longer takes wakes` : `Also on in ${browser}`}</span>\n <button type=\"button\" data-testid=\"bridge-web-push-remove-other\" disabled={working !== undefined} onClick={() => { remove(endpoint); }} className=\"underline hover:text-foreground disabled:opacity-50\">\n {working === endpoint ? 'Removing...' : 'Remove'}\n </button>\n </span>\n ))}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction EmailPlace({ fleetId, routing }: { fleetId: string; routing: RoutingView }) {\n const [isTurning, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = emailCardOf({ isOffered: routing.offered.email, isOnForAnyJob: routing.jobs.some(({ places }) => places.email) });\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTransition(async () => {\n for (const change of emailTurnsOf(routing, isOn)) {\n const outcome = await turnRoute({ fleet: fleetId, ...change });\n if (!outcome.isOk) {\n setFailure(outcome.message);\n return;\n }\n }\n });\n };\n\n return (\n <PlaceCard place=\"email\" name={PLACE_NAMES.email} Icon={PLACE_ICONS.email} card={card}>\n {card.action === 'turnOn' || card.action === 'turnOff' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-email-turn\" isPending={isTurning} pendingLabel={card.action === 'turnOn' ? 'Turning on...' : 'Turning off...'} onClick={() => { turn(card.action === 'turnOn'); }}>\n {card.action === 'turnOn' ? 'Turn on' : 'Turn off'}\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\n/**\n * The places on top of Where things show (Bridge, section 8; the routing\n * mockup), each with its state and its one action: Slack linked or not, the\n * chats connected through the gateway, web push in this browser, and email.\n */\nexport function PlacesPanel({\n fleetId,\n routing,\n slackLink,\n chats,\n webPush,\n}: {\n fleetId: string;\n routing: RoutingView;\n slackLink: SlackLink | null;\n chats: readonly string[];\n webPush: WakeChannels['webPush'] | undefined;\n}) {\n return (\n <section aria-label=\"The places\" className=\"grid gap-2.5 sm:grid-cols-2 lg:grid-cols-4\">\n <SlackPlace fleetId={fleetId} slackLink={slackLink} />\n <PlaceCard place=\"chat\" name={PLACE_NAMES.chat} Icon={PLACE_ICONS.chat} card={chatCardOf(chats)} />\n <WebPushPlace fleetId={fleetId} webPush={webPush} />\n <EmailPlace fleetId={fleetId} routing={routing} />\n </section>\n );\n}\n","/** Where Link Slack starts (gateway scopes 9.3): the button in Bridge's settings and the button in a bot's answer in Slack (src/core/slack/take-slack-event.ts). */\nexport const SLACK_LINK_PATH = '/slack/link';\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'circle-pause',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['line', { x1: '10', x2: '10', y1: '15', y2: '9', key: 'c1nkhi' }],\n ['line', { x1: '14', x2: '14', y1: '15', y2: '9', key: 'h65svq' }],\n ],\n aliases: ['pause-circle'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name CirclePause\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/circle-pause\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CirclePause = createLucideIcon(__iconData);\n\nexport default CirclePause;\n","/**\n * What the section of wakes of Bridge's settings works out in the browser (wake a\n * person, W8): the name a browser it turns web push on in is listed by, the\n * gateway's push key as the browser's push manager takes it, and the\n * subscription the browser sends the gateway.\n */\n\n/** A browser's push subscription as the gateway takes it, with the browser's name. */\nexport interface SubscriptionInput {\n readonly endpoint: string;\n readonly keys: { readonly p256dh: string; readonly auth: string };\n readonly browser: string;\n}\n\n/** The browsers and systems a name is made of, the first that matches counting: Edge and Chrome also say Safari, and Chrome says Chrome. */\nconst BROWSERS: readonly (readonly [RegExp, string])[] = [\n [/Edg\\//, 'Edge'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\nconst SYSTEMS: readonly (readonly [RegExp, string])[] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstOf = (userAgent: string, names: readonly (readonly [RegExp, string])[]): string | undefined => names.find(([pattern]) => pattern.test(userAgent))?.[1];\n\n/** The name a browser is listed by, such as Firefox on Linux, from its user agent. */\nexport function browserNameOf(userAgent: string): string {\n const browser = firstOf(userAgent, BROWSERS);\n const system = firstOf(userAgent, SYSTEMS);\n if (browser === undefined) {\n return 'A browser';\n }\n return system === undefined ? browser : `${browser} on ${system}`;\n}\n\n/** The bytes a base64url key stands for, as the browser's push manager takes the gateway's key. */\nexport function applicationServerKeyOf(key: string): Uint8Array<ArrayBuffer> {\n const binary = atob(key.replaceAll('-', '+').replaceAll('_', '/'));\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n\n/** The subscription to send, from the push manager's own, or none when it gave no endpoint or keys. */\nexport function subscriptionInputOf(subscription: { endpoint?: string; keys?: Record<string, string> }, browser: string): SubscriptionInput | undefined {\n const { endpoint, keys } = subscription;\n const p256dh = keys?.p256dh;\n const auth = keys?.auth;\n return endpoint === undefined || p256dh === undefined || auth === undefined ? undefined : { endpoint, keys: { p256dh, auth }, browser };\n}\n","'use client';\n\nimport { CircleCheck } from 'lucide-react';\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute } from '../hooks/bridge-actions';\nimport { JOB_NAMES, PLACE_NAMES, ROUTED_PLACES, turnedToastOf, type RoutedJob, type RoutedPlace, type RoutingToast, type RoutingView, type WaitingByJob } from '../services/routing';\nimport { Notice } from '../ui/notice';\nimport { BRIDGE_ICON, JOB_ICONS, PLACE_ICONS } from '../ui/place-icons';\nimport { RoutingSwitch } from '../ui/routing-switch';\n\n/** Six columns on desktop: the job, Bridge, then each place. */\nconst ROW = 'sm:grid sm:grid-cols-[1.6fr_repeat(5,1fr)] sm:items-center sm:gap-3';\n\n/** The toast after a change (the routing mockup): what the place now shows. */\nfunction Toast({ toast }: { toast: RoutingToast }) {\n return (\n <div role=\"status\" data-testid=\"bridge-routing-toast\" className=\"flex max-w-[720px] gap-3 rounded-lg border border-border bg-popover py-3.5 pr-3.5 pl-4 text-popover-foreground shadow-lg\">\n <CircleCheck aria-hidden className=\"mt-0.5 size-4 shrink-0 text-tone-ok-fg\" />\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"font-medium\">{toast.title}</span>\n <span className=\"text-caption text-muted-foreground\">{toast.detail}</span>\n </span>\n </div>\n );\n}\n\n/** A place's cell: on desktop the switch in its column, on the phone a line with the place's name and the switch. */\nfunction PlaceCell({ name, children }: { name: string; children: React.ReactNode }) {\n return (\n <span className=\"flex items-center justify-between sm:block\">\n <span className=\"sm:hidden\">{name}</span>\n {children}\n </span>\n );\n}\n\n/**\n * Routing per job (Bridge, section 8; the routing mockup): per job, the\n * places that show it besides Bridge, which always does. A switch turns a\n * place on or off at once; the toast then says what it shows (CC20). A\n * place the gateway does not offer, or Slack before it is linked, cannot be\n * turned on; one on can always be turned off. On desktop a table, on the\n * phone a card per job.\n */\nexport function RoutingPanel({ fleetId, routing, isSlackLinked, waitingByJob }: { fleetId: string; routing: RoutingView; isSlackLinked: boolean; waitingByJob: WaitingByJob }) {\n const [isTurning, startTransition] = useTransition();\n const [turning, setTurning] = useState<string | undefined>();\n const [toast, setToast] = useState<RoutingToast | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const isUsable = (place: RoutedPlace): boolean => routing.offered[place] && (place !== 'slack' || isSlackLinked);\n\n const turn = (change: { job: RoutedJob; place: RoutedPlace; isOn: boolean; isChatOn: boolean }) => {\n setToast(undefined);\n setFailure(undefined);\n setTurning(`${change.job}-${change.place}`);\n startTransition(async () => {\n const { isChatOn, ...route } = change;\n const outcome = await turnRoute({ fleet: fleetId, ...route });\n if (outcome.isOk) {\n setToast(turnedToastOf({ ...route, waiting: waitingByJob[route.job], isChatOn }));\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-3\" aria-label=\"Per job\">\n <div className=\"grid gap-3 sm:gap-0 sm:overflow-hidden sm:rounded-lg sm:border sm:border-border sm:bg-card\">\n <div aria-hidden className={`hidden min-h-8 bg-muted px-4 text-caption font-medium text-muted-foreground ${ROW}`}>\n <span>Job</span>\n <span className=\"inline-flex items-center gap-1.5\">\n <BRIDGE_ICON className=\"size-3.5\" />\n Bridge\n </span>\n {ROUTED_PLACES.map((place) => {\n const Icon = PLACE_ICONS[place];\n return (\n <span key={place} className=\"inline-flex items-center gap-1.5\">\n <Icon className=\"size-3.5\" />\n {PLACE_NAMES[place]}\n </span>\n );\n })}\n </div>\n {routing.jobs.map(({ job, places }) => {\n const { Icon, tone } = JOB_ICONS[job];\n return (\n <div\n key={job}\n data-testid=\"bridge-routing-job\"\n className={`flex flex-col gap-2 rounded-lg border border-border bg-card p-3 sm:min-h-[52px] sm:rounded-none sm:border-0 sm:border-t sm:px-4 sm:py-1.5 ${ROW}`}\n >\n <span className=\"flex flex-col gap-0.5\">\n <span className=\"inline-flex items-center gap-1.5 font-semibold sm:font-medium\">\n <Icon aria-hidden className={`size-4 shrink-0 ${tone}`} />\n {JOB_NAMES[job].name}\n </span>\n <span className=\"text-caption text-muted-foreground max-sm:hidden\">{JOB_NAMES[job].holds}</span>\n </span>\n <PlaceCell name=\"Bridge\">\n <RoutingSwitch isOn label={`Bridge for ${JOB_NAMES[job].name}`} isDisabled aside=\"Always\" testId={`bridge-routing-${job}-bridge`} />\n </PlaceCell>\n {ROUTED_PLACES.map((place) => {\n const isOn = places[place];\n const key = `${job}-${place}`;\n return (\n <PlaceCell key={place} name={PLACE_NAMES[place]}>\n <RoutingSwitch\n isOn={isOn}\n label={`${PLACE_NAMES[place]} for ${JOB_NAMES[job].name}`}\n isDisabled={isTurning || (!isOn && !isUsable(place))}\n isBusy={isTurning && turning === key}\n {...(job === 'everything-else' && place === 'slack' && !isOn ? { aside: 'Bots only' } : {})}\n testId={`bridge-routing-${key}`}\n onTurn={() => {\n turn({ job, place, isOn: !isOn, isChatOn: places.chat });\n }}\n />\n </PlaceCell>\n );\n })}\n </div>\n );\n })}\n </div>\n {toast === undefined ? null : <Toast toast={toast} />}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <p className=\"text-caption text-muted-foreground max-sm:hidden\">While a Bridge page is open in focus, web push and email do not wake you. Slack still posts: you turned it on, and the views stay in step.</p>\n </section>\n );\n}\n","/**\n * A switch for one place of one job (the routing mockup): on or off, small;\n * Bridge's is on and cannot be turned, said beside it as Always; Slack's for\n * everything else, while off, says Bots only beside it.\n */\nexport function RoutingSwitch({\n isOn,\n label,\n isDisabled,\n isBusy = false,\n aside,\n testId,\n onTurn,\n}: {\n isOn: boolean;\n label: string;\n isDisabled: boolean;\n isBusy?: boolean;\n aside?: string;\n testId: string;\n onTurn?: () => void;\n}) {\n return (\n <span className=\"inline-flex items-center gap-2.5\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isOn}\n aria-label={label}\n aria-busy={isBusy}\n disabled={isDisabled}\n data-testid={testId}\n onClick={onTurn}\n className=\"group inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-input p-0.5 aria-checked:bg-primary disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <span aria-hidden className=\"size-3 rounded-full bg-card shadow-sm transition-transform group-aria-checked:translate-x-3\" />\n </button>\n {aside === undefined ? null : <span className=\"text-caption text-muted-foreground\">{aside}</span>}\n </span>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_10","$$RSC_SERVER_ACTION_13","RoutingSwitch","isOn","label","isDisabled","isBusy","aside","testId","onTurn","className","type","role","disabled","onClick","undefined"],"mappings":"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","ignoreList":[2,10]}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/bridge/ui/place-icons.tsx","../../../../../web/features/bridge/hooks/data%3Add12b3%20%3Ctext/javascript%3E","../../../../../node_modules/lucide-react/src/icons/message-circle-question-mark.ts","../../../../../web/features/bridge/hooks/data%3A55f120%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A37e135%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/data%3A17d278%20%3Ctext/javascript%3E","../../../../../web/features/bridge/hooks/use-web-push.ts","../../../../../web/features/bridge/ui/place-card.tsx","../../../../../web/features/bridge/state/places-panel.tsx","../../../../../web/features/bridge/hooks/slack-link-path.ts","../../../../../node_modules/lucide-react/src/icons/circle-pause.ts","../../../../../web/features/bridge/services/web-push.ts","../../../../../web/features/bridge/state/routing-panel.tsx","../../../../../web/features/bridge/ui/routing-switch.tsx"],"sourcesContent":["import { Bell, CircleQuestionMark, Hand, Hash, Mail, MessageCircleQuestionMark, Ship, Sparkles, type LucideIcon } from 'lucide-react';\n\nimport type { RoutedJob, RoutedPlace } from '../services/routing';\n\n/** Each job's icon in its tone, as the routing mockup draws it: Decide active, Do waiting, the others muted. */\nexport const JOB_ICONS: Readonly<Record<RoutedJob, { readonly Icon: LucideIcon; readonly tone: string }>> = {\n decide: { Icon: CircleQuestionMark, tone: 'text-tone-active-fg' },\n do: { Icon: Hand, tone: 'text-tone-waiting-fg' },\n 'stay-aware': { Icon: Bell, tone: 'text-muted-foreground' },\n 'everything-else': { Icon: MessageCircleQuestionMark, tone: 'text-muted-foreground' },\n};\n\n/** Bridge's icon, the mark of the sidebar. */\nexport const BRIDGE_ICON: LucideIcon = Ship;\n\n/** Each place's icon, as the routing mockup draws it. */\nexport const PLACE_ICONS: Readonly<Record<RoutedPlace, LucideIcon>> = { slack: Hash, chat: Sparkles, 'web-push': Bell, email: Mail };\n","/* __next_internal_action_entry_do_not_use__ [{\"40318522285b0c5adeeccc205ccacf9b4c8018eee9\":{\"name\":\"turnRoute\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_10=/*#__PURE__*/createServerReference(\"40318522285b0c5adeeccc205ccacf9b4c8018eee9\",callServer,void 0,findSourceMapURL,\"turnRoute\");export{$$RSC_SERVER_ACTION_10 as turnRoute};","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'message-circle-question-mark',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719',\n key: '1sd12s',\n },\n ],\n ['path', { d: 'M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3', key: '1u773s' }],\n ['path', { d: 'M12 17h.01', key: 'p32p05' }],\n ],\n aliases: ['message-circle-question'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name MessageCircleQuestionMark\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/message-circle-question-mark\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst MessageCircleQuestionMark = createLucideIcon(__iconData);\n\nexport default MessageCircleQuestionMark;\n","/* __next_internal_action_entry_do_not_use__ [{\"605802c1143eee8fecb2dbef71cd9ed55020165469\":{\"name\":\"turnOffWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_12=/*#__PURE__*/createServerReference(\"605802c1143eee8fecb2dbef71cd9ed55020165469\",callServer,void 0,findSourceMapURL,\"turnOffWebPush\");export{$$RSC_SERVER_ACTION_12 as turnOffWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"6031bc8e16debd871e23c55c1f147e258938816f85\":{\"name\":\"turnOnWebPush\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_11=/*#__PURE__*/createServerReference(\"6031bc8e16debd871e23c55c1f147e258938816f85\",callServer,void 0,findSourceMapURL,\"turnOnWebPush\");export{$$RSC_SERVER_ACTION_11 as turnOnWebPush};","/* __next_internal_action_entry_do_not_use__ [{\"40ef462b81ba2c517a0637f83b8b4e8d20efc89ecb\":{\"name\":\"unlinkSlack\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_13=/*#__PURE__*/createServerReference(\"40ef462b81ba2c517a0637f83b8b4e8d20efc89ecb\",callServer,void 0,findSourceMapURL,\"unlinkSlack\");export{$$RSC_SERVER_ACTION_13 as unlinkSlack};","'use client';\n\nimport { useEffect, useState, useTransition } from 'react';\n\nimport type { WakeChannels } from '../services/deliveries';\nimport { applicationServerKeyOf, browserNameOf, subscriptionInputOf } from '../services/web-push';\nimport { turnOffWebPush, turnOnWebPush } from './bridge-actions';\n\n/** The service worker that shows a wake and opens Bridge when it is pressed. */\nconst WORKER_PATH = '/wake-worker.js';\n\n/** Whether this browser takes web push at all. */\nfunction isPushTaken(): boolean {\n return 'serviceWorker' in navigator && 'PushManager' in window && 'Notification' in window;\n}\n\n/** This browser's own push subscription with the gateway's worker, if it has one. */\nasync function ownSubscription(): Promise<PushSubscription | null> {\n const registration = await navigator.serviceWorker.getRegistration(WORKER_PATH);\n return (await registration?.pushManager.getSubscription()) ?? null;\n}\n\n/** Asks the browser's permission, then subscribes it with the gateway's key: the subscription to send, or why there is none. */\nasync function subscribed(webPushKey: string): Promise<{ readonly isOk: true; readonly value: PushSubscription } | { readonly isOk: false; readonly message: string }> {\n if ((await Notification.requestPermission()) !== 'granted') {\n return { isOk: false, message: 'Your browser did not allow notifications from this site: allow them, then turn web push on again' };\n }\n const registration = await navigator.serviceWorker.register(WORKER_PATH);\n await navigator.serviceWorker.ready;\n return { isOk: true, value: await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: applicationServerKeyOf(webPushKey) }) };\n}\n\n/**\n * Web push in this browser (wake a person, W8): whether it takes web push,\n * its own subscription, turning it on, which asks the browser's permission\n * first, and removing a browser, this one or another.\n */\nexport function useWebPush({ fleetId, webPushKey }: { fleetId: string; webPushKey: string | null }) {\n const [isTaken, setIsTaken] = useState(true);\n const [ownEndpoint, setOwnEndpoint] = useState<string | undefined>();\n const [working, setWorking] = useState<string | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n\n useEffect(() => {\n if (!isPushTaken()) {\n setIsTaken(false);\n return;\n }\n void ownSubscription().then((own) => {\n setOwnEndpoint(own?.endpoint);\n });\n }, []);\n\n const turnOn = () => {\n if (webPushKey === null) {\n return;\n }\n setWorking('on');\n setFailure(undefined);\n startTransition(async () => {\n try {\n const subscription = await subscribed(webPushKey);\n if (!subscription.isOk) {\n setFailure(subscription.message);\n return;\n }\n const input = subscriptionInputOf(subscription.value.toJSON(), browserNameOf(navigator.userAgent));\n if (input === undefined) {\n setFailure('Your browser gave no push subscription: try again');\n return;\n }\n const outcome = await turnOnWebPush(fleetId, input);\n if (outcome.isOk) {\n setOwnEndpoint(input.endpoint);\n } else {\n setFailure(outcome.message);\n }\n } catch {\n setFailure('Your browser could not turn web push on: try again');\n } finally {\n setWorking(undefined);\n }\n });\n };\n\n const remove = (endpoint: string) => {\n setWorking(endpoint);\n setFailure(undefined);\n startTransition(async () => {\n if (endpoint === ownEndpoint) {\n await (await ownSubscription())?.unsubscribe();\n setOwnEndpoint(undefined);\n }\n const outcome = await turnOffWebPush(fleetId, endpoint);\n setWorking(undefined);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return { isTaken, ownEndpoint, working, failure, turnOn, remove };\n}\n\nexport type WebPushBrowsers = WakeChannels['webPush']['browsers'];\n","import { CircleCheck, CirclePause, type LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\nimport type { PlaceCard as PlaceCardState } from '../services/routing';\n\n/**\n * A place on top of Where things show (the routing mockup): its icon and\n * name, its state on the right, what it does, and its one action below.\n */\nexport function PlaceCard({ place, name, Icon, card, children }: { place: string; name: string; Icon: LucideIcon; card: PlaceCardState; children?: ReactNode }) {\n const StateIcon = card.state.isOk ? CircleCheck : CirclePause;\n return (\n <div data-testid={`bridge-place-${place}`} className=\"flex flex-col gap-1.5 rounded-lg border border-border bg-card px-3 py-2.5\">\n <span className=\"flex items-center gap-2 font-medium\">\n <Icon aria-hidden className=\"size-4 shrink-0\" />\n {name}\n <span data-testid={`bridge-place-${place}-state`} className={`ml-auto inline-flex items-center gap-1 text-caption font-medium ${card.state.isOk ? 'text-tone-ok-fg' : 'text-muted-foreground'}`}>\n <StateIcon aria-hidden className=\"size-3.5\" />\n {card.state.label}\n </span>\n </span>\n <span className=\"text-caption text-muted-foreground\">{card.description}</span>\n {children === undefined ? null : <span className=\"mt-auto flex flex-col items-start gap-1.5\">{children}</span>}\n </div>\n );\n}\n","'use client';\n\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute, unlinkSlack } from '../hooks/bridge-actions';\nimport type { SlackLink } from '../hooks/read-bridge';\nimport { SLACK_LINK_PATH } from '../hooks/slack-link-path';\nimport { useWebPush } from '../hooks/use-web-push';\nimport type { WakeChannels } from '../services/deliveries';\nimport { chatCardOf, emailCardOf, emailTurnsOf, PLACE_NAMES, slackCardOf, webPushCardOf, type RoutingView } from '../services/routing';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { PlaceCard } from '../ui/place-card';\nimport { PLACE_ICONS } from '../ui/place-icons';\n\nfunction SlackPlace({ fleetId, slackLink }: { fleetId: string; slackLink: SlackLink | null }) {\n const [isUnlinking, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = slackCardOf(slackLink);\n\n const unlink = () => {\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await unlinkSlack(fleetId);\n if (!outcome.isOk) {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <PlaceCard place=\"slack\" name={PLACE_NAMES.slack} Icon={PLACE_ICONS.slack} card={card}>\n {card.action === 'link' ? (\n <a\n href={`${SLACK_LINK_PATH}?${new URLSearchParams({ fleet: fleetId }).toString()}`}\n data-testid=\"bridge-slack-link\"\n className=\"inline-flex h-7 items-center rounded-md bg-primary px-2.5 text-caption font-medium text-primary-foreground hover:bg-primary-hover\"\n >\n Link Slack\n </a>\n ) : null}\n {card.action === 'unlink' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-slack-unlink\" isPending={isUnlinking} pendingLabel=\"Unlinking...\" onClick={unlink}>\n Unlink\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction WebPushPlace({ fleetId, webPush }: { fleetId: string; webPush: WakeChannels['webPush'] | undefined }) {\n const browsers = webPush?.browsers ?? [];\n const { isTaken, ownEndpoint, working, failure, turnOn, remove } = useWebPush({ fleetId, webPushKey: webPush?.publicKey ?? null });\n const card = webPushCardOf({ isOffered: webPush !== undefined && webPush.publicKey !== null, isTaken, ownEndpoint, browsers });\n const others = browsers.filter(({ endpoint }) => card.action !== 'remove' || endpoint !== ownEndpoint);\n return (\n <PlaceCard place=\"web-push\" name={PLACE_NAMES['web-push']} Icon={PLACE_ICONS['web-push']} card={card}>\n {card.action === 'remove' && ownEndpoint !== undefined ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-remove\" isPending={working === ownEndpoint} pendingLabel=\"Removing...\" disabled={working !== undefined} onClick={() => { remove(ownEndpoint); }}>\n Remove\n </ActionButton>\n ) : null}\n {card.action === 'turnOn' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-web-push-on\" isPending={working === 'on'} pendingLabel=\"Turning on...\" disabled={working !== undefined} onClick={turnOn}>\n Turn on\n </ActionButton>\n ) : null}\n {others.map(({ endpoint, browser, isGone }) => (\n <span key={endpoint} data-testid=\"bridge-web-push-browser\" className=\"flex w-full items-center gap-2 text-caption text-muted-foreground\">\n <span className=\"min-w-0 flex-1\">{isGone ? `${browser}: no longer takes wakes` : `Also on in ${browser}`}</span>\n <button type=\"button\" data-testid=\"bridge-web-push-remove-other\" disabled={working !== undefined} onClick={() => { remove(endpoint); }} className=\"underline hover:text-foreground disabled:opacity-50\">\n {working === endpoint ? 'Removing...' : 'Remove'}\n </button>\n </span>\n ))}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\nfunction EmailPlace({ fleetId, routing }: { fleetId: string; routing: RoutingView }) {\n const [isTurning, startTransition] = useTransition();\n const [failure, setFailure] = useState<string | undefined>();\n const card = emailCardOf({ isOffered: routing.offered.email, isOnForAnyJob: routing.jobs.some(({ places }) => places.email) });\n\n const turn = (isOn: boolean) => {\n setFailure(undefined);\n startTransition(async () => {\n for (const change of emailTurnsOf(routing, isOn)) {\n const outcome = await turnRoute({ fleet: fleetId, ...change });\n if (!outcome.isOk) {\n setFailure(outcome.message);\n return;\n }\n }\n });\n };\n\n return (\n <PlaceCard place=\"email\" name={PLACE_NAMES.email} Icon={PLACE_ICONS.email} card={card}>\n {card.action === 'turnOn' || card.action === 'turnOff' ? (\n <ActionButton size=\"xs\" data-testid=\"bridge-email-turn\" isPending={isTurning} pendingLabel={card.action === 'turnOn' ? 'Turning on...' : 'Turning off...'} onClick={() => { turn(card.action === 'turnOn'); }}>\n {card.action === 'turnOn' ? 'Turn on' : 'Turn off'}\n </ActionButton>\n ) : null}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n </PlaceCard>\n );\n}\n\n/**\n * The places on top of Where things show (Bridge, section 8; the routing\n * mockup), each with its state and its one action: Slack linked or not, the\n * chats connected through the gateway, web push in this browser, and email.\n */\nexport function PlacesPanel({\n fleetId,\n routing,\n slackLink,\n chats,\n webPush,\n}: {\n fleetId: string;\n routing: RoutingView;\n slackLink: SlackLink | null;\n chats: readonly string[];\n webPush: WakeChannels['webPush'] | undefined;\n}) {\n return (\n <section aria-label=\"The places\" className=\"grid gap-2.5 sm:grid-cols-2 lg:grid-cols-4\">\n <SlackPlace fleetId={fleetId} slackLink={slackLink} />\n <PlaceCard place=\"chat\" name={PLACE_NAMES.chat} Icon={PLACE_ICONS.chat} card={chatCardOf(chats)} />\n <WebPushPlace fleetId={fleetId} webPush={webPush} />\n <EmailPlace fleetId={fleetId} routing={routing} />\n </section>\n );\n}\n","/** Where Link Slack starts (gateway scopes 9.3): the button in Bridge's settings and the button in a bot's answer in Slack (src/core/slack/take-slack-event.ts). */\nexport const SLACK_LINK_PATH = '/slack/link';\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'circle-pause',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['line', { x1: '10', x2: '10', y1: '15', y2: '9', key: 'c1nkhi' }],\n ['line', { x1: '14', x2: '14', y1: '15', y2: '9', key: 'h65svq' }],\n ],\n aliases: ['pause-circle'],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name CirclePause\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/circle-pause\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst CirclePause = createLucideIcon(__iconData);\n\nexport default CirclePause;\n","/**\n * What the section of wakes of Bridge's settings works out in the browser (wake a\n * person, W8): the name a browser it turns web push on in is listed by, the\n * gateway's push key as the browser's push manager takes it, and the\n * subscription the browser sends the gateway.\n */\n\n/** A browser's push subscription as the gateway takes it, with the browser's name. */\nexport interface SubscriptionInput {\n readonly endpoint: string;\n readonly keys: { readonly p256dh: string; readonly auth: string };\n readonly browser: string;\n}\n\n/** The browsers and systems a name is made of, the first that matches counting: Edge and Chrome also say Safari, and Chrome says Chrome. */\nconst BROWSERS: readonly (readonly [RegExp, string])[] = [\n [/Edg\\//, 'Edge'],\n [/Firefox\\//, 'Firefox'],\n [/Chrome\\//, 'Chrome'],\n [/Safari\\//, 'Safari'],\n];\nconst SYSTEMS: readonly (readonly [RegExp, string])[] = [\n [/iPhone|iPad/, 'iOS'],\n [/Android/, 'Android'],\n [/Mac OS X/, 'macOS'],\n [/Windows/, 'Windows'],\n [/Linux/, 'Linux'],\n];\n\nconst firstOf = (userAgent: string, names: readonly (readonly [RegExp, string])[]): string | undefined => names.find(([pattern]) => pattern.test(userAgent))?.[1];\n\n/** The name a browser is listed by, such as Firefox on Linux, from its user agent. */\nexport function browserNameOf(userAgent: string): string {\n const browser = firstOf(userAgent, BROWSERS);\n const system = firstOf(userAgent, SYSTEMS);\n if (browser === undefined) {\n return 'A browser';\n }\n return system === undefined ? browser : `${browser} on ${system}`;\n}\n\n/** The bytes a base64url key stands for, as the browser's push manager takes the gateway's key. */\nexport function applicationServerKeyOf(key: string): Uint8Array<ArrayBuffer> {\n const binary = atob(key.replaceAll('-', '+').replaceAll('_', '/'));\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n\n/** The subscription to send, from the push manager's own, or none when it gave no endpoint or keys. */\nexport function subscriptionInputOf(subscription: { endpoint?: string; keys?: Record<string, string> }, browser: string): SubscriptionInput | undefined {\n const { endpoint, keys } = subscription;\n const p256dh = keys?.p256dh;\n const auth = keys?.auth;\n return endpoint === undefined || p256dh === undefined || auth === undefined ? undefined : { endpoint, keys: { p256dh, auth }, browser };\n}\n","'use client';\n\nimport { CircleCheck } from 'lucide-react';\nimport { useState, useTransition } from 'react';\n\nimport { turnRoute } from '../hooks/bridge-actions';\nimport { JOB_NAMES, PLACE_NAMES, ROUTED_PLACES, turnedToastOf, type RoutedJob, type RoutedPlace, type RoutingToast, type RoutingView, type WaitingByJob } from '../services/routing';\nimport { Notice } from '../ui/notice';\nimport { BRIDGE_ICON, JOB_ICONS, PLACE_ICONS } from '../ui/place-icons';\nimport { RoutingSwitch } from '../ui/routing-switch';\n\n/** Six columns on desktop: the job, Bridge, then each place. */\nconst ROW = 'sm:grid sm:grid-cols-[1.6fr_repeat(5,1fr)] sm:items-center sm:gap-3';\n\n/** The toast after a change (the routing mockup): what the place now shows. */\nfunction Toast({ toast }: { toast: RoutingToast }) {\n return (\n <div role=\"status\" data-testid=\"bridge-routing-toast\" className=\"flex max-w-[720px] gap-3 rounded-lg border border-border bg-popover py-3.5 pr-3.5 pl-4 text-popover-foreground shadow-lg\">\n <CircleCheck aria-hidden className=\"mt-0.5 size-4 shrink-0 text-tone-ok-fg\" />\n <span className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span className=\"font-medium\">{toast.title}</span>\n <span className=\"text-caption text-muted-foreground\">{toast.detail}</span>\n </span>\n </div>\n );\n}\n\n/** A place's cell: on desktop the switch in its column, on the phone a line with the place's name and the switch. */\nfunction PlaceCell({ name, children }: { name: string; children: React.ReactNode }) {\n return (\n <span className=\"flex items-center justify-between sm:block\">\n <span className=\"sm:hidden\">{name}</span>\n {children}\n </span>\n );\n}\n\n/**\n * Routing per job (Bridge, section 8; the routing mockup): per job, the\n * places that show it besides Bridge, which always does. A switch turns a\n * place on or off at once; the toast then says what it shows (CC20). A\n * place the gateway does not offer, or Slack before it is linked, cannot be\n * turned on; one on can always be turned off. On desktop a table, on the\n * phone a card per job.\n */\nexport function RoutingPanel({ fleetId, routing, isSlackLinked, waitingByJob }: { fleetId: string; routing: RoutingView; isSlackLinked: boolean; waitingByJob: WaitingByJob }) {\n const [isTurning, startTransition] = useTransition();\n const [turning, setTurning] = useState<string | undefined>();\n const [toast, setToast] = useState<RoutingToast | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const isUsable = (place: RoutedPlace): boolean => routing.offered[place] && (place !== 'slack' || isSlackLinked);\n\n const turn = (change: { job: RoutedJob; place: RoutedPlace; isOn: boolean; isChatOn: boolean }) => {\n setToast(undefined);\n setFailure(undefined);\n setTurning(`${change.job}-${change.place}`);\n startTransition(async () => {\n const { isChatOn, ...route } = change;\n const outcome = await turnRoute({ fleet: fleetId, ...route });\n if (outcome.isOk) {\n setToast(turnedToastOf({ ...route, waiting: waitingByJob[route.job], isChatOn }));\n } else {\n setFailure(outcome.message);\n }\n });\n };\n\n return (\n <section className=\"grid gap-3\" aria-label=\"Per job\">\n <div className=\"grid gap-3 sm:gap-0 sm:overflow-hidden sm:rounded-lg sm:border sm:border-border sm:bg-card\">\n <div aria-hidden className={`hidden min-h-8 bg-muted px-4 text-caption font-medium text-muted-foreground ${ROW}`}>\n <span>Job</span>\n <span className=\"inline-flex items-center gap-1.5\">\n <BRIDGE_ICON className=\"size-3.5\" />\n Bridge\n </span>\n {ROUTED_PLACES.map((place) => {\n const Icon = PLACE_ICONS[place];\n return (\n <span key={place} className=\"inline-flex items-center gap-1.5\">\n <Icon className=\"size-3.5\" />\n {PLACE_NAMES[place]}\n </span>\n );\n })}\n </div>\n {routing.jobs.map(({ job, places }) => {\n const { Icon, tone } = JOB_ICONS[job];\n return (\n <div\n key={job}\n data-testid=\"bridge-routing-job\"\n className={`flex flex-col gap-2 rounded-lg border border-border bg-card p-3 sm:min-h-[52px] sm:rounded-none sm:border-0 sm:border-t sm:px-4 sm:py-1.5 ${ROW}`}\n >\n <span className=\"flex flex-col gap-0.5\">\n <span className=\"inline-flex items-center gap-1.5 font-semibold sm:font-medium\">\n <Icon aria-hidden className={`size-4 shrink-0 ${tone}`} />\n {JOB_NAMES[job].name}\n </span>\n <span className=\"text-caption text-muted-foreground max-sm:hidden\">{JOB_NAMES[job].holds}</span>\n </span>\n <PlaceCell name=\"Bridge\">\n <RoutingSwitch isOn label={`Bridge for ${JOB_NAMES[job].name}`} isDisabled aside=\"Always\" testId={`bridge-routing-${job}-bridge`} />\n </PlaceCell>\n {ROUTED_PLACES.map((place) => {\n const isOn = places[place];\n const key = `${job}-${place}`;\n return (\n <PlaceCell key={place} name={PLACE_NAMES[place]}>\n <RoutingSwitch\n isOn={isOn}\n label={`${PLACE_NAMES[place]} for ${JOB_NAMES[job].name}`}\n isDisabled={isTurning || (!isOn && !isUsable(place))}\n isBusy={isTurning && turning === key}\n {...(job === 'everything-else' && place === 'slack' && !isOn ? { aside: 'Bots only' } : {})}\n testId={`bridge-routing-${key}`}\n onTurn={() => {\n turn({ job, place, isOn: !isOn, isChatOn: places.chat });\n }}\n />\n </PlaceCell>\n );\n })}\n </div>\n );\n })}\n </div>\n {toast === undefined ? null : <Toast toast={toast} />}\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n <p className=\"text-caption text-muted-foreground max-sm:hidden\">While a Bridge page is open in focus, web push and email do not wake you. Slack still posts: you turned it on, and the views stay in step.</p>\n </section>\n );\n}\n","/**\n * A switch for one place of one job (the routing mockup): on or off, small;\n * Bridge's is on and cannot be turned, said beside it as Always; Slack's for\n * everything else, while off, says Bots only beside it.\n */\nexport function RoutingSwitch({\n isOn,\n label,\n isDisabled,\n isBusy = false,\n aside,\n testId,\n onTurn,\n}: {\n isOn: boolean;\n label: string;\n isDisabled: boolean;\n isBusy?: boolean;\n aside?: string;\n testId: string;\n onTurn?: () => void;\n}) {\n return (\n <span className=\"inline-flex items-center gap-2.5\">\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={isOn}\n aria-label={label}\n aria-busy={isBusy}\n disabled={isDisabled}\n data-testid={testId}\n onClick={onTurn}\n className=\"group inline-flex h-4 w-7 shrink-0 items-center rounded-full bg-input p-0.5 aria-checked:bg-primary disabled:cursor-not-allowed disabled:opacity-50\"\n >\n <span aria-hidden className=\"size-3 rounded-full bg-card shadow-sm transition-transform group-aria-checked:translate-x-3\" />\n </button>\n {aside === undefined ? null : <span className=\"text-caption text-muted-foreground\">{aside}</span>}\n </span>\n );\n}\n"],"names":["$$RSC_SERVER_ACTION_10","$$RSC_SERVER_ACTION_13","RoutingSwitch","isOn","label","isDisabled","isBusy","aside","testId","onTurn","className","type","role","disabled","onClick","undefined"],"mappings":"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","ignoreList":[2,10]}
|
package/web/.next/server/chunks/ssr/web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[43889,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558),e=a.i(5246);a.i(70396);var f=a.i(73727),g=a.i(55476),h=a.i(66283),i=a.i(29493),j=a.i(74718),k=a.i(15489),l=a.i(27221),m=a.i(26972),n=a.i(54757),n=n,o=a.i(1081),p=a.i(27857),q=a.i(35504);function r(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}let s=k.z.int().min(1),t=l.z.string().min(1),u=m.z.object({key:s,label:t,detail:l.z.string().default("")}),v=m.z.object({id:n.uuid(),title:t,context:l.z.string(),options:o.z.array(u).min(1),pick:m.z.object({option:s,why:t})}).refine(({options:a})=>new Set(a.map(({key:a})=>a)).size===a.length,{message:"Every option has its own number",path:["options"]}).refine(({options:a,pick:b})=>a.some(({key:a})=>a===b.option),{message:"The pick names one of the options",path:["pick","option"]}),w=m.z.object({questionId:n.uuid()}),x=m.z.object({questionId:n.uuid(),question:v}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]});p.z.union([m.z.object({option:s,note:t.optional()}),m.z.object({note:t})]);let y=p.z.union([m.z.object({questionId:n.uuid(),option:s,note:t.optional()}),m.z.object({questionId:n.uuid(),note:t})]),z=m.z.object({messageId:(0,c.f)("message"),sentAt:q.z.iso.datetime(),option:s.nullable(),note:l.z.string().nullable()});function A(a){try{return JSON.parse(a)}catch{return}}m.z.object({id:n.uuid(),title:l.z.string(),context:l.z.string(),options:o.z.array(u),pick:m.z.object({option:s,why:l.z.string()}),answer:z.nullable()});var B=n;function C(a){if("application/vnd.aeolus.question+json"!==r(a.contentType))return function({contentType:a,payload:b}){if("application/vnd.aeolus.question-withdrawal+json"===r(a)){let a=w.safeParse(A(b));return a.success?{questionId:a.data.questionId,replacement:null}:null}if("application/vnd.aeolus.question-replacement+json"===r(a)){let a=x.safeParse(A(b));return a.success?{questionId:a.data.questionId,replacement:a.data.question}:null}return null}(a)?.replacement??void 0;try{let b=v.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}let D=m.z.object({title:l.z.string().min(1),why:l.z.string(),link:B.url({protocol:/^https?$/}).optional()}),E=new Map([["application/vnd.aeolus.step+json",D],["application/vnd.aeolus.step-replacement+json",m.z.object({step:D}).transform(({step:a})=>a)]]),F=new Set([j.U,"application/vnd.aeolus.notice+json"]),G=m.z.object({body:l.z.string()});var H=a.i(43959),I=a.i(94705),J=a.i(75879);let K=m.z.object({ship:m.z.object({name:l.z.string().min(1)})});var L=a.i(29660);async function M(a,b){let c;try{c={isOk:!0,value:await b(await (0,h.z)(a))}}catch(c){let b=(0,h.U)(c);if("UNAUTHORIZED"===b)return(0,f.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${L.P}?${new URLSearchParams({[g.n]:a}).toString()}`}).toString()}`);return void 0===b?{isOk:!1,message:"The gateway did not answer: try again in a moment"}:{isOk:!1,message:(0,h.s)(c),code:b}}return(0,d.revalidatePath)(L.P,"layout"),c}async function N(a,b){return M(a,a=>a.people.record.query({cursor:b}))}async function O(a,b){let c=(await (0,e.headers)()).get("host")??"";return M(a,async a=>{let{contentType:d,payload:e,meetingId:f,...g}=await a.people.open.mutate({deliveryId:b});return{...g,payload:e,body:function(a){let[b=""]=a.contentType.split(";");if(!F.has(b.trim().toLowerCase()))return a.payload;try{return G.safeParse(JSON.parse(a.payload)).data?.body??a.payload}catch{return a.payload}}({contentType:d,payload:e}),question:C({contentType:d,payload:e}),step:function(a,b){let[c=""]=a.contentType.split(";"),d=E.get(c.trim().toLowerCase());if(void 0!==d)try{let c,e=d.safeParse(JSON.parse(a.payload));if(!e.success)return;let{title:f,why:g,link:h}=e.data;return{title:f,why:g,link:void 0===h?void 0:(c=new URL(h),{href:h,address:`${c.host}${c.pathname.replace(/\/$/,"")}`,isOutside:c.host!==b})}}catch{return}}({contentType:d,payload:e},c),alert:(0,H.S)({contentType:d,payload:e}),meetingId:f??void 0,alertShip:function(a){let[b=""]=a.contentType.split(";");if(b.trim().toLowerCase()===j.U)try{return K.safeParse(JSON.parse(a.payload)).data?.ship.name}catch{return}}({contentType:d,payload:e})}})}async function P({fleet:a,deliveryId:b,input:c}){let d=function(a){let b=a.note.trim();if(void 0===a.questionId)return""===b?{isOk:!1,message:"Write your answer first"}:{isOk:!0,value:{contentType:"text/plain",payload:b}};let c=y.safeParse({questionId:a.questionId,...void 0===a.option?{}:{option:a.option},...""===b?{}:{note:b}});return c.success?{isOk:!0,value:{contentType:"application/vnd.aeolus.answer+json",payload:JSON.stringify(c.data)}}:{isOk:!1,message:"Tap an option, or write a note"}}(c);return d.isOk?M(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function Q({fleet:a,deliveryId:b,option:c,optionLabel:d,note:e}){return M(a,async a=>{let{option:f,note:g}=await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:d,note:e});return{option:f,note:g}})}async function R({fleet:a,deliveryId:b,option:c}){return M(a,async a=>{let d=await a.people.open.mutate({deliveryId:b}),e=C(d)?.options.find(({key:a})=>a===c)?.label??null;await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:e,note:""})})}async function S(a,b){return M(a,async a=>{await a.people.removeFromBasket.mutate({questionId:b})})}async function T(a){return M(a,a=>a.people.sendBasket.mutate())}async function U({fleet:a,deliveryId:b,step:c}){return M(a,async a=>{await a.people.done.mutate(void 0===c?{deliveryId:b}:{deliveryId:b,...c})})}async function V(a){return M(a,async a=>{var b;let c,d,[e,f]=await Promise.all([a.people.sendTo.query(),a.people.yourFleet.query().catch(()=>void 0)]);return{sentAs:e.sentAs,ships:(b=e.ships,c=new Map((f?.groups??[]).flatMap(({tiles:a})=>a.map(({name:a,state:b})=>[a,b]))),d=a=>null===a?J.X.length:J.X.indexOf(a),b.map(a=>({name:a,state:c.get(a)??null})).toSorted((a,b)=>d(a.state)-d(b.state)||a.name.localeCompare(b.name)))}})}async function W({fleet:a,to:b,payload:c,idempotencyKey:d}){return M(a,async a=>(await a.people.send.mutate({to:b,payload:c,idempotencyKey:d}),{storedAt:new Date().toISOString()}))}async function X({fleet:a,job:b,place:c,isOn:d}){return M(a,async a=>{await a.people.turnRoute.mutate({job:b,place:c,isOn:d})})}async function Y(a,b){return M(a,async a=>{await a.people.turnOnWebPush.mutate({endpoint:b.endpoint,keys:{p256dh:b.keys.p256dh,auth:b.keys.auth},browser:b.browser})})}async function Z(a,b){return M(a,async a=>{await a.people.turnOffWebPush.mutate({endpoint:b})})}async function $(a){return M(a,async a=>{await a.slack.unlink.mutate()})}async function _({fleet:a,requestId:b,input:d}){if("deny"===d.kind)return M(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let e=(0,c.f)("ship").safeParse(d.ownerShipId.trim());if(!e.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:d.name,ownerShipId:e.data,scopes:[...new Set([...I._,...d.scopes])]},{server:g}=d,h=void 0===g?void 0:(0,i.y)(g);return M(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"approve",party:f,...void 0===g||void 0===h?{}:{server:{credential:h,concurrencyLimit:g.concurrencyLimit}}}})})}(0,a.i(13095).ensureServerEntryExports)([N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_]),(0,b.registerServerReference)(N,"
|
|
1
|
+
module.exports=[43889,a=>{"use strict";var b=a.i(37936),c=a.i(29517),d=a.i(18558),e=a.i(5246);a.i(70396);var f=a.i(73727),g=a.i(55476),h=a.i(66283),i=a.i(29493),j=a.i(74718),k=a.i(15489),l=a.i(27221),m=a.i(26972),n=a.i(54757),n=n,o=a.i(1081),p=a.i(27857),q=a.i(35504);function r(a){let[b=""]=a.split(";");return b.trim().toLowerCase()}let s=k.z.int().min(1),t=l.z.string().min(1),u=m.z.object({key:s,label:t,detail:l.z.string().default("")}),v=m.z.object({id:n.uuid(),title:t,context:l.z.string(),options:o.z.array(u).min(1),pick:m.z.object({option:s,why:t})}).refine(({options:a})=>new Set(a.map(({key:a})=>a)).size===a.length,{message:"Every option has its own number",path:["options"]}).refine(({options:a,pick:b})=>a.some(({key:a})=>a===b.option),{message:"The pick names one of the options",path:["pick","option"]}),w=m.z.object({questionId:n.uuid()}),x=m.z.object({questionId:n.uuid(),question:v}).refine(({questionId:a,question:b})=>b.id!==a,{message:"The new question has a uuid of its own",path:["question","id"]});p.z.union([m.z.object({option:s,note:t.optional()}),m.z.object({note:t})]);let y=p.z.union([m.z.object({questionId:n.uuid(),option:s,note:t.optional()}),m.z.object({questionId:n.uuid(),note:t})]),z=m.z.object({messageId:(0,c.f)("message"),sentAt:q.z.iso.datetime(),option:s.nullable(),note:l.z.string().nullable()});function A(a){try{return JSON.parse(a)}catch{return}}m.z.object({id:n.uuid(),title:l.z.string(),context:l.z.string(),options:o.z.array(u),pick:m.z.object({option:s,why:l.z.string()}),answer:z.nullable()});var B=n;function C(a){if("application/vnd.aeolus.question+json"!==r(a.contentType))return function({contentType:a,payload:b}){if("application/vnd.aeolus.question-withdrawal+json"===r(a)){let a=w.safeParse(A(b));return a.success?{questionId:a.data.questionId,replacement:null}:null}if("application/vnd.aeolus.question-replacement+json"===r(a)){let a=x.safeParse(A(b));return a.success?{questionId:a.data.questionId,replacement:a.data.question}:null}return null}(a)?.replacement??void 0;try{let b=v.safeParse(JSON.parse(a.payload));return b.success?b.data:void 0}catch{return}}let D=m.z.object({title:l.z.string().min(1),why:l.z.string(),link:B.url({protocol:/^https?$/}).optional()}),E=new Map([["application/vnd.aeolus.step+json",D],["application/vnd.aeolus.step-replacement+json",m.z.object({step:D}).transform(({step:a})=>a)]]),F=new Set([j.U,"application/vnd.aeolus.notice+json"]),G=m.z.object({body:l.z.string()});var H=a.i(43959),I=a.i(94705),J=a.i(75879);let K=m.z.object({ship:m.z.object({name:l.z.string().min(1)})});var L=a.i(29660);async function M(a,b){let c;try{c={isOk:!0,value:await b(await (0,h.z)(a))}}catch(c){let b=(0,h.U)(c);if("UNAUTHORIZED"===b)return(0,f.redirect)(`/sign-in/start?${new URLSearchParams({return_to:`${L.P}?${new URLSearchParams({[g.n]:a}).toString()}`}).toString()}`);return void 0===b?{isOk:!1,message:"The gateway did not answer: try again in a moment"}:{isOk:!1,message:(0,h.s)(c),code:b}}return(0,d.revalidatePath)(L.P,"layout"),c}async function N(a,b){return M(a,a=>a.people.record.query({cursor:b}))}async function O(a,b){let c=(await (0,e.headers)()).get("host")??"";return M(a,async a=>{let{contentType:d,payload:e,meetingId:f,...g}=await a.people.open.mutate({deliveryId:b});return{...g,payload:e,body:function(a){let[b=""]=a.contentType.split(";");if(!F.has(b.trim().toLowerCase()))return a.payload;try{return G.safeParse(JSON.parse(a.payload)).data?.body??a.payload}catch{return a.payload}}({contentType:d,payload:e}),question:C({contentType:d,payload:e}),step:function(a,b){let[c=""]=a.contentType.split(";"),d=E.get(c.trim().toLowerCase());if(void 0!==d)try{let c,e=d.safeParse(JSON.parse(a.payload));if(!e.success)return;let{title:f,why:g,link:h}=e.data;return{title:f,why:g,link:void 0===h?void 0:(c=new URL(h),{href:h,address:`${c.host}${c.pathname.replace(/\/$/,"")}`,isOutside:c.host!==b})}}catch{return}}({contentType:d,payload:e},c),alert:(0,H.S)({contentType:d,payload:e}),meetingId:f??void 0,alertShip:function(a){let[b=""]=a.contentType.split(";");if(b.trim().toLowerCase()===j.U)try{return K.safeParse(JSON.parse(a.payload)).data?.ship.name}catch{return}}({contentType:d,payload:e})}})}async function P({fleet:a,deliveryId:b,input:c}){let d=function(a){let b=a.note.trim();if(void 0===a.questionId)return""===b?{isOk:!1,message:"Write your answer first"}:{isOk:!0,value:{contentType:"text/plain",payload:b}};let c=y.safeParse({questionId:a.questionId,...void 0===a.option?{}:{option:a.option},...""===b?{}:{note:b}});return c.success?{isOk:!0,value:{contentType:"application/vnd.aeolus.answer+json",payload:JSON.stringify(c.data)}}:{isOk:!1,message:"Tap an option, or write a note"}}(c);return d.isOk?M(a,async a=>{await a.people.answer.mutate({deliveryId:b,...d.value})}):d}async function Q({fleet:a,deliveryId:b,option:c,optionLabel:d,note:e}){return M(a,async a=>{let{option:f,note:g}=await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:d,note:e});return{option:f,note:g}})}async function R({fleet:a,deliveryId:b,option:c}){return M(a,async a=>{let d=await a.people.open.mutate({deliveryId:b}),e=C(d)?.options.find(({key:a})=>a===c)?.label??null;await a.people.putInBasket.mutate({deliveryId:b,option:c,optionLabel:e,note:""})})}async function S(a,b){return M(a,async a=>{await a.people.removeFromBasket.mutate({questionId:b})})}async function T(a){return M(a,a=>a.people.sendBasket.mutate())}async function U({fleet:a,deliveryId:b,step:c}){return M(a,async a=>{await a.people.done.mutate(void 0===c?{deliveryId:b}:{deliveryId:b,...c})})}async function V(a){return M(a,async a=>{var b;let c,d,[e,f]=await Promise.all([a.people.sendTo.query(),a.people.yourFleet.query().catch(()=>void 0)]);return{sentAs:e.sentAs,ships:(b=e.ships,c=new Map((f?.groups??[]).flatMap(({tiles:a})=>a.map(({name:a,state:b})=>[a,b]))),d=a=>null===a?J.X.length:J.X.indexOf(a),b.map(a=>({name:a,state:c.get(a)??null})).toSorted((a,b)=>d(a.state)-d(b.state)||a.name.localeCompare(b.name)))}})}async function W({fleet:a,to:b,payload:c,idempotencyKey:d}){return M(a,async a=>(await a.people.send.mutate({to:b,payload:c,idempotencyKey:d}),{storedAt:new Date().toISOString()}))}async function X({fleet:a,job:b,place:c,isOn:d}){return M(a,async a=>{await a.people.turnRoute.mutate({job:b,place:c,isOn:d})})}async function Y(a,b){return M(a,async a=>{await a.people.turnOnWebPush.mutate({endpoint:b.endpoint,keys:{p256dh:b.keys.p256dh,auth:b.keys.auth},browser:b.browser})})}async function Z(a,b){return M(a,async a=>{await a.people.turnOffWebPush.mutate({endpoint:b})})}async function $(a){return M(a,async a=>{await a.slack.unlink.mutate()})}async function _({fleet:a,requestId:b,input:d}){if("deny"===d.kind)return M(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"deny"}})});let e=(0,c.f)("ship").safeParse(d.ownerShipId.trim());if(!e.success)return{isOk:!1,message:"The owner's ship id is not a ship id (shp_...)"};let f={name:d.name,ownerShipId:e.data,scopes:[...new Set([...I._,...d.scopes])]},{server:g}=d,h=void 0===g?void 0:(0,i.y)(g);return M(a,async a=>{await a.requests.decide.mutate({requestId:b,decision:{kind:"approve",party:f,...void 0===g||void 0===h?{}:{server:{credential:h,concurrencyLimit:g.concurrencyLimit}}}})})}(0,a.i(13095).ensureServerEntryExports)([N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_]),(0,b.registerServerReference)(N,"606cb6a4b44b6d1f3ee3cb4926fd252ef8c38e6829",null),(0,b.registerServerReference)(O,"6097df6443a06e5261e3227b1398330a1729afe230",null),(0,b.registerServerReference)(P,"409cd60338f4d2ebe089c816413026d35d3df175a5",null),(0,b.registerServerReference)(Q,"4014750f115befb3caee699cea842d94c42ccdf35a",null),(0,b.registerServerReference)(R,"405ccc10e32995d237032f7358fbf9bc977ccbaa8d",null),(0,b.registerServerReference)(S,"600d7b220edec9ab18a80038d5b459fae730df7a95",null),(0,b.registerServerReference)(T,"4045e76c6fc9bf26ef2d0c9f49d73dad0d6d222502",null),(0,b.registerServerReference)(U,"408692edd7e68a3b2abfaf17b76ec93d0a21b9b8dd",null),(0,b.registerServerReference)(V,"40307b918ff6100714f09bd39a9507f53fbc984531",null),(0,b.registerServerReference)(W,"400f8f330c98c7916fd71b71c4c2911679a0ca3dae",null),(0,b.registerServerReference)(X,"40318522285b0c5adeeccc205ccacf9b4c8018eee9",null),(0,b.registerServerReference)(Y,"6031bc8e16debd871e23c55c1f147e258938816f85",null),(0,b.registerServerReference)(Z,"605802c1143eee8fecb2dbef71cd9ed55020165469",null),(0,b.registerServerReference)($,"40ef462b81ba2c517a0637f83b8b4e8d20efc89ecb",null),(0,b.registerServerReference)(_,"40ae33f79052d467a1fba4f152653f3d44ea2f48ab",null),a.s(["q",0,P,"Q",0,_,"G",0,U,"v",0,O,"y",0,Q,"W",0,R,"F",0,N,"e",0,V,"D",0,S,"K",0,T,"u",0,W,"X",0,Z,"z",0,Y,"f",0,X,"Z",0,$],43889)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_bridge_hooks_bridge-actions_ts_0h-_xm2rcb-ij._.js.map
|
package/web/.next/server/chunks/ssr/web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
module.exports=[80198,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d={name:"arrow-right",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]};d.node;let e=(0,c.f)(d);var f=a.i(70840),g=a.i(52562),h=a.i(93817),i=a.i(97024),j=a.i(2550);let k={name:"clock",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]};k.node;let l=(0,c.f)(k);var m=a.i(58983);let n={name:"pencil",size:24,node:[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]};n.node;let o=(0,c.f)(n);var p=a.i(59542),q=a.i(74746),r=a.i(55596),s=a.i(74215),t=a.i(72131),u=a.i(66944),v=a.i(5050);let w=(0,v.createServerReference)("4059c1a1cc11277e11c263c228f98e4ef7fcca8cc2",v.callServer,void 0,v.findSourceMapURL,"sendBasket");function x(a){return`${new Date(a).toISOString().slice(11,16)} UTC`}let y={bridge:"in Bridge",chat:"in a chat",slack:"in Slack",gateway:"by the gateway"};function z(a){return{desktop:a,phone:a}}function A(a){return 1===a?"1 answer":`${String(a)} answers`}function B(a){return a.length<=1?a.join(""):`${a.slice(0,-1).join(", ")} and ${a.at(-1)??""}`}function C(a){return[...new Set(a.map(({from:a})=>a))]}var D=a.i(32043),E=a.i(10039),F=a.i(91777);let G={sent:i.f,sending:m.f,next:l,unanswered:m.f,refused:h.f,withdrawn:f.f,replaced:p.f,elsewhere:g.f},H={ok:"text-tone-ok-fg",waiting:"text-tone-waiting-fg",attention:"text-tone-attention-fg",off:"text-muted-foreground"};function I({words:a}){return a.desktop===a.phone?(0,b.jsx)("span",{children:a.desktop}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"hidden sm:inline",children:a.desktop}),(0,b.jsx)("span",{className:"sm:hidden",children:a.phone})]})}function J({line:a}){let c=G[a.icon];return(0,b.jsxs)("p",{"data-testid":"bridge-basket-standing",className:"col-span-2 col-start-2 flex items-start gap-1.5 text-meta",children:[(0,b.jsx)(c,{"aria-hidden":!0,className:`mt-0.5 size-3.5 shrink-0 ${H[a.tone]}`}),(0,b.jsx)("span",{children:(0,b.jsx)(I,{words:a.words})})]})}function K({entry:a,line:c,opening:d,working:f,onRemove:g}){let{standing:h}=a,i="withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind,k=void 0!==f||void 0!==d.openingId,l=f?.kind==="remove"&&f.questionId===a.questionId,m="replaced"===h.kind?h.replacementId:null,n=i?"line-through decoration-muted-foreground":"";return(0,b.jsxs)("li",{"data-testid":"bridge-basket-entry","data-standing":h.kind,className:`grid grid-cols-[18px_1fr_auto] items-start gap-x-2.5 gap-y-1.5 border-t border-border p-3 first:border-t-0 sm:px-3.5 ${i?"bg-muted":""}`,children:[(0,b.jsx)(j.f,{"aria-hidden":!0,className:"mt-0.5 size-4 text-tone-active-fg"}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,b.jsx)("span",{className:`font-medium ${n}`,children:a.title}),(0,b.jsxs)("span",{className:"flex flex-wrap items-center gap-1.5 text-caption text-muted-foreground",children:[(0,b.jsxs)("span",{children:["to ",(0,b.jsx)("b",{className:"font-medium text-foreground",children:a.from})]}),(0,b.jsx)("span",{"aria-hidden":!0,className:"hidden text-border sm:inline",children:"·"}),(0,b.jsxs)("span",{className:"hidden sm:inline",children:["asked at ",(0,b.jsx)("time",{dateTime:a.sentAt,children:x(a.sentAt)})]})]}),(0,b.jsxs)("span",{className:`${i?"hidden sm:flex":"flex"} items-center gap-1.5 text-meta ${n}`,children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5 shrink-0 text-primary"}),null===a.option?"Note alone":null===a.optionLabel?`Option ${String(a.option)}`:`${String(a.option)}. ${a.optionLabel}`]}),null===a.note?null:(0,b.jsxs)("span",{className:"text-caption italic text-muted-foreground",children:['"',a.note,'"']})]}),"waiting"===h.kind?(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-change",size:"small","aria-label":"Change",isPending:d.openingId===a.deliveryId,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:a.deliveryId,job:"decide",inBasket:{option:a.option,note:a.note}})},children:[(0,b.jsx)(o,{"aria-hidden":!0,className:"size-3.5"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Change"})]}),(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"ghost","aria-label":"Remove",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:[(0,b.jsx)(s.X,{"aria-hidden":!0,className:"size-4 sm:hidden"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Remove"})]})]}):(0,b.jsx)("span",{}),void 0===c?null:(0,b.jsx)(J,{line:c}),d.failure?.deliveryId===a.deliveryId?(0,b.jsx)("div",{className:"col-span-2 col-start-2",children:(0,b.jsx)(E.f,{message:d.failure.message,isFailure:!0})}):null,"withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind||"refused"===h.kind?(0,b.jsxs)("div",{className:"col-span-2 col-start-2 flex flex-wrap items-center gap-1.5",children:[null===m?null:(0,b.jsxs)(D.i,{"data-testid":"bridge-replacement",size:"small",isPending:d.openingId===m,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:m,job:"decide"})},children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5"}),"Answer the new question"]}),(0,b.jsx)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"replaced"===h.kind?"ghost":"secondary",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:"refused"===h.kind?"Remove and mark done":"Remove"})]}):null]})}function L({foot:a,isSending:c,isWorking:d,onSend:e}){return"none"===a.kind?null:(0,b.jsxs)("div",{"data-testid":"bridge-basket-foot",className:"flex flex-col items-stretch gap-2 border-t border-border bg-card p-3 sm:flex-row sm:items-center sm:gap-3 sm:px-3.5",children:[(0,b.jsx)("p",{className:"flex-1 text-caption text-muted-foreground",children:(0,b.jsx)(I,{words:a.words})}),"send"===a.kind?(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-send",variant:"primary",className:"justify-center",isPending:c,pendingLabel:"Sending...",disabled:d,onClick:e,children:[(0,b.jsx)(q.f,{"aria-hidden":!0,className:"size-4"}),a.label]}):null,"sending"===a.kind?(0,b.jsxs)("button",{type:"button","data-testid":"bridge-basket-sending",disabled:!0,"aria-busy":"true",className:"inline-flex h-9 items-center justify-center gap-2 rounded-md border border-border bg-card px-4 font-medium text-card-foreground",children:[(0,b.jsx)(m.f,{"aria-hidden":!0,className:"size-4 animate-spin"}),a.progress]}):null]})}function M({summary:a}){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-sent",role:"status",className:"flex max-w-[620px] items-start gap-3 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg",children:[(0,b.jsx)(i.f,{"aria-hidden":!0,className:"mt-0.5 size-4 shrink-0 text-tone-ok-fg"}),(0,b.jsxs)("span",{className:"grid gap-1",children:[(0,b.jsx)("span",{className:"font-medium",children:a.title}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:a.description})]})]})}function N(){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-empty",className:"grid max-w-[820px] justify-items-center gap-3 rounded-lg border border-dashed border-border bg-card px-6 py-10 text-center",children:[(0,b.jsx)("span",{className:"inline-flex size-11 items-center justify-center rounded-lg bg-secondary text-muted-foreground",children:(0,b.jsx)(r.f,{"aria-hidden":!0,className:"size-5"})}),(0,b.jsx)("span",{className:"text-heading font-semibold",children:"The basket is empty"}),(0,b.jsx)("span",{className:"max-w-[360px] text-muted-foreground",children:"Pick an option on a question and put it in the basket; it waits here until you send it."})]})}a.s(["BasketPanel",0,function({fleetId:a,basket:c}){let d,e,[f,g]=(0,t.useState)(),[h,i]=(0,t.useState)(),[,j]=(0,t.useTransition)(),k=(d=c.entries.some(({standing:a})=>"sent"===a.kind),e=c.entries.find(({standing:a})=>"sending"===a.kind&&!a.isUnanswered),c.entries.map(a=>(function(a,b){let{standing:c,from:d}=a;switch(c.kind){case"waiting":return;case"sent":{let a=x(c.at);return{icon:"sent",tone:"ok",words:{desktop:`Sent at ${a} and stored. Done.`,phone:`Sent at ${a}. Done.`}}}case"sending":if(c.isUnanswered)return{icon:"unanswered",tone:"waiting",words:{desktop:"The fleet did not answer. Sending again with the same key until it is stored; it arrives once.",phone:"No answer from the fleet. Sending again, same key."}};return b.isSendingNow?{icon:"sending",tone:"waiting",words:z("Sending...")}:{icon:"next",tone:"waiting",words:{desktop:"Next, in the order you added it",phone:"Next"}};case"refused":{let a=`Not sent: ${c.reason}.`,[d=c.reason]=c.reason.split(", so ");return{icon:"refused",tone:"attention",words:{desktop:b.isAnySent?`${a} The others were sent.`:a,phone:`Not sent: ${d}.`}}}case"withdrawn":return{icon:"withdrawn",tone:"off",words:{desktop:`Withdrawn by ${d} at ${x(c.at)}. Not sent; Send skips it.`,phone:`Withdrawn by ${d}. Not sent.`}};case"replaced":{let a=null===c.replacementTitle?".":` with "${c.replacementTitle}"`;return{icon:"replaced",tone:"off",words:{desktop:`Replaced by ${d} at ${x(c.at)}${a} Not sent: its options differ, so answer the new one.`,phone:`Replaced by ${d}. Not sent.`}}}case"dealtElsewhere":return{icon:"elsewhere",tone:"off",words:z(null===c.option?`Done ${y[c.place]}. Nothing is sent from it.`:`Answered ${y[c.place]}: option ${String(c.option)}. Nothing is sent from it.`)}}})(a,{isAnySent:d,isSendingNow:a===e}))),l=function(a){let{entries:b}=a;if(0===b.length||b.some(({standing:a})=>"sent"!==a.kind))return;let c=`To ${B(C(b))}, as you;`;return{title:`${A(b.length)} sent`,description:1===b.length?`${c} stored, and in Done.`:`${c} each stored, each in Done.`}}(c),m=b=>{g({kind:"remove",questionId:b}),i(void 0),j(async()=>{let c=await (0,u.f)(a,b);g(void 0),i(c.isOk?void 0:c.message)})},n=()=>{g({kind:"send"}),i(void 0),j(async()=>{let b=await w(a);g(void 0),i(b.isOk?void 0:b.message)})};return(0,b.jsx)(F.f,{fleetId:a,children:a=>(0,b.jsxs)("section",{className:"grid gap-4","aria-labelledby":"bridge-basket-heading",children:[(0,b.jsxs)("div",{className:"hidden sm:block",children:[(0,b.jsxs)("h1",{id:"bridge-basket-heading",className:"text-heading font-semibold",children:["Basket ",(0,b.jsx)("span",{"data-testid":"bridge-basket-count",className:"text-primary",children:c.count})]}),(0,b.jsx)("p",{className:"text-caption text-muted-foreground",children:"Answers you picked in Bridge, not sent yet. Nothing goes until you press Send."})]}),void 0===h?null:(0,b.jsx)(E.f,{message:h,isFailure:!0}),void 0===l?null:(0,b.jsx)(M,{summary:l}),0===c.entries.length||void 0!==l?(0,b.jsx)(N,{}):(0,b.jsxs)("div",{className:"max-w-[820px] overflow-hidden rounded-lg border border-border bg-card",children:[(0,b.jsx)("ul",{children:c.entries.map((c,d)=>(0,b.jsx)(K,{entry:c,line:k[d],opening:a,working:f,onRemove:m},c.questionId))}),(0,b.jsx)(L,{foot:function(a){if(a.toSend>0)return function(a){var b;let c=function(a){let b=b=>a.filter(({standing:a})=>a.kind===b).length,c=["withdrawn","replaced"].map(a=>({kind:a,count:b(a)})).filter(({count:a})=>a>0),d=c.map(({kind:a,count:b},d)=>b>1?`the ${String(b)} ${a}`:d===c.length-1?`the ${a} one`:`the ${a}`),e=b("dealtElsewhere"),f=0===e?d:[...d,1===e?"the one answered elsewhere":`the ${String(e)} answered elsewhere`];if(0===f.length)return;let g=B(f),h=1===c.reduce((a,{count:b})=>a+b,e);return`${g.charAt(0).toUpperCase()}${g.slice(1)} ${h?"is":"are"} not sent.`}(a.entries),d=(b=a.toSend,`Send ${A(b)}`);if(void 0!==c)return{kind:"send",words:{desktop:`${String(a.toSend)} to send. ${c}`,phone:c},label:d};let e=a.entries.filter(({standing:a})=>"waiting"===a.kind),f=C(e),g=f.length>1?"each receive their own answer":e.length>1?"receives its own answer to each":"receives its own answer";return{kind:"send",words:{desktop:`${B(f)} ${g}, as you, as if sent one by one.`,phone:"Each asker receives its own answer."},label:d}}(a);let b=a.entries.map(({standing:a})=>a),c=b.filter(({kind:a})=>"sent"===a).length,d=b.filter(({kind:a})=>"sending"===a).length,e=b.filter(({kind:a})=>"refused"===a).length,f=b.some(a=>"sending"===a.kind&&a.isUnanswered);if(d>0&&0===e&&!f)return{kind:"sending",words:{desktop:"You can close Bridge: the gateway keeps sending what is stored as sending.",phone:"You can close Bridge; the gateway keeps sending."},progress:`Sending ${String(c+1)} of ${String(c+d)}`};if(0===d&&0===e)return{kind:"none"};let g=(a,b)=>0===a?[]:[`${String(a)} ${b}`];return{kind:"summary",words:{desktop:`${[...g(c,"sent"),...g(d,"still sending"),...g(e,"not sent")].join(", ")}.`,phone:`${[...g(c,"sent"),...g(d,"sending"),...g(e,"not sent")].join(", ")}.`}}}(c),isSending:f?.kind==="send",isWorking:void 0!==f||void 0!==a.openingId,onSend:n})]})]})})}],80198)}];
|
|
1
|
+
module.exports=[80198,a=>{"use strict";var b=a.i(87924),c=a.i(64831);let d={name:"arrow-right",size:24,node:[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]};d.node;let e=(0,c.f)(d);var f=a.i(70840),g=a.i(52562),h=a.i(93817),i=a.i(97024),j=a.i(2550);let k={name:"clock",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 6v6l4 2",key:"mmk7yg"}]]};k.node;let l=(0,c.f)(k);var m=a.i(58983);let n={name:"pencil",size:24,node:[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]};n.node;let o=(0,c.f)(n);var p=a.i(59542),q=a.i(74746),r=a.i(55596),s=a.i(74215),t=a.i(72131),u=a.i(33368),v=a.i(5050);let w=(0,v.createServerReference)("4045e76c6fc9bf26ef2d0c9f49d73dad0d6d222502",v.callServer,void 0,v.findSourceMapURL,"sendBasket");function x(a){return`${new Date(a).toISOString().slice(11,16)} UTC`}let y={bridge:"in Bridge",chat:"in a chat",slack:"in Slack",gateway:"by the gateway"};function z(a){return{desktop:a,phone:a}}function A(a){return 1===a?"1 answer":`${String(a)} answers`}function B(a){return a.length<=1?a.join(""):`${a.slice(0,-1).join(", ")} and ${a.at(-1)??""}`}function C(a){return[...new Set(a.map(({from:a})=>a))]}var D=a.i(32043),E=a.i(10039),F=a.i(91777);let G={sent:i.f,sending:m.f,next:l,unanswered:m.f,refused:h.f,withdrawn:f.f,replaced:p.f,elsewhere:g.f},H={ok:"text-tone-ok-fg",waiting:"text-tone-waiting-fg",attention:"text-tone-attention-fg",off:"text-muted-foreground"};function I({words:a}){return a.desktop===a.phone?(0,b.jsx)("span",{children:a.desktop}):(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)("span",{className:"hidden sm:inline",children:a.desktop}),(0,b.jsx)("span",{className:"sm:hidden",children:a.phone})]})}function J({line:a}){let c=G[a.icon];return(0,b.jsxs)("p",{"data-testid":"bridge-basket-standing",className:"col-span-2 col-start-2 flex items-start gap-1.5 text-meta",children:[(0,b.jsx)(c,{"aria-hidden":!0,className:`mt-0.5 size-3.5 shrink-0 ${H[a.tone]}`}),(0,b.jsx)("span",{children:(0,b.jsx)(I,{words:a.words})})]})}function K({entry:a,line:c,opening:d,working:f,onRemove:g}){let{standing:h}=a,i="withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind,k=void 0!==f||void 0!==d.openingId,l=f?.kind==="remove"&&f.questionId===a.questionId,m="replaced"===h.kind?h.replacementId:null,n=i?"line-through decoration-muted-foreground":"";return(0,b.jsxs)("li",{"data-testid":"bridge-basket-entry","data-standing":h.kind,className:`grid grid-cols-[18px_1fr_auto] items-start gap-x-2.5 gap-y-1.5 border-t border-border p-3 first:border-t-0 sm:px-3.5 ${i?"bg-muted":""}`,children:[(0,b.jsx)(j.f,{"aria-hidden":!0,className:"mt-0.5 size-4 text-tone-active-fg"}),(0,b.jsxs)("div",{className:"flex min-w-0 flex-col gap-0.5",children:[(0,b.jsx)("span",{className:`font-medium ${n}`,children:a.title}),(0,b.jsxs)("span",{className:"flex flex-wrap items-center gap-1.5 text-caption text-muted-foreground",children:[(0,b.jsxs)("span",{children:["to ",(0,b.jsx)("b",{className:"font-medium text-foreground",children:a.from})]}),(0,b.jsx)("span",{"aria-hidden":!0,className:"hidden text-border sm:inline",children:"·"}),(0,b.jsxs)("span",{className:"hidden sm:inline",children:["asked at ",(0,b.jsx)("time",{dateTime:a.sentAt,children:x(a.sentAt)})]})]}),(0,b.jsxs)("span",{className:`${i?"hidden sm:flex":"flex"} items-center gap-1.5 text-meta ${n}`,children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5 shrink-0 text-primary"}),null===a.option?"Note alone":null===a.optionLabel?`Option ${String(a.option)}`:`${String(a.option)}. ${a.optionLabel}`]}),null===a.note?null:(0,b.jsxs)("span",{className:"text-caption italic text-muted-foreground",children:['"',a.note,'"']})]}),"waiting"===h.kind?(0,b.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-change",size:"small","aria-label":"Change",isPending:d.openingId===a.deliveryId,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:a.deliveryId,job:"decide",inBasket:{option:a.option,note:a.note}})},children:[(0,b.jsx)(o,{"aria-hidden":!0,className:"size-3.5"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Change"})]}),(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"ghost","aria-label":"Remove",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:[(0,b.jsx)(s.X,{"aria-hidden":!0,className:"size-4 sm:hidden"}),(0,b.jsx)("span",{className:"hidden sm:inline",children:"Remove"})]})]}):(0,b.jsx)("span",{}),void 0===c?null:(0,b.jsx)(J,{line:c}),d.failure?.deliveryId===a.deliveryId?(0,b.jsx)("div",{className:"col-span-2 col-start-2",children:(0,b.jsx)(E.f,{message:d.failure.message,isFailure:!0})}):null,"withdrawn"===h.kind||"replaced"===h.kind||"dealtElsewhere"===h.kind||"refused"===h.kind?(0,b.jsxs)("div",{className:"col-span-2 col-start-2 flex flex-wrap items-center gap-1.5",children:[null===m?null:(0,b.jsxs)(D.i,{"data-testid":"bridge-replacement",size:"small",isPending:d.openingId===m,pendingLabel:"Opening...",disabled:k,onClick:()=>{d.open({deliveryId:m,job:"decide"})},children:[(0,b.jsx)(e,{"aria-hidden":!0,className:"size-3.5"}),"Answer the new question"]}),(0,b.jsx)(D.i,{"data-testid":"bridge-basket-remove",size:"small",variant:"replaced"===h.kind?"ghost":"secondary",isPending:l,pendingLabel:"Removing...",disabled:k,onClick:()=>{g(a.questionId)},children:"refused"===h.kind?"Remove and mark done":"Remove"})]}):null]})}function L({foot:a,isSending:c,isWorking:d,onSend:e}){return"none"===a.kind?null:(0,b.jsxs)("div",{"data-testid":"bridge-basket-foot",className:"flex flex-col items-stretch gap-2 border-t border-border bg-card p-3 sm:flex-row sm:items-center sm:gap-3 sm:px-3.5",children:[(0,b.jsx)("p",{className:"flex-1 text-caption text-muted-foreground",children:(0,b.jsx)(I,{words:a.words})}),"send"===a.kind?(0,b.jsxs)(D.i,{"data-testid":"bridge-basket-send",variant:"primary",className:"justify-center",isPending:c,pendingLabel:"Sending...",disabled:d,onClick:e,children:[(0,b.jsx)(q.f,{"aria-hidden":!0,className:"size-4"}),a.label]}):null,"sending"===a.kind?(0,b.jsxs)("button",{type:"button","data-testid":"bridge-basket-sending",disabled:!0,"aria-busy":"true",className:"inline-flex h-9 items-center justify-center gap-2 rounded-md border border-border bg-card px-4 font-medium text-card-foreground",children:[(0,b.jsx)(m.f,{"aria-hidden":!0,className:"size-4 animate-spin"}),a.progress]}):null]})}function M({summary:a}){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-sent",role:"status",className:"flex max-w-[620px] items-start gap-3 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg",children:[(0,b.jsx)(i.f,{"aria-hidden":!0,className:"mt-0.5 size-4 shrink-0 text-tone-ok-fg"}),(0,b.jsxs)("span",{className:"grid gap-1",children:[(0,b.jsx)("span",{className:"font-medium",children:a.title}),(0,b.jsx)("span",{className:"text-caption text-muted-foreground",children:a.description})]})]})}function N(){return(0,b.jsxs)("div",{"data-testid":"bridge-basket-empty",className:"grid max-w-[820px] justify-items-center gap-3 rounded-lg border border-dashed border-border bg-card px-6 py-10 text-center",children:[(0,b.jsx)("span",{className:"inline-flex size-11 items-center justify-center rounded-lg bg-secondary text-muted-foreground",children:(0,b.jsx)(r.f,{"aria-hidden":!0,className:"size-5"})}),(0,b.jsx)("span",{className:"text-heading font-semibold",children:"The basket is empty"}),(0,b.jsx)("span",{className:"max-w-[360px] text-muted-foreground",children:"Pick an option on a question and put it in the basket; it waits here until you send it."})]})}a.s(["BasketPanel",0,function({fleetId:a,basket:c}){let d,e,[f,g]=(0,t.useState)(),[h,i]=(0,t.useState)(),[,j]=(0,t.useTransition)(),k=(d=c.entries.some(({standing:a})=>"sent"===a.kind),e=c.entries.find(({standing:a})=>"sending"===a.kind&&!a.isUnanswered),c.entries.map(a=>(function(a,b){let{standing:c,from:d}=a;switch(c.kind){case"waiting":return;case"sent":{let a=x(c.at);return{icon:"sent",tone:"ok",words:{desktop:`Sent at ${a} and stored. Done.`,phone:`Sent at ${a}. Done.`}}}case"sending":if(c.isUnanswered)return{icon:"unanswered",tone:"waiting",words:{desktop:"The fleet did not answer. Sending again with the same key until it is stored; it arrives once.",phone:"No answer from the fleet. Sending again, same key."}};return b.isSendingNow?{icon:"sending",tone:"waiting",words:z("Sending...")}:{icon:"next",tone:"waiting",words:{desktop:"Next, in the order you added it",phone:"Next"}};case"refused":{let a=`Not sent: ${c.reason}.`,[d=c.reason]=c.reason.split(", so ");return{icon:"refused",tone:"attention",words:{desktop:b.isAnySent?`${a} The others were sent.`:a,phone:`Not sent: ${d}.`}}}case"withdrawn":return{icon:"withdrawn",tone:"off",words:{desktop:`Withdrawn by ${d} at ${x(c.at)}. Not sent; Send skips it.`,phone:`Withdrawn by ${d}. Not sent.`}};case"replaced":{let a=null===c.replacementTitle?".":` with "${c.replacementTitle}"`;return{icon:"replaced",tone:"off",words:{desktop:`Replaced by ${d} at ${x(c.at)}${a} Not sent: its options differ, so answer the new one.`,phone:`Replaced by ${d}. Not sent.`}}}case"dealtElsewhere":return{icon:"elsewhere",tone:"off",words:z(null===c.option?`Done ${y[c.place]}. Nothing is sent from it.`:`Answered ${y[c.place]}: option ${String(c.option)}. Nothing is sent from it.`)}}})(a,{isAnySent:d,isSendingNow:a===e}))),l=function(a){let{entries:b}=a;if(0===b.length||b.some(({standing:a})=>"sent"!==a.kind))return;let c=`To ${B(C(b))}, as you;`;return{title:`${A(b.length)} sent`,description:1===b.length?`${c} stored, and in Done.`:`${c} each stored, each in Done.`}}(c),m=b=>{g({kind:"remove",questionId:b}),i(void 0),j(async()=>{let c=await (0,u.f)(a,b);g(void 0),i(c.isOk?void 0:c.message)})},n=()=>{g({kind:"send"}),i(void 0),j(async()=>{let b=await w(a);g(void 0),i(b.isOk?void 0:b.message)})};return(0,b.jsx)(F.f,{fleetId:a,children:a=>(0,b.jsxs)("section",{className:"grid gap-4","aria-labelledby":"bridge-basket-heading",children:[(0,b.jsxs)("div",{className:"hidden sm:block",children:[(0,b.jsxs)("h1",{id:"bridge-basket-heading",className:"text-heading font-semibold",children:["Basket ",(0,b.jsx)("span",{"data-testid":"bridge-basket-count",className:"text-primary",children:c.count})]}),(0,b.jsx)("p",{className:"text-caption text-muted-foreground",children:"Answers you picked in Bridge, not sent yet. Nothing goes until you press Send."})]}),void 0===h?null:(0,b.jsx)(E.f,{message:h,isFailure:!0}),void 0===l?null:(0,b.jsx)(M,{summary:l}),0===c.entries.length||void 0!==l?(0,b.jsx)(N,{}):(0,b.jsxs)("div",{className:"max-w-[820px] overflow-hidden rounded-lg border border-border bg-card",children:[(0,b.jsx)("ul",{children:c.entries.map((c,d)=>(0,b.jsx)(K,{entry:c,line:k[d],opening:a,working:f,onRemove:m},c.questionId))}),(0,b.jsx)(L,{foot:function(a){if(a.toSend>0)return function(a){var b;let c=function(a){let b=b=>a.filter(({standing:a})=>a.kind===b).length,c=["withdrawn","replaced"].map(a=>({kind:a,count:b(a)})).filter(({count:a})=>a>0),d=c.map(({kind:a,count:b},d)=>b>1?`the ${String(b)} ${a}`:d===c.length-1?`the ${a} one`:`the ${a}`),e=b("dealtElsewhere"),f=0===e?d:[...d,1===e?"the one answered elsewhere":`the ${String(e)} answered elsewhere`];if(0===f.length)return;let g=B(f),h=1===c.reduce((a,{count:b})=>a+b,e);return`${g.charAt(0).toUpperCase()}${g.slice(1)} ${h?"is":"are"} not sent.`}(a.entries),d=(b=a.toSend,`Send ${A(b)}`);if(void 0!==c)return{kind:"send",words:{desktop:`${String(a.toSend)} to send. ${c}`,phone:c},label:d};let e=a.entries.filter(({standing:a})=>"waiting"===a.kind),f=C(e),g=f.length>1?"each receive their own answer":e.length>1?"receives its own answer to each":"receives its own answer";return{kind:"send",words:{desktop:`${B(f)} ${g}, as you, as if sent one by one.`,phone:"Each asker receives its own answer."},label:d}}(a);let b=a.entries.map(({standing:a})=>a),c=b.filter(({kind:a})=>"sent"===a).length,d=b.filter(({kind:a})=>"sending"===a).length,e=b.filter(({kind:a})=>"refused"===a).length,f=b.some(a=>"sending"===a.kind&&a.isUnanswered);if(d>0&&0===e&&!f)return{kind:"sending",words:{desktop:"You can close Bridge: the gateway keeps sending what is stored as sending.",phone:"You can close Bridge; the gateway keeps sending."},progress:`Sending ${String(c+1)} of ${String(c+d)}`};if(0===d&&0===e)return{kind:"none"};let g=(a,b)=>0===a?[]:[`${String(a)} ${b}`];return{kind:"summary",words:{desktop:`${[...g(c,"sent"),...g(d,"still sending"),...g(e,"not sent")].join(", ")}.`,phone:`${[...g(c,"sent"),...g(d,"sending"),...g(e,"not sent")].join(", ")}.`}}}(c),isSending:f?.kind==="send",isWorking:void 0!==f||void 0!==a.openingId,onSend:n})]})]})})}],80198)}];
|
|
2
2
|
|
|
3
3
|
//# sourceMappingURL=web_features_bridge_state_basket-panel_tsx_1qi_kzld0rfgs._.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../web/features/bridge/hooks/data%3Ad790db%20%3Ctext/javascript%3E","../../../../../web/features/bridge/state/basket-panel.tsx","../../../../../web/features/bridge/services/clock-time.ts","../../../../../node_modules/lucide-react/src/icons/arrow-right.ts","../../../../../node_modules/lucide-react/src/icons/clock.ts","../../../../../node_modules/lucide-react/src/icons/pencil.ts","../../../../../web/features/bridge/services/basket.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"4059c1a1cc11277e11c263c228f98e4ef7fcca8cc2\":{\"name\":\"sendBasket\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"4059c1a1cc11277e11c263c228f98e4ef7fcca8cc2\",callServer,void 0,findSourceMapURL,\"sendBasket\");export{$$RSC_SERVER_ACTION_6 as sendBasket};","'use client';\n\nimport { ArrowRight, Ban, Check, CircleAlert, CircleCheck, CircleQuestionMark, Clock, LoaderCircle, Pencil, Replace, Send, ShoppingBasket, X } from 'lucide-react';\nimport { useState, useTransition } from 'react';\n\nimport { removeFromBasket, sendBasket } from '../hooks/bridge-actions';\nimport { answerTextOf, entryLinesOf, footOf, isStruckOut, sentSummaryOf, type BasketFoot, type BasketItem, type BasketView, type EntryLine, type Words } from '../services/basket';\nimport { clockTimeOf } from '../services/clock-time';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { ItemFocus, type ItemOpening } from './item-focus';\n\n/** What the person is doing in the basket: removing one entry, or sending it. */\ntype Working = { kind: 'remove'; questionId: string } | { kind: 'send' };\n\nconst LINE_ICONS = {\n sent: CircleCheck,\n sending: LoaderCircle,\n next: Clock,\n unanswered: LoaderCircle,\n refused: CircleAlert,\n withdrawn: Ban,\n replaced: Replace,\n elsewhere: Check,\n} as const;\n\nconst LINE_TONES = {\n ok: 'text-tone-ok-fg',\n waiting: 'text-tone-waiting-fg',\n attention: 'text-tone-attention-fg',\n off: 'text-muted-foreground',\n} as const;\n\n/** Words as the desktop says them, and shorter on a phone. */\nfunction Said({ words }: { words: Words }) {\n if (words.desktop === words.phone) {\n return <span>{words.desktop}</span>;\n }\n return (\n <>\n <span className=\"hidden sm:inline\">{words.desktop}</span>\n <span className=\"sm:hidden\">{words.phone}</span>\n </>\n );\n}\n\n/** The line under an entry, behind its icon in its tone. */\nfunction EntryLineSaid({ line }: { line: EntryLine }) {\n const Icon = LINE_ICONS[line.icon];\n return (\n <p data-testid=\"bridge-basket-standing\" className=\"col-span-2 col-start-2 flex items-start gap-1.5 text-meta\">\n <Icon aria-hidden className={`mt-0.5 size-3.5 shrink-0 ${LINE_TONES[line.tone]}`} />\n <span>\n <Said words={line.words} />\n </span>\n </p>\n );\n}\n\n/** One entry: the question, its asker and when it asked, its answer and note, the line saying how it stands, and what can be done with it. */\nfunction BasketEntryRow({ entry, line, opening, working, onRemove }: { entry: BasketItem; line: EntryLine | undefined; opening: ItemOpening; working: Working | undefined; onRemove: (questionId: string) => void }) {\n const { standing } = entry;\n const isStruck = isStruckOut(standing);\n const isWorking = working !== undefined || opening.openingId !== undefined;\n const isRemoving = working?.kind === 'remove' && working.questionId === entry.questionId;\n const replacementId = standing.kind === 'replaced' ? standing.replacementId : null;\n const struck = isStruck ? 'line-through decoration-muted-foreground' : '';\n return (\n <li data-testid=\"bridge-basket-entry\" data-standing={standing.kind} className={`grid grid-cols-[18px_1fr_auto] items-start gap-x-2.5 gap-y-1.5 border-t border-border p-3 first:border-t-0 sm:px-3.5 ${isStruck ? 'bg-muted' : ''}`}>\n <CircleQuestionMark aria-hidden className=\"mt-0.5 size-4 text-tone-active-fg\" />\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className={`font-medium ${struck}`}>{entry.title}</span>\n <span className=\"flex flex-wrap items-center gap-1.5 text-caption text-muted-foreground\">\n <span>\n to <b className=\"font-medium text-foreground\">{entry.from}</b>\n </span>\n <span aria-hidden className=\"hidden text-border sm:inline\">\n ·\n </span>\n <span className=\"hidden sm:inline\">\n asked at <time dateTime={entry.sentAt}>{clockTimeOf(entry.sentAt)}</time>\n </span>\n </span>\n <span className={`${isStruck ? 'hidden sm:flex' : 'flex'} items-center gap-1.5 text-meta ${struck}`}>\n <ArrowRight aria-hidden className=\"size-3.5 shrink-0 text-primary\" />\n {answerTextOf(entry)}\n </span>\n {entry.note === null ? null : <span className=\"text-caption italic text-muted-foreground\">"{entry.note}"</span>}\n </div>\n {standing.kind === 'waiting' ? (\n <div className=\"flex items-center gap-1.5\">\n <ActionButton data-testid=\"bridge-basket-change\" size=\"small\" aria-label=\"Change\" isPending={opening.openingId === entry.deliveryId} pendingLabel=\"Opening...\" disabled={isWorking} onClick={() => { opening.open({ deliveryId: entry.deliveryId, job: 'decide', inBasket: { option: entry.option, note: entry.note } }); }}>\n <Pencil aria-hidden className=\"size-3.5\" />\n <span className=\"hidden sm:inline\">Change</span>\n </ActionButton>\n <ActionButton data-testid=\"bridge-basket-remove\" size=\"small\" variant=\"ghost\" aria-label=\"Remove\" isPending={isRemoving} pendingLabel=\"Removing...\" disabled={isWorking} onClick={() => { onRemove(entry.questionId); }}>\n <X aria-hidden className=\"size-4 sm:hidden\" />\n <span className=\"hidden sm:inline\">Remove</span>\n </ActionButton>\n </div>\n ) : (\n <span />\n )}\n {line === undefined ? null : <EntryLineSaid line={line} />}\n {opening.failure?.deliveryId === entry.deliveryId ? (\n <div className=\"col-span-2 col-start-2\">\n <Notice message={opening.failure.message} isFailure />\n </div>\n ) : null}\n {standing.kind === 'withdrawn' || standing.kind === 'replaced' || standing.kind === 'dealtElsewhere' || standing.kind === 'refused' ? (\n <div className=\"col-span-2 col-start-2 flex flex-wrap items-center gap-1.5\">\n {replacementId === null ? null : (\n <ActionButton data-testid=\"bridge-replacement\" size=\"small\" isPending={opening.openingId === replacementId} pendingLabel=\"Opening...\" disabled={isWorking} onClick={() => { opening.open({ deliveryId: replacementId, job: 'decide' }); }}>\n <ArrowRight aria-hidden className=\"size-3.5\" />\n Answer the new question\n </ActionButton>\n )}\n <ActionButton data-testid=\"bridge-basket-remove\" size=\"small\" variant={standing.kind === 'replaced' ? 'ghost' : 'secondary'} isPending={isRemoving} pendingLabel=\"Removing...\" disabled={isWorking} onClick={() => { onRemove(entry.questionId); }}>\n {standing.kind === 'refused' ? 'Remove and mark done' : 'Remove'}\n </ActionButton>\n </div>\n ) : null}\n </li>\n );\n}\n\n/** The foot of the basket: Send naming the ships, the send going on, or what came of it. */\nfunction BasketFootBar({ foot, isSending, isWorking, onSend }: { foot: BasketFoot; isSending: boolean; isWorking: boolean; onSend: () => void }) {\n if (foot.kind === 'none') {\n return null;\n }\n return (\n <div data-testid=\"bridge-basket-foot\" className=\"flex flex-col items-stretch gap-2 border-t border-border bg-card p-3 sm:flex-row sm:items-center sm:gap-3 sm:px-3.5\">\n <p className=\"flex-1 text-caption text-muted-foreground\">\n <Said words={foot.words} />\n </p>\n {foot.kind === 'send' ? (\n <ActionButton data-testid=\"bridge-basket-send\" variant=\"primary\" className=\"justify-center\" isPending={isSending} pendingLabel=\"Sending...\" disabled={isWorking} onClick={onSend}>\n <Send aria-hidden className=\"size-4\" />\n {foot.label}\n </ActionButton>\n ) : null}\n {foot.kind === 'sending' ? (\n <button type=\"button\" data-testid=\"bridge-basket-sending\" disabled aria-busy=\"true\" className=\"inline-flex h-9 items-center justify-center gap-2 rounded-md border border-border bg-card px-4 font-medium text-card-foreground\">\n <LoaderCircle aria-hidden className=\"size-4 animate-spin\" />\n {foot.progress}\n </button>\n ) : null}\n </div>\n );\n}\n\n/** What was sent, over the empty basket, once every entry left was sent. */\nfunction SentSummary({ summary }: { summary: { title: string; description: string } }) {\n return (\n <div data-testid=\"bridge-basket-sent\" role=\"status\" className=\"flex max-w-[620px] items-start gap-3 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg\">\n <CircleCheck aria-hidden className=\"mt-0.5 size-4 shrink-0 text-tone-ok-fg\" />\n <span className=\"grid gap-1\">\n <span className=\"font-medium\">{summary.title}</span>\n <span className=\"text-caption text-muted-foreground\">{summary.description}</span>\n </span>\n </div>\n );\n}\n\n/** The empty basket, with what goes into it. */\nfunction EmptyBasket() {\n return (\n <div data-testid=\"bridge-basket-empty\" className=\"grid max-w-[820px] justify-items-center gap-3 rounded-lg border border-dashed border-border bg-card px-6 py-10 text-center\">\n <span className=\"inline-flex size-11 items-center justify-center rounded-lg bg-secondary text-muted-foreground\">\n <ShoppingBasket aria-hidden className=\"size-5\" />\n </span>\n <span className=\"text-heading font-semibold\">The basket is empty</span>\n <span className=\"max-w-[360px] text-muted-foreground\">Pick an option on a question and put it in the basket; it waits here until you send it.</span>\n </div>\n );\n}\n\n/**\n * The basket open (docs/design/bridge, section 9; basket.html, basket-3 to\n * basket-7): its count of what is or will be sent, and the answers the\n * person picked in Bridge, in the order added, each with its answer by\n * number and label. Change opens the question with that option picked;\n * Remove takes the entry out, and the question still waits; one the fleet\n * refused is removed and its question marked done. A withdrawn, replaced or\n * answered-elsewhere entry is struck out and not sent. Send N answers stores\n * each as sending and the gateway sends them, each on its own: each entry\n * then says how it goes, and the foot Sending N of M, or what came of the\n * send once one was not answered or refused. Once every entry left was\n * sent, what was sent stands over the empty basket.\n */\nexport function BasketPanel({ fleetId, basket }: { fleetId: string; basket: BasketView }) {\n const [working, setWorking] = useState<Working | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n const lines = entryLinesOf(basket);\n const summary = sentSummaryOf(basket);\n\n const remove = (questionId: string) => {\n setWorking({ kind: 'remove', questionId });\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await removeFromBasket(fleetId, questionId);\n setWorking(undefined);\n setFailure(outcome.isOk ? undefined : outcome.message);\n });\n };\n\n const send = () => {\n setWorking({ kind: 'send' });\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await sendBasket(fleetId);\n setWorking(undefined);\n setFailure(outcome.isOk ? undefined : outcome.message);\n });\n };\n\n return (\n <ItemFocus fleetId={fleetId}>\n {(opening) => (\n <section className=\"grid gap-4\" aria-labelledby=\"bridge-basket-heading\">\n <div className=\"hidden sm:block\">\n <h1 id=\"bridge-basket-heading\" className=\"text-heading font-semibold\">\n Basket <span data-testid=\"bridge-basket-count\" className=\"text-primary\">{basket.count}</span>\n </h1>\n <p className=\"text-caption text-muted-foreground\">Answers you picked in Bridge, not sent yet. Nothing goes until you press Send.</p>\n </div>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n {summary === undefined ? null : <SentSummary summary={summary} />}\n {basket.entries.length === 0 || summary !== undefined ? (\n <EmptyBasket />\n ) : (\n <div className=\"max-w-[820px] overflow-hidden rounded-lg border border-border bg-card\">\n <ul>\n {basket.entries.map((entry, index) => (\n <BasketEntryRow key={entry.questionId} entry={entry} line={lines[index]} opening={opening} working={working} onRemove={remove} />\n ))}\n </ul>\n <BasketFootBar foot={footOf(basket)} isSending={working?.kind === 'send'} isWorking={working !== undefined || opening.openingId !== undefined} onSend={send} />\n </div>\n )}\n </section>\n )}\n </ItemFocus>\n );\n}\n","/** The time of day of an instant (ISO 8601), in UTC to the minute, as Bridge says when something happened: 20:16 UTC. */\nexport function clockTimeOf(at: string): string {\n return `${new Date(at).toISOString().slice(11, 16)} UTC`;\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-right',\n size: 24,\n node: [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'm12 5 7 7-7 7', key: 'xquz4c' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowRight = createLucideIcon(__iconData);\n\nexport default ArrowRight;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'clock',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 6v6l4 2', key: 'mmk7yg' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Clock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/clock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Clock = createLucideIcon(__iconData);\n\nexport default Clock;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'pencil',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/pencil\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Pencil = createLucideIcon(__iconData);\n\nexport default Pencil;\n","/**\n * The basket as Bridge shows it (docs/design/bridge, section 9; basket.html,\n * basket-3 to basket-7): each entry's answer, the line under it as it\n * stands, the foot naming the ships or saying how the send goes, and what\n * was sent, in words, each with its desktop and its shorter phone words.\n * Pure view logic, no React and no API client.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../../src/adapters/trpc/router.js';\nimport { clockTimeOf } from './clock-time';\n\ntype PeopleOutputs = inferRouterOutputs<GatewayRouter>['people'];\n\n/** The basket as the API answers it: its entries in the order added, its count, and how many answers Send sends. */\nexport type BasketView = PeopleOutputs['basket'];\n\n/** An entry of the basket, with what it stands as. */\nexport type BasketItem = BasketView['entries'][number];\n\ntype Standing = BasketItem['standing'];\n\n/** What Send did, as the API answers it. */\nexport type BasketSent = PeopleOutputs['sendBasket'];\n\n/** Words as a desktop says them, and as a phone says them, shorter. */\nexport interface Words {\n readonly desktop: string;\n readonly phone: string;\n}\n\n/** The line under an entry: its icon, the tone of the icon, and its words. */\nexport interface EntryLine {\n readonly icon: 'sent' | 'sending' | 'next' | 'unanswered' | 'refused' | 'withdrawn' | 'replaced' | 'elsewhere';\n readonly tone: 'ok' | 'waiting' | 'attention' | 'off';\n readonly words: Words;\n}\n\n/** The basket's foot: Send naming the ships, the send going on, what came of it, or none. */\nexport type BasketFoot = { readonly kind: 'send'; readonly words: Words; readonly label: string } | { readonly kind: 'sending'; readonly words: Words; readonly progress: string } | { readonly kind: 'summary'; readonly words: Words } | { readonly kind: 'none' };\n\nconst PLACES: Record<Extract<Standing, { kind: 'dealtElsewhere' }>['place'], string> = {\n bridge: 'in Bridge',\n chat: 'in a chat',\n slack: 'in Slack',\n gateway: 'by the gateway',\n};\n\nfunction same(words: string): Words {\n return { desktop: words, phone: words };\n}\n\nfunction answersOf(count: number): string {\n return count === 1 ? '1 answer' : `${String(count)} answers`;\n}\n\n/** Names in a sentence: a, b and c. */\nfunction listOf(names: readonly string[]): string {\n return names.length <= 1 ? names.join('') : `${names.slice(0, -1).join(', ')} and ${names.at(-1) ?? ''}`;\n}\n\n/** Each asker once, in the order added. */\nfunction askersOf(entries: readonly BasketItem[]): string[] {\n return [...new Set(entries.map(({ from }) => from))];\n}\n\n/** The Send button, naming how many answers it sends. */\nexport function sendLabelOf(toSend: number): string {\n return `Send ${answersOf(toSend)}`;\n}\n\n/** The answer an entry gives, by its number and label (2. Harbour first, on today's look); a note alone as such. */\nexport function answerTextOf(item: Pick<BasketItem, 'option' | 'optionLabel'>): string {\n if (item.option === null) {\n return 'Note alone';\n }\n return item.optionLabel === null ? `Option ${String(item.option)}` : `${String(item.option)}. ${item.optionLabel}`;\n}\n\n/** Whether an entry is not sent, as its asker withdrew or replaced it or it was answered elsewhere first: struck out. */\nexport function isStruckOut(standing: Standing): boolean {\n return standing.kind === 'withdrawn' || standing.kind === 'replaced' || standing.kind === 'dealtElsewhere';\n}\n\n/** The line under one entry, given whether another entry was sent and whether this is the one being sent now. */\nfunction lineOf(item: BasketItem, context: { isAnySent: boolean; isSendingNow: boolean }): EntryLine | undefined {\n const { standing, from } = item;\n switch (standing.kind) {\n case 'waiting':\n return undefined;\n case 'sent': {\n const at = clockTimeOf(standing.at);\n return { icon: 'sent', tone: 'ok', words: { desktop: `Sent at ${at} and stored. Done.`, phone: `Sent at ${at}. Done.` } };\n }\n case 'sending':\n if (standing.isUnanswered) {\n return { icon: 'unanswered', tone: 'waiting', words: { desktop: 'The fleet did not answer. Sending again with the same key until it is stored; it arrives once.', phone: 'No answer from the fleet. Sending again, same key.' } };\n }\n return context.isSendingNow ? { icon: 'sending', tone: 'waiting', words: same('Sending...') } : { icon: 'next', tone: 'waiting', words: { desktop: 'Next, in the order you added it', phone: 'Next' } };\n case 'refused': {\n const said = `Not sent: ${standing.reason}.`;\n // The phone says the reason without its consequence, as basket-7 draws it: Not sent: commercial was retired.\n const [cause = standing.reason] = standing.reason.split(', so ');\n return { icon: 'refused', tone: 'attention', words: { desktop: context.isAnySent ? `${said} The others were sent.` : said, phone: `Not sent: ${cause}.` } };\n }\n case 'withdrawn':\n return { icon: 'withdrawn', tone: 'off', words: { desktop: `Withdrawn by ${from} at ${clockTimeOf(standing.at)}. Not sent; Send skips it.`, phone: `Withdrawn by ${from}. Not sent.` } };\n case 'replaced': {\n const withTitle = standing.replacementTitle === null ? '.' : ` with \"${standing.replacementTitle}\"`;\n return { icon: 'replaced', tone: 'off', words: { desktop: `Replaced by ${from} at ${clockTimeOf(standing.at)}${withTitle} Not sent: its options differ, so answer the new one.`, phone: `Replaced by ${from}. Not sent.` } };\n }\n case 'dealtElsewhere':\n return { icon: 'elsewhere', tone: 'off', words: same(standing.option === null ? `Done ${PLACES[standing.place]}. Nothing is sent from it.` : `Answered ${PLACES[standing.place]}: option ${String(standing.option)}. Nothing is sent from it.`) };\n }\n}\n\n/** The line under each entry, in the order added: the first sending one the fleet has not left unanswered is the one being sent now, the others next. */\nexport function entryLinesOf(view: BasketView): (EntryLine | undefined)[] {\n const isAnySent = view.entries.some(({ standing }) => standing.kind === 'sent');\n const now = view.entries.find(({ standing }) => standing.kind === 'sending' && !standing.isUnanswered);\n return view.entries.map((item) => lineOf(item, { isAnySent, isSendingNow: item === now }));\n}\n\n/** The entries not sent, by kind, as the foot says them: The withdrawn and the replaced one are not sent. */\nfunction notSentOf(entries: readonly BasketItem[]): string | undefined {\n const counted = (kind: Standing['kind']) => entries.filter(({ standing }) => standing.kind === kind).length;\n const stale = (['withdrawn', 'replaced'] as const).map((kind) => ({ kind, count: counted(kind) })).filter(({ count }) => count > 0);\n const named = stale.map(({ kind, count }, index) => (count > 1 ? `the ${String(count)} ${kind}` : index === stale.length - 1 ? `the ${kind} one` : `the ${kind}`));\n const elsewhere = counted('dealtElsewhere');\n const all = elsewhere === 0 ? named : [...named, elsewhere === 1 ? 'the one answered elsewhere' : `the ${String(elsewhere)} answered elsewhere`];\n if (all.length === 0) {\n return undefined;\n }\n const sentence = listOf(all);\n const isOne = stale.reduce((sum, { count }) => sum + count, elsewhere) === 1;\n return `${sentence.charAt(0).toUpperCase()}${sentence.slice(1)} ${isOne ? 'is' : 'are'} not sent.`;\n}\n\n/** The foot while the basket waits for Send: the ships each receiving their own answer, or how many go and which are not sent. */\nfunction sendFootOf(view: BasketView): BasketFoot {\n const notSent = notSentOf(view.entries);\n const label = sendLabelOf(view.toSend);\n if (notSent !== undefined) {\n return { kind: 'send', words: { desktop: `${String(view.toSend)} to send. ${notSent}`, phone: notSent }, label };\n }\n const waiting = view.entries.filter(({ standing }) => standing.kind === 'waiting');\n const askers = askersOf(waiting);\n const receive = askers.length > 1 ? 'each receive their own answer' : waiting.length > 1 ? 'receives its own answer to each' : 'receives its own answer';\n return { kind: 'send', words: { desktop: `${listOf(askers)} ${receive}, as you, as if sent one by one.`, phone: 'Each asker receives its own answer.' }, label };\n}\n\n/** The basket's foot: Send while answers wait for it; Sending N of M while the send goes well; what came of it once one was not answered or refused. */\nexport function footOf(view: BasketView): BasketFoot {\n if (view.toSend > 0) {\n return sendFootOf(view);\n }\n const kinds = view.entries.map(({ standing }) => standing);\n const sent = kinds.filter(({ kind }) => kind === 'sent').length;\n const sending = kinds.filter(({ kind }) => kind === 'sending').length;\n const refused = kinds.filter(({ kind }) => kind === 'refused').length;\n const isAnyUnanswered = kinds.some((standing) => standing.kind === 'sending' && standing.isUnanswered);\n if (sending > 0 && refused === 0 && !isAnyUnanswered) {\n return { kind: 'sending', words: { desktop: 'You can close Bridge: the gateway keeps sending what is stored as sending.', phone: 'You can close Bridge; the gateway keeps sending.' }, progress: `Sending ${String(sent + 1)} of ${String(sent + sending)}` };\n }\n if (sending === 0 && refused === 0) {\n return { kind: 'none' };\n }\n const part = (count: number, words: string) => (count === 0 ? [] : [`${String(count)} ${words}`]);\n return {\n kind: 'summary',\n words: {\n desktop: `${[...part(sent, 'sent'), ...part(sending, 'still sending'), ...part(refused, 'not sent')].join(', ')}.`,\n phone: `${[...part(sent, 'sent'), ...part(sending, 'sending'), ...part(refused, 'not sent')].join(', ')}.`,\n },\n };\n}\n\n/** What was sent, once every entry left in the basket was sent: how many answers, to which ships. */\nexport function sentSummaryOf(view: BasketView): { title: string; description: string } | undefined {\n const { entries } = view;\n if (entries.length === 0 || entries.some(({ standing }) => standing.kind !== 'sent')) {\n return undefined;\n }\n const to = `To ${listOf(askersOf(entries))}, as you;`;\n return { title: `${answersOf(entries.length)} sent`, description: entries.length === 1 ? `${to} stored, and in Done.` : `${to} each stored, each in Done.` };\n}\n"],"names":["ArrowRight"],"mappings":"qEGGO,CAAA,AEAA,ADAA,CCAA,AFAA,ACAA,CDAA,AEAA,ADAA,CCAA,AFAA,ACAA,ACAA,CDAA,ACAA,AFAA,CEAA,6CFIW,CAAA,ACAD,CDAC,ACAD,SDAa,IAAA,UAAe,GCAC,CAAA,wBDCX,CCAF,ADAE,CCAF,ADAE,EAAK,CCAF,ADAE,CCAF,ADAE,CAAA,ACAF,CDAE,ACAF,CAAA,ADAE,CAAA,IAAU,mBAoB/B,CAAA,ACAL,CAAA,ADAK,CCAL,ADAK,CAAA,ACAL,CDAK,ACAL,ADAK,CCAL,ADAK,CCAL,ADAK,CF1BnB,AE0BmB,ACAL,CAAA,ADAK,CCAL,ADAK,EF1BnB,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,YGC0C,MAClC,CAAA,ADAA,AEAA,CFAA,AEAA,ADAA,CCAA,AFAA,ACAA,CDAA,ACAA,ACAA,CAAA,AFAA,ACAA,CAAA,ADAA,AEAA,CFAA,ACAA,ACAA,CAAA,AFAA,CAAA,CAAA,CAAA,CAAA,CAAA,QCEA,YACS,GAAI,CDAH,ACAG,CDAH,ACAG,CDAH,ACAG,CDAH,ACAG,CDAH,ACAS,CAAA,ADAT,CAAA,ACAS,CAAI,CDAD,CAAA,CAAA,ECAO,CDAF,ACAE,CAAG,ADAL,CAAA,ACAK,CDAL,ACAK,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,wCACb,wBAoBjB,CDAZ,ACAY,CAAA,ADAZ,CF1BnB,AE0BmB,ACAY,IH1B/B,EAAA,EAAA,CAAA,CAAA,kDIOM,CACE,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4HACH,CDIoC,ADAA,CCAA,ADAA,EEJ/B,CDI0C,ACJ1C,AFI0C,OEJ1C,CDiBP,ADAA,CEfF,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,SAAa,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CA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","ignoreList":[3,4,5]}
|
|
1
|
+
{"version":3,"sources":["../../../../../web/features/bridge/hooks/data%3Adee3c4%20%3Ctext/javascript%3E","../../../../../web/features/bridge/state/basket-panel.tsx","../../../../../web/features/bridge/services/clock-time.ts","../../../../../node_modules/lucide-react/src/icons/arrow-right.ts","../../../../../node_modules/lucide-react/src/icons/clock.ts","../../../../../node_modules/lucide-react/src/icons/pencil.ts","../../../../../web/features/bridge/services/basket.ts"],"sourcesContent":["/* __next_internal_action_entry_do_not_use__ [{\"4045e76c6fc9bf26ef2d0c9f49d73dad0d6d222502\":{\"name\":\"sendBasket\"}},\"web/features/bridge/hooks/bridge-actions.ts\",\"\"] */\"use turbopack: no side effects\";import{createServerReference,callServer,findSourceMapURL}from\"private-next-rsc-action-client-wrapper\";const $$RSC_SERVER_ACTION_6=/*#__PURE__*/createServerReference(\"4045e76c6fc9bf26ef2d0c9f49d73dad0d6d222502\",callServer,void 0,findSourceMapURL,\"sendBasket\");export{$$RSC_SERVER_ACTION_6 as sendBasket};","'use client';\n\nimport { ArrowRight, Ban, Check, CircleAlert, CircleCheck, CircleQuestionMark, Clock, LoaderCircle, Pencil, Replace, Send, ShoppingBasket, X } from 'lucide-react';\nimport { useState, useTransition } from 'react';\n\nimport { removeFromBasket, sendBasket } from '../hooks/bridge-actions';\nimport { answerTextOf, entryLinesOf, footOf, isStruckOut, sentSummaryOf, type BasketFoot, type BasketItem, type BasketView, type EntryLine, type Words } from '../services/basket';\nimport { clockTimeOf } from '../services/clock-time';\nimport { ActionButton } from '../ui/action-button';\nimport { Notice } from '../ui/notice';\nimport { ItemFocus, type ItemOpening } from './item-focus';\n\n/** What the person is doing in the basket: removing one entry, or sending it. */\ntype Working = { kind: 'remove'; questionId: string } | { kind: 'send' };\n\nconst LINE_ICONS = {\n sent: CircleCheck,\n sending: LoaderCircle,\n next: Clock,\n unanswered: LoaderCircle,\n refused: CircleAlert,\n withdrawn: Ban,\n replaced: Replace,\n elsewhere: Check,\n} as const;\n\nconst LINE_TONES = {\n ok: 'text-tone-ok-fg',\n waiting: 'text-tone-waiting-fg',\n attention: 'text-tone-attention-fg',\n off: 'text-muted-foreground',\n} as const;\n\n/** Words as the desktop says them, and shorter on a phone. */\nfunction Said({ words }: { words: Words }) {\n if (words.desktop === words.phone) {\n return <span>{words.desktop}</span>;\n }\n return (\n <>\n <span className=\"hidden sm:inline\">{words.desktop}</span>\n <span className=\"sm:hidden\">{words.phone}</span>\n </>\n );\n}\n\n/** The line under an entry, behind its icon in its tone. */\nfunction EntryLineSaid({ line }: { line: EntryLine }) {\n const Icon = LINE_ICONS[line.icon];\n return (\n <p data-testid=\"bridge-basket-standing\" className=\"col-span-2 col-start-2 flex items-start gap-1.5 text-meta\">\n <Icon aria-hidden className={`mt-0.5 size-3.5 shrink-0 ${LINE_TONES[line.tone]}`} />\n <span>\n <Said words={line.words} />\n </span>\n </p>\n );\n}\n\n/** One entry: the question, its asker and when it asked, its answer and note, the line saying how it stands, and what can be done with it. */\nfunction BasketEntryRow({ entry, line, opening, working, onRemove }: { entry: BasketItem; line: EntryLine | undefined; opening: ItemOpening; working: Working | undefined; onRemove: (questionId: string) => void }) {\n const { standing } = entry;\n const isStruck = isStruckOut(standing);\n const isWorking = working !== undefined || opening.openingId !== undefined;\n const isRemoving = working?.kind === 'remove' && working.questionId === entry.questionId;\n const replacementId = standing.kind === 'replaced' ? standing.replacementId : null;\n const struck = isStruck ? 'line-through decoration-muted-foreground' : '';\n return (\n <li data-testid=\"bridge-basket-entry\" data-standing={standing.kind} className={`grid grid-cols-[18px_1fr_auto] items-start gap-x-2.5 gap-y-1.5 border-t border-border p-3 first:border-t-0 sm:px-3.5 ${isStruck ? 'bg-muted' : ''}`}>\n <CircleQuestionMark aria-hidden className=\"mt-0.5 size-4 text-tone-active-fg\" />\n <div className=\"flex min-w-0 flex-col gap-0.5\">\n <span className={`font-medium ${struck}`}>{entry.title}</span>\n <span className=\"flex flex-wrap items-center gap-1.5 text-caption text-muted-foreground\">\n <span>\n to <b className=\"font-medium text-foreground\">{entry.from}</b>\n </span>\n <span aria-hidden className=\"hidden text-border sm:inline\">\n ·\n </span>\n <span className=\"hidden sm:inline\">\n asked at <time dateTime={entry.sentAt}>{clockTimeOf(entry.sentAt)}</time>\n </span>\n </span>\n <span className={`${isStruck ? 'hidden sm:flex' : 'flex'} items-center gap-1.5 text-meta ${struck}`}>\n <ArrowRight aria-hidden className=\"size-3.5 shrink-0 text-primary\" />\n {answerTextOf(entry)}\n </span>\n {entry.note === null ? null : <span className=\"text-caption italic text-muted-foreground\">"{entry.note}"</span>}\n </div>\n {standing.kind === 'waiting' ? (\n <div className=\"flex items-center gap-1.5\">\n <ActionButton data-testid=\"bridge-basket-change\" size=\"small\" aria-label=\"Change\" isPending={opening.openingId === entry.deliveryId} pendingLabel=\"Opening...\" disabled={isWorking} onClick={() => { opening.open({ deliveryId: entry.deliveryId, job: 'decide', inBasket: { option: entry.option, note: entry.note } }); }}>\n <Pencil aria-hidden className=\"size-3.5\" />\n <span className=\"hidden sm:inline\">Change</span>\n </ActionButton>\n <ActionButton data-testid=\"bridge-basket-remove\" size=\"small\" variant=\"ghost\" aria-label=\"Remove\" isPending={isRemoving} pendingLabel=\"Removing...\" disabled={isWorking} onClick={() => { onRemove(entry.questionId); }}>\n <X aria-hidden className=\"size-4 sm:hidden\" />\n <span className=\"hidden sm:inline\">Remove</span>\n </ActionButton>\n </div>\n ) : (\n <span />\n )}\n {line === undefined ? null : <EntryLineSaid line={line} />}\n {opening.failure?.deliveryId === entry.deliveryId ? (\n <div className=\"col-span-2 col-start-2\">\n <Notice message={opening.failure.message} isFailure />\n </div>\n ) : null}\n {standing.kind === 'withdrawn' || standing.kind === 'replaced' || standing.kind === 'dealtElsewhere' || standing.kind === 'refused' ? (\n <div className=\"col-span-2 col-start-2 flex flex-wrap items-center gap-1.5\">\n {replacementId === null ? null : (\n <ActionButton data-testid=\"bridge-replacement\" size=\"small\" isPending={opening.openingId === replacementId} pendingLabel=\"Opening...\" disabled={isWorking} onClick={() => { opening.open({ deliveryId: replacementId, job: 'decide' }); }}>\n <ArrowRight aria-hidden className=\"size-3.5\" />\n Answer the new question\n </ActionButton>\n )}\n <ActionButton data-testid=\"bridge-basket-remove\" size=\"small\" variant={standing.kind === 'replaced' ? 'ghost' : 'secondary'} isPending={isRemoving} pendingLabel=\"Removing...\" disabled={isWorking} onClick={() => { onRemove(entry.questionId); }}>\n {standing.kind === 'refused' ? 'Remove and mark done' : 'Remove'}\n </ActionButton>\n </div>\n ) : null}\n </li>\n );\n}\n\n/** The foot of the basket: Send naming the ships, the send going on, or what came of it. */\nfunction BasketFootBar({ foot, isSending, isWorking, onSend }: { foot: BasketFoot; isSending: boolean; isWorking: boolean; onSend: () => void }) {\n if (foot.kind === 'none') {\n return null;\n }\n return (\n <div data-testid=\"bridge-basket-foot\" className=\"flex flex-col items-stretch gap-2 border-t border-border bg-card p-3 sm:flex-row sm:items-center sm:gap-3 sm:px-3.5\">\n <p className=\"flex-1 text-caption text-muted-foreground\">\n <Said words={foot.words} />\n </p>\n {foot.kind === 'send' ? (\n <ActionButton data-testid=\"bridge-basket-send\" variant=\"primary\" className=\"justify-center\" isPending={isSending} pendingLabel=\"Sending...\" disabled={isWorking} onClick={onSend}>\n <Send aria-hidden className=\"size-4\" />\n {foot.label}\n </ActionButton>\n ) : null}\n {foot.kind === 'sending' ? (\n <button type=\"button\" data-testid=\"bridge-basket-sending\" disabled aria-busy=\"true\" className=\"inline-flex h-9 items-center justify-center gap-2 rounded-md border border-border bg-card px-4 font-medium text-card-foreground\">\n <LoaderCircle aria-hidden className=\"size-4 animate-spin\" />\n {foot.progress}\n </button>\n ) : null}\n </div>\n );\n}\n\n/** What was sent, over the empty basket, once every entry left was sent. */\nfunction SentSummary({ summary }: { summary: { title: string; description: string } }) {\n return (\n <div data-testid=\"bridge-basket-sent\" role=\"status\" className=\"flex max-w-[620px] items-start gap-3 rounded-lg border border-border bg-popover p-4 text-popover-foreground shadow-lg\">\n <CircleCheck aria-hidden className=\"mt-0.5 size-4 shrink-0 text-tone-ok-fg\" />\n <span className=\"grid gap-1\">\n <span className=\"font-medium\">{summary.title}</span>\n <span className=\"text-caption text-muted-foreground\">{summary.description}</span>\n </span>\n </div>\n );\n}\n\n/** The empty basket, with what goes into it. */\nfunction EmptyBasket() {\n return (\n <div data-testid=\"bridge-basket-empty\" className=\"grid max-w-[820px] justify-items-center gap-3 rounded-lg border border-dashed border-border bg-card px-6 py-10 text-center\">\n <span className=\"inline-flex size-11 items-center justify-center rounded-lg bg-secondary text-muted-foreground\">\n <ShoppingBasket aria-hidden className=\"size-5\" />\n </span>\n <span className=\"text-heading font-semibold\">The basket is empty</span>\n <span className=\"max-w-[360px] text-muted-foreground\">Pick an option on a question and put it in the basket; it waits here until you send it.</span>\n </div>\n );\n}\n\n/**\n * The basket open (docs/design/bridge, section 9; basket.html, basket-3 to\n * basket-7): its count of what is or will be sent, and the answers the\n * person picked in Bridge, in the order added, each with its answer by\n * number and label. Change opens the question with that option picked;\n * Remove takes the entry out, and the question still waits; one the fleet\n * refused is removed and its question marked done. A withdrawn, replaced or\n * answered-elsewhere entry is struck out and not sent. Send N answers stores\n * each as sending and the gateway sends them, each on its own: each entry\n * then says how it goes, and the foot Sending N of M, or what came of the\n * send once one was not answered or refused. Once every entry left was\n * sent, what was sent stands over the empty basket.\n */\nexport function BasketPanel({ fleetId, basket }: { fleetId: string; basket: BasketView }) {\n const [working, setWorking] = useState<Working | undefined>();\n const [failure, setFailure] = useState<string | undefined>();\n const [, startTransition] = useTransition();\n const lines = entryLinesOf(basket);\n const summary = sentSummaryOf(basket);\n\n const remove = (questionId: string) => {\n setWorking({ kind: 'remove', questionId });\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await removeFromBasket(fleetId, questionId);\n setWorking(undefined);\n setFailure(outcome.isOk ? undefined : outcome.message);\n });\n };\n\n const send = () => {\n setWorking({ kind: 'send' });\n setFailure(undefined);\n startTransition(async () => {\n const outcome = await sendBasket(fleetId);\n setWorking(undefined);\n setFailure(outcome.isOk ? undefined : outcome.message);\n });\n };\n\n return (\n <ItemFocus fleetId={fleetId}>\n {(opening) => (\n <section className=\"grid gap-4\" aria-labelledby=\"bridge-basket-heading\">\n <div className=\"hidden sm:block\">\n <h1 id=\"bridge-basket-heading\" className=\"text-heading font-semibold\">\n Basket <span data-testid=\"bridge-basket-count\" className=\"text-primary\">{basket.count}</span>\n </h1>\n <p className=\"text-caption text-muted-foreground\">Answers you picked in Bridge, not sent yet. Nothing goes until you press Send.</p>\n </div>\n {failure === undefined ? null : <Notice message={failure} isFailure />}\n {summary === undefined ? null : <SentSummary summary={summary} />}\n {basket.entries.length === 0 || summary !== undefined ? (\n <EmptyBasket />\n ) : (\n <div className=\"max-w-[820px] overflow-hidden rounded-lg border border-border bg-card\">\n <ul>\n {basket.entries.map((entry, index) => (\n <BasketEntryRow key={entry.questionId} entry={entry} line={lines[index]} opening={opening} working={working} onRemove={remove} />\n ))}\n </ul>\n <BasketFootBar foot={footOf(basket)} isSending={working?.kind === 'send'} isWorking={working !== undefined || opening.openingId !== undefined} onSend={send} />\n </div>\n )}\n </section>\n )}\n </ItemFocus>\n );\n}\n","/** The time of day of an instant (ISO 8601), in UTC to the minute, as Bridge says when something happened: 20:16 UTC. */\nexport function clockTimeOf(at: string): string {\n return `${new Date(at).toISOString().slice(11, 16)} UTC`;\n}\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'arrow-right',\n size: 24,\n node: [\n ['path', { d: 'M5 12h14', key: '1ays0h' }],\n ['path', { d: 'm12 5 7 7-7 7', key: 'xquz4c' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name ArrowRight\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/arrow-right\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst ArrowRight = createLucideIcon(__iconData);\n\nexport default ArrowRight;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'clock',\n size: 24,\n node: [\n ['circle', { cx: '12', cy: '12', r: '10', key: '1mglay' }],\n ['path', { d: 'M12 6v6l4 2', key: 'mmk7yg' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Clock\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/clock\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Clock = createLucideIcon(__iconData);\n\nexport default Clock;\n","import createLucideIcon from '../createLucideIcon';\nimport type { LucideIconNode, LucideIconData } from '../types';\n\nexport const __iconData: LucideIconData = {\n name: 'pencil',\n size: 24,\n node: [\n [\n 'path',\n {\n d: 'M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z',\n key: '1a8usu',\n },\n ],\n ['path', { d: 'm15 5 4 4', key: '1mk7zo' }],\n ],\n};\n\n/**\n * @deprecated Access `__iconData` instead.\n */\nexport const __iconNode: LucideIconNode[] = __iconData.node;\n\n/**\n * @component @name Pencil\n * @description Lucide SVG icon component, renders SVG Element with children.\n *\n * @preview  - https://lucide.dev/icons/pencil\n * @see https://lucide.dev/guide/packages/lucide-react - Documentation\n *\n * @param {Object} props - Lucide icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Pencil = createLucideIcon(__iconData);\n\nexport default Pencil;\n","/**\n * The basket as Bridge shows it (docs/design/bridge, section 9; basket.html,\n * basket-3 to basket-7): each entry's answer, the line under it as it\n * stands, the foot naming the ships or saying how the send goes, and what\n * was sent, in words, each with its desktop and its shorter phone words.\n * Pure view logic, no React and no API client.\n */\nimport type { inferRouterOutputs } from '@trpc/server';\n\nimport type { GatewayRouter } from '../../../../src/adapters/trpc/router.js';\nimport { clockTimeOf } from './clock-time';\n\ntype PeopleOutputs = inferRouterOutputs<GatewayRouter>['people'];\n\n/** The basket as the API answers it: its entries in the order added, its count, and how many answers Send sends. */\nexport type BasketView = PeopleOutputs['basket'];\n\n/** An entry of the basket, with what it stands as. */\nexport type BasketItem = BasketView['entries'][number];\n\ntype Standing = BasketItem['standing'];\n\n/** What Send did, as the API answers it. */\nexport type BasketSent = PeopleOutputs['sendBasket'];\n\n/** Words as a desktop says them, and as a phone says them, shorter. */\nexport interface Words {\n readonly desktop: string;\n readonly phone: string;\n}\n\n/** The line under an entry: its icon, the tone of the icon, and its words. */\nexport interface EntryLine {\n readonly icon: 'sent' | 'sending' | 'next' | 'unanswered' | 'refused' | 'withdrawn' | 'replaced' | 'elsewhere';\n readonly tone: 'ok' | 'waiting' | 'attention' | 'off';\n readonly words: Words;\n}\n\n/** The basket's foot: Send naming the ships, the send going on, what came of it, or none. */\nexport type BasketFoot = { readonly kind: 'send'; readonly words: Words; readonly label: string } | { readonly kind: 'sending'; readonly words: Words; readonly progress: string } | { readonly kind: 'summary'; readonly words: Words } | { readonly kind: 'none' };\n\nconst PLACES: Record<Extract<Standing, { kind: 'dealtElsewhere' }>['place'], string> = {\n bridge: 'in Bridge',\n chat: 'in a chat',\n slack: 'in Slack',\n gateway: 'by the gateway',\n};\n\nfunction same(words: string): Words {\n return { desktop: words, phone: words };\n}\n\nfunction answersOf(count: number): string {\n return count === 1 ? '1 answer' : `${String(count)} answers`;\n}\n\n/** Names in a sentence: a, b and c. */\nfunction listOf(names: readonly string[]): string {\n return names.length <= 1 ? names.join('') : `${names.slice(0, -1).join(', ')} and ${names.at(-1) ?? ''}`;\n}\n\n/** Each asker once, in the order added. */\nfunction askersOf(entries: readonly BasketItem[]): string[] {\n return [...new Set(entries.map(({ from }) => from))];\n}\n\n/** The Send button, naming how many answers it sends. */\nexport function sendLabelOf(toSend: number): string {\n return `Send ${answersOf(toSend)}`;\n}\n\n/** The answer an entry gives, by its number and label (2. Harbour first, on today's look); a note alone as such. */\nexport function answerTextOf(item: Pick<BasketItem, 'option' | 'optionLabel'>): string {\n if (item.option === null) {\n return 'Note alone';\n }\n return item.optionLabel === null ? `Option ${String(item.option)}` : `${String(item.option)}. ${item.optionLabel}`;\n}\n\n/** Whether an entry is not sent, as its asker withdrew or replaced it or it was answered elsewhere first: struck out. */\nexport function isStruckOut(standing: Standing): boolean {\n return standing.kind === 'withdrawn' || standing.kind === 'replaced' || standing.kind === 'dealtElsewhere';\n}\n\n/** The line under one entry, given whether another entry was sent and whether this is the one being sent now. */\nfunction lineOf(item: BasketItem, context: { isAnySent: boolean; isSendingNow: boolean }): EntryLine | undefined {\n const { standing, from } = item;\n switch (standing.kind) {\n case 'waiting':\n return undefined;\n case 'sent': {\n const at = clockTimeOf(standing.at);\n return { icon: 'sent', tone: 'ok', words: { desktop: `Sent at ${at} and stored. Done.`, phone: `Sent at ${at}. Done.` } };\n }\n case 'sending':\n if (standing.isUnanswered) {\n return { icon: 'unanswered', tone: 'waiting', words: { desktop: 'The fleet did not answer. Sending again with the same key until it is stored; it arrives once.', phone: 'No answer from the fleet. Sending again, same key.' } };\n }\n return context.isSendingNow ? { icon: 'sending', tone: 'waiting', words: same('Sending...') } : { icon: 'next', tone: 'waiting', words: { desktop: 'Next, in the order you added it', phone: 'Next' } };\n case 'refused': {\n const said = `Not sent: ${standing.reason}.`;\n // The phone says the reason without its consequence, as basket-7 draws it: Not sent: commercial was retired.\n const [cause = standing.reason] = standing.reason.split(', so ');\n return { icon: 'refused', tone: 'attention', words: { desktop: context.isAnySent ? `${said} The others were sent.` : said, phone: `Not sent: ${cause}.` } };\n }\n case 'withdrawn':\n return { icon: 'withdrawn', tone: 'off', words: { desktop: `Withdrawn by ${from} at ${clockTimeOf(standing.at)}. Not sent; Send skips it.`, phone: `Withdrawn by ${from}. Not sent.` } };\n case 'replaced': {\n const withTitle = standing.replacementTitle === null ? '.' : ` with \"${standing.replacementTitle}\"`;\n return { icon: 'replaced', tone: 'off', words: { desktop: `Replaced by ${from} at ${clockTimeOf(standing.at)}${withTitle} Not sent: its options differ, so answer the new one.`, phone: `Replaced by ${from}. Not sent.` } };\n }\n case 'dealtElsewhere':\n return { icon: 'elsewhere', tone: 'off', words: same(standing.option === null ? `Done ${PLACES[standing.place]}. Nothing is sent from it.` : `Answered ${PLACES[standing.place]}: option ${String(standing.option)}. Nothing is sent from it.`) };\n }\n}\n\n/** The line under each entry, in the order added: the first sending one the fleet has not left unanswered is the one being sent now, the others next. */\nexport function entryLinesOf(view: BasketView): (EntryLine | undefined)[] {\n const isAnySent = view.entries.some(({ standing }) => standing.kind === 'sent');\n const now = view.entries.find(({ standing }) => standing.kind === 'sending' && !standing.isUnanswered);\n return view.entries.map((item) => lineOf(item, { isAnySent, isSendingNow: item === now }));\n}\n\n/** The entries not sent, by kind, as the foot says them: The withdrawn and the replaced one are not sent. */\nfunction notSentOf(entries: readonly BasketItem[]): string | undefined {\n const counted = (kind: Standing['kind']) => entries.filter(({ standing }) => standing.kind === kind).length;\n const stale = (['withdrawn', 'replaced'] as const).map((kind) => ({ kind, count: counted(kind) })).filter(({ count }) => count > 0);\n const named = stale.map(({ kind, count }, index) => (count > 1 ? `the ${String(count)} ${kind}` : index === stale.length - 1 ? `the ${kind} one` : `the ${kind}`));\n const elsewhere = counted('dealtElsewhere');\n const all = elsewhere === 0 ? named : [...named, elsewhere === 1 ? 'the one answered elsewhere' : `the ${String(elsewhere)} answered elsewhere`];\n if (all.length === 0) {\n return undefined;\n }\n const sentence = listOf(all);\n const isOne = stale.reduce((sum, { count }) => sum + count, elsewhere) === 1;\n return `${sentence.charAt(0).toUpperCase()}${sentence.slice(1)} ${isOne ? 'is' : 'are'} not sent.`;\n}\n\n/** The foot while the basket waits for Send: the ships each receiving their own answer, or how many go and which are not sent. */\nfunction sendFootOf(view: BasketView): BasketFoot {\n const notSent = notSentOf(view.entries);\n const label = sendLabelOf(view.toSend);\n if (notSent !== undefined) {\n return { kind: 'send', words: { desktop: `${String(view.toSend)} to send. ${notSent}`, phone: notSent }, label };\n }\n const waiting = view.entries.filter(({ standing }) => standing.kind === 'waiting');\n const askers = askersOf(waiting);\n const receive = askers.length > 1 ? 'each receive their own answer' : waiting.length > 1 ? 'receives its own answer to each' : 'receives its own answer';\n return { kind: 'send', words: { desktop: `${listOf(askers)} ${receive}, as you, as if sent one by one.`, phone: 'Each asker receives its own answer.' }, label };\n}\n\n/** The basket's foot: Send while answers wait for it; Sending N of M while the send goes well; what came of it once one was not answered or refused. */\nexport function footOf(view: BasketView): BasketFoot {\n if (view.toSend > 0) {\n return sendFootOf(view);\n }\n const kinds = view.entries.map(({ standing }) => standing);\n const sent = kinds.filter(({ kind }) => kind === 'sent').length;\n const sending = kinds.filter(({ kind }) => kind === 'sending').length;\n const refused = kinds.filter(({ kind }) => kind === 'refused').length;\n const isAnyUnanswered = kinds.some((standing) => standing.kind === 'sending' && standing.isUnanswered);\n if (sending > 0 && refused === 0 && !isAnyUnanswered) {\n return { kind: 'sending', words: { desktop: 'You can close Bridge: the gateway keeps sending what is stored as sending.', phone: 'You can close Bridge; the gateway keeps sending.' }, progress: `Sending ${String(sent + 1)} of ${String(sent + sending)}` };\n }\n if (sending === 0 && refused === 0) {\n return { kind: 'none' };\n }\n const part = (count: number, words: string) => (count === 0 ? [] : [`${String(count)} ${words}`]);\n return {\n kind: 'summary',\n words: {\n desktop: `${[...part(sent, 'sent'), ...part(sending, 'still sending'), ...part(refused, 'not sent')].join(', ')}.`,\n phone: `${[...part(sent, 'sent'), ...part(sending, 'sending'), ...part(refused, 'not sent')].join(', ')}.`,\n },\n };\n}\n\n/** What was sent, once every entry left in the basket was sent: how many answers, to which ships. */\nexport function sentSummaryOf(view: BasketView): { title: string; description: string } | undefined {\n const { entries } = view;\n if (entries.length === 0 || entries.some(({ standing }) => standing.kind !== 'sent')) {\n return undefined;\n }\n const to = `To ${listOf(askersOf(entries))}, as you;`;\n return { title: `${answersOf(entries.length)} sent`, description: entries.length === 1 ? `${to} stored, and in Done.` : `${to} each stored, each in Done.` };\n}\n"],"names":["ArrowRight"],"mappings":"qEGGO,CAAA,AEAA,ADAA,CCAA,AFAA,ACAA,CDAA,AEAA,ADAA,CCAA,AFAA,ACAA,ACAA,CDAA,ACAA,AFAA,CEAA,6CFIW,CAAA,ACAD,CDAC,ACAD,SDAa,IAAA,UAAe,GCAC,CAAA,wBDCX,CCAF,ADAE,CCAF,ADAE,EAAK,CCAF,ADAE,CCAF,ADAE,CAAA,ACAF,CDAE,ACAF,CAAA,ADAE,CAAA,IAAU,mBAoB/B,CAAA,ACAL,CAAA,ADAK,CCAL,ADAK,CAAA,ACAL,CDAK,ACAL,ADAK,CCAL,ADAK,CCAL,ADAK,CF1BnB,AE0BmB,ACAL,CAAA,ADAK,CCAL,ADAK,EF1BnB,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,OAAA,EAAA,EAAA,CAAA,CAAA,YGC0C,MAClC,CAAA,ADAA,AEAA,CFAA,AEAA,ADAA,CCAA,AFAA,ACAA,CDAA,ACAA,ACAA,CAAA,AFAA,ACAA,CAAA,ADAA,AEAA,CFAA,ACAA,ACAA,CAAA,AFAA,CAAA,CAAA,CAAA,CAAA,CAAA,QCEA,YACS,GAAI,CDAH,ACAG,CDAH,ACAG,CDAH,ACAG,CDAH,ACAG,CDAH,ACAS,CAAA,ADAT,CAAA,ACAS,CAAI,CDAD,CAAA,CAAA,ECAO,CDAF,ACAE,CAAG,ADAL,CAAA,ACAK,CDAL,ACAK,CAAA,MAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,wCACb,wBAoBjB,CDAZ,ACAY,CAAA,ADAZ,CF1BnB,AE0BmB,ACAY,IH1B/B,EAAA,EAAA,CAAA,CAAA,kDIOM,CACE,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,4HACH,CDIoC,ADAA,CCAA,ADAA,EEJ/B,CDI0C,ACJ1C,AFI0C,OEJ1C,CDiBP,ADAA,CEfF,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,AAAE,EAAG,CAAA,CAAA,CAAA,SAAa,CAAA,CAAA,CAAA,CAAA,AAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CA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","ignoreList":[3,4,5]}
|