better-supabase 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/{access-sql-DUSSMaC3.js → access-sql-CTJPHjCL.js} +1 -1
- package/dist/{actor-KHDOKGb1.js → actor-CAL8mMih.js} +1 -1
- package/dist/{adapter-CEjmtazZ.js → adapter-B2WRsRIg.js} +29 -15
- package/dist/{agents-BCNhIxVZ.d.ts → agents-CbUIrH-w.d.ts} +7 -7
- package/dist/{ai-cache-Dps7aRu1.d.ts → ai-cache-BdeJKlrV.d.ts} +5 -5
- package/dist/{ai-cache-zeUL94pB.js → ai-cache-CLninP-F.js} +2 -2
- package/dist/{ai-chat-3GBSlFR4.d.ts → ai-chat-D-2MH1sU.d.ts} +7 -7
- package/dist/{ai-files-D2_9YLjF.js → ai-files-DXbgWA5M.js} +6 -6
- package/dist/ai-sdk/agents/index.d.ts +6 -6
- package/dist/ai-sdk/agents/index.js +2 -2
- package/dist/ai-sdk/batches/index.d.ts +4 -4
- package/dist/ai-sdk/batches/index.js +4 -4
- package/dist/ai-sdk/cache/index.d.ts +2 -2
- package/dist/ai-sdk/cache/index.js +1 -1
- package/dist/ai-sdk/chat/index.d.ts +1 -1
- package/dist/ai-sdk/chat/index.js +5 -5
- package/dist/ai-sdk/embeddings/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.js +4 -4
- package/dist/ai-sdk/index.d.ts +6 -6
- package/dist/ai-sdk/index.js +2 -2
- package/dist/ai-sdk/mcp/index.d.ts +4 -4
- package/dist/ai-sdk/mcp/index.js +4 -4
- package/dist/ai-sdk/memory/index.d.ts +3 -3
- package/dist/ai-sdk/workflow/index.d.ts +4 -4
- package/dist/ai-sdk/workflow/index.js +6 -6
- package/dist/{ai-tasks-Ih5oHfyj.d.ts → ai-tasks-BJJChl-D.d.ts} +8 -8
- package/dist/{announcements-BHCzraR6.js → announcements-BNxTW5HJ.js} +4 -4
- package/dist/{api-CFjuYKFY.js → api-C43_FYDp.js} +1 -1
- package/dist/{api-TG3jE5aO.d.ts → api-DoWK3dTw.d.ts} +6 -6
- package/dist/{api-keys-BEQatEUW.js → api-keys-BSXwI2jF.js} +6 -6
- package/dist/{api-keys-BYoGCM9p.d.ts → api-keys-qnM63qjS.d.ts} +7 -7
- package/dist/{app-tables-BGl5_U2x.js → app-tables-BRjMcWhW.js} +248 -13
- package/dist/app-tables-BrMBjyuq.d.ts +35 -0
- package/dist/{approvals-a2KmioBh.d.ts → approvals-CRZtzxNt.d.ts} +7 -7
- package/dist/arazzo/index.d.ts +2 -2
- package/dist/arazzo/index.js +2 -2
- package/dist/{assistant-Bf2cA6RO.d.ts → assistant-DZsHsYIx.d.ts} +4 -4
- package/dist/astro/index.d.ts +12 -12
- package/dist/astro/index.js +5 -5
- package/dist/asyncapi/index.d.ts +1 -1
- package/dist/asyncapi/index.js +2 -2
- package/dist/{attachments-DAj2Yp95.js → attachments-Bk3tyeUF.js} +6 -6
- package/dist/{audit-log-BMMuGPdP.js → audit-log-ovUlF4Mk.js} +8 -8
- package/dist/auth-module-DbZv2WrR.js +10 -0
- package/dist/{auth-reply-DUCwb8YO.js → auth-reply-Daq72lY4.js} +2 -2
- package/dist/{authorization-DpRfs6Wx.d.ts → authorization-ClWBcXJi.d.ts} +47 -3
- package/dist/{authorization-hooks-DkmrnDX7.d.ts → authorization-hooks-mLi894KH.d.ts} +2 -2
- package/dist/{authorizer-DH7DjkL3.js → authorizer-B3yyCVUF.js} +2 -2
- package/dist/{base64-BmeCBgGo.js → base64-D4aqdnDR.js} +4 -4
- package/dist/better-result/index.d.ts +5 -5
- package/dist/better-result/index.js +1 -1
- package/dist/{bind-a7sUgvf4.d.ts → bind-CTNKpBM6.d.ts} +4 -4
- package/dist/{block-fields-ffD6Gxe4.js → block-fields-Bv1hV855.js} +3 -3
- package/dist/{block-fields-5UA84ZUg.d.ts → block-fields-DnaDbgZS.d.ts} +2 -2
- package/dist/{block-helpers-C86hPEjI.d.ts → block-helpers-CjcQM1yA.d.ts} +2 -2
- package/dist/{block-helpers-CfG_MvDR.js → block-helpers-DkVZNDrj.js} +4 -4
- package/dist/{block-hooks-BsXncUlZ.js → block-hooks-C22vuIUd.js} +3 -3
- package/dist/{block-hooks-BLPWD3Jt.d.ts → block-hooks-DcPJHztl.d.ts} +3 -3
- package/dist/{block-transport-DaGGXjIw.d.ts → block-transport-DezJPPA0.d.ts} +2 -2
- package/dist/{block-transport-G4t1umrR.js → block-transport-J7ZepTq2.js} +1 -1
- package/dist/blocks/access-requests/index.d.ts +8 -8
- package/dist/blocks/access-requests/index.js +7 -7
- package/dist/blocks/agents/index.d.ts +4 -4
- package/dist/blocks/agents/index.js +6 -6
- package/dist/blocks/ai-cache/index.d.ts +3 -3
- package/dist/blocks/ai-cache/index.js +3 -3
- package/dist/blocks/ai-chat/index.d.ts +5 -5
- package/dist/blocks/ai-chat/index.js +4 -4
- package/dist/blocks/ai-chat/react/index.d.ts +2 -2
- package/dist/blocks/ai-chat/react/index.js +2 -2
- package/dist/blocks/ai-chat/solid/index.d.ts +2 -2
- package/dist/blocks/ai-chat/solid/index.js +1 -1
- package/dist/blocks/ai-chat/svelte/index.d.ts +2 -2
- package/dist/blocks/ai-chat/svelte/index.js +1 -1
- package/dist/blocks/ai-chat/vue/index.d.ts +2 -2
- package/dist/blocks/ai-chat/vue/index.js +1 -1
- package/dist/blocks/ai-files/index.d.ts +5 -5
- package/dist/blocks/ai-files/index.js +3 -3
- package/dist/blocks/ai-providers/index.d.ts +4 -4
- package/dist/blocks/ai-providers/index.js +8 -8
- package/dist/blocks/ai-tasks/index.d.ts +3 -3
- package/dist/blocks/ai-tasks/index.js +9 -9
- package/dist/blocks/announcements/index.d.ts +4 -4
- package/dist/blocks/announcements/index.js +3 -3
- package/dist/blocks/announcements/react/index.d.ts +1 -1
- package/dist/blocks/announcements/react/index.js +2 -2
- package/dist/blocks/announcements/solid/index.d.ts +2 -2
- package/dist/blocks/announcements/svelte/index.d.ts +2 -2
- package/dist/blocks/announcements/vue/index.d.ts +2 -2
- package/dist/blocks/api-keys/index.d.ts +7 -7
- package/dist/blocks/api-keys/index.js +6 -6
- package/dist/blocks/api-keys/react/index.d.ts +1 -1
- package/dist/blocks/api-keys/react/index.js +3 -3
- package/dist/blocks/api-keys/react/server.d.ts +1 -1
- package/dist/blocks/api-keys/solid/index.d.ts +2 -2
- package/dist/blocks/api-keys/solid/index.js +1 -1
- package/dist/blocks/api-keys/svelte/index.d.ts +2 -2
- package/dist/blocks/api-keys/svelte/index.js +1 -1
- package/dist/blocks/api-keys/vue/index.d.ts +2 -2
- package/dist/blocks/api-keys/vue/index.js +1 -1
- package/dist/blocks/approvals/index.d.ts +4 -4
- package/dist/blocks/approvals/index.js +7 -7
- package/dist/blocks/attachments/index.d.ts +4 -4
- package/dist/blocks/attachments/index.js +3 -3
- package/dist/blocks/audit/index.d.ts +6 -6
- package/dist/blocks/audit/index.js +7 -7
- package/dist/blocks/audit/react/index.d.ts +1 -1
- package/dist/blocks/audit/react/index.js +2 -2
- package/dist/blocks/audit/react/server.d.ts +1 -1
- package/dist/blocks/audit/solid/index.d.ts +2 -2
- package/dist/blocks/audit/svelte/index.d.ts +2 -2
- package/dist/blocks/audit/vue/index.d.ts +2 -2
- package/dist/blocks/billing/index.d.ts +26 -10
- package/dist/blocks/billing/index.js +43 -10
- package/dist/blocks/billing/react/index.d.ts +2 -2
- package/dist/blocks/billing/react/index.js +1 -1
- package/dist/blocks/billing/react/server.d.ts +1 -1
- package/dist/blocks/billing/solid/index.d.ts +2 -2
- package/dist/blocks/billing/solid/index.js +1 -1
- package/dist/blocks/billing/svelte/index.d.ts +2 -2
- package/dist/blocks/billing/svelte/index.js +1 -1
- package/dist/blocks/billing/vue/index.d.ts +2 -2
- package/dist/blocks/billing/vue/index.js +1 -1
- package/dist/blocks/bookings/index.d.ts +3 -3
- package/dist/blocks/bookings/index.js +3 -3
- package/dist/blocks/bookings/react/index.d.ts +1 -1
- package/dist/blocks/bookings/react/index.js +3 -3
- package/dist/blocks/bookings/solid/index.d.ts +2 -2
- package/dist/blocks/bookings/solid/index.js +1 -1
- package/dist/blocks/bookings/svelte/index.d.ts +2 -2
- package/dist/blocks/bookings/svelte/index.js +1 -1
- package/dist/blocks/bookings/vue/index.d.ts +2 -2
- package/dist/blocks/bookings/vue/index.js +1 -1
- package/dist/blocks/bulk/index.d.ts +10 -6
- package/dist/blocks/bulk/index.js +4 -4
- package/dist/blocks/calendar/index.d.ts +3 -3
- package/dist/blocks/calendar/index.js +3 -3
- package/dist/blocks/calendar/react/index.d.ts +1 -1
- package/dist/blocks/calendar/react/index.js +3 -3
- package/dist/blocks/calendar/solid/index.d.ts +2 -2
- package/dist/blocks/calendar/solid/index.js +1 -1
- package/dist/blocks/calendar/svelte/index.d.ts +2 -2
- package/dist/blocks/calendar/svelte/index.js +1 -1
- package/dist/blocks/calendar/vue/index.d.ts +2 -2
- package/dist/blocks/calendar/vue/index.js +1 -1
- package/dist/blocks/catalog/index.d.ts +11 -11
- package/dist/blocks/catalog/index.js +9 -9
- package/dist/blocks/collections/index.d.ts +10 -10
- package/dist/blocks/collections/index.js +7 -7
- package/dist/blocks/comments/index.d.ts +4 -4
- package/dist/blocks/comments/index.js +4 -4
- package/dist/blocks/comments/react/index.d.ts +1 -1
- package/dist/blocks/comments/react/index.js +3 -3
- package/dist/blocks/comments/react/server.d.ts +1 -1
- package/dist/blocks/comments/solid/index.d.ts +2 -2
- package/dist/blocks/comments/solid/index.js +1 -1
- package/dist/blocks/comments/svelte/index.d.ts +2 -2
- package/dist/blocks/comments/svelte/index.js +1 -1
- package/dist/blocks/comments/vue/index.d.ts +2 -2
- package/dist/blocks/comments/vue/index.js +1 -1
- package/dist/blocks/connectors/index.d.ts +4 -4
- package/dist/blocks/connectors/index.js +8 -8
- package/dist/blocks/custom-fields/index.d.ts +6 -6
- package/dist/blocks/custom-fields/index.js +5 -5
- package/dist/blocks/data-lifecycle/index.d.ts +9 -9
- package/dist/blocks/data-lifecycle/index.js +8 -8
- package/dist/blocks/deals/index.d.ts +10 -10
- package/dist/blocks/deals/index.js +10 -10
- package/dist/blocks/documents/index.d.ts +4 -4
- package/dist/blocks/documents/index.js +5 -5
- package/dist/blocks/domains/index.d.ts +7 -7
- package/dist/blocks/domains/index.js +7 -7
- package/dist/blocks/drive/index.d.ts +10 -10
- package/dist/blocks/drive/index.js +8 -8
- package/dist/blocks/employees/index.d.ts +10 -10
- package/dist/blocks/employees/index.js +9 -9
- package/dist/blocks/engagements/index.d.ts +9 -9
- package/dist/blocks/engagements/index.js +6 -6
- package/dist/blocks/entitlements/index.d.ts +7 -7
- package/dist/blocks/entitlements/index.js +2 -2
- package/dist/blocks/entitlements/react/index.d.ts +2 -2
- package/dist/blocks/entitlements/solid/index.d.ts +2 -2
- package/dist/blocks/entitlements/svelte/index.d.ts +2 -2
- package/dist/blocks/entitlements/vue/index.d.ts +2 -2
- package/dist/blocks/flags/index.d.ts +8 -8
- package/dist/blocks/flags/index.js +7 -7
- package/dist/blocks/forms/index.d.ts +9 -9
- package/dist/blocks/forms/index.js +6 -6
- package/dist/blocks/forms/react/index.d.ts +1 -1
- package/dist/blocks/forms/solid/index.d.ts +2 -2
- package/dist/blocks/forms/svelte/index.d.ts +2 -2
- package/dist/blocks/forms/vue/index.d.ts +2 -2
- package/dist/blocks/hiring/index.d.ts +9 -9
- package/dist/blocks/hiring/index.js +7 -7
- package/dist/blocks/identities/index.d.ts +6 -6
- package/dist/blocks/identities/index.js +4 -4
- package/dist/blocks/imports/index.d.ts +75 -7
- package/dist/blocks/imports/index.js +111 -7
- package/dist/blocks/inbox/index.d.ts +5 -5
- package/dist/blocks/inbox/index.js +4 -4
- package/dist/blocks/inbox/react/index.d.ts +2 -2
- package/dist/blocks/inbox/react/server.d.ts +2 -2
- package/dist/blocks/inbox/solid/index.d.ts +2 -2
- package/dist/blocks/inbox/svelte/index.d.ts +2 -2
- package/dist/blocks/inbox/vue/index.d.ts +2 -2
- package/dist/blocks/index.d.ts +28 -9
- package/dist/blocks/index.js +5 -5
- package/dist/blocks/inventory/index.d.ts +9 -9
- package/dist/blocks/inventory/index.js +7 -7
- package/dist/blocks/invoices/index.d.ts +9 -9
- package/dist/blocks/invoices/index.js +9 -9
- package/dist/blocks/jobs/index.d.ts +61 -11
- package/dist/blocks/jobs/index.js +127 -14
- package/dist/blocks/knowledge/index.d.ts +3 -3
- package/dist/blocks/knowledge/index.js +3 -3
- package/dist/blocks/leave/index.d.ts +8 -8
- package/dist/blocks/leave/index.js +6 -6
- package/dist/blocks/memory/index.d.ts +4 -4
- package/dist/blocks/memory/index.js +7 -7
- package/dist/blocks/metrics/index.d.ts +7 -7
- package/dist/blocks/metrics/index.js +7 -7
- package/dist/blocks/mfa/index.d.ts +2 -2
- package/dist/blocks/mfa/index.js +1 -1
- package/dist/blocks/mfa/react/index.d.ts +1 -1
- package/dist/blocks/mfa/react/index.js +1 -1
- package/dist/blocks/mfa/react/server.d.ts +1 -1
- package/dist/blocks/mfa/react/server.js +1 -1
- package/dist/blocks/mfa/solid/index.d.ts +2 -2
- package/dist/blocks/mfa/solid/index.js +1 -1
- package/dist/blocks/mfa/svelte/index.d.ts +2 -2
- package/dist/blocks/mfa/svelte/index.js +1 -1
- package/dist/blocks/mfa/vue/index.d.ts +2 -2
- package/dist/blocks/mfa/vue/index.js +1 -1
- package/dist/blocks/notifications/index.d.ts +13 -13
- package/dist/blocks/notifications/index.js +13 -13
- package/dist/blocks/notifications/react/index.d.ts +1 -1
- package/dist/blocks/notifications/react/server.d.ts +1 -1
- package/dist/blocks/notifications/solid/index.d.ts +2 -2
- package/dist/blocks/notifications/svelte/index.d.ts +2 -2
- package/dist/blocks/notifications/vue/index.d.ts +2 -2
- package/dist/blocks/number-sequences/index.d.ts +11 -5
- package/dist/blocks/number-sequences/index.js +22 -11
- package/dist/blocks/oauth-server/index.d.ts +28 -8
- package/dist/blocks/oauth-server/index.js +24 -15
- package/dist/blocks/onboarding/index.d.ts +3 -3
- package/dist/blocks/onboarding/index.js +3 -3
- package/dist/blocks/onboarding/react/index.d.ts +1 -1
- package/dist/blocks/onboarding/react/index.js +2 -2
- package/dist/blocks/onboarding/react/server.d.ts +1 -1
- package/dist/blocks/onboarding/solid/index.d.ts +2 -2
- package/dist/blocks/onboarding/svelte/index.d.ts +2 -2
- package/dist/blocks/onboarding/vue/index.d.ts +2 -2
- package/dist/blocks/orders/index.d.ts +12 -12
- package/dist/blocks/orders/index.js +12 -12
- package/dist/blocks/organizations/index.d.ts +5 -5
- package/dist/blocks/organizations/index.js +5 -5
- package/dist/blocks/organizations/react/index.d.ts +1 -1
- package/dist/blocks/organizations/react/index.js +3 -3
- package/dist/blocks/organizations/react/server.d.ts +1 -1
- package/dist/blocks/organizations/solid/index.d.ts +2 -2
- package/dist/blocks/organizations/solid/index.js +1 -1
- package/dist/blocks/organizations/svelte/index.d.ts +2 -2
- package/dist/blocks/organizations/svelte/index.js +1 -1
- package/dist/blocks/organizations/vue/index.d.ts +2 -2
- package/dist/blocks/organizations/vue/index.js +1 -1
- package/dist/blocks/outbox/index.d.ts +4 -4
- package/dist/blocks/outbox/index.js +6 -6
- package/dist/blocks/parties/index.d.ts +10 -10
- package/dist/blocks/parties/index.js +5 -5
- package/dist/blocks/pipelines/index.d.ts +10 -10
- package/dist/blocks/pipelines/index.js +8 -8
- package/dist/blocks/profiles/index.d.ts +7 -7
- package/dist/blocks/profiles/index.js +6 -6
- package/dist/blocks/promotions/index.d.ts +9 -9
- package/dist/blocks/promotions/index.js +8 -8
- package/dist/blocks/push/index.d.ts +9 -9
- package/dist/blocks/push/index.js +5 -5
- package/dist/blocks/quotes/index.d.ts +9 -9
- package/dist/blocks/quotes/index.js +9 -9
- package/dist/blocks/rank/index.d.ts +6 -6
- package/dist/blocks/rank/index.js +4 -4
- package/dist/blocks/reactions/index.d.ts +4 -4
- package/dist/blocks/reactions/index.js +3 -3
- package/dist/blocks/reactions/react/index.d.ts +1 -1
- package/dist/blocks/reactions/react/index.js +2 -2
- package/dist/blocks/reactions/solid/index.d.ts +2 -2
- package/dist/blocks/reactions/solid/index.js +1 -1
- package/dist/blocks/reactions/svelte/index.d.ts +2 -2
- package/dist/blocks/reactions/svelte/index.js +1 -1
- package/dist/blocks/reactions/vue/index.d.ts +2 -2
- package/dist/blocks/reactions/vue/index.js +1 -1
- package/dist/blocks/relations/index.d.ts +8 -8
- package/dist/blocks/relations/index.js +5 -5
- package/dist/blocks/reminders/index.d.ts +10 -10
- package/dist/blocks/reminders/index.js +9 -9
- package/dist/blocks/reviews/index.d.ts +8 -8
- package/dist/blocks/reviews/index.js +6 -6
- package/dist/blocks/rules/index.d.ts +75 -9
- package/dist/blocks/rules/index.js +117 -8
- package/dist/blocks/rules/react/index.d.ts +2 -2
- package/dist/blocks/rules/react/index.js +3 -3
- package/dist/blocks/rules/solid/index.d.ts +2 -2
- package/dist/blocks/rules/solid/index.js +1 -1
- package/dist/blocks/rules/svelte/index.d.ts +2 -2
- package/dist/blocks/rules/svelte/index.js +1 -1
- package/dist/blocks/rules/vue/index.d.ts +2 -2
- package/dist/blocks/rules/vue/index.js +1 -1
- package/dist/blocks/saved-views/index.d.ts +3 -3
- package/dist/blocks/saved-views/index.js +2 -2
- package/dist/blocks/saved-views/react/index.d.ts +1 -1
- package/dist/blocks/saved-views/react/index.js +1 -1
- package/dist/blocks/saved-views/react/server.d.ts +1 -1
- package/dist/blocks/saved-views/solid/index.d.ts +2 -2
- package/dist/blocks/saved-views/solid/index.js +1 -1
- package/dist/blocks/saved-views/svelte/index.d.ts +2 -2
- package/dist/blocks/saved-views/svelte/index.js +1 -1
- package/dist/blocks/saved-views/vue/index.d.ts +2 -2
- package/dist/blocks/saved-views/vue/index.js +1 -1
- package/dist/blocks/search/index.d.ts +4 -4
- package/dist/blocks/search/index.js +4 -4
- package/dist/blocks/search/react/index.d.ts +1 -1
- package/dist/blocks/search/react/index.js +2 -2
- package/dist/blocks/search/react/server.d.ts +1 -1
- package/dist/blocks/search/solid/index.d.ts +2 -2
- package/dist/blocks/search/svelte/index.d.ts +2 -2
- package/dist/blocks/search/vue/index.d.ts +2 -2
- package/dist/blocks/service-principals/index.d.ts +8 -8
- package/dist/blocks/service-principals/index.js +7 -7
- package/dist/blocks/sessions/index.d.ts +2 -2
- package/dist/blocks/sessions/index.js +2 -2
- package/dist/blocks/sessions/react/index.d.ts +1 -1
- package/dist/blocks/sessions/react/index.js +1 -1
- package/dist/blocks/sessions/react/server.d.ts +1 -1
- package/dist/blocks/sessions/solid/index.d.ts +2 -2
- package/dist/blocks/sessions/solid/index.js +1 -1
- package/dist/blocks/sessions/svelte/index.d.ts +2 -2
- package/dist/blocks/sessions/svelte/index.js +1 -1
- package/dist/blocks/sessions/vue/index.d.ts +2 -2
- package/dist/blocks/sessions/vue/index.js +1 -1
- package/dist/blocks/settings/index.d.ts +4 -4
- package/dist/blocks/settings/index.js +4 -4
- package/dist/blocks/settings/react/index.d.ts +1 -1
- package/dist/blocks/settings/react/index.js +3 -3
- package/dist/blocks/settings/react/server.d.ts +1 -1
- package/dist/blocks/settings/solid/index.d.ts +2 -2
- package/dist/blocks/settings/solid/index.js +1 -1
- package/dist/blocks/settings/svelte/index.d.ts +2 -2
- package/dist/blocks/settings/svelte/index.js +1 -1
- package/dist/blocks/settings/vue/index.d.ts +2 -2
- package/dist/blocks/settings/vue/index.js +1 -1
- package/dist/blocks/share-links/index.d.ts +15 -8
- package/dist/blocks/share-links/index.js +9 -6
- package/dist/blocks/shared-signals/index.d.ts +8 -8
- package/dist/blocks/shared-signals/index.js +8 -8
- package/dist/blocks/signing-keys/index.d.ts +5 -5
- package/dist/blocks/signing-keys/index.js +48 -22
- package/dist/blocks/sla/index.d.ts +9 -9
- package/dist/blocks/sla/index.js +6 -6
- package/dist/blocks/sso/index.d.ts +7 -7
- package/dist/blocks/sso/index.js +5 -5
- package/dist/blocks/state-machine/index.d.ts +5 -5
- package/dist/blocks/state-machine/index.js +3 -3
- package/dist/blocks/tags/index.d.ts +3 -3
- package/dist/blocks/tags/index.js +3 -3
- package/dist/blocks/tags/react/index.d.ts +1 -1
- package/dist/blocks/tags/react/index.js +3 -3
- package/dist/blocks/tags/react/server.d.ts +1 -1
- package/dist/blocks/tags/solid/index.d.ts +2 -2
- package/dist/blocks/tags/solid/index.js +1 -1
- package/dist/blocks/tags/svelte/index.d.ts +2 -2
- package/dist/blocks/tags/svelte/index.js +1 -1
- package/dist/blocks/tags/vue/index.d.ts +2 -2
- package/dist/blocks/tags/vue/index.js +1 -1
- package/dist/blocks/targets/index.d.ts +7 -7
- package/dist/blocks/targets/index.js +6 -6
- package/dist/blocks/teams/index.d.ts +7 -7
- package/dist/blocks/teams/index.js +4 -4
- package/dist/blocks/templates/index.d.ts +10 -10
- package/dist/blocks/templates/index.js +8 -8
- package/dist/blocks/time-tracking/index.d.ts +9 -9
- package/dist/blocks/time-tracking/index.js +9 -9
- package/dist/blocks/trash/index.d.ts +8 -8
- package/dist/blocks/trash/index.js +5 -5
- package/dist/blocks/undo/index.d.ts +4 -4
- package/dist/blocks/undo/index.js +2 -2
- package/dist/blocks/undo/react/index.d.ts +1 -1
- package/dist/blocks/undo/react/server.d.ts +1 -1
- package/dist/blocks/undo/solid/index.d.ts +2 -2
- package/dist/blocks/undo/svelte/index.d.ts +2 -2
- package/dist/blocks/undo/vue/index.d.ts +2 -2
- package/dist/blocks/usage/index.d.ts +4 -4
- package/dist/blocks/usage/index.js +3 -3
- package/dist/blocks/usage/react/index.d.ts +1 -1
- package/dist/blocks/usage/react/index.js +2 -2
- package/dist/blocks/usage/react/server.d.ts +1 -1
- package/dist/blocks/usage/solid/index.d.ts +2 -2
- package/dist/blocks/usage/svelte/index.d.ts +2 -2
- package/dist/blocks/usage/vue/index.d.ts +2 -2
- package/dist/blocks/vercel-marketplace/index.d.ts +193 -0
- package/dist/blocks/vercel-marketplace/index.js +300 -0
- package/dist/blocks/versions/index.d.ts +13 -9
- package/dist/blocks/versions/index.js +19 -14
- package/dist/blocks/waitlist/index.d.ts +9 -9
- package/dist/blocks/waitlist/index.js +6 -6
- package/dist/blocks/webhooks/index.d.ts +16 -16
- package/dist/blocks/webhooks/index.js +17 -17
- package/dist/blocks/work-items/index.d.ts +10 -10
- package/dist/blocks/work-items/index.js +7 -7
- package/dist/blocks/workflow-builder/index.d.ts +9 -9
- package/dist/blocks/workflow-builder/index.js +3 -3
- package/dist/blocks/workflow-builder/react/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/react/index.js +3 -3
- package/dist/blocks/workflow-builder/solid/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/svelte/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/vue/index.d.ts +2 -2
- package/dist/blocks/workflows/index.d.ts +5 -5
- package/dist/blocks/workflows/index.js +2 -2
- package/dist/blocks/workflows/react/index.d.ts +2 -2
- package/dist/blocks/workflows/react/index.js +2 -2
- package/dist/blocks/workflows/solid/index.d.ts +2 -2
- package/dist/blocks/workflows/svelte/index.d.ts +2 -2
- package/dist/blocks/workflows/vue/index.d.ts +2 -2
- package/dist/{bookings-0XnhHNLM.js → bookings-DQ7P888X.js} +5 -5
- package/dist/{storage-api-Cx-1iWBd.d.ts → bucket-BBSNDFNH.d.ts} +219 -219
- package/dist/{build-Cx08LOT7.js → build-C-D_vn0U.js} +8 -3
- package/dist/{build-Cm0T5MVG.js → build-CT6SPZkI.js} +1 -1
- package/dist/{calendar-DcFrpSOy.js → calendar-eqyuQAoy.js} +7 -7
- package/dist/chat-sdk/index.d.ts +6 -6
- package/dist/chat-sdk/index.js +3 -3
- package/dist/chat-sdk/react/index.d.ts +2 -2
- package/dist/chat-sdk/react/server.d.ts +2 -2
- package/dist/cli/{add-B0zoJUYX.js → add-B5V6uokQ.js} +6 -6
- package/dist/cli/{add-Bd5M6uEZ.js → add-BcOHumvq.js} +2 -2
- package/dist/cli/add-DzRJEHzD.js +1 -0
- package/dist/cli/adopt-DDy50yz9.js +1 -0
- package/dist/cli/{adopt-CebmlHL-.js → adopt-Ht34C3QD.js} +28 -9
- package/dist/cli/{agent-CCt_aXpJ.js → agent-CCrTYK3W.js} +1 -1
- package/dist/cli/{apply-Dxk8AUNU.js → apply-4BmTvj2A.js} +40 -10
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{blocks-Bzz326nn.js → blocks-bBI050w6.js} +1 -1
- package/dist/cli/{blocks-Dq25D80b.js → blocks-jIvPqPtw.js} +1 -1
- package/dist/cli/{cache-Cx6qlRDR.js → cache-CVJmPGpd.js} +9 -4
- package/dist/cli/{catalog-Di15TkM2.js → catalog-Cm6BtquM.js} +2 -1
- package/dist/cli/{codemod-woL4cVe0.js → codemod-vsknM1Ue.js} +2 -2
- package/dist/cli/{command-CK9Cn8HV.js → command-DLCZeHdo.js} +40 -0
- package/dist/cli/{completion-CWoDmFZr.js → completion-BAm8SwGQ.js} +2 -2
- package/dist/cli/{completion-BO5UK6bG.js → completion-CEZ-c3ja.js} +1 -1
- package/dist/cli/{completion-J3dqnNoW.js → completion-D2BObVth.js} +2 -2
- package/dist/cli/{config-CLHpTk9Y.js → config-C4e_RrmL.js} +54 -12
- package/dist/cli/{config-MuKY9kUj.js → config-CC5DXgKX.js} +1 -1
- package/dist/cli/{config-C1d-mbUA.js → config-CynctXbc.js} +1 -1
- package/dist/cli/db-BxMRcHrY.js +90 -0
- package/dist/cli/{detect-DYDUBLU4.js → detect-DQsVeBHg.js} +2 -2
- package/dist/cli/{doctor-SGw36h1D.js → doctor-D47sFjh9.js} +253 -376
- package/dist/cli/{emit-ZAYeh4Yn.js → emit-56LAG_Px.js} +32 -7
- package/dist/cli/{env-CVXvJoLP.js → env--JFvv45k.js} +3 -3
- package/dist/cli/{env-DJ4ZaJpe.js → env-B7TWPEt0.js} +1 -1
- package/dist/cli/{env-DMw_MBe5.js → env-C8R7Nf0a.js} +94 -2
- package/dist/cli/env-D-O91RK1.js +1 -0
- package/dist/cli/{gen-B344S1Oy.js → gen-D2E8osBE.js} +11 -11
- package/dist/cli/index.d.ts +8 -4
- package/dist/cli/index.js +10 -9
- package/dist/cli/{init-B1dL-RZL.js → init-Cx7DDAdQ.js} +15 -8
- package/dist/cli/{introspect-BPcFi8ow.js → introspect-Ck7aa6v0.js} +3 -3
- package/dist/cli/{keys-jsxCNJdz.js → keys-6ufnWeZl.js} +2 -2
- package/dist/cli/live-CLxJNC0r.js +329 -0
- package/dist/cli/mcp-BVWvEoKo.js +237 -0
- package/dist/cli/{metadata-CxBZo4KM.js → metadata-BRywyPvv.js} +2 -2
- package/dist/cli/migration-safety-DjVpz2D6.js +206 -0
- package/dist/cli/{module-migration-YFFdWC5X.js → module-migration-CPhuiY8C.js} +2 -2
- package/dist/cli/{moved-D9OT_Uyy.js → moved-BmtFuMK3.js} +1 -1
- package/dist/cli/{parse-DE59XyWt.js → parse-ksnw4phM.js} +1 -1
- package/dist/cli/{preset-DmcC4nWE.js → preset-B1o6KbFp.js} +1 -1
- package/dist/cli/{run-DaHfUUO9.js → run-Bb8Nn8Ax.js} +59 -70
- package/dist/cli/{run-CM_2g6KQ.js → run-nX5ffQM_.js} +44 -42
- package/dist/cli/{scaffold-CFdDq36-.js → scaffold-DcXr4z7M.js} +4 -4
- package/dist/cli/{scaffold-Dsjr7sOT.js → scaffold-fO-FJGoO.js} +1 -1
- package/dist/cli/{seed-DldDdXWO.js → seed-BmOC6_iz.js} +7 -6
- package/dist/cli/seed-C_BmN498.js +1 -0
- package/dist/cli/shared-DKLuA1Tp.js +145 -0
- package/dist/cli/{skills-v34NDb2D.js → skills-CUx7S0bk.js} +1 -1
- package/dist/cli/{snapshot-DAxLi4hO.js → snapshot-ClgWGd-b.js} +4 -4
- package/dist/cli/{source-args-0I9zylYy.js → source-args-BDiUhsH8.js} +8 -2
- package/dist/cli/{spec-CaaSOYZS.js → spec-CM7iyRnE.js} +5 -5
- package/dist/cli/{spec-De0cfceR.js → spec-DjHpWZJM.js} +1 -1
- package/dist/cli/{sql-0I1EQ3JG.js → sql-C4ymac2h.js} +2 -2
- package/dist/cli/{sql-DDLWwzh9.js → sql-ybcjbz20.js} +5 -5
- package/dist/cli/{stack-status-CRanl-CN.js → stack-status-Cb_D79ZR.js} +2 -2
- package/dist/cli/{supabase-toml-DjLgBYEo.js → supabase-toml-BC5sNVKU.js} +1 -1
- package/dist/cli/{sync-DFx-6t5n.js → sync-DBvknfOK.js} +2 -2
- package/dist/cli/{topics-GJuIDwlY.js → topics-BBE1-Vrg.js} +1 -1
- package/dist/cli/{version-DNRW4DAP.js → version-CUKjFbNd.js} +1 -1
- package/dist/cli/{write-BS6F3Yvz.js → write-VZljwoTB.js} +25 -7
- package/dist/client/index.d.ts +6 -6
- package/dist/client/index.js +4 -4
- package/dist/client/native/index.d.ts +6 -6
- package/dist/client/native/index.js +4 -4
- package/dist/{client-DjTRlN3a.d.ts → client-5YAtJjyT.d.ts} +2 -2
- package/dist/{client-BAcILZOf.d.ts → client-9ZOirdtr.d.ts} +9 -9
- package/dist/{client-CFdMJ1h9.d.ts → client-B4a7f5ma.d.ts} +8 -8
- package/dist/{client-BVZtq_rQ.d.ts → client-B9_8yzct.d.ts} +2 -2
- package/dist/{client-BOT2KVIp.js → client-BDO6i2Oe.js} +2 -2
- package/dist/{client-LLmgiCwJ.d.ts → client-BNy-K6XT.d.ts} +3 -3
- package/dist/{client-ClZ0D-if.d.ts → client-BXv09wO1.d.ts} +5 -5
- package/dist/{client-D5CZ2a34.d.ts → client-B_vHBwB6.d.ts} +12 -12
- package/dist/{client-Co6BPmvr.d.ts → client-Bovn6-M9.d.ts} +7 -7
- package/dist/{client-BxnLb9bz.d.ts → client-BqoYuTK3.d.ts} +3 -3
- package/dist/{client-VvY0K3wr.d.ts → client-C3rmP3b0.d.ts} +6 -6
- package/dist/{client-hyP_nS5R.d.ts → client-CBQ2TV0r.d.ts} +7 -7
- package/dist/{client-Lx3mlvKO.d.ts → client-CCGSn7m5.d.ts} +4 -4
- package/dist/{client-BUGIS__1.js → client-CFKONrrU.js} +6 -6
- package/dist/{client-CvITjt-9.js → client-CHR8IBNG.js} +10 -2
- package/dist/{client-CHmjaI0j.d.ts → client-CJT3xiuI.d.ts} +7 -7
- package/dist/{client-DdfSIZ3M.d.ts → client-CNh-pjkT.d.ts} +5 -5
- package/dist/{client-e-hFkLUf.d.ts → client-CXTDJCIs.d.ts} +3 -3
- package/dist/{client-CWs3X4g1.js → client-C_-NZRrg.js} +1 -1
- package/dist/{client-CilSKXNu.js → client-CcPxbHeT.js} +2 -2
- package/dist/{client-ysNShuJZ.d.ts → client-CeH7vd-g.d.ts} +2 -2
- package/dist/{client-PGRk3DGz.js → client-CosiUrUb.js} +1 -1
- package/dist/{client-DAHsEOVV.d.ts → client-CrZKZVbb.d.ts} +4 -4
- package/dist/{client-CiGjS6us.js → client-D7T7OLiw.js} +4 -4
- package/dist/{client-WHeWTNVL.d.ts → client-DLz68Qga.d.ts} +2 -2
- package/dist/{client-Cmensu7l.d.ts → client-DarDYaQj.d.ts} +9 -9
- package/dist/{client-CzI4QpG3.d.ts → client-DbxvLC9Y.d.ts} +2 -2
- package/dist/{client-Tc47rlSe.d.ts → client-Dft5Vq6m.d.ts} +46 -8
- package/dist/{client-BYaOGCOG.js → client-DyfWYU8S.js} +2 -2
- package/dist/{client-C9QrWrnt.js → client-Dz1jWDA2.js} +3 -3
- package/dist/{client-01MAuqzW.js → client-DzTtOVRR.js} +2 -2
- package/dist/{client-xkSCp9hN.d.ts → client-GdJH4XJM.d.ts} +4 -4
- package/dist/{client-B7QVIrJS.d.ts → client-QvuCfO4b.d.ts} +13 -13
- package/dist/{client-CoVGPi0c.js → client-UnM3e32l.js} +2 -2
- package/dist/{client-DG7FwgZD.js → client-arq4daO_.js} +1 -1
- package/dist/{client-DIrCmOXz.d.ts → client-cWUWrgis.d.ts} +6 -6
- package/dist/{client-Cdedx_lw.js → client-eCDPjOMo.js} +6 -6
- package/dist/{client-WAdEBBrH.d.ts → client-eCtwzCbQ.d.ts} +5 -5
- package/dist/{client-iDLLvGR4.d.ts → client-ehjQ2tIT.d.ts} +3 -3
- package/dist/{client-i8glKhxh.js → client-iaFm0aVf.js} +1 -1
- package/dist/{cloud-event-5rCEzIgK.d.ts → cloud-event-DXkNoI6v.d.ts} +1 -1
- package/dist/{codecs-YAekuQ08.js → codecs-D-rpDifG.js} +3 -3
- package/dist/{codecs-Bm46sVxr.d.ts → codecs-RwFNK8Jh.d.ts} +2 -2
- package/dist/{codegen-DeoSt1mi.d.ts → codegen-C64C0NZG.d.ts} +108 -14
- package/dist/{comments-D7sbd0xG.js → comments-CV5O8q50.js} +5 -5
- package/dist/commerce/index.d.ts +2 -2
- package/dist/commerce/index.js +6 -6
- package/dist/{compiler-BVxepAY0.d.ts → compiler-D_Gjpw_O.d.ts} +2 -2
- package/dist/{compose-Djntdacs.js → compose-CP0ss-cQ.js} +3 -3
- package/dist/{composite-djtGy6bz.d.ts → composite-B1Mmo4TU.d.ts} +13 -13
- package/dist/{composite-M6zPs1Xm.js → composite-BFatHqOU.js} +3 -3
- package/dist/config/index.d.ts +6 -6
- package/dist/config/index.js +4 -4
- package/dist/{config-C4MozTD7.js → config-DHhQmmuD.js} +26 -1
- package/dist/{config-BA1K4OPk.js → config-NQmw_wsk.js} +4 -3
- package/dist/{connector-Cp8CqssJ.d.ts → connector-D9NMNkv0.d.ts} +1 -1
- package/dist/{connectors-CjD-R2ks.d.ts → connectors-CR9FJGzV.d.ts} +7 -7
- package/dist/{context-BDDgjoxz.js → context-BiwgsycK.js} +1 -1
- package/dist/{context-1sSWcd7_.d.ts → context-Cv3KlxWY.d.ts} +15 -3
- package/dist/{controller-D845qKh2.d.ts → controller-BBXX1RMw.d.ts} +1 -1
- package/dist/cors-h_v7TPxl.js +24 -0
- package/dist/cors-kLq6VM06.d.ts +15 -0
- package/dist/create/index.d.ts +597 -0
- package/dist/create/index.js +2049 -0
- package/dist/create/lite/index.d.ts +85 -0
- package/dist/create/lite/index.js +126 -0
- package/dist/create/supabase/index.d.ts +68 -0
- package/dist/create/supabase/index.js +312 -0
- package/dist/credentials/index.d.ts +5 -5
- package/dist/credentials/index.js +8 -8
- package/dist/{cron-CUaKTjWC.js → cron-BHdXZFsJ.js} +1 -1
- package/dist/{cron-route-CoL-By8Z.js → cron-route-mTvWhork.js} +3 -3
- package/dist/{define-B2ln373W.js → define-Bu1v781m.js} +82 -16
- package/dist/{define-DxHHbNEb.d.ts → define-M_r1d2AT.d.ts} +96 -43
- package/dist/{define-block-CLZMEFeK.d.ts → define-block-CPyJ95rq.d.ts} +7 -7
- package/dist/{delegation-Dt8hMJWu.js → delegation-B7uNnz6z.js} +2 -2
- package/dist/{documents-CWn2mtYf.d.ts → documents-CqtVr2fg.d.ts} +4 -4
- package/dist/edge/index.d.ts +27 -38
- package/dist/edge/index.js +12 -32
- package/dist/elysia/index.d.ts +1 -1
- package/dist/elysia/index.js +1 -1
- package/dist/{embeddings-C2S14foD.d.ts → embeddings-lTUwzvW4.d.ts} +1 -1
- package/dist/{ended-nIdGCHxk.d.ts → ended-DQmwYosO.d.ts} +2 -2
- package/dist/{entitlements-BvU5dLpW.js → entitlements-C8UvF1Rz.js} +3 -3
- package/dist/{entitlements-CbzCKalR.d.ts → entitlements-DgkeStXd.d.ts} +2 -2
- package/dist/env/index.d.ts +1 -1
- package/dist/env/index.js +6 -1
- package/dist/{envelope-CHYk5MXU.js → envelope-C4Z55LKW.js} +4 -4
- package/dist/{errors-8i6tSICm.js → errors-BV1SKTVs.js} +15 -1
- package/dist/{errors-PIpcoe4z.js → errors-D3BR8iUk.js} +2 -2
- package/dist/{escape-like-AUEPn-C5.d.ts → escape-like-B339PlP-.d.ts} +1 -1
- package/dist/eve/index.d.ts +5 -5
- package/dist/eve/index.js +2 -2
- package/dist/{eve-DUF70Vgi.d.ts → eve-C_Onyk_j.d.ts} +2 -2
- package/dist/events/index.d.ts +3 -3
- package/dist/{events-CTreRrgP.d.ts → events-P3raDX2E.d.ts} +3 -3
- package/dist/{executor-BXSHYyW2.js → executor-BiB0wMBA.js} +4 -4
- package/dist/{executor-DoE-5iM8.d.ts → executor-BnMC0lj3.d.ts} +2 -2
- package/dist/{executor-DKrZr3AC.d.ts → executor-CvsNcQsa.d.ts} +3 -3
- package/dist/{executor-D1kYY5BA.js → executor-CxGQiQN_.js} +3 -3
- package/dist/{executor-BBHgjUJu.d.ts → executor-D1hECPGG.d.ts} +1 -1
- package/dist/{executor-BINiCFNp.d.ts → executor-DfdC00xr.d.ts} +1 -1
- package/dist/expo/index.d.ts +11 -9
- package/dist/expo/index.js +42 -7
- package/dist/expo-sqlite/index.d.ts +3 -3
- package/dist/expo-sqlite/index.js +2 -2
- package/dist/{field-errors-CWXN_h_E.d.ts → field-errors-DmJICh93.d.ts} +7 -7
- package/dist/{filter-evaluate-CjcFq0RT.d.ts → filter-evaluate-BJcaL3o1.d.ts} +1 -1
- package/dist/{filter-query-BKmRYrTE.d.ts → filter-query-Bc_Qa8V_.d.ts} +1 -1
- package/dist/{flags-D_D1jAHB.d.ts → flags-6KK6Vqkr.d.ts} +3 -3
- package/dist/{flags-XAOsdNAc.js → flags-aUR7Rod6.js} +1 -1
- package/dist/flags-sdk/index.d.ts +1 -1
- package/dist/flags-sdk/index.js +2 -2
- package/dist/{options-BqO9GYig.js → form-definition-GVZTILhS.js} +13 -13
- package/dist/{framework-INbjMZX1.js → framework-Ch8bMmQY.js} +2 -2
- package/dist/{framework-DG5Bv39u.d.ts → framework-D6IFkuAg.d.ts} +7 -7
- package/dist/{function-contract-B4c0XuTU.d.ts → function-contract-DWqFl_QO.d.ts} +1 -1
- package/dist/{gateway-Cup00l0w.d.ts → gateway-Bq_tWwxE.d.ts} +4 -4
- package/dist/h3/index.d.ts +1 -1
- package/dist/h3/index.js +1 -1
- package/dist/h3/v1/index.d.ts +1 -1
- package/dist/h3/v1/index.js +1 -1
- package/dist/{hmac-DCud0myt.js → hmac-BgpThYQW.js} +2 -1
- package/dist/hono/index.d.ts +34 -25
- package/dist/hono/index.js +18 -12
- package/dist/{http-BF-V0CUF.js → http-C7trc6uN.js} +2 -2
- package/dist/{impersonation-CDeCzZP6.js → impersonation-DxU6yHJV.js} +1 -1
- package/dist/{inbox-3ql4phyr.d.ts → inbox-Du5aPwKB.d.ts} +4 -4
- package/dist/{index-BlqrGvb3.d.ts → index-BpyBH5O2.d.ts} +4 -4
- package/dist/{index-Brhm22eL.d.ts → index-Bq409YZn.d.ts} +1 -1
- package/dist/index-CEcDqDhc.d.ts +722 -0
- package/dist/{index-CrZitvSC.d.ts → index-CK0Sxx57.d.ts} +8 -8
- package/dist/{index-DygICr8c.d.ts → index-Csi8jD-m.d.ts} +3 -3
- package/dist/{index-CETRk4YO.d.ts → index-CxmVzT-3.d.ts} +5 -1
- package/dist/index-D8yhOz_4.d.ts +344 -0
- package/dist/{index-Bvw9r94Q.d.ts → index-DHReeV74.d.ts} +2 -2
- package/dist/{index-jhqhynmh.d.ts → index-DgobXyil.d.ts} +1 -1
- package/dist/{index-BkzNUPId.d.ts → index-F6XTTkC9.d.ts} +8 -8
- package/dist/{index-DfVXx4Ia.d.ts → index-k-rrfG1g.d.ts} +2 -2
- package/dist/{index-BIi8i6BO.d.ts → index-qCG78-Rf.d.ts} +4 -4
- package/dist/{index-Ej8XQ9w9.d.ts → index-wTnPJUhv.d.ts} +2 -2
- package/dist/index.d.ts +13 -13
- package/dist/index.js +10 -10
- package/dist/jwks-cache-C4rA69hD.js +49 -0
- package/dist/{jws-milwSg7E.js → jws-CwBB5QAT.js} +5 -3
- package/dist/{kit-D5S7KNFe.d.ts → kit-BeZX2pR_.d.ts} +4 -4
- package/dist/{kit-MUK34-ZG.js → kit-LTbHrWWD.js} +6 -6
- package/dist/{knowledge-CJ_Mm3ic.js → knowledge-BbdXOJvY.js} +4 -4
- package/dist/{knowledge-BXQ2-V0a.d.ts → knowledge-CRk1jOAJ.d.ts} +6 -6
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +47 -2
- package/dist/list/index.d.ts +3 -3
- package/dist/{list-query-PvP3pPGQ.d.ts → list-query-FhFXzObg.d.ts} +5 -5
- package/dist/management-D1gG89z2.d.ts +53 -0
- package/dist/mcp/index.d.ts +56 -31
- package/dist/mcp/index.js +142 -59
- package/dist/mcp/sdk/index.d.ts +17 -17
- package/dist/mcp/sdk/index.js +5 -5
- package/dist/{messages-Cx4ttLJJ.js → messages-D5nIfCCf.js} +2 -2
- package/dist/{options-BQ07tTYr.js → methods-7u6vSgz_.js} +4 -4
- package/dist/{mfa-DtflCXEt.d.ts → mfa-YzkRjNad.d.ts} +1 -1
- package/dist/{model-messages-CTu-6kBu.js → model-messages-CIdqdUtk.js} +1 -1
- package/dist/{money-codec-C_-K5ZUU.js → money-codec-C21MWw50.js} +2 -2
- package/dist/nestjs/index.d.ts +2 -2
- package/dist/nestjs/index.js +1 -1
- package/dist/next/index.d.ts +34 -29
- package/dist/next/index.js +14 -14
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +1 -1
- package/dist/{onboarding-BZvLLPaY.js → onboarding-Du6kCmhF.js} +2 -2
- package/dist/openapi/index.d.ts +2 -2
- package/dist/openapi/index.js +2 -2
- package/dist/{operations-C9-UcReN.d.ts → operations-DQCWqkt3.d.ts} +1 -1
- package/dist/{options-CZk_fbbg.js → options-BCrqe3HH.js} +2 -1
- package/dist/options-CEMawFrr.js +5 -0
- package/dist/options-RKYdmIdV.js +5 -0
- package/dist/{options-CbSOj53r.d.ts → options-ZQzNKKBS.d.ts} +1 -1
- package/dist/{organizations-Cw7om8uk.js → organizations-CO2qg44D.js} +6 -6
- package/dist/orpc/index.d.ts +18 -18
- package/dist/orpc/index.js +7 -7
- package/dist/otel/index.d.ts +2 -2
- package/dist/otel/index.js +5 -5
- package/dist/{outbox-BTeqjbum.d.ts → outbox-njgoVzFA.d.ts} +6 -6
- package/dist/{payments-h45bswA-.js → payments-CzjCdIcz.js} +1 -1
- package/dist/{plugin-CDLJRFFg.d.ts → plugin-D-95Q0w0.d.ts} +3 -3
- package/dist/plugins/actor/index.d.ts +1 -1
- package/dist/plugins/actor/index.js +1 -1
- package/dist/plugins/rules/index.d.ts +2 -2
- package/dist/plugins/rules/index.js +1 -1
- package/dist/plugins/soft-delete/index.d.ts +3 -3
- package/dist/plugins/soft-delete/index.js +2 -2
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +2 -2
- package/dist/plugins/timestamps/index.d.ts +1 -1
- package/dist/plugins/timestamps/index.js +1 -1
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +3 -3
- package/dist/{pool-CwOCsX9e.d.ts → pool-cM3rpOQr.d.ts} +7 -4
- package/dist/{pool-errors-GMjlCN0d.js → pool-errors-CGqvTQOC.js} +2 -2
- package/dist/{ports-DAdQyjZz.d.ts → ports-DCAcG26M.d.ts} +2 -2
- package/dist/{ports-Ca63W4cW.d.ts → ports-DGe1vzF2.d.ts} +10 -10
- package/dist/{ports-DGK3KTDH.js → ports-aALjot-D.js} +11 -7
- package/dist/postgres/index.d.ts +5 -5
- package/dist/postgres/index.js +11 -5
- package/dist/{postgrest-Cw9Bs5gm.d.ts → postgrest-CjnO1hbr.d.ts} +1 -1
- package/dist/powersync/index.d.ts +4 -4
- package/dist/powersync/index.js +4 -4
- package/dist/powersync/react/index.d.ts +3 -3
- package/dist/powersync/react/index.js +1 -1
- package/dist/preset/index.d.ts +4 -352
- package/dist/preset/index.js +4 -564
- package/dist/preset-Cqwlwx6G.js +648 -0
- package/dist/{problem-CEjyhV5T.d.ts → problem-DCDIQiTA.d.ts} +1 -1
- package/dist/{problem-pIiL3WbE.js → problem-JRCohp1j.js} +1 -1
- package/dist/{provider-DKh2xFZb.js → provider-C-Ti38J6.js} +1 -1
- package/dist/{provider-9gBq9W6k.d.ts → provider-CNs0Jx0I.d.ts} +2 -2
- package/dist/{push-token-asrmi7-6.d.ts → push-token-D2sDxSNN.d.ts} +1 -1
- package/dist/query/index.d.ts +2 -2
- package/dist/{rank-result-Dngpt2n5.d.ts → rank-result-BcYfDA0x.d.ts} +1 -1
- package/dist/{rank-result-DS8IoLup.js → rank-result-DtQuIvob.js} +2 -2
- package/dist/{rate-limit-BtbddDnE.js → rate-limit-DVZ7qIzW.js} +1 -1
- package/dist/{rate-limit--QSiFA6D.js → rate-limit-I3AncmM8.js} +8 -8
- package/dist/{rate-limit-C88MEAOm.d.ts → rate-limit-c6c1mB6R.d.ts} +2 -2
- package/dist/react/index.d.ts +8 -8
- package/dist/react/index.js +2 -2
- package/dist/react/native/index.d.ts +1 -1
- package/dist/react/native/index.js +1 -1
- package/dist/react/server.d.ts +9 -9
- package/dist/react/server.js +2 -2
- package/dist/react/session.d.ts +2 -2
- package/dist/{react-CKXUkwPx.js → react-DzukE6Wp.js} +3 -3
- package/dist/react-router/index.d.ts +11 -11
- package/dist/react-router/index.js +6 -6
- package/dist/{read-set-GEb-i0On.js → read-set-DeesfeL_.js} +2 -2
- package/dist/realtime/index.d.ts +7 -7
- package/dist/realtime/index.js +2 -2
- package/dist/{refusal-br4Ma9Cf.js → refusal-CFpfmjcS.js} +4 -4
- package/dist/{refusal-oD3ISM9h.d.ts → refusal-CufncwaN.d.ts} +1 -1
- package/dist/{resolve-w9EpHzuM.d.ts → resolve-Bqb8TMTt.d.ts} +4 -4
- package/dist/{resolve-CAR9oaKW.js → resolve-f8QNuYI3.js} +5 -4
- package/dist/{resource-C8r5xGqY.js → resource-Bdkqi8jo.js} +6 -6
- package/dist/{resource-B4ka8dDH.d.ts → resource-DYEtc-KN.d.ts} +1 -1
- package/dist/{resource-execute-D0yQ-8WR.d.ts → resource-execute-ruP2L1op.d.ts} +2 -2
- package/dist/{resource-types-D2vEQVXI.d.ts → resource-types-CGr0BbL-.d.ts} +6 -6
- package/dist/{resources-BklF-rjz.d.ts → resources-BiQpsM6O.d.ts} +2 -2
- package/dist/{resources-BlZdLsWQ.js → resources-Ck7itNeX.js} +3 -3
- package/dist/{respond-DdhZ9Wbn.js → respond-Bhp3G__q.js} +5 -5
- package/dist/{respond-C7I8kLK_.d.ts → respond-CEBC6KUX.d.ts} +3 -3
- package/dist/{result-Cj3yWhjH.d.ts → result-BREt7qOh.d.ts} +15 -1
- package/dist/{result-BlgnMB0H.js → result-DIeYscA3.js} +7 -1
- package/dist/{rrule-zBh3CA1r.js → rrule-Cw4x4Pf_.js} +1 -1
- package/dist/{rules-B0-3Iosu.js → rules-BiQgmZ_U.js} +32 -6
- package/dist/runtime-BOXURhEW.js +45 -0
- package/dist/{sales-lines-BAk8In-Z.js → sales-lines-CQ1iC6QM.js} +3 -3
- package/dist/{sales-shared-SblIgCgI.js → sales-shared-CDSytDEn.js} +2 -2
- package/dist/{search-B6h03cAx.js → search-ZP13UTT4.js} +3 -3
- package/dist/server/index.d.ts +26 -26
- package/dist/server/index.js +19 -64
- package/dist/{server-types-OohhIQb2.d.ts → server-types-BKN_R4Ws.d.ts} +45 -27
- package/dist/{session-DiWHtYrO.d.ts → session-CwpfitmI.d.ts} +11 -11
- package/dist/{settings-BXFn9zpS.js → settings-BiHDFglz.js} +5 -5
- package/dist/{shared-DbO3Dfms.js → shared-C9zvURqC.js} +1 -1
- package/dist/{shared-as0EG51f.js → shared-D5Djh43x.js} +1 -1
- package/dist/{sign-in-D0xN6E_l.js → sign-in-z2BaBdps.js} +10 -3
- package/dist/{signatures-BMdJ7neI.d.ts → signatures-BXlDXV3D.d.ts} +1 -1
- package/dist/{signatures-B41ApWXA.js → signatures-CeIoAelK.js} +5 -5
- package/dist/{signers-CXt_wA9S.d.ts → signers-BwKV-9S6.d.ts} +6 -6
- package/dist/{signing-keys-Bq9mMCTh.d.ts → signing-keys-v2MRYkDF.d.ts} +20 -5
- package/dist/solid/index.d.ts +8 -8
- package/dist/solid/index.js +1 -1
- package/dist/{solid-controller-DqlvYFZa.d.ts → solid-controller-Uqi5ef6z.d.ts} +1 -1
- package/dist/solid-start/index.d.ts +11 -11
- package/dist/solid-start/index.js +5 -5
- package/dist/spec/index.d.ts +3 -3
- package/dist/spec/index.js +3 -3
- package/dist/sql/index.d.ts +5 -709
- package/dist/sql/index.js +5 -86238
- package/dist/{sql-DJrXG-3Z.js → sql-BPKRNutj.js} +3 -3
- package/dist/sql-DCfCbS2j.js +88660 -0
- package/dist/{sso-BDva_-4y.js → sso-BaU_6ePE.js} +4 -4
- package/dist/{sso-BN0LnMqE.d.ts → sso-Bu0mVh0V.d.ts} +4 -4
- package/dist/ssr/index.d.ts +4 -4
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-B5fe2gnW.js → standard-B1BigegP.js} +2 -2
- package/dist/{standard-C3_AAF3g.d.ts → standard-BcUQuUgu.d.ts} +1 -1
- package/dist/{stats-D6vkb89f.js → stats-Di5VAsYU.js} +4 -4
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +6 -6
- package/dist/{store-B5qYKsTh.d.ts → store-B18bIvKc.d.ts} +1 -1
- package/dist/streams/index.d.ts +3 -3
- package/dist/streams/index.js +3 -3
- package/dist/streams/redis/index.d.ts +1 -1
- package/dist/streams/redis/index.js +2 -2
- package/dist/{subject-readers-fxP5wu0s.d.ts → subject-readers-BNQzBDN9.d.ts} +2 -2
- package/dist/{subject-readers-DiePmaYP.js → subject-readers-BpwUFJtp.js} +1 -1
- package/dist/{subjects-z8VWA_lF.d.ts → subjects-DP-fvFkk.d.ts} +8 -0
- package/dist/{support-BsKkvA92.js → support-BAhTqI7y.js} +8 -8
- package/dist/{support-view-BbcZR7Io.d.ts → support-view-IRnDLuGN.d.ts} +1 -1
- package/dist/svelte/index.d.ts +7 -7
- package/dist/svelte/index.js +1 -1
- package/dist/{svelte-controller-DxxHEHxD.d.ts → svelte-controller-BQOIXWEw.d.ts} +1 -1
- package/dist/sveltekit/index.d.ts +13 -13
- package/dist/sveltekit/index.js +7 -7
- package/dist/{tags-Dw8vKkcI.d.ts → tags-AUpl4Ob9.d.ts} +1 -1
- package/dist/{tags-PaG0Ns_9.js → tags-BqgaxCnv.js} +5 -5
- package/dist/tanstack-db/index.d.ts +2 -2
- package/dist/tanstack-db/supabase/index.d.ts +2 -2
- package/dist/tanstack-start/index.d.ts +11 -11
- package/dist/tanstack-start/index.js +5 -5
- package/dist/{tax-DDZUB_oc.d.ts → tax-DMWDUzKt.d.ts} +2 -2
- package/dist/{tax-D_kSCdWU.js → tax-wm9g2mD2.js} +2 -2
- package/dist/{tee-Bsisfd7t.js → tee-Cw-iJAWL.js} +1 -1
- package/dist/{template-DdgYjIZ5.js → template-Dw3dTmKe.js} +1 -1
- package/dist/{temporal-required-DqRzr7i0.js → temporal-required-nfZ87U-0.js} +1 -1
- package/dist/{tenant-DdmVhsff.d.ts → tenant-BNp3kBAG.d.ts} +2 -2
- package/dist/testing/index.d.ts +133 -57
- package/dist/testing/index.js +252 -164
- package/dist/{topic-cMS7UtM1.d.ts → topic-1WTkDnPd.d.ts} +46 -18
- package/dist/{topic-ByDz9edV.js → topic-mee21pux.js} +112 -25
- package/dist/{types-6oiy6rIa.d.ts → types-B4zhT6dq.d.ts} +5 -5
- package/dist/{types-CdP0z5tS.d.ts → types-BEEFkNFY.d.ts} +7 -7
- package/dist/{types-vaoP9S9_.d.ts → types-Bq64h5nY.d.ts} +25 -11
- package/dist/{types-YfwpIE-d.d.ts → types-BrpW5ixT.d.ts} +14 -1
- package/dist/{types-D0W4fnsc.d.ts → types-DDQ-Rsep.d.ts} +5 -5
- package/dist/types-DGHfTW8_.d.ts +9 -0
- package/dist/{types-pNY_UpDs.d.ts → types-DO9xWsGC.d.ts} +6 -6
- package/dist/{undo-CEGIRkPA.js → undo-B5LgpGLy.js} +4 -4
- package/dist/{undo-DGo0skyO.d.ts → undo-BsdYRox7.d.ts} +3 -3
- package/dist/{usage-DM2rzczj.d.ts → usage-C504GF55.d.ts} +23 -5
- package/dist/{usage-CdlfuS3i.js → usage-DdqT13_X.js} +14 -3
- package/dist/{vault-tOkPLnMB.d.ts → vault-DR2-zOjz.d.ts} +3 -3
- package/dist/vercel-connect/index.d.ts +1 -1
- package/dist/vercel-connect/index.js +2 -2
- package/dist/{verify-D63A2ALE.d.ts → verify-BucYsoKq.d.ts} +4 -4
- package/dist/{verify-EQcC3Khp.js → verify-DnU-uWU2.js} +5 -5
- package/dist/{version-D87ZteKy.js → version-TXpQEfh1.js} +1 -1
- package/dist/{view-Dv0A949a.d.ts → view-Bf7e07rQ.d.ts} +3 -3
- package/dist/{view-DZ63nqwt.js → view-CYX1wsgp.js} +3 -3
- package/dist/vue/index.d.ts +8 -8
- package/dist/vue/index.js +1 -1
- package/dist/{vue-controller-HPfMTDa2.d.ts → vue-controller-Cav6Wt_r.d.ts} +1 -1
- package/dist/{watch-DT_B3CnJ.js → watch-BAuIzC2r.js} +1 -1
- package/dist/{watch-DDuWYv0Y.d.ts → watch-ry70AEm6.d.ts} +6 -6
- package/dist/{watch-topic-EFpOIIDE.d.ts → watch-topic-DWHy63ZJ.d.ts} +1 -1
- package/dist/{wire-DEY0ajW9.js → wire-BCJxCtHS.js} +2 -2
- package/dist/{workflow-builder-OrglbXUh.js → workflow-builder-CynLqc6H.js} +28 -12
- package/dist/workflow-sdk/builder/index.d.ts +3 -3
- package/dist/workflow-sdk/builder/index.js +1 -1
- package/dist/workflow-sdk/index.d.ts +1 -1
- package/dist/workflow-sdk/index.js +1 -1
- package/dist/workflow-sdk/world/index.d.ts +1 -1
- package/dist/workflow-sdk/world/index.js +6 -6
- package/dist/{workflow-sdk-q8cLwW1K.d.ts → workflow-sdk-DM7T3sF4.d.ts} +3 -3
- package/dist/{workflow-sdk-BZ6qsRlY.js → workflow-sdk-QnnzIQRc.js} +2 -2
- package/dist/{workflow-sdk-world-DPMdBfzn.js → workflow-sdk-world-QzcxaaCD.js} +1 -1
- package/dist/{workflows-DFQeXDAI.d.ts → workflows-DQBCzrHC.d.ts} +4 -4
- package/dist/{workflows-C-OvZpeg.js → workflows-H9qJge3f.js} +5 -5
- package/dist/yjs/index.d.ts +3 -3
- package/dist/yjs/index.js +3 -3
- package/package.json +36 -15
- package/schemas/config-v1.json +226 -9
- package/schemas/doctor-report-v1.json +10 -0
- package/schemas/snapshot-v2.json +4 -0
- package/skills/better-supabase/SKILL.md +1 -0
- package/skills/better-supabase/references/ui-recipes.md +683 -11
- package/dist/cli/add-CT6p5psO.js +0 -1
- package/dist/cli/adopt-C9jl8z0h.js +0 -1
- package/dist/cli/env-D3gZ-OHj.js +0 -1
- package/dist/cli/seed-DtRFysBe.js +0 -1
- package/dist/{client-b2_GjzzD.js → client-BGnJ5WJi.js} +1 -1
|
@@ -17267,7 +17267,7 @@ export function TeamPicker({
|
|
|
17267
17267
|
|
|
17268
17268
|
## Record grid
|
|
17269
17269
|
|
|
17270
|
-
An app table as a data grid with search, filters, saved views and bulk actions on the selected rows. It loads its data on the server through the block's client; the [saved-views block](https://bettersupabase.com/blocks/saved-views) must be installed (`npx better-supabase add saved-views`). Page: https://bettersupabase.com/recipes/record-grid.
|
|
17270
|
+
An app table as a data grid with search, filters, saved views and bulk actions on the selected rows, including Set field through `appTables.set`. It loads its data on the server through the block's client; the [saved-views block](https://bettersupabase.com/blocks/saved-views) must be installed (`npx better-supabase add saved-views`). Page: https://bettersupabase.com/recipes/record-grid.
|
|
17271
17271
|
|
|
17272
17272
|
Web, with shadcn components:
|
|
17273
17273
|
|
|
@@ -17537,6 +17537,170 @@ function SaveTaskViewDialog({ query }: { query: TaskQuery }) {
|
|
|
17537
17537
|
);
|
|
17538
17538
|
}
|
|
17539
17539
|
|
|
17540
|
+
const UNASSIGNED = "unassigned";
|
|
17541
|
+
|
|
17542
|
+
type SetField = "due_on" | "assignee_id";
|
|
17543
|
+
|
|
17544
|
+
/**
|
|
17545
|
+
* Sets one field on the selected tasks with the bulk block's
|
|
17546
|
+
* `appTables.set`. An empty value clears the field.
|
|
17547
|
+
*/
|
|
17548
|
+
function SetFieldDialog({
|
|
17549
|
+
ids,
|
|
17550
|
+
members,
|
|
17551
|
+
onDone,
|
|
17552
|
+
}: {
|
|
17553
|
+
ids: readonly string[];
|
|
17554
|
+
members: readonly MemberOption[];
|
|
17555
|
+
onDone: () => void;
|
|
17556
|
+
}) {
|
|
17557
|
+
const t = useExtracted("projects");
|
|
17558
|
+
const fieldId = useId();
|
|
17559
|
+
const errorMessage = useErrorMessage();
|
|
17560
|
+
const [open, setOpen] = useState(false);
|
|
17561
|
+
const [field, setField] = useState<SetField>("due_on");
|
|
17562
|
+
const [dueOn, setDueOn] = useState("");
|
|
17563
|
+
const [assignee, setAssignee] = useState(UNASSIGNED);
|
|
17564
|
+
|
|
17565
|
+
const set = useAction(setTaskField, {
|
|
17566
|
+
onSuccess: (count) => {
|
|
17567
|
+
toast.success(
|
|
17568
|
+
t("{count, plural, one {# task} other {# tasks}} changed", { count }),
|
|
17569
|
+
);
|
|
17570
|
+
setOpen(false);
|
|
17571
|
+
onDone();
|
|
17572
|
+
},
|
|
17573
|
+
onError: (error) => {
|
|
17574
|
+
toast.error(errorMessage(error));
|
|
17575
|
+
},
|
|
17576
|
+
});
|
|
17577
|
+
|
|
17578
|
+
const fields = [
|
|
17579
|
+
{ value: "due_on", label: t("Due date") },
|
|
17580
|
+
{ value: "assignee_id", label: t("Assignee") },
|
|
17581
|
+
] as const satisfies readonly { value: SetField; label: string }[];
|
|
17582
|
+
|
|
17583
|
+
const people = [
|
|
17584
|
+
{ value: UNASSIGNED, label: t("Unassigned") },
|
|
17585
|
+
...members.map((member) => ({ value: member.userId, label: member.name })),
|
|
17586
|
+
];
|
|
17587
|
+
|
|
17588
|
+
return (
|
|
17589
|
+
<Dialog open={open} onOpenChange={setOpen}>
|
|
17590
|
+
<DialogTrigger render={<Button size="sm" variant="outline" />}>
|
|
17591
|
+
{t("Set field")}
|
|
17592
|
+
</DialogTrigger>
|
|
17593
|
+
<DialogContent>
|
|
17594
|
+
<form
|
|
17595
|
+
className="grid gap-6"
|
|
17596
|
+
onSubmit={(event) => {
|
|
17597
|
+
event.preventDefault();
|
|
17598
|
+
void set.run({
|
|
17599
|
+
ids: [...ids],
|
|
17600
|
+
values:
|
|
17601
|
+
field === "due_on"
|
|
17602
|
+
? { due_on: dueOn === "" ? null : dueOn }
|
|
17603
|
+
: {
|
|
17604
|
+
assignee_id: assignee === UNASSIGNED ? null : assignee,
|
|
17605
|
+
},
|
|
17606
|
+
});
|
|
17607
|
+
}}
|
|
17608
|
+
>
|
|
17609
|
+
<DialogHeader>
|
|
17610
|
+
<DialogTitle>
|
|
17611
|
+
{t(
|
|
17612
|
+
"Set a field on {count, plural, one {# task} other {# tasks}}",
|
|
17613
|
+
{ count: ids.length },
|
|
17614
|
+
)}
|
|
17615
|
+
</DialogTitle>
|
|
17616
|
+
<DialogDescription>
|
|
17617
|
+
{t("Leave the value empty to clear the field.")}
|
|
17618
|
+
</DialogDescription>
|
|
17619
|
+
</DialogHeader>
|
|
17620
|
+
<div className="grid gap-4">
|
|
17621
|
+
<Field>
|
|
17622
|
+
<FieldLabel htmlFor={`${fieldId}-field`}>{t("Field")}</FieldLabel>
|
|
17623
|
+
<Select
|
|
17624
|
+
value={field}
|
|
17625
|
+
items={fields}
|
|
17626
|
+
onValueChange={(value) => {
|
|
17627
|
+
const picked = fields.find((each) => each.value === value);
|
|
17628
|
+
|
|
17629
|
+
if (picked) {
|
|
17630
|
+
setField(picked.value);
|
|
17631
|
+
}
|
|
17632
|
+
}}
|
|
17633
|
+
>
|
|
17634
|
+
<SelectTrigger id={`${fieldId}-field`} className="w-full">
|
|
17635
|
+
<SelectValue />
|
|
17636
|
+
</SelectTrigger>
|
|
17637
|
+
<SelectContent>
|
|
17638
|
+
{fields.map((each) => (
|
|
17639
|
+
<SelectItem key={each.value} value={each.value}>
|
|
17640
|
+
{each.label}
|
|
17641
|
+
</SelectItem>
|
|
17642
|
+
))}
|
|
17643
|
+
</SelectContent>
|
|
17644
|
+
</Select>
|
|
17645
|
+
</Field>
|
|
17646
|
+
{field === "due_on" ? (
|
|
17647
|
+
<Field>
|
|
17648
|
+
<FieldLabel htmlFor={`${fieldId}-due`}>
|
|
17649
|
+
{t("Due date")}
|
|
17650
|
+
</FieldLabel>
|
|
17651
|
+
<Input
|
|
17652
|
+
id={`${fieldId}-due`}
|
|
17653
|
+
type="date"
|
|
17654
|
+
value={dueOn}
|
|
17655
|
+
onChange={(event) => {
|
|
17656
|
+
setDueOn(event.target.value);
|
|
17657
|
+
}}
|
|
17658
|
+
/>
|
|
17659
|
+
</Field>
|
|
17660
|
+
) : (
|
|
17661
|
+
<Field>
|
|
17662
|
+
<FieldLabel htmlFor={`${fieldId}-assignee`}>
|
|
17663
|
+
{t("Assignee")}
|
|
17664
|
+
</FieldLabel>
|
|
17665
|
+
<Select
|
|
17666
|
+
value={assignee}
|
|
17667
|
+
items={people}
|
|
17668
|
+
onValueChange={(value) => {
|
|
17669
|
+
const person = people.find((each) => each.value === value);
|
|
17670
|
+
|
|
17671
|
+
if (person) {
|
|
17672
|
+
setAssignee(person.value);
|
|
17673
|
+
}
|
|
17674
|
+
}}
|
|
17675
|
+
>
|
|
17676
|
+
<SelectTrigger id={`${fieldId}-assignee`} className="w-full">
|
|
17677
|
+
<SelectValue />
|
|
17678
|
+
</SelectTrigger>
|
|
17679
|
+
<SelectContent>
|
|
17680
|
+
{people.map((person) => (
|
|
17681
|
+
<SelectItem key={person.value} value={person.value}>
|
|
17682
|
+
{person.label}
|
|
17683
|
+
</SelectItem>
|
|
17684
|
+
))}
|
|
17685
|
+
</SelectContent>
|
|
17686
|
+
</Select>
|
|
17687
|
+
</Field>
|
|
17688
|
+
)}
|
|
17689
|
+
</div>
|
|
17690
|
+
<DialogFooter>
|
|
17691
|
+
<DialogClose render={<Button type="button" variant="outline" />}>
|
|
17692
|
+
{t("Cancel")}
|
|
17693
|
+
</DialogClose>
|
|
17694
|
+
<Button type="submit" disabled={set.pending}>
|
|
17695
|
+
{t("Apply")}
|
|
17696
|
+
</Button>
|
|
17697
|
+
</DialogFooter>
|
|
17698
|
+
</form>
|
|
17699
|
+
</DialogContent>
|
|
17700
|
+
</Dialog>
|
|
17701
|
+
);
|
|
17702
|
+
}
|
|
17703
|
+
|
|
17540
17704
|
type GridRow = TaskRow & {
|
|
17541
17705
|
readonly projectName: string;
|
|
17542
17706
|
readonly assigneeName: string;
|
|
@@ -17568,7 +17732,8 @@ function StatusCell({ row }: GridCell) {
|
|
|
17568
17732
|
|
|
17569
17733
|
/**
|
|
17570
17734
|
* Tasks in a ReUI data grid. The checkboxes feed a bulk bar that sets the
|
|
17571
|
-
* status of the selected rows
|
|
17735
|
+
* status of the selected rows, sets another field through the bulk block,
|
|
17736
|
+
* or deletes them in one statement.
|
|
17572
17737
|
*/
|
|
17573
17738
|
export function TaskGrid({
|
|
17574
17739
|
rows,
|
|
@@ -17652,6 +17817,13 @@ export function TaskGrid({
|
|
|
17652
17817
|
{t("Mark {status}", { status: statusLabel(status) })}
|
|
17653
17818
|
</Button>
|
|
17654
17819
|
))}
|
|
17820
|
+
<SetFieldDialog
|
|
17821
|
+
ids={ids}
|
|
17822
|
+
members={members}
|
|
17823
|
+
onDone={() => {
|
|
17824
|
+
setSelection({});
|
|
17825
|
+
}}
|
|
17826
|
+
/>
|
|
17655
17827
|
<Button
|
|
17656
17828
|
size="sm"
|
|
17657
17829
|
variant="destructive"
|
|
@@ -17931,14 +18103,16 @@ export async function ProjectPage({
|
|
|
17931
18103
|
notFound();
|
|
17932
18104
|
}
|
|
17933
18105
|
|
|
17934
|
-
const [project, tasks, members, t, format, locale] =
|
|
17935
|
-
|
|
17936
|
-
|
|
17937
|
-
|
|
17938
|
-
|
|
17939
|
-
|
|
17940
|
-
|
|
17941
|
-
|
|
18106
|
+
const [project, tasks, members, history, t, format, locale] =
|
|
18107
|
+
await Promise.all([
|
|
18108
|
+
settle(() => getProject(id)),
|
|
18109
|
+
settle(() => getTasks({ q: "", status: null, projectId: id })),
|
|
18110
|
+
settle(() => getMemberOptions(organizationId)),
|
|
18111
|
+
settle(() => getProjectHistory(id)),
|
|
18112
|
+
getExtracted("projects"),
|
|
18113
|
+
getFormatter(),
|
|
18114
|
+
getLocale(),
|
|
18115
|
+
]);
|
|
17942
18116
|
|
|
17943
18117
|
if (project.kind !== "ok" || tasks.kind !== "ok" || members.kind !== "ok") {
|
|
17944
18118
|
return <ProjectLoadError title={t("The project didn't load")} />;
|
|
@@ -17982,7 +18156,10 @@ export async function ProjectPage({
|
|
|
17982
18156
|
count: tasks.data.length,
|
|
17983
18157
|
})}
|
|
17984
18158
|
</CardDescription>
|
|
17985
|
-
<CardAction>
|
|
18159
|
+
<CardAction className="flex items-center gap-2">
|
|
18160
|
+
{can(session, "imports.manage") ? (
|
|
18161
|
+
<TaskImportDialog projectId={record.id} />
|
|
18162
|
+
) : null}
|
|
17986
18163
|
<TaskFormDialog
|
|
17987
18164
|
projects={[{ id: record.id, name: record.name }]}
|
|
17988
18165
|
members={members.data}
|
|
@@ -18068,6 +18245,16 @@ export async function ProjectPage({
|
|
|
18068
18245
|
</dl>
|
|
18069
18246
|
</CardContent>
|
|
18070
18247
|
</Card>
|
|
18248
|
+
{history.kind === "ok" ? (
|
|
18249
|
+
<ProjectHistory
|
|
18250
|
+
projectId={record.id}
|
|
18251
|
+
versions={history.data}
|
|
18252
|
+
canSave={can(session, "versions.create")}
|
|
18253
|
+
canRestore={can(session, "versions.restore")}
|
|
18254
|
+
/>
|
|
18255
|
+
) : (
|
|
18256
|
+
<ProjectLoadError title={t("The history didn't load")} />
|
|
18257
|
+
)}
|
|
18071
18258
|
<Card size="sm" data-recipe="tag-input">
|
|
18072
18259
|
<CardHeader>
|
|
18073
18260
|
<CardTitle>{t("Tags")}</CardTitle>
|
|
@@ -18650,3 +18837,488 @@ export async function TaskGantt({
|
|
|
18650
18837
|
);
|
|
18651
18838
|
}
|
|
18652
18839
|
```
|
|
18840
|
+
|
|
18841
|
+
## Record history
|
|
18842
|
+
|
|
18843
|
+
Every version `subject.versions` kept of a row, with the fields each one changed and a restore per field. It loads its data on the server through the block's client; the [versions block](https://bettersupabase.com/blocks/versions) must be installed (`npx better-supabase add versions`). Page: https://bettersupabase.com/recipes/record-history.
|
|
18844
|
+
|
|
18845
|
+
Web, with shadcn components:
|
|
18846
|
+
|
|
18847
|
+
```bash
|
|
18848
|
+
npx shadcn add badge button card empty
|
|
18849
|
+
```
|
|
18850
|
+
|
|
18851
|
+
```tsx title="apps/examples/nextjs/src/features/projects/components/project-history.tsx"
|
|
18852
|
+
interface FieldChange {
|
|
18853
|
+
readonly field: ProjectHistoryField;
|
|
18854
|
+
readonly before: string | undefined;
|
|
18855
|
+
readonly after: string | undefined;
|
|
18856
|
+
}
|
|
18857
|
+
|
|
18858
|
+
/** The fields a version changed from the one before it; all of them for the first. */
|
|
18859
|
+
function changesOf(
|
|
18860
|
+
version: ProjectVersion,
|
|
18861
|
+
previous: ProjectVersion | undefined,
|
|
18862
|
+
): readonly FieldChange[] {
|
|
18863
|
+
return PROJECT_HISTORY_FIELDS.flatMap((field) => {
|
|
18864
|
+
const after = version.fields[field];
|
|
18865
|
+
const before = previous?.fields[field];
|
|
18866
|
+
|
|
18867
|
+
return previous !== undefined && before === after
|
|
18868
|
+
? []
|
|
18869
|
+
: [{ field, before, after }];
|
|
18870
|
+
});
|
|
18871
|
+
}
|
|
18872
|
+
|
|
18873
|
+
/**
|
|
18874
|
+
* The project's history: every version the snapshot trigger kept, with the
|
|
18875
|
+
* fields it changed. Restore writes one field of an older version back and
|
|
18876
|
+
* leaves the others as they are.
|
|
18877
|
+
*/
|
|
18878
|
+
export function ProjectHistory({
|
|
18879
|
+
projectId,
|
|
18880
|
+
versions,
|
|
18881
|
+
canSave,
|
|
18882
|
+
canRestore,
|
|
18883
|
+
}: {
|
|
18884
|
+
projectId: string;
|
|
18885
|
+
versions: readonly ProjectVersion[];
|
|
18886
|
+
canSave: boolean;
|
|
18887
|
+
canRestore: boolean;
|
|
18888
|
+
}) {
|
|
18889
|
+
const t = useExtracted("projects");
|
|
18890
|
+
|
|
18891
|
+
return (
|
|
18892
|
+
<Card size="sm" data-recipe="record-history">
|
|
18893
|
+
<CardHeader>
|
|
18894
|
+
<CardTitle>{t("History")}</CardTitle>
|
|
18895
|
+
<CardDescription>
|
|
18896
|
+
{t("Each change to the name, budget or currency.")}
|
|
18897
|
+
</CardDescription>
|
|
18898
|
+
</CardHeader>
|
|
18899
|
+
<CardContent>
|
|
18900
|
+
{versions.length === 0 ? (
|
|
18901
|
+
<Empty className="border">
|
|
18902
|
+
<EmptyHeader>
|
|
18903
|
+
<EmptyMedia variant="icon">
|
|
18904
|
+
<HistoryIcon />
|
|
18905
|
+
</EmptyMedia>
|
|
18906
|
+
<EmptyTitle>{t("No history yet")}</EmptyTitle>
|
|
18907
|
+
<EmptyDescription>
|
|
18908
|
+
{t("The next change to this project appears here.")}
|
|
18909
|
+
</EmptyDescription>
|
|
18910
|
+
</EmptyHeader>
|
|
18911
|
+
{canSave ? (
|
|
18912
|
+
<EmptyContent>
|
|
18913
|
+
<SaveVersionButton projectId={projectId} />
|
|
18914
|
+
</EmptyContent>
|
|
18915
|
+
) : null}
|
|
18916
|
+
</Empty>
|
|
18917
|
+
) : (
|
|
18918
|
+
<ol className="flex flex-col divide-y" data-testid="project-history">
|
|
18919
|
+
{versions.map((version, index) => (
|
|
18920
|
+
<VersionEntry
|
|
18921
|
+
key={version.id}
|
|
18922
|
+
projectId={projectId}
|
|
18923
|
+
version={version}
|
|
18924
|
+
changes={changesOf(version, versions[index + 1])}
|
|
18925
|
+
canRestore={canRestore && index > 0}
|
|
18926
|
+
/>
|
|
18927
|
+
))}
|
|
18928
|
+
</ol>
|
|
18929
|
+
)}
|
|
18930
|
+
</CardContent>
|
|
18931
|
+
</Card>
|
|
18932
|
+
);
|
|
18933
|
+
}
|
|
18934
|
+
|
|
18935
|
+
function VersionEntry({
|
|
18936
|
+
projectId,
|
|
18937
|
+
version,
|
|
18938
|
+
changes,
|
|
18939
|
+
canRestore,
|
|
18940
|
+
}: {
|
|
18941
|
+
projectId: string;
|
|
18942
|
+
version: ProjectVersion;
|
|
18943
|
+
changes: readonly FieldChange[];
|
|
18944
|
+
canRestore: boolean;
|
|
18945
|
+
}) {
|
|
18946
|
+
const t = useExtracted("projects");
|
|
18947
|
+
const format = useFormatter();
|
|
18948
|
+
const locale = useLocale();
|
|
18949
|
+
const errorMessage = useErrorMessage();
|
|
18950
|
+
|
|
18951
|
+
const restore = useAction(restoreProjectFields, {
|
|
18952
|
+
onSuccess: () => {
|
|
18953
|
+
toast.success(t("Field restored"));
|
|
18954
|
+
},
|
|
18955
|
+
onError: (error) => {
|
|
18956
|
+
toast.error(errorMessage(error));
|
|
18957
|
+
},
|
|
18958
|
+
});
|
|
18959
|
+
|
|
18960
|
+
const label = {
|
|
18961
|
+
name: t("Name"),
|
|
18962
|
+
budget_minor: t("Budget"),
|
|
18963
|
+
currency: t("Currency"),
|
|
18964
|
+
} as const satisfies Record<ProjectHistoryField, string>;
|
|
18965
|
+
|
|
18966
|
+
const source = {
|
|
18967
|
+
manual: t("Saved"),
|
|
18968
|
+
auto: t("Edited"),
|
|
18969
|
+
restore: t("Restored"),
|
|
18970
|
+
} as const satisfies Record<ProjectVersion["source"], string>;
|
|
18971
|
+
|
|
18972
|
+
const shown = (field: ProjectHistoryField, value: string | undefined) => {
|
|
18973
|
+
if (value === undefined) {
|
|
18974
|
+
return t("Empty");
|
|
18975
|
+
}
|
|
18976
|
+
|
|
18977
|
+
return field === "budget_minor"
|
|
18978
|
+
? formatMoney(
|
|
18979
|
+
money(BigInt(value), version.fields.currency ?? "EUR"),
|
|
18980
|
+
locale,
|
|
18981
|
+
)
|
|
18982
|
+
: value;
|
|
18983
|
+
};
|
|
18984
|
+
|
|
18985
|
+
return (
|
|
18986
|
+
<li className="flex flex-col gap-2 py-3">
|
|
18987
|
+
<div className="flex items-center gap-2">
|
|
18988
|
+
<span className="text-sm font-medium">
|
|
18989
|
+
{t("Version {number}", { number: String(version.number) })}
|
|
18990
|
+
</span>
|
|
18991
|
+
<Badge variant="secondary">{source[version.source]}</Badge>
|
|
18992
|
+
<span className="ml-auto text-xs text-muted-foreground">
|
|
18993
|
+
{format.dateTime(version.createdAt, {
|
|
18994
|
+
dateStyle: "medium",
|
|
18995
|
+
timeStyle: "short",
|
|
18996
|
+
})}
|
|
18997
|
+
</span>
|
|
18998
|
+
</div>
|
|
18999
|
+
<dl className="flex flex-col gap-1">
|
|
19000
|
+
{changes.map((change) => (
|
|
19001
|
+
<div key={change.field} className="flex items-center gap-2 text-sm">
|
|
19002
|
+
<dt className="w-20 shrink-0 text-muted-foreground">
|
|
19003
|
+
{label[change.field]}
|
|
19004
|
+
</dt>
|
|
19005
|
+
<dd className="flex min-w-0 flex-1 items-center gap-1">
|
|
19006
|
+
{change.before === undefined ? null : (
|
|
19007
|
+
<>
|
|
19008
|
+
<span className="truncate text-muted-foreground line-through">
|
|
19009
|
+
{shown(change.field, change.before)}
|
|
19010
|
+
</span>
|
|
19011
|
+
<ArrowRightIcon className="size-3 shrink-0 text-muted-foreground" />
|
|
19012
|
+
</>
|
|
19013
|
+
)}
|
|
19014
|
+
<span className="truncate">
|
|
19015
|
+
{shown(change.field, change.after)}
|
|
19016
|
+
</span>
|
|
19017
|
+
</dd>
|
|
19018
|
+
{canRestore ? (
|
|
19019
|
+
<Button
|
|
19020
|
+
size="xs"
|
|
19021
|
+
variant="ghost"
|
|
19022
|
+
disabled={restore.pending}
|
|
19023
|
+
aria-label={t("Restore {field} from version {number}", {
|
|
19024
|
+
field: label[change.field],
|
|
19025
|
+
number: String(version.number),
|
|
19026
|
+
})}
|
|
19027
|
+
onClick={() => {
|
|
19028
|
+
void restore.run({
|
|
19029
|
+
projectId,
|
|
19030
|
+
versionId: version.id,
|
|
19031
|
+
fields: [change.field],
|
|
19032
|
+
});
|
|
19033
|
+
}}
|
|
19034
|
+
>
|
|
19035
|
+
{t("Restore")}
|
|
19036
|
+
</Button>
|
|
19037
|
+
) : null}
|
|
19038
|
+
</div>
|
|
19039
|
+
))}
|
|
19040
|
+
</dl>
|
|
19041
|
+
</li>
|
|
19042
|
+
);
|
|
19043
|
+
}
|
|
19044
|
+
|
|
19045
|
+
function SaveVersionButton({ projectId }: { projectId: string }) {
|
|
19046
|
+
const t = useExtracted("projects");
|
|
19047
|
+
const errorMessage = useErrorMessage();
|
|
19048
|
+
|
|
19049
|
+
const save = useAction(saveProjectVersion, {
|
|
19050
|
+
onSuccess: () => {
|
|
19051
|
+
toast.success(t("Version saved"));
|
|
19052
|
+
},
|
|
19053
|
+
onError: (error) => {
|
|
19054
|
+
toast.error(errorMessage(error));
|
|
19055
|
+
},
|
|
19056
|
+
});
|
|
19057
|
+
|
|
19058
|
+
return (
|
|
19059
|
+
<Button
|
|
19060
|
+
size="sm"
|
|
19061
|
+
variant="outline"
|
|
19062
|
+
disabled={save.pending}
|
|
19063
|
+
onClick={() => {
|
|
19064
|
+
void save.run({ projectId });
|
|
19065
|
+
}}
|
|
19066
|
+
>
|
|
19067
|
+
<HistoryIcon />
|
|
19068
|
+
{t("Save a version")}
|
|
19069
|
+
</Button>
|
|
19070
|
+
);
|
|
19071
|
+
}
|
|
19072
|
+
```
|
|
19073
|
+
|
|
19074
|
+
## Upsert import
|
|
19075
|
+
|
|
19076
|
+
Paste CSV, map its columns, preview the rows it creates and changes, then upsert them on one of the table's unique sets. It loads its data on the server through the block's client; the [imports block](https://bettersupabase.com/blocks/imports) must be installed (`npx better-supabase add imports`). Page: https://bettersupabase.com/recipes/upsert-import.
|
|
19077
|
+
|
|
19078
|
+
Web, with shadcn components:
|
|
19079
|
+
|
|
19080
|
+
```bash
|
|
19081
|
+
npx shadcn add alert badge button dialog field select skeleton textarea
|
|
19082
|
+
```
|
|
19083
|
+
|
|
19084
|
+
```tsx title="apps/examples/nextjs/src/features/projects/components/task-import-dialog.tsx"
|
|
19085
|
+
const SKIP = "skip";
|
|
19086
|
+
|
|
19087
|
+
type Choice = TaskImportField | typeof SKIP;
|
|
19088
|
+
|
|
19089
|
+
function isChoice(value: unknown): value is Choice {
|
|
19090
|
+
return value === SKIP || TASK_IMPORT_FIELDS.some((field) => field === value);
|
|
19091
|
+
}
|
|
19092
|
+
|
|
19093
|
+
/** The mapped columns, without the skipped ones. */
|
|
19094
|
+
function mappedOnly(
|
|
19095
|
+
mapping: Readonly<Record<string, Choice>>,
|
|
19096
|
+
): Record<string, TaskImportField> {
|
|
19097
|
+
return Object.fromEntries(
|
|
19098
|
+
Object.entries(mapping).flatMap(([header, choice]) =>
|
|
19099
|
+
choice === SKIP ? [] : [[header, choice]],
|
|
19100
|
+
),
|
|
19101
|
+
);
|
|
19102
|
+
}
|
|
19103
|
+
|
|
19104
|
+
/**
|
|
19105
|
+
* Imports tasks into the project from pasted CSV: map the columns, preview
|
|
19106
|
+
* what the file creates and changes, then run it. A task with the same
|
|
19107
|
+
* title in the project is updated instead of added twice.
|
|
19108
|
+
*/
|
|
19109
|
+
export function TaskImportDialog({ projectId }: { projectId: string }) {
|
|
19110
|
+
const t = useExtracted("projects");
|
|
19111
|
+
const id = useId();
|
|
19112
|
+
const errorMessage = useErrorMessage();
|
|
19113
|
+
const [open, setOpen] = useState(false);
|
|
19114
|
+
const [csv, setCsv] = useState("");
|
|
19115
|
+
const [mapping, setMapping] = useState<Record<string, Choice>>({});
|
|
19116
|
+
const preview = useAction(previewTaskImport);
|
|
19117
|
+
|
|
19118
|
+
const run = useAction(runTaskImport, {
|
|
19119
|
+
onSuccess: ({ status, imported }) => {
|
|
19120
|
+
if (status === "completed") {
|
|
19121
|
+
toast.success(
|
|
19122
|
+
t("{count, plural, one {# task} other {# tasks}} imported", {
|
|
19123
|
+
count: imported,
|
|
19124
|
+
}),
|
|
19125
|
+
);
|
|
19126
|
+
setOpen(false);
|
|
19127
|
+
setCsv("");
|
|
19128
|
+
setMapping({});
|
|
19129
|
+
preview.reset();
|
|
19130
|
+
} else {
|
|
19131
|
+
toast.error(t("The file has rows that need fixing."));
|
|
19132
|
+
}
|
|
19133
|
+
},
|
|
19134
|
+
onError: (error) => {
|
|
19135
|
+
toast.error(errorMessage(error));
|
|
19136
|
+
},
|
|
19137
|
+
});
|
|
19138
|
+
|
|
19139
|
+
const [headers = []] = csv.trim() === "" ? [] : parseCsv(csv);
|
|
19140
|
+
const titleMapped = Object.values(mapping).includes("title");
|
|
19141
|
+
|
|
19142
|
+
const label = {
|
|
19143
|
+
title: t("Title"),
|
|
19144
|
+
status: t("Status"),
|
|
19145
|
+
dueOn: t("Due date"),
|
|
19146
|
+
} as const satisfies Record<TaskImportField, string>;
|
|
19147
|
+
|
|
19148
|
+
const choices = [
|
|
19149
|
+
{ value: SKIP, label: t("Skip") },
|
|
19150
|
+
...TASK_IMPORT_FIELDS.map((field) => ({
|
|
19151
|
+
value: field,
|
|
19152
|
+
label: label[field],
|
|
19153
|
+
})),
|
|
19154
|
+
];
|
|
19155
|
+
|
|
19156
|
+
const changeCsv = (text: string) => {
|
|
19157
|
+
setCsv(text);
|
|
19158
|
+
preview.reset();
|
|
19159
|
+
|
|
19160
|
+
const [first = []] = text.trim() === "" ? [] : parseCsv(text);
|
|
19161
|
+
const suggested = suggestMapping(first, TASK_IMPORT_FIELDS);
|
|
19162
|
+
|
|
19163
|
+
setMapping(
|
|
19164
|
+
Object.fromEntries(
|
|
19165
|
+
first.map((header) => {
|
|
19166
|
+
const field = suggested[header];
|
|
19167
|
+
|
|
19168
|
+
return [header, isChoice(field) ? field : SKIP];
|
|
19169
|
+
}),
|
|
19170
|
+
),
|
|
19171
|
+
);
|
|
19172
|
+
};
|
|
19173
|
+
|
|
19174
|
+
const input = { projectId, csv, mapping: mappedOnly(mapping) };
|
|
19175
|
+
|
|
19176
|
+
const runPreview = () => {
|
|
19177
|
+
void preview.run(input);
|
|
19178
|
+
};
|
|
19179
|
+
|
|
19180
|
+
return (
|
|
19181
|
+
<Dialog open={open} onOpenChange={setOpen}>
|
|
19182
|
+
<DialogTrigger render={<Button size="sm" variant="outline" />}>
|
|
19183
|
+
<UploadIcon />
|
|
19184
|
+
{t("Import")}
|
|
19185
|
+
</DialogTrigger>
|
|
19186
|
+
<DialogContent data-recipe="upsert-import">
|
|
19187
|
+
<DialogHeader>
|
|
19188
|
+
<DialogTitle>{t("Import tasks")}</DialogTitle>
|
|
19189
|
+
<DialogDescription>
|
|
19190
|
+
{t(
|
|
19191
|
+
"Paste CSV with a title column. A title the project already has updates that task.",
|
|
19192
|
+
)}
|
|
19193
|
+
</DialogDescription>
|
|
19194
|
+
</DialogHeader>
|
|
19195
|
+
<div className="flex flex-col gap-4">
|
|
19196
|
+
<Field>
|
|
19197
|
+
<FieldLabel htmlFor={`${id}-csv`}>{t("CSV")}</FieldLabel>
|
|
19198
|
+
<Textarea
|
|
19199
|
+
id={`${id}-csv`}
|
|
19200
|
+
rows={5}
|
|
19201
|
+
value={csv}
|
|
19202
|
+
placeholder={"title,status,due\nWrite the brief,todo,2026-11-02"}
|
|
19203
|
+
onChange={(event) => {
|
|
19204
|
+
changeCsv(event.target.value);
|
|
19205
|
+
}}
|
|
19206
|
+
/>
|
|
19207
|
+
</Field>
|
|
19208
|
+
{headers.length > 0 ? (
|
|
19209
|
+
<div className="grid gap-3 sm:grid-cols-2">
|
|
19210
|
+
{headers.map((header) => (
|
|
19211
|
+
<Field key={header}>
|
|
19212
|
+
<FieldLabel htmlFor={`${id}-${header}`}>{header}</FieldLabel>
|
|
19213
|
+
<Select
|
|
19214
|
+
value={mapping[header] ?? SKIP}
|
|
19215
|
+
items={choices}
|
|
19216
|
+
onValueChange={(value) => {
|
|
19217
|
+
if (isChoice(value)) {
|
|
19218
|
+
setMapping((current) => ({
|
|
19219
|
+
...current,
|
|
19220
|
+
[header]: value,
|
|
19221
|
+
}));
|
|
19222
|
+
preview.reset();
|
|
19223
|
+
}
|
|
19224
|
+
}}
|
|
19225
|
+
>
|
|
19226
|
+
<SelectTrigger
|
|
19227
|
+
id={`${id}-${header}`}
|
|
19228
|
+
size="sm"
|
|
19229
|
+
className="w-full"
|
|
19230
|
+
>
|
|
19231
|
+
<SelectValue />
|
|
19232
|
+
</SelectTrigger>
|
|
19233
|
+
<SelectContent>
|
|
19234
|
+
{choices.map((choice) => (
|
|
19235
|
+
<SelectItem key={choice.value} value={choice.value}>
|
|
19236
|
+
{choice.label}
|
|
19237
|
+
</SelectItem>
|
|
19238
|
+
))}
|
|
19239
|
+
</SelectContent>
|
|
19240
|
+
</Select>
|
|
19241
|
+
</Field>
|
|
19242
|
+
))}
|
|
19243
|
+
</div>
|
|
19244
|
+
) : null}
|
|
19245
|
+
{preview.error ? (
|
|
19246
|
+
<Alert variant="destructive">
|
|
19247
|
+
<TriangleAlertIcon />
|
|
19248
|
+
<AlertTitle>{t("The preview didn't load")}</AlertTitle>
|
|
19249
|
+
<AlertDescription>{errorMessage(preview.error)}</AlertDescription>
|
|
19250
|
+
<AlertAction>
|
|
19251
|
+
<Button size="sm" variant="outline" onClick={runPreview}>
|
|
19252
|
+
{t("Retry")}
|
|
19253
|
+
</Button>
|
|
19254
|
+
</AlertAction>
|
|
19255
|
+
</Alert>
|
|
19256
|
+
) : preview.pending ? (
|
|
19257
|
+
<Skeleton className="h-8" />
|
|
19258
|
+
) : preview.data ? (
|
|
19259
|
+
<div className="flex flex-col gap-2" data-testid="import-preview">
|
|
19260
|
+
<div className="flex flex-wrap items-center gap-2">
|
|
19261
|
+
<Badge variant="success-light">
|
|
19262
|
+
{t("{count, plural, one {# new} other {# new}}", {
|
|
19263
|
+
count: preview.data.created,
|
|
19264
|
+
})}
|
|
19265
|
+
</Badge>
|
|
19266
|
+
<Badge variant="info-light">
|
|
19267
|
+
{t("{count, plural, one {# changed} other {# changed}}", {
|
|
19268
|
+
count: preview.data.changed,
|
|
19269
|
+
})}
|
|
19270
|
+
</Badge>
|
|
19271
|
+
<Badge variant="secondary">
|
|
19272
|
+
{t("{count, plural, one {# unchanged} other {# unchanged}}", {
|
|
19273
|
+
count: preview.data.unchanged,
|
|
19274
|
+
})}
|
|
19275
|
+
</Badge>
|
|
19276
|
+
{preview.data.errors.length > 0 ? (
|
|
19277
|
+
<Badge variant="destructive-light">
|
|
19278
|
+
{t("{count, plural, one {# error} other {# errors}}", {
|
|
19279
|
+
count: preview.data.errors.length,
|
|
19280
|
+
})}
|
|
19281
|
+
</Badge>
|
|
19282
|
+
) : null}
|
|
19283
|
+
</div>
|
|
19284
|
+
{preview.data.errors.slice(0, 5).map((error) => (
|
|
19285
|
+
<p
|
|
19286
|
+
key={`${error.row}:${error.message}`}
|
|
19287
|
+
className="text-xs text-destructive"
|
|
19288
|
+
>
|
|
19289
|
+
{t("Row {row}: {message}", {
|
|
19290
|
+
row: String(error.row),
|
|
19291
|
+
message: error.message,
|
|
19292
|
+
})}
|
|
19293
|
+
</p>
|
|
19294
|
+
))}
|
|
19295
|
+
</div>
|
|
19296
|
+
) : null}
|
|
19297
|
+
</div>
|
|
19298
|
+
<DialogFooter>
|
|
19299
|
+
<DialogClose render={<Button type="button" variant="outline" />}>
|
|
19300
|
+
{t("Cancel")}
|
|
19301
|
+
</DialogClose>
|
|
19302
|
+
{preview.data && preview.data.errors.length === 0 ? (
|
|
19303
|
+
<Button
|
|
19304
|
+
disabled={run.pending}
|
|
19305
|
+
onClick={() => {
|
|
19306
|
+
void run.run(input);
|
|
19307
|
+
}}
|
|
19308
|
+
>
|
|
19309
|
+
{t("Import")}
|
|
19310
|
+
</Button>
|
|
19311
|
+
) : (
|
|
19312
|
+
<Button
|
|
19313
|
+
disabled={!titleMapped || preview.pending}
|
|
19314
|
+
onClick={runPreview}
|
|
19315
|
+
>
|
|
19316
|
+
{t("Preview")}
|
|
19317
|
+
</Button>
|
|
19318
|
+
)}
|
|
19319
|
+
</DialogFooter>
|
|
19320
|
+
</DialogContent>
|
|
19321
|
+
</Dialog>
|
|
19322
|
+
);
|
|
19323
|
+
}
|
|
19324
|
+
```
|