Files
supabase/apps/studio/components
Claude 93d67ab446 feat(storage): surface delete markers, gate cap on age, add policy blurb
Version history:
- Add "delete marker" as a first-class ObjectVersion action and seed
  one into the mock so a stale marker shows up in the history.
- Render it with a struck/dashed thumbnail glyph and a "Delete marker"
  label, and drop the download/URL/restore actions — the only useful
  action on an empty placeholder is permanently removing it.
- Row is non-clickable (nothing to preview) and dimmed.
- Confirmation copy is tailored to markers (no version id shown, no
  "current version is not affected" — there's no meaningful content).

Bucket lifecycle policy form:
- Add a one-line description under the "Lifecycle policy" heading
  explaining what these policies do.
- Disable the "Retained noncurrent versions" input when
  "Noncurrent version expiration" is empty (S3 requires the
  noncurrent-days condition on any noncurrent-count rule). A short
  description under the field explains the dependency.
- Clear the retained value on the exact age→empty transition so a
  save can never persist an orphaned cap, but keep any pre-existing
  orphaned value visible (and editable once age is set again) rather
  than silently discarding it on modal open.
2026-08-19 08:03:52 +00:00
..

Writing components

Where to create your components

  • For components that declare the general structure and layout of a page:
    • /components/layouts/xxx
  • For components that are tightly coupled to a specific interface:
    • /components/interfaces/xxx
  • For components that are meant to be reusable across multiple pages:
    • /components/ui/xxx
  • Note: We're gradually moving files out of the to-be-cleaned folder into the respective folders as we refactor

Component structure

  • If a component has constants and utility methods that are tightly coupled to itself, keep them close to the component and enclose them in a folder with an index.tsx as an entry point
  • Otherwise it can just be a file on its own
  • For example:
    • components/ui
      - SampleComponentA
        - SampleComponentA.tsx
        - SampleComponentA.constants.ts
        - SampleComponentA.utils.ts
        - SampleComponentA.types.ts
        - index.ts
      - SampleComponentB.tsx
      

Template for building components


// Declare the prop types of your component
interface ComponentAProps {
  sampleProp: string
}

// Name your component accordingly — use a named export, not a default export
export const ComponentA = ({ sampleProp }: ComponentAProps) => {
  return <div>ComponentA: {sampleProp}</div>
}