better-supabase 0.9.0 → 0.10.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 +3 -0
- package/dist/{adapter-CEjmtazZ.js → adapter-rmWaLNe3.js} +3 -3
- package/dist/{agents-BCNhIxVZ.d.ts → agents-ByYUSZxT.d.ts} +4 -4
- package/dist/{ai-cache-Dps7aRu1.d.ts → ai-cache-CkxtAt4P.d.ts} +4 -4
- package/dist/{ai-cache-zeUL94pB.js → ai-cache-DPiuJ-zJ.js} +2 -2
- package/dist/{ai-chat-3GBSlFR4.d.ts → ai-chat-al8b3spK.d.ts} +4 -4
- package/dist/{ai-files-D2_9YLjF.js → ai-files-BXtV3ygd.js} +5 -5
- package/dist/ai-sdk/agents/index.d.ts +6 -6
- package/dist/ai-sdk/agents/index.js +1 -1
- package/dist/ai-sdk/batches/index.d.ts +3 -3
- package/dist/ai-sdk/batches/index.js +2 -2
- package/dist/ai-sdk/cache/index.d.ts +1 -1
- 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 +1 -1
- package/dist/ai-sdk/embeddings/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.d.ts +1 -1
- package/dist/ai-sdk/files/index.js +3 -3
- package/dist/ai-sdk/index.d.ts +5 -5
- package/dist/ai-sdk/mcp/index.d.ts +3 -3
- package/dist/ai-sdk/mcp/index.js +2 -2
- package/dist/ai-sdk/memory/index.d.ts +3 -3
- package/dist/ai-sdk/workflow/index.d.ts +3 -3
- package/dist/ai-sdk/workflow/index.js +1 -1
- package/dist/{ai-tasks-Ih5oHfyj.d.ts → ai-tasks-Di0gmJOX.d.ts} +5 -5
- package/dist/{announcements-BHCzraR6.js → announcements-HF7LuFw5.js} +4 -4
- package/dist/{api-TG3jE5aO.d.ts → api-XJcQON_7.d.ts} +6 -6
- package/dist/{api-keys-BEQatEUW.js → api-keys-C1IZF7p8.js} +4 -4
- package/dist/{api-keys-BYoGCM9p.d.ts → api-keys-EdSNjGIZ.d.ts} +4 -4
- package/dist/{app-tables-BGl5_U2x.js → app-tables-BRjMcWhW.js} +248 -13
- package/dist/app-tables-DVidEHOI.d.ts +35 -0
- package/dist/{approvals-a2KmioBh.d.ts → approvals-DqlPHBHI.d.ts} +4 -4
- package/dist/arazzo/index.d.ts +2 -2
- package/dist/{assistant-Bf2cA6RO.d.ts → assistant-BZyhQ8bd.d.ts} +2 -2
- package/dist/astro/index.d.ts +7 -7
- package/dist/astro/index.js +5 -5
- package/dist/asyncapi/index.d.ts +1 -1
- package/dist/{attachments-DAj2Yp95.js → attachments-C8FEBBKE.js} +5 -5
- package/dist/{audit-log-BMMuGPdP.js → audit-log-CRgiHlRh.js} +6 -6
- package/dist/{auth-reply-DUCwb8YO.js → auth-reply-B_dW4jHJ.js} +1 -1
- package/dist/{authorization-DpRfs6Wx.d.ts → authorization-CdJRoZgV.d.ts} +24 -1
- package/dist/{authorization-hooks-DkmrnDX7.d.ts → authorization-hooks-Do5djkpz.d.ts} +2 -2
- package/dist/{authorizer-DH7DjkL3.js → authorizer-dVVN05Un.js} +1 -1
- package/dist/better-result/index.d.ts +4 -4
- package/dist/better-result/index.js +1 -1
- package/dist/{bind-a7sUgvf4.d.ts → bind-DkaP_0iS.d.ts} +4 -4
- package/dist/{block-fields-ffD6Gxe4.js → block-fields-BANwJ9Y_.js} +2 -2
- package/dist/{block-helpers-C86hPEjI.d.ts → block-helpers-7pMBVsE6.d.ts} +1 -1
- package/dist/{block-helpers-CfG_MvDR.js → block-helpers-BfVCR5Fc.js} +1 -1
- package/dist/{block-hooks-BsXncUlZ.js → block-hooks-ByKlh8Qy.js} +2 -2
- package/dist/{block-hooks-BLPWD3Jt.d.ts → block-hooks-C_WaodoA.d.ts} +2 -2
- package/dist/{block-transport-DaGGXjIw.d.ts → block-transport-NbUJygA7.d.ts} +2 -2
- package/dist/blocks/access-requests/index.d.ts +5 -5
- package/dist/blocks/access-requests/index.js +5 -5
- package/dist/blocks/agents/index.d.ts +4 -4
- package/dist/blocks/agents/index.js +5 -5
- package/dist/blocks/ai-cache/index.d.ts +3 -3
- package/dist/blocks/ai-cache/index.js +2 -2
- package/dist/blocks/ai-chat/index.d.ts +5 -5
- package/dist/blocks/ai-chat/index.js +3 -3
- package/dist/blocks/ai-chat/react/index.d.ts +2 -2
- package/dist/blocks/ai-chat/react/index.js +1 -1
- 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 +3 -3
- package/dist/blocks/ai-files/index.js +2 -2
- package/dist/blocks/ai-providers/index.d.ts +4 -4
- package/dist/blocks/ai-providers/index.js +5 -5
- package/dist/blocks/ai-tasks/index.d.ts +3 -3
- package/dist/blocks/ai-tasks/index.js +6 -6
- package/dist/blocks/announcements/index.d.ts +4 -4
- package/dist/blocks/announcements/index.js +2 -2
- package/dist/blocks/announcements/react/index.d.ts +1 -1
- package/dist/blocks/announcements/react/index.js +1 -1
- 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 +6 -6
- package/dist/blocks/api-keys/index.js +3 -3
- package/dist/blocks/api-keys/react/index.d.ts +1 -1
- package/dist/blocks/api-keys/react/index.js +2 -2
- 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 +5 -5
- package/dist/blocks/attachments/index.d.ts +4 -4
- package/dist/blocks/attachments/index.js +2 -2
- package/dist/blocks/audit/index.d.ts +5 -5
- package/dist/blocks/audit/index.js +4 -4
- package/dist/blocks/audit/react/index.d.ts +1 -1
- package/dist/blocks/audit/react/index.js +1 -1
- 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 +9 -9
- package/dist/blocks/billing/index.js +7 -7
- package/dist/blocks/billing/react/index.d.ts +1 -1
- 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 +2 -2
- package/dist/blocks/bookings/react/index.d.ts +1 -1
- package/dist/blocks/bookings/react/index.js +1 -1
- package/dist/blocks/bookings/solid/index.d.ts +2 -2
- package/dist/blocks/bookings/svelte/index.d.ts +2 -2
- package/dist/blocks/bookings/vue/index.d.ts +2 -2
- package/dist/blocks/bulk/index.d.ts +9 -5
- package/dist/blocks/bulk/index.js +4 -4
- package/dist/blocks/calendar/index.d.ts +3 -3
- package/dist/blocks/calendar/index.js +2 -2
- package/dist/blocks/calendar/react/index.d.ts +1 -1
- package/dist/blocks/calendar/react/index.js +1 -1
- package/dist/blocks/calendar/solid/index.d.ts +2 -2
- package/dist/blocks/calendar/svelte/index.d.ts +2 -2
- package/dist/blocks/calendar/vue/index.d.ts +2 -2
- package/dist/blocks/catalog/index.d.ts +7 -7
- package/dist/blocks/catalog/index.js +7 -7
- package/dist/blocks/collections/index.d.ts +6 -6
- package/dist/blocks/collections/index.js +6 -6
- package/dist/blocks/comments/index.d.ts +4 -4
- package/dist/blocks/comments/index.js +3 -3
- package/dist/blocks/comments/react/index.d.ts +1 -1
- package/dist/blocks/comments/react/index.js +2 -2
- 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 +6 -6
- package/dist/blocks/custom-fields/index.d.ts +4 -4
- package/dist/blocks/custom-fields/index.js +5 -5
- package/dist/blocks/data-lifecycle/index.d.ts +8 -8
- package/dist/blocks/data-lifecycle/index.js +5 -5
- package/dist/blocks/deals/index.d.ts +7 -7
- package/dist/blocks/deals/index.js +8 -8
- package/dist/blocks/documents/index.d.ts +4 -4
- package/dist/blocks/documents/index.js +3 -3
- package/dist/blocks/domains/index.d.ts +6 -6
- package/dist/blocks/domains/index.js +5 -5
- package/dist/blocks/drive/index.d.ts +7 -7
- package/dist/blocks/drive/index.js +6 -6
- package/dist/blocks/employees/index.d.ts +7 -7
- package/dist/blocks/employees/index.js +7 -7
- package/dist/blocks/engagements/index.d.ts +6 -6
- package/dist/blocks/engagements/index.js +5 -5
- package/dist/blocks/entitlements/index.d.ts +6 -6
- package/dist/blocks/entitlements/index.js +1 -1
- 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 +5 -5
- package/dist/blocks/flags/index.js +6 -6
- package/dist/blocks/forms/index.d.ts +6 -6
- package/dist/blocks/forms/index.js +5 -5
- 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 +6 -6
- package/dist/blocks/hiring/index.js +6 -6
- package/dist/blocks/identities/index.d.ts +5 -5
- package/dist/blocks/identities/index.js +3 -3
- package/dist/blocks/imports/index.d.ts +74 -6
- package/dist/blocks/imports/index.js +111 -7
- package/dist/blocks/inbox/index.d.ts +5 -5
- package/dist/blocks/inbox/index.js +3 -3
- 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 +26 -7
- package/dist/blocks/index.js +4 -4
- package/dist/blocks/inventory/index.d.ts +6 -6
- package/dist/blocks/inventory/index.js +5 -5
- package/dist/blocks/invoices/index.d.ts +6 -6
- package/dist/blocks/invoices/index.js +8 -8
- package/dist/blocks/jobs/index.d.ts +6 -6
- package/dist/blocks/jobs/index.js +8 -8
- package/dist/blocks/knowledge/index.d.ts +3 -3
- package/dist/blocks/knowledge/index.js +2 -2
- package/dist/blocks/leave/index.d.ts +5 -5
- package/dist/blocks/leave/index.js +4 -4
- package/dist/blocks/memory/index.d.ts +4 -4
- package/dist/blocks/memory/index.js +5 -5
- package/dist/blocks/metrics/index.d.ts +6 -6
- package/dist/blocks/metrics/index.js +5 -5
- 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 +9 -9
- package/dist/blocks/notifications/index.js +9 -9
- 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 +10 -4
- package/dist/blocks/number-sequences/index.js +22 -11
- package/dist/blocks/oauth-server/index.d.ts +5 -5
- package/dist/blocks/oauth-server/index.js +3 -3
- package/dist/blocks/onboarding/index.d.ts +3 -3
- package/dist/blocks/onboarding/index.js +2 -2
- package/dist/blocks/onboarding/react/index.d.ts +1 -1
- package/dist/blocks/onboarding/react/index.js +1 -1
- 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 +6 -6
- package/dist/blocks/orders/index.js +9 -9
- package/dist/blocks/organizations/index.d.ts +5 -5
- package/dist/blocks/organizations/index.js +4 -4
- package/dist/blocks/organizations/react/index.d.ts +1 -1
- package/dist/blocks/organizations/react/index.js +2 -2
- 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 +5 -5
- package/dist/blocks/parties/index.d.ts +7 -7
- package/dist/blocks/parties/index.js +4 -4
- package/dist/blocks/pipelines/index.d.ts +6 -6
- package/dist/blocks/pipelines/index.js +7 -7
- package/dist/blocks/profiles/index.d.ts +4 -4
- package/dist/blocks/profiles/index.js +5 -5
- package/dist/blocks/promotions/index.d.ts +5 -5
- package/dist/blocks/promotions/index.js +6 -6
- package/dist/blocks/push/index.d.ts +6 -6
- package/dist/blocks/push/index.js +4 -4
- package/dist/blocks/quotes/index.d.ts +6 -6
- package/dist/blocks/quotes/index.js +8 -8
- package/dist/blocks/rank/index.d.ts +4 -4
- package/dist/blocks/rank/index.js +4 -4
- package/dist/blocks/reactions/index.d.ts +4 -4
- package/dist/blocks/reactions/index.js +2 -2
- package/dist/blocks/reactions/react/index.d.ts +1 -1
- package/dist/blocks/reactions/react/index.js +1 -1
- 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 +5 -5
- package/dist/blocks/relations/index.js +5 -5
- package/dist/blocks/reminders/index.d.ts +7 -7
- package/dist/blocks/reminders/index.js +6 -6
- package/dist/blocks/reviews/index.d.ts +5 -5
- package/dist/blocks/reviews/index.js +5 -5
- package/dist/blocks/rules/index.d.ts +75 -9
- package/dist/blocks/rules/index.js +115 -6
- package/dist/blocks/rules/react/index.d.ts +2 -2
- package/dist/blocks/rules/react/index.js +2 -2
- 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 +3 -3
- package/dist/blocks/search/react/index.d.ts +1 -1
- package/dist/blocks/search/react/index.js +1 -1
- 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 +5 -5
- package/dist/blocks/service-principals/index.js +5 -5
- 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 +3 -3
- package/dist/blocks/settings/react/index.d.ts +1 -1
- package/dist/blocks/settings/react/index.js +2 -2
- 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 +12 -5
- package/dist/blocks/share-links/index.js +9 -6
- package/dist/blocks/shared-signals/index.d.ts +7 -7
- package/dist/blocks/shared-signals/index.js +4 -4
- package/dist/blocks/signing-keys/index.d.ts +4 -4
- package/dist/blocks/signing-keys/index.js +4 -4
- package/dist/blocks/sla/index.d.ts +6 -6
- package/dist/blocks/sla/index.js +5 -5
- package/dist/blocks/sso/index.d.ts +6 -6
- package/dist/blocks/sso/index.js +4 -4
- package/dist/blocks/state-machine/index.d.ts +4 -4
- 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 +2 -2
- 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 +4 -4
- package/dist/blocks/targets/index.js +5 -5
- package/dist/blocks/teams/index.d.ts +4 -4
- package/dist/blocks/teams/index.js +4 -4
- package/dist/blocks/templates/index.d.ts +7 -7
- package/dist/blocks/templates/index.js +6 -6
- package/dist/blocks/time-tracking/index.d.ts +6 -6
- package/dist/blocks/time-tracking/index.js +7 -7
- package/dist/blocks/trash/index.d.ts +5 -5
- package/dist/blocks/trash/index.js +4 -4
- package/dist/blocks/undo/index.d.ts +4 -4
- package/dist/blocks/undo/index.js +1 -1
- 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 +2 -2
- package/dist/blocks/usage/react/index.d.ts +1 -1
- package/dist/blocks/usage/react/index.js +1 -1
- 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/versions/index.d.ts +10 -6
- package/dist/blocks/versions/index.js +18 -13
- package/dist/blocks/waitlist/index.d.ts +5 -5
- package/dist/blocks/waitlist/index.js +5 -5
- package/dist/blocks/webhooks/index.d.ts +13 -13
- package/dist/blocks/webhooks/index.js +10 -10
- package/dist/blocks/work-items/index.d.ts +7 -7
- package/dist/blocks/work-items/index.js +5 -5
- package/dist/blocks/workflow-builder/index.d.ts +7 -7
- package/dist/blocks/workflow-builder/index.js +2 -2
- package/dist/blocks/workflow-builder/react/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/react/index.js +2 -2
- 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 +1 -1
- package/dist/blocks/workflows/react/index.d.ts +2 -2
- package/dist/blocks/workflows/react/index.js +1 -1
- 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-EJAVAuVz.js} +4 -4
- package/dist/{build-Cx08LOT7.js → build-6jmaPAgx.js} +1 -1
- package/dist/{calendar-DcFrpSOy.js → calendar-1J1E5dLq.js} +4 -4
- package/dist/chat-sdk/index.d.ts +4 -4
- package/dist/chat-sdk/index.js +2 -2
- package/dist/chat-sdk/react/index.d.ts +2 -2
- package/dist/chat-sdk/react/server.d.ts +2 -2
- package/dist/cli/{add-Bd5M6uEZ.js → add-BhI_nXAo.js} +2 -2
- package/dist/cli/{add-B0zoJUYX.js → add-CUS0AiBh.js} +6 -6
- package/dist/cli/add-ojbcMxyp.js +1 -0
- package/dist/cli/adopt-D0ASVx2G.js +1 -0
- package/dist/cli/{adopt-CebmlHL-.js → adopt-DwcU6CJd.js} +27 -8
- package/dist/cli/{agent-CCt_aXpJ.js → agent-CCrTYK3W.js} +1 -1
- package/dist/cli/{apply-Dxk8AUNU.js → apply-DBXC0Z5I.js} +40 -10
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{blocks-Dq25D80b.js → blocks-B15ltTFn.js} +1 -1
- package/dist/cli/{blocks-Bzz326nn.js → blocks-BXeqIzWN.js} +1 -1
- package/dist/cli/{cache-Cx6qlRDR.js → cache-CPBYJAkb.js} +2 -2
- package/dist/cli/{codemod-woL4cVe0.js → codemod-CrI33UR2.js} +2 -2
- package/dist/cli/{command-CK9Cn8HV.js → command-D_HI1mp1.js} +17 -0
- package/dist/cli/{completion-CWoDmFZr.js → completion-DzYo025z.js} +2 -2
- package/dist/cli/{completion-J3dqnNoW.js → completion-En43UcyJ.js} +2 -2
- package/dist/cli/{completion-BO5UK6bG.js → completion-Vry-Wjw8.js} +1 -1
- package/dist/cli/{config-CLHpTk9Y.js → config-Bi_UBxXl.js} +40 -10
- package/dist/cli/{config-C1d-mbUA.js → config-DsqQr5z3.js} +1 -1
- package/dist/cli/{config-MuKY9kUj.js → config-DyJgo2d9.js} +1 -1
- package/dist/cli/{doctor-SGw36h1D.js → doctor-wACp5w6N.js} +44 -342
- package/dist/cli/{emit-ZAYeh4Yn.js → emit-j0zZ6NE_.js} +21 -2
- package/dist/cli/{env-CVXvJoLP.js → env-2v9JrxSr.js} +3 -3
- package/dist/cli/{env-DMw_MBe5.js → env-Cf5OTqbK.js} +92 -1
- package/dist/cli/{env-DJ4ZaJpe.js → env-Ch99nTQw.js} +1 -1
- package/dist/cli/env-DkBe35Rv.js +1 -0
- package/dist/cli/{gen-B344S1Oy.js → gen-BhquLu7l.js} +11 -11
- package/dist/cli/index.d.ts +6 -4
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-B1dL-RZL.js → init-BwLTO6XG.js} +15 -8
- package/dist/cli/{introspect-BPcFi8ow.js → introspect-B-gXAIqs.js} +3 -3
- package/dist/cli/{keys-jsxCNJdz.js → keys-hwtdwdkT.js} +1 -1
- package/dist/cli/live-BFfYoE0_.js +329 -0
- package/dist/cli/mcp-Bdm2oGmL.js +237 -0
- package/dist/cli/{metadata-CxBZo4KM.js → metadata-DikbSOE0.js} +2 -2
- package/dist/cli/migration-safety-LaGVPPuD.js +206 -0
- package/dist/cli/{module-migration-YFFdWC5X.js → module-migration-CLkZ8jpw.js} +1 -1
- package/dist/cli/{moved-D9OT_Uyy.js → moved-B7UFO_OM.js} +1 -1
- package/dist/cli/{parse-DE59XyWt.js → parse-CwV5a6dA.js} +1 -1
- package/dist/cli/{preset-DmcC4nWE.js → preset-DQ1DxMtI.js} +1 -1
- package/dist/cli/{run-CM_2g6KQ.js → run-BLJj7SuM.js} +43 -42
- package/dist/cli/{run-DaHfUUO9.js → run-DliGNdjI.js} +38 -70
- package/dist/cli/{scaffold-CFdDq36-.js → scaffold-6bv24GSP.js} +4 -4
- package/dist/cli/{scaffold-Dsjr7sOT.js → scaffold-DUz5fa-k.js} +1 -1
- package/dist/cli/{seed-DldDdXWO.js → seed-CIJaL1Ao.js} +4 -4
- package/dist/cli/seed-ClGWseBT.js +1 -0
- package/dist/cli/shared-CNcvDOLt.js +145 -0
- package/dist/cli/{skills-v34NDb2D.js → skills-CaxIQhzW.js} +1 -1
- package/dist/cli/{snapshot-DAxLi4hO.js → snapshot-Dvcx0BSl.js} +3 -3
- package/dist/cli/{source-args-0I9zylYy.js → source-args-BNhagtpw.js} +1 -1
- package/dist/cli/{spec-CaaSOYZS.js → spec-BewE6r6J.js} +5 -5
- package/dist/cli/{spec-De0cfceR.js → spec-DRDaIq8f.js} +1 -1
- package/dist/cli/{sql-DDLWwzh9.js → sql-BBkchli4.js} +5 -5
- package/dist/cli/{sql-0I1EQ3JG.js → sql-BCQt5TDs.js} +2 -2
- package/dist/cli/{stack-status-CRanl-CN.js → stack-status-LeEoCtV1.js} +1 -1
- package/dist/cli/{sync-DFx-6t5n.js → sync-CJ-ft-tl.js} +2 -2
- package/dist/cli/{topics-GJuIDwlY.js → topics-BBE1-Vrg.js} +1 -1
- package/dist/cli/{version-DNRW4DAP.js → version-D1wM9DNb.js} +1 -1
- package/dist/cli/{write-BS6F3Yvz.js → write-Dp1XlAVM.js} +24 -6
- package/dist/client/index.d.ts +5 -5
- package/dist/client/index.js +2 -2
- package/dist/client/native/index.d.ts +5 -5
- package/dist/client/native/index.js +2 -2
- package/dist/{client-BYaOGCOG.js → client-13Ii0c0P.js} +1 -1
- package/dist/{client-BxnLb9bz.d.ts → client-9zIKhf5D.d.ts} +2 -2
- package/dist/{client-PGRk3DGz.js → client-AxwF58Eo.js} +1 -1
- package/dist/{client-iDLLvGR4.d.ts → client-B0rvMvA8.d.ts} +3 -3
- package/dist/{client-ysNShuJZ.d.ts → client-B5nnqDmz.d.ts} +2 -2
- package/dist/{client-VvY0K3wr.d.ts → client-B7LCXnnY.d.ts} +5 -5
- package/dist/{client-D5CZ2a34.d.ts → client-B9H4BZJh.d.ts} +11 -11
- package/dist/{client-e-hFkLUf.d.ts → client-BLKpcAs0.d.ts} +2 -2
- package/dist/{client-DAHsEOVV.d.ts → client-BO9fQgBB.d.ts} +3 -3
- package/dist/{client-LLmgiCwJ.d.ts → client-B_r4denm.d.ts} +1 -1
- package/dist/{client-Tc47rlSe.d.ts → client-BaynD5V-.d.ts} +45 -7
- package/dist/{client-Co6BPmvr.d.ts → client-BtBkVSk2.d.ts} +3 -3
- package/dist/{client-xkSCp9hN.d.ts → client-ByGlM0YF.d.ts} +3 -3
- package/dist/{client-BAcILZOf.d.ts → client-C3dLIsJv.d.ts} +6 -6
- package/dist/{client-CFdMJ1h9.d.ts → client-C597NIlL.d.ts} +4 -4
- package/dist/{client-CoVGPi0c.js → client-CFeWXNXy.js} +2 -2
- package/dist/{client-Cmensu7l.d.ts → client-Cgxj38RS.d.ts} +6 -6
- package/dist/{client-WAdEBBrH.d.ts → client-CjyTNdt1.d.ts} +4 -4
- package/dist/{client-Cdedx_lw.js → client-CmHsfDHU.js} +5 -5
- package/dist/{client-Lx3mlvKO.d.ts → client-CpMv4-v5.d.ts} +4 -4
- package/dist/{client-DjTRlN3a.d.ts → client-CsRpAyIv.d.ts} +1 -1
- package/dist/{client-BUGIS__1.js → client-D0502FgY.js} +6 -6
- package/dist/{client-CiGjS6us.js → client-D727oIVC.js} +3 -3
- package/dist/{client-CHmjaI0j.d.ts → client-D9zBl9PT.d.ts} +6 -6
- package/dist/{client-WHeWTNVL.d.ts → client-DR_YEGnc.d.ts} +1 -1
- package/dist/{client-DIrCmOXz.d.ts → client-DZXFDaQE.d.ts} +3 -3
- package/dist/{client-hyP_nS5R.d.ts → client-Diu2lPbg.d.ts} +4 -4
- package/dist/{client-BVZtq_rQ.d.ts → client-Dk8gY9hi.d.ts} +2 -2
- package/dist/{client-B7QVIrJS.d.ts → client-Fi8CoJcs.d.ts} +10 -10
- package/dist/{client-DdfSIZ3M.d.ts → client-LVa6yC9u.d.ts} +4 -4
- package/dist/{client-ClZ0D-if.d.ts → client-WXJwUhr1.d.ts} +4 -4
- package/dist/{client-BOT2KVIp.js → client-fpvgtQKE.js} +1 -1
- package/dist/{client-C9QrWrnt.js → client-iB5axfa0.js} +2 -2
- package/dist/{client-01MAuqzW.js → client-jvtwGFy4.js} +1 -1
- package/dist/{client-CilSKXNu.js → client-kI6vCKVI.js} +1 -1
- package/dist/{client-CzI4QpG3.d.ts → client-kKdkLGPB.d.ts} +1 -1
- package/dist/{client-i8glKhxh.js → client-rp7YfOg1.js} +1 -1
- package/dist/{cloud-event-5rCEzIgK.d.ts → cloud-event-bwsBwVNG.d.ts} +1 -1
- package/dist/{codecs-YAekuQ08.js → codecs-C7E_OoiC.js} +3 -3
- package/dist/{codegen-DeoSt1mi.d.ts → codegen-2m4SKVdi.d.ts} +97 -14
- package/dist/{comments-D7sbd0xG.js → comments-N7Bi-oTW.js} +4 -4
- package/dist/commerce/index.js +3 -3
- package/dist/{compiler-BVxepAY0.d.ts → compiler-C6E3WwIi.d.ts} +2 -2
- package/dist/{compose-Djntdacs.js → compose-CO_cljl3.js} +1 -1
- package/dist/{composite-M6zPs1Xm.js → composite-CPV0thLs.js} +2 -2
- package/dist/{composite-djtGy6bz.d.ts → composite-DMMA_Whg.d.ts} +6 -6
- package/dist/config/index.d.ts +6 -6
- package/dist/config/index.js +4 -4
- package/dist/{config-C4MozTD7.js → config-C4RQDF6t.js} +4 -0
- package/dist/{config-BA1K4OPk.js → config-CkyahUjo.js} +4 -3
- package/dist/{connectors-CjD-R2ks.d.ts → connectors-CZdfZcIg.d.ts} +4 -4
- package/dist/{context-1sSWcd7_.d.ts → context-CCfX2szU.d.ts} +15 -3
- package/dist/{controller-D845qKh2.d.ts → controller-CCb9tHw_.d.ts} +1 -1
- 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 +4 -4
- package/dist/credentials/index.js +4 -4
- package/dist/{cron-route-CoL-By8Z.js → cron-route-BsgbJ-g4.js} +1 -1
- package/dist/{define-B2ln373W.js → define-CMcokcZz.js} +5 -5
- package/dist/{define-DxHHbNEb.d.ts → define-DXTC706J.d.ts} +6 -6
- package/dist/{define-block-CLZMEFeK.d.ts → define-block-BlHQxDIQ.d.ts} +6 -6
- package/dist/{documents-CWn2mtYf.d.ts → documents-BYM2viS0.d.ts} +3 -3
- package/dist/edge/index.d.ts +9 -9
- package/dist/edge/index.js +9 -9
- package/dist/elysia/index.d.ts +1 -1
- package/dist/elysia/index.js +1 -1
- package/dist/{embeddings-C2S14foD.d.ts → embeddings-Da0w4A_0.d.ts} +1 -1
- package/dist/{ended-nIdGCHxk.d.ts → ended-EcTtzzQJ.d.ts} +2 -2
- package/dist/{entitlements-BvU5dLpW.js → entitlements-AmYp2KHX.js} +3 -3
- package/dist/{entitlements-CbzCKalR.d.ts → entitlements-Bn7BTnbg.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--7d0Q3Se.js} +1 -1
- package/dist/{errors-PIpcoe4z.js → errors-7MqM7bbV.js} +1 -1
- package/dist/eve/index.d.ts +5 -5
- package/dist/{eve-DUF70Vgi.d.ts → eve-BcEr_hPo.d.ts} +2 -2
- package/dist/events/index.d.ts +3 -3
- package/dist/{events-CTreRrgP.d.ts → events-CtAHxPal.d.ts} +2 -2
- package/dist/{executor-DoE-5iM8.d.ts → executor-BicyP8Nl.d.ts} +1 -1
- package/dist/{executor-BINiCFNp.d.ts → executor-CHRwEYqt.d.ts} +1 -1
- package/dist/{executor-DKrZr3AC.d.ts → executor-CIxyatuB.d.ts} +2 -2
- package/dist/{executor-BXSHYyW2.js → executor-Cex-1PFp.js} +3 -3
- package/dist/{executor-BBHgjUJu.d.ts → executor-DzJQVTE2.d.ts} +1 -1
- package/dist/{executor-D1kYY5BA.js → executor-aKUo_Xyb.js} +2 -2
- package/dist/expo/index.d.ts +4 -4
- package/dist/expo/index.js +3 -3
- 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-nFnYWvB0.d.ts} +6 -6
- package/dist/{filter-evaluate-CjcFq0RT.d.ts → filter-evaluate-CEm52E5s.d.ts} +1 -1
- package/dist/{filter-query-BKmRYrTE.d.ts → filter-query-D3wOD1P_.d.ts} +1 -1
- package/dist/{flags-XAOsdNAc.js → flags-CtSrkVuW.js} +1 -1
- package/dist/{flags-D_D1jAHB.d.ts → flags-Dz5PIzFU.d.ts} +2 -2
- 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-DG5Bv39u.d.ts → framework-C2oL4OaO.d.ts} +6 -6
- package/dist/{framework-INbjMZX1.js → framework-Cfm0IspZ.js} +1 -1
- package/dist/{gateway-Cup00l0w.d.ts → gateway-CJL6ZG17.d.ts} +3 -3
- 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/hono/index.d.ts +9 -9
- package/dist/hono/index.js +6 -6
- package/dist/{inbox-3ql4phyr.d.ts → inbox-BaUJgHOF.d.ts} +3 -3
- package/dist/index-8xwnaWHY.d.ts +344 -0
- package/dist/{index-BkzNUPId.d.ts → index-BurdFUXr.d.ts} +6 -6
- package/dist/{index-DygICr8c.d.ts → index-Cckxs8IE.d.ts} +2 -2
- package/dist/{index-CrZitvSC.d.ts → index-Ck4oK5vV.d.ts} +7 -7
- package/dist/{index-Ej8XQ9w9.d.ts → index-Co0YsJTk.d.ts} +2 -2
- package/dist/{index-CETRk4YO.d.ts → index-CxmVzT-3.d.ts} +5 -1
- package/dist/{index-Bvw9r94Q.d.ts → index-D1kMyNc7.d.ts} +1 -1
- package/dist/{index-BlqrGvb3.d.ts → index-DL8z_oDo.d.ts} +4 -4
- package/dist/{index-DfVXx4Ia.d.ts → index-DMONTkSf.d.ts} +2 -2
- package/dist/{index-jhqhynmh.d.ts → index-DTQbC3CW.d.ts} +1 -1
- package/dist/{index-BIi8i6BO.d.ts → index-DcijDfh1.d.ts} +3 -3
- package/dist/index-MCXVzkXs.d.ts +722 -0
- package/dist/{index-Brhm22eL.d.ts → index-gXy3R1Uq.d.ts} +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +6 -6
- package/dist/{kit-D5S7KNFe.d.ts → kit-BlcEFQql.d.ts} +3 -3
- package/dist/{kit-MUK34-ZG.js → kit-gqwkVhGU.js} +3 -3
- package/dist/{knowledge-BXQ2-V0a.d.ts → knowledge-BYtgA52P.d.ts} +5 -5
- package/dist/{knowledge-CJ_Mm3ic.js → knowledge-CSNKLX-s.js} +3 -3
- package/dist/list/index.d.ts +3 -3
- package/dist/{list-query-PvP3pPGQ.d.ts → list-query-DWJIiVz_.d.ts} +4 -4
- package/dist/management-D1gG89z2.d.ts +53 -0
- package/dist/mcp/index.d.ts +41 -16
- package/dist/mcp/index.js +139 -56
- package/dist/mcp/sdk/index.d.ts +6 -6
- package/dist/mcp/sdk/index.js +2 -2
- package/dist/{options-BQ07tTYr.js → methods-7u6vSgz_.js} +4 -4
- package/dist/{money-codec-C_-K5ZUU.js → money-codec-DCGgzO26.js} +1 -1
- package/dist/nestjs/index.d.ts +2 -2
- package/dist/nestjs/index.js +1 -1
- package/dist/next/index.d.ts +16 -16
- package/dist/next/index.js +10 -10
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +1 -1
- package/dist/{onboarding-BZvLLPaY.js → onboarding-viTTNWUp.js} +2 -2
- package/dist/openapi/index.d.ts +2 -2
- package/dist/{operations-C9-UcReN.d.ts → operations-BtuQRwTJ.d.ts} +1 -1
- package/dist/{organizations-Cw7om8uk.js → organizations-Bxrm32IG.js} +4 -4
- package/dist/orpc/index.d.ts +6 -6
- package/dist/orpc/index.js +3 -3
- package/dist/otel/index.d.ts +2 -2
- package/dist/otel/index.js +5 -5
- package/dist/{outbox-BTeqjbum.d.ts → outbox-BCGHl9X6.d.ts} +4 -4
- package/dist/{plugin-CDLJRFFg.d.ts → plugin-D5OIaP93.d.ts} +2 -2
- package/dist/plugins/actor/index.d.ts +1 -1
- package/dist/plugins/rules/index.d.ts +2 -2
- package/dist/plugins/soft-delete/index.d.ts +2 -2
- package/dist/plugins/soft-delete/index.js +1 -1
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/timestamps/index.d.ts +1 -1
- package/dist/plugins/validation/index.d.ts +1 -1
- package/dist/plugins/validation/index.js +1 -1
- package/dist/{pool-CwOCsX9e.d.ts → pool-BBi4mot3.d.ts} +7 -4
- package/dist/{pool-errors-GMjlCN0d.js → pool-errors-C94tPR_G.js} +1 -1
- package/dist/{ports-Ca63W4cW.d.ts → ports-B53rB7zg.d.ts} +7 -7
- package/dist/{ports-DGK3KTDH.js → ports-Bcdppx0G.js} +2 -2
- package/dist/{ports-DAdQyjZz.d.ts → ports-Dcnuo3HT.d.ts} +1 -1
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +11 -5
- package/dist/{postgrest-Cw9Bs5gm.d.ts → postgrest-D6fEMsp4.d.ts} +1 -1
- package/dist/powersync/index.d.ts +3 -3
- package/dist/powersync/index.js +3 -3
- package/dist/powersync/react/index.d.ts +1 -1
- 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-BBrL6_Ln.js +648 -0
- package/dist/{provider-9gBq9W6k.d.ts → provider-CQ1SrhLa.d.ts} +1 -1
- package/dist/{push-token-asrmi7-6.d.ts → push-token-CDMgWT13.d.ts} +1 -1
- package/dist/query/index.d.ts +1 -1
- package/dist/{rank-result-DS8IoLup.js → rank-result-oUF1DYBm.js} +1 -1
- package/dist/{rate-limit--QSiFA6D.js → rate-limit-ByfWNX9N.js} +5 -5
- package/dist/react/index.d.ts +7 -7
- package/dist/react/index.js +1 -1
- package/dist/react/native/index.d.ts +1 -1
- package/dist/react/server.d.ts +8 -8
- package/dist/react/server.js +1 -1
- package/dist/react/session.d.ts +2 -2
- package/dist/{react-CKXUkwPx.js → react-BcKACxsj.js} +1 -1
- package/dist/react-router/index.d.ts +6 -6
- package/dist/react-router/index.js +5 -5
- package/dist/{read-set-GEb-i0On.js → read-set-PWiJfv6S.js} +1 -1
- package/dist/realtime/index.d.ts +7 -7
- package/dist/realtime/index.js +2 -2
- package/dist/{refusal-oD3ISM9h.d.ts → refusal-Bdr1k47u.d.ts} +1 -1
- package/dist/{refusal-br4Ma9Cf.js → refusal-Ch-u9dVd.js} +2 -2
- package/dist/{resolve-w9EpHzuM.d.ts → resolve-7atr-wWr.d.ts} +2 -2
- package/dist/{resource-C8r5xGqY.js → resource-CHGOmg1O.js} +4 -4
- package/dist/{resource-B4ka8dDH.d.ts → resource-DxcgtHq6.d.ts} +1 -1
- package/dist/{resource-execute-D0yQ-8WR.d.ts → resource-execute-C45ICrN9.d.ts} +2 -2
- package/dist/{resource-types-D2vEQVXI.d.ts → resource-types-CC59gMHE.d.ts} +5 -5
- package/dist/{resources-BklF-rjz.d.ts → resources-B71O7EVQ.d.ts} +2 -2
- package/dist/{resources-BlZdLsWQ.js → resources-B7htXQeg.js} +1 -1
- package/dist/{respond-C7I8kLK_.d.ts → respond-Cdg5ibH5.d.ts} +1 -1
- package/dist/{respond-DdhZ9Wbn.js → respond-Dpx48ATq.js} +1 -1
- package/dist/{result-BlgnMB0H.js → result-COkvI9t5.js} +7 -1
- package/dist/{rules-B0-3Iosu.js → rules-4of_Fq-6.js} +31 -5
- package/dist/runtime-BOXURhEW.js +45 -0
- package/dist/{sales-lines-BAk8In-Z.js → sales-lines-CymdiwYd.js} +3 -3
- package/dist/{sales-shared-SblIgCgI.js → sales-shared-DjCuN8xG.js} +1 -1
- package/dist/{search-B6h03cAx.js → search-LbjCylX5.js} +3 -3
- package/dist/server/index.d.ts +20 -20
- package/dist/server/index.js +10 -10
- package/dist/{server-types-OohhIQb2.d.ts → server-types-fXwJoFjt.d.ts} +12 -12
- package/dist/{session-DiWHtYrO.d.ts → session-Djo5t4KQ.d.ts} +5 -5
- package/dist/{settings-BXFn9zpS.js → settings-DxXfDUmh.js} +4 -4
- package/dist/{shared-DbO3Dfms.js → shared-9B02lczf.js} +1 -1
- package/dist/{signatures-B41ApWXA.js → signatures-C9CGYZS1.js} +1 -1
- package/dist/{signers-CXt_wA9S.d.ts → signers-BjSgNAXP.d.ts} +4 -4
- package/dist/{signing-keys-Bq9mMCTh.d.ts → signing-keys-Ccr86Y2C.d.ts} +2 -2
- package/dist/solid/index.d.ts +7 -7
- package/dist/{solid-controller-DqlvYFZa.d.ts → solid-controller-CZrt1Tg6.d.ts} +1 -1
- package/dist/solid-start/index.d.ts +6 -6
- package/dist/solid-start/index.js +5 -5
- package/dist/spec/index.d.ts +2 -2
- package/dist/sql/index.d.ts +5 -709
- package/dist/sql/index.js +5 -86238
- package/dist/{sql-DJrXG-3Z.js → sql-BQshMgmB.js} +2 -2
- package/dist/sql-CgTZOQZ7.js +87439 -0
- package/dist/{sso-BN0LnMqE.d.ts → sso-B5ZoEsXE.d.ts} +3 -3
- package/dist/{sso-BDva_-4y.js → sso-CwAnve68.js} +3 -3
- package/dist/ssr/index.d.ts +4 -4
- package/dist/{standard-B5fe2gnW.js → standard-DZmwmIhV.js} +1 -1
- package/dist/{stats-D6vkb89f.js → stats-CUhqw6Ev.js} +2 -2
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +4 -4
- package/dist/{storage-api-Cx-1iWBd.d.ts → storage-api-B4Ib2Zpo.d.ts} +2 -2
- package/dist/streams/index.d.ts +1 -1
- package/dist/streams/index.js +2 -2
- package/dist/streams/redis/index.js +1 -1
- package/dist/{subject-readers-fxP5wu0s.d.ts → subject-readers-81xiWh4M.d.ts} +2 -2
- package/dist/{subject-readers-DiePmaYP.js → subject-readers-DDyPTIOr.js} +1 -1
- package/dist/{subjects-z8VWA_lF.d.ts → subjects-DP-fvFkk.d.ts} +8 -0
- package/dist/{support-BsKkvA92.js → support-BsqhV6jP.js} +5 -5
- package/dist/{support-view-BbcZR7Io.d.ts → support-view-CznLe4jq.d.ts} +1 -1
- package/dist/svelte/index.d.ts +6 -6
- package/dist/{svelte-controller-DxxHEHxD.d.ts → svelte-controller-DDbju9CW.d.ts} +1 -1
- package/dist/sveltekit/index.d.ts +7 -7
- package/dist/sveltekit/index.js +5 -5
- package/dist/{tags-Dw8vKkcI.d.ts → tags-7NHyD1P8.d.ts} +1 -1
- package/dist/{tags-PaG0Ns_9.js → tags-DGldvcA4.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 +6 -6
- package/dist/tanstack-start/index.js +5 -5
- package/dist/{tax-D_kSCdWU.js → tax-DZDpMMRw.js} +1 -1
- package/dist/{tee-Bsisfd7t.js → tee-CdRV1tcj.js} +1 -1
- package/dist/{tenant-DdmVhsff.d.ts → tenant-DW_GmsW4.d.ts} +2 -2
- package/dist/testing/index.d.ts +23 -23
- package/dist/testing/index.js +8 -51
- package/dist/{topic-ByDz9edV.js → topic-DB-1YTMj.js} +35 -16
- package/dist/{topic-cMS7UtM1.d.ts → topic-Dgs-eSYQ.d.ts} +31 -17
- package/dist/{types-YfwpIE-d.d.ts → types-BO8lVTun.d.ts} +6 -0
- package/dist/{types-D0W4fnsc.d.ts → types-C_GN-4ed.d.ts} +4 -4
- package/dist/types-DGHfTW8_.d.ts +9 -0
- package/dist/{types-pNY_UpDs.d.ts → types-DM8q3IOr.d.ts} +3 -3
- package/dist/{types-6oiy6rIa.d.ts → types-DOaUIJxW.d.ts} +4 -4
- package/dist/{types-vaoP9S9_.d.ts → types-DZj8CZMH.d.ts} +22 -8
- package/dist/{types-CdP0z5tS.d.ts → types-P1S1cj6N.d.ts} +5 -5
- package/dist/{undo-CEGIRkPA.js → undo-0qM13zul.js} +3 -3
- package/dist/{undo-DGo0skyO.d.ts → undo-D42sPjCf.d.ts} +2 -2
- package/dist/{usage-CdlfuS3i.js → usage-BrJGPvCq.js} +2 -2
- package/dist/{usage-DM2rzczj.d.ts → usage-CnQHSM_r.d.ts} +4 -4
- package/dist/{vault-tOkPLnMB.d.ts → vault-EnOQJWjn.d.ts} +2 -2
- package/dist/vercel-connect/index.d.ts +1 -1
- package/dist/vercel-connect/index.js +1 -1
- package/dist/{verify-D63A2ALE.d.ts → verify-3NLjUIER.d.ts} +2 -2
- package/dist/{verify-EQcC3Khp.js → verify-C9D_jjsQ.js} +2 -2
- package/dist/{version-D87ZteKy.js → version-Bxj_xcUY.js} +1 -1
- package/dist/{view-Dv0A949a.d.ts → view-SuASaomx.d.ts} +1 -1
- package/dist/vue/index.d.ts +7 -7
- package/dist/{vue-controller-HPfMTDa2.d.ts → vue-controller-D_ohttBZ.d.ts} +1 -1
- package/dist/{watch-DT_B3CnJ.js → watch-Blj1mQ9n.js} +1 -1
- package/dist/{watch-DDuWYv0Y.d.ts → watch-D1wwzZ04.d.ts} +5 -5
- package/dist/{watch-topic-EFpOIIDE.d.ts → watch-topic-D-rpUg5n.d.ts} +1 -1
- package/dist/{workflow-builder-OrglbXUh.js → workflow-builder-C5DBN7yq.js} +25 -9
- 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 +2 -2
- package/dist/{workflow-sdk-q8cLwW1K.d.ts → workflow-sdk-Di5pmCAu.d.ts} +3 -3
- package/dist/{workflow-sdk-BZ6qsRlY.js → workflow-sdk-vjDWlnfX.js} +1 -1
- package/dist/{workflows-DFQeXDAI.d.ts → workflows-DJXoxDZH.d.ts} +3 -3
- package/dist/{workflows-C-OvZpeg.js → workflows-DzdX28KN.js} +3 -3
- package/dist/yjs/index.d.ts +2 -2
- package/dist/yjs/index.js +2 -2
- package/package.json +27 -15
- package/schemas/config-v1.json +180 -7
- package/schemas/doctor-report-v1.json +7 -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/cli/{detect-DYDUBLU4.js → detect-BeLVeNpA.js} +1 -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
|
+
```
|