Compare commits

...

2 Commits

Author SHA1 Message Date
Khalid Abdi aa535f08c4 chore: release v0.15.1
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 00:05:33 +03:00
Khalid Abdi 000591f87f frontend: space separated panels in settings frames
Add an opt-in `separated` prop to SettingsFrame/SettingsSection that adds the
COSS "Separated Panels" gap-4 between sibling panels (matches CardFrame's
built-in -1rem clip vars so rounded corners clip across the gap). Turn it on
for the multi-toggle frames — AI availability and the two notification
sections — so their panels no longer stack flush. Joined divide-y lists stay
flush.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-16 23:48:30 +03:00
7 changed files with 35 additions and 5 deletions
+10
View File
@@ -7,6 +7,16 @@ for how releases are cut and published.
## [Unreleased]
## [0.15.1] — 2026-07-17
### Fixed
- **Settings frames with more than one panel now breathe.** When a settings section stacked
several cards — the AI availability toggles and the patient/account notification lists — the
panels sat flush against each other with no gap, reading as one joined block. Those frames now
use the COSS "separated panels" spacing (a 1rem gap that keeps each card's rounded corners),
while intentional joined lists (care team, records) stay flush. Opt-in via a new `separated`
prop on `SettingsFrame`/`SettingsSection` (`frontend/components/settings/settings-parts.tsx`).
## [0.15.0] — 2026-07-15
### Fixed
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "temetro-backend",
"version": "0.15.0",
"version": "0.15.1",
"private": true,
"type": "module",
"description": "temetro backend — Express + Postgres API with Better Auth (email/password, organizations) and org-scoped patient records.",
@@ -211,6 +211,7 @@ export function AIPanel() {
{policy ? (
<SettingsFrame
description={t("settings.ai.availability.description")}
separated
title={t("settings.ai.availability.title")}
>
{isAdmin ? (
@@ -14,6 +14,7 @@ import {
CardFrameTitle,
} from "@/components/ui/card";
import { Switch } from "@/components/ui/switch";
import { cn } from "@/lib/utils";
// A settings section rendered inside the COSS "frame" surface: a titled header
// above one or more cards.
@@ -34,15 +35,23 @@ export function SettingsFrame({
action,
children,
className,
separated = false,
}: {
title: string;
description?: string;
action?: ReactNode;
children: ReactNode;
className?: string;
/**
* COSS "Separated Panels": add a 1rem gap so sibling panels read as distinct
* cards instead of one flush joined list. The `gap-4` matches CardFrame's
* built-in `--clip-top/--clip-bottom: -1rem`, which keeps each panel's rounded
* corners clipping correctly across the gap. Leave off for a joined list.
*/
separated?: boolean;
}) {
return (
<CardFrame className={className}>
<CardFrame className={cn(separated && "gap-4", className)}>
<CardFrameHeader className="border-b border-border/60">
<CardFrameTitle className="text-base">{title}</CardFrameTitle>
{description ? (
@@ -63,14 +72,22 @@ export function SettingsSection({
description,
action,
children,
separated = false,
}: {
title: string;
description?: string;
action?: ReactNode;
children: ReactNode;
/** See {@link SettingsFrame}'s `separated` — spaces sibling panels apart. */
separated?: boolean;
}) {
return (
<SettingsFrame action={action} description={description} title={title}>
<SettingsFrame
action={action}
description={description}
separated={separated}
title={title}
>
{children}
</SettingsFrame>
);
@@ -339,6 +339,7 @@ export function ProfilePanel() {
<SettingsSection
description={t("settings.profile.patientNotificationsDescription")}
separated
title={t("settings.profile.patientNotifications")}
>
{patientNotifications.map((item) => (
@@ -356,6 +357,7 @@ export function ProfilePanel() {
<SettingsSection
description={t("settings.profile.accountNotificationsDescription")}
separated
title={t("settings.profile.accountNotifications")}
>
{accountNotifications.map((item) => (
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "frontend",
"version": "0.15.0",
"version": "0.15.1",
"private": true,
"scripts": {
"dev": "next dev",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "temetro",
"version": "0.15.0",
"version": "0.15.1",
"private": true,
"devDependencies": {
"shadcn": "^4.11.0"