Skip to content

Commit 83f14af

Browse files
authored
Merge branch 'master' into claude/festive-goodall
2 parents c3bf1f8 + 609b6db commit 83f14af

424 files changed

Lines changed: 41111 additions & 12939 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/publish_image.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ on:
88

99
permissions:
1010
contents: read
11+
packages: write
12+
id-token: write
1113

1214
jobs:
1315
settings:

.github/workflows/studio-e2e-test.yml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,13 @@ jobs:
4343
- 'e2e/studio/**'
4444
- 'pnpm-lock.yaml'
4545
- '.github/workflows/studio-e2e-test.yml'
46+
4647
- uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4.2.0
4748
if: steps.filter.outputs.studio == 'true'
4849
name: Install pnpm
4950
with:
5051
run_install: false
52+
5153
- name: Use Node.js
5254
if: steps.filter.outputs.studio == 'true'
5355
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
@@ -69,7 +71,6 @@ jobs:
6971
with:
7072
# See here for caching with `yarn`, `bun` or other package managers https://github.com/actions/cache/blob/main/examples.md or you can leverage caching with actions/setup-node https://github.com/actions/setup-node
7173
path: |
72-
.turbo/cache
7374
apps/studio/.next/build
7475
apps/studio/.next/cache
7576
# Generate a new cache whenever packages or source files change.
@@ -82,6 +83,14 @@ jobs:
8283
if: steps.filter.outputs.studio == 'true'
8384
run: rm -rf supabase && pnpm exec supabase init && mkdir supabase/functions
8485

86+
- name: Start supabase
87+
if: steps.filter.outputs.studio == 'true'
88+
run: SKIP_ASSET_UPLOAD=1 pnpm run e2e:setup:cli
89+
90+
- name: Build studio
91+
if: steps.filter.outputs.studio == 'true'
92+
run: SKIP_ASSET_UPLOAD=1 NODE_ENV=test NODE_OPTIONS="--max-old-space-size=4096" pnpm run build:studio
93+
8594
- name: 🚀 Run Playwright tests against Vercel Preview
8695
if: steps.filter.outputs.studio == 'true'
8796
id: playwright

.github/workflows/ui-tests.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,11 @@ jobs:
7070
continue-on-error: true
7171
runs-on: blacksmith-4vcpu-ubuntu-2404
7272
steps:
73+
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
74+
with:
75+
sparse-checkout: |
76+
packages/ui
77+
patches
7378
- name: Download coverage artifact
7479
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
7580
with:

apps/design-system/content/docs/components/sheet.mdx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,11 @@ source:
1313
<ComponentPreview name="sheet-demo" peekCode wide />
1414

1515
1. **Use for side panels**
16-
1716
- Forms with multiple fields
1817
- Settings panels
1918
- Detailed editors
2019

2120
2. **Consider screen size**
22-
2321
- Sheets work well on desktop
2422
- On mobile, consider full-screen or bottom sheet variants
2523

apps/design-system/content/docs/icons.mdx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,13 @@ function app() {
4545
}
4646
```
4747

48-
**Default props**: All icons default to `size={24}`. Stroke and fill defaults come from the source SVG's root attributes (e.g. `stroke-width="1"` in the source becomes the component's default `strokeWidth`). Override these props as needed for your use case.
48+
**Default props**: All icons default to `size={24}`. Stroke and fill defaults come from the source SVG's root attributes (e.g. `stroke-width="1"` on the root `<svg>` becomes the component's default `strokeWidth`). You can override those defaults at the call site, but any `stroke`, `fill`, or `stroke-width` set on individual child paths will still win.
4949

5050
### Adding new custom icons
5151

5252
Follow these steps to add a new custom icon to the Supabase icon library.
5353

5454
1. **Create SVG file**: Add your SVG file to `packages/icons/src/raw-icons/` with a kebab-case name (e.g., `my-new-icon.svg`). Make sure it follows these requirements:
55-
5655
- Exported at 24×24px with `viewBox="0 0 24 24"`
5756
- Uses `stroke="currentColor"` for strokes (no hardcoded colors)
5857
- Uses `stroke-width="1.5"` (deviate based on optical weight if necessary)
@@ -63,7 +62,7 @@ Follow these steps to add a new custom icon to the Supabase icon library.
6362

6463
For **fill-only icons** (e.g. logos that use shapes instead of strokes), add `stroke="none"` to the root `<svg>` element. The build will propagate this so the component never renders an unwanted stroke.
6564

66-
Leave attributes like `stroke-width` as they are. The root SVG's `fill`, `stroke`, `stroke-width`, `stroke-linecap`, and `stroke-linejoin` attributes are automatically propagated as the component's defaults by the build process. The conversion to camel-case for React compatibility (e.g. `strokeWidth`) is also handled automatically.
65+
Prefer putting shared styling like `fill`, `stroke`, `stroke-width`, `stroke-linecap`, and `stroke-linejoin` on the root `<svg>`. The build propagates those root attributes as the component's defaults, and also converts them to camel-case for React compatibility (e.g. `strokeWidth`). If you put those attributes on individual child paths instead, they become fixed path-level styling and will override props passed to the component.
6766

6867
2. **Build the component**: Run `npm run build:icons` from inside the `packages/icons` directory
6968

@@ -133,4 +132,4 @@ Note `stroke="none"` on the root to prevent unwanted strokes, and `fill="current
133132

134133
### Troubleshooting
135134

136-
If your SVG specifies `stroke-width` attributes, they will override the component's `strokeWidth` prop. Remove stroke attributes from individual paths to let the component control them.
135+
If your SVG specifies `stroke-width` attributes on individual child paths, they will override the component's `strokeWidth` prop. Keep shared stroke attributes on the root `<svg>` and remove them from individual paths if you want consumers to control stroke weight.

apps/design-system/content/docs/ui-patterns/forms.mdx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ Forms in side panels (Sheets) use `FormItemLayout` with `layout="horizontal"` on
3232
1. **Always use FormItemLayout**: Use `FormItemLayout` instead of manually composing `FormItem`, `FormLabel`, `FormMessage`, and `FormDescription`.
3333

3434
2. **Layout selection**:
35-
3635
- Use `layout="flex-row-reverse"` for page layouts (horizontal alignment)
3736
- Use `layout="horizontal"` for side panels with more width
3837
- Use `layout="vertical"` for side panels with limited width

apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2835,6 +2835,7 @@ export const self_hosting: NavMenuConstant = {
28352835
{
28362836
name: 'How-to Guides',
28372837
items: [
2838+
{ name: 'Configure new API keys', url: '/guides/self-hosting/self-hosted-auth-keys' },
28382839
{ name: 'Self-Hosted Functions', url: '/guides/self-hosting/self-hosted-functions' },
28392840
{
28402841
name: 'Add Reverse Proxy with HTTPS',
Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
1-
| Endpoint | Path | Limited By | Rate Limit |
2-
| ------------------------------------------------ | -------------------------------------------------------------- | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
3-
| All endpoints that send emails | `/auth/v1/signup` `/auth/v1/recover` `/auth/v1/user`[^1] | Sum of combined requests | Defaults to 4 emails per hour as of 14th July 2023. As of 21 Oct 2023, this has been updated to <SharedData data="config">auth.rate_limits.email.inbuilt_smtp_per_hour</SharedData> emails per hour. You can only change this with your own custom SMTP setup. |
4-
| All endpoints that send One-Time-Passwords (OTP) | `/auth/v1/otp` | Sum of combined requests | Defaults to <SharedData data="config">auth.rate_limits.otp.requests_per_hour</SharedData> OTPs per hour. Is customizable. |
5-
| Send OTPs or magic links | `/auth/v1/otp` | Last request of the user | Defaults to <SharedData data="config">auth.rate_limits.otp.period</SharedData> window before a new request is allowed to the same user. Is customizable. |
6-
| Signup confirmation request | `/auth/v1/signup` | Last request of the user | Defaults to <SharedData data="config">auth.rate_limits.signup_confirmation.period</SharedData> window before a new request is allowed to the same user. Is customizable. |
7-
| Password Reset Request | `/auth/v1/recover` | Last request of the user | Defaults to <SharedData data="config">auth.rate_limits.password_reset.period</SharedData> window before a new request is allowed to the same user. Is customizable. |
8-
| Verification requests | `/auth/v1/verify` | IP Address | <SharedData data="config">auth.rate_limits.verification.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.verification.requests_burst</SharedData> requests) |
9-
| Token refresh requests | `/auth/v1/token` | IP Address | <SharedData data="config">auth.rate_limits.token_refresh.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.token_refresh.requests_burst</SharedData> requests) |
10-
| Create or Verify an MFA challenge | `/auth/v1/factors/:id/challenge` `/auth/v1/factors/:id/verify` | IP Address | <SharedData data="config">auth.rate_limits.mfa.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.verification.mfa</SharedData> requests) |
11-
| Anonymous sign-ins | `/auth/v1/signup`[^2] | IP Address | <SharedData data="config">auth.rate_limits.anonymous_signin.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.anonymous_signin.requests_burst</SharedData> requests) |
12-
13-
[^1]: The rate limit is only applied on `/auth/v1/user` if this endpoint is called to update the user's email address.
14-
[^2]: The rate limit is only applied on `/auth/v1/signup` if this endpoint is called without passing in an email or phone number in the request body.
1+
| Operation | Path | Limited By | Customizable | Limit |
2+
| ---------------------------------- | -------------------------------------------------------------- | ------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
3+
| Endpoints that trigger email sends | `/auth/v1/signup` `/auth/v1/recover` `/auth/v1/user` | Sum of combined requests project-wide | Custom SMTP Only | <SharedData data="config">auth.rate_limits.email.inbuilt_smtp_per_hour</SharedData> emails per hour with the built-in email provider. You can only change this with a custom SMTP setup. The rate limit is only applied on `/auth/v1/user` if this endpoint is called to update the user's email address. |
4+
| Send One-Time-Passwords (OTP) | `/auth/v1/otp` | Sum of combined requests project-wide | Yes | Defaults to <SharedData data="config">auth.rate_limits.otp.requests_per_hour</SharedData> OTPs per hour. |
5+
| Send OTPs or magic links | `/auth/v1/otp` | Last request of the user | Yes | Defaults to <SharedData data="config">auth.rate_limits.otp.period</SharedData> window before a new request is allowed to the same user. |
6+
| Signup confirmation request | `/auth/v1/signup` | Last request of the user | Yes | Defaults to <SharedData data="config">auth.rate_limits.signup_confirmation.period</SharedData> window before a new request is allowed to the same user. |
7+
| Password Reset Request | `/auth/v1/recover` | Last request of the user | Yes | Defaults to <SharedData data="config">auth.rate_limits.password_reset.period</SharedData> window before a new request is allowed to the same user. |
8+
| Verification requests | `/auth/v1/verify` | IP Address | No | <SharedData data="config">auth.rate_limits.verification.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.verification.requests_burst</SharedData> requests) |
9+
| Token refresh requests | `/auth/v1/token` | IP Address | No | <SharedData data="config">auth.rate_limits.token_refresh.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.token_refresh.requests_burst</SharedData> requests) |
10+
| Create or Verify an MFA challenge | `/auth/v1/factors/:id/challenge` `/auth/v1/factors/:id/verify` | IP Address | No | <SharedData data="config">auth.rate_limits.mfa.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.verification.mfa</SharedData> requests) |
11+
| Anonymous sign-ins | `/auth/v1/signup` | IP Address | No | <SharedData data="config">auth.rate_limits.anonymous_signin.requests_per_hour</SharedData> requests per hour (with bursts up to <SharedData data="config">auth.rate_limits.anonymous_signin.requests_burst</SharedData> requests). Rate limit only applies if this endpoint is called without passing in an email or phone number in the request body. |

apps/docs/content/_partials/billing/pricing/pricing_edge_functions.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
<Price price="2" /> per 1 million invocations. You are only charged for usage exceeding your subscription
2-
plan's quota.
1+
<Price price="2" /> per 1 million invocations. You are only charged for usage exceeding your
2+
subscription plan's quota.
33

44
| Plan | Quota | Over-Usage |
55
| ---------- | --------- | --------------------------------------------- |
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
## Pricing
22

3-
<Price price="0.015" /> per SSO MAU. You are only charged for usage exceeding your subscription plan's
4-
quota.
3+
<Price price="0.015" /> per SSO MAU. You are only charged for usage exceeding your subscription
4+
plan's quota.
55

66
For a detailed breakdown of how charges are calculated, refer to [Manage Monthly Active SSO Users usage](/docs/guides/platform/manage-your-usage/monthly-active-users-sso).

0 commit comments

Comments
 (0)