From 3bd34ed9a199be0a0ea4f841892177f4a9bc8807 Mon Sep 17 00:00:00 2001 From: Karn Date: Thu, 27 Aug 2026 15:14:33 +0530 Subject: [PATCH] maint: normalize desktop density and touch sizing --- .changeset/small-forms-fit.md | 6 +++++ apps/docs/src/docs.css | 8 +++---- .../_shared/selection-control.stylex.ts | 12 +++++++++- .../components/checkbox/checkbox.stylex.ts | 6 +++-- .../command-menu/command-menu.stylex.ts | 16 +++++++++----- .../src/components/command-menu/index.tsx | 6 ++++- .../filter-picker/filter-picker.stylex.ts | 6 ++--- .../radio-group/radio-group.stylex.ts | 10 +++++---- .../dowel/src/components/select/index.tsx | 6 ++++- .../src/components/select/select.stylex.ts | 10 ++++++--- .../src/components/switch/switch.stylex.ts | 22 ++++++++++++++----- 11 files changed, 77 insertions(+), 31 deletions(-) create mode 100644 .changeset/small-forms-fit.md diff --git a/.changeset/small-forms-fit.md b/.changeset/small-forms-fit.md new file mode 100644 index 0000000..394c310 --- /dev/null +++ b/.changeset/small-forms-fit.md @@ -0,0 +1,6 @@ +--- +"@karnstack/dowel": patch +--- + +Match dense desktop menus and pickers to the documented control scale while +expanding labels and hit targets for touch input. diff --git a/apps/docs/src/docs.css b/apps/docs/src/docs.css index 91f28f6..48b29d0 100644 --- a/apps/docs/src/docs.css +++ b/apps/docs/src/docs.css @@ -1285,7 +1285,7 @@ body { .docs-gallery-item { display: flex; min-inline-size: 0; - min-block-size: 10rem; + min-block-size: 8.5rem; flex-direction: column; gap: var(--dowel-space-7); overflow: hidden; @@ -1333,7 +1333,7 @@ body { } .docs-gallery-item[data-layout="wide"] { - min-block-size: 18rem; + min-block-size: 16rem; } .docs-gallery-item[data-layout="wide"] .docs-gallery-preview { @@ -1396,13 +1396,13 @@ body { } .docs-gallery-item { - min-block-size: 10.5rem; + min-block-size: 9rem; padding: var(--dowel-space-7); } .docs-gallery-item[data-layout="wide"] { grid-column: 1 / -1; - min-block-size: 18rem; + min-block-size: 16rem; } } diff --git a/packages/dowel/src/components/_shared/selection-control.stylex.ts b/packages/dowel/src/components/_shared/selection-control.stylex.ts index e6f72a3..a4e619d 100644 --- a/packages/dowel/src/components/_shared/selection-control.stylex.ts +++ b/packages/dowel/src/components/_shared/selection-control.stylex.ts @@ -2,8 +2,14 @@ import * as stylex from "@stylexjs/stylex"; import { tokens } from "../../theme/tokens.stylex"; +const COARSE = "@media (pointer: coarse)"; + export const control = stylex.create({ root: { + "--dowel-selection-hit-size": { + default: "calc(100% + 0.75rem)", + [COARSE]: "3rem", + }, alignItems: "center", appearance: "none", backgroundColor: tokens["--dowel-bg-surface-1"], @@ -24,8 +30,12 @@ export const control = stylex.create({ verticalAlign: "middle", "::before": { content: '""', - inset: "-0.375rem", + height: "var(--dowel-selection-hit-size)", + left: "50%", position: "absolute", + top: "50%", + transform: "translate(-50%, -50%)", + width: "var(--dowel-selection-hit-size)", }, ":hover:not([data-disabled])": { backgroundColor: tokens["--dowel-bg-hover"], diff --git a/packages/dowel/src/components/checkbox/checkbox.stylex.ts b/packages/dowel/src/components/checkbox/checkbox.stylex.ts index 6848a9d..9014770 100644 --- a/packages/dowel/src/components/checkbox/checkbox.stylex.ts +++ b/packages/dowel/src/components/checkbox/checkbox.stylex.ts @@ -2,11 +2,13 @@ import * as stylex from "@stylexjs/stylex"; import { tokens } from "../../theme/tokens.stylex"; +const COARSE = "@media (pointer: coarse)"; + export const checkbox = stylex.create({ root: { borderRadius: tokens["--dowel-radius-sm"], - height: "1rem", - width: "1rem", + height: { default: "1rem", [COARSE]: "1.25rem" }, + width: { default: "1rem", [COARSE]: "1.25rem" }, "[data-indeterminate]": { backgroundColor: tokens["--dowel-accent"], borderColor: tokens["--dowel-accent"], diff --git a/packages/dowel/src/components/command-menu/command-menu.stylex.ts b/packages/dowel/src/components/command-menu/command-menu.stylex.ts index 2a40c65..1c35a94 100644 --- a/packages/dowel/src/components/command-menu/command-menu.stylex.ts +++ b/packages/dowel/src/components/command-menu/command-menu.stylex.ts @@ -74,7 +74,7 @@ export const command = stylex.create({ borderBottomWidth: tokens["--dowel-hairline"], display: "flex", gap: "0.625rem", - minHeight: "3rem", + minHeight: { default: "2.5rem", [MOBILE]: "3rem" }, paddingInline: "0.875rem", }, searchIcon: { color: tokens["--dowel-text-tertiary"], flexShrink: 0 }, @@ -85,7 +85,7 @@ export const command = stylex.create({ flex: 1, fontFamily: tokens["--dowel-font-sans"], fontSize: { default: "0.9375rem", [MOBILE]: "1rem" }, - height: "3rem", + height: { default: "2.5rem", [MOBILE]: "3rem" }, minWidth: 0, outline: "none", padding: 0, @@ -106,12 +106,16 @@ export const command = stylex.create({ cursor: "default", display: "flex", gap: "0.625rem", - minHeight: "2.5rem", + minHeight: { default: "2rem", [MOBILE]: "2.75rem" }, outline: "none", - padding: "0.375rem 0.5rem", + paddingInline: "0.5rem", "[data-highlighted]": { backgroundColor: tokens["--dowel-bg-hover"] }, "[data-disabled]": { color: tokens["--dowel-text-disabled"] }, }, + itemWithDescription: { + minHeight: { default: "2.5rem", [MOBILE]: "3.25rem" }, + paddingBlock: "0.125rem", + }, itemIcon: { alignItems: "center", color: tokens["--dowel-text-tertiary"], @@ -121,7 +125,7 @@ export const command = stylex.create({ itemCopy: { display: "flex", flex: 1, flexDirection: "column", minWidth: 0 }, itemLabel: { fontFamily: tokens["--dowel-font-sans"], - fontSize: "0.8125rem", + fontSize: { default: "0.8125rem", [MOBILE]: "1rem" }, lineHeight: 1.4, overflow: "hidden", textOverflow: "ellipsis", @@ -130,7 +134,7 @@ export const command = stylex.create({ itemDescription: { color: tokens["--dowel-text-tertiary"], fontFamily: tokens["--dowel-font-sans"], - fontSize: "0.75rem", + fontSize: { default: "0.75rem", [MOBILE]: "0.875rem" }, lineHeight: 1.4, overflow: "hidden", textOverflow: "ellipsis", diff --git a/packages/dowel/src/components/command-menu/index.tsx b/packages/dowel/src/components/command-menu/index.tsx index 5b87e94..6ad3fd5 100644 --- a/packages/dowel/src/components/command-menu/index.tsx +++ b/packages/dowel/src/components/command-menu/index.tsx @@ -149,7 +149,11 @@ export function CommandMenu({ value={item} disabled={item.disabled} onClick={() => select(item)} - {...sx(styles.command.item)} + {...sx( + styles.command.item, + Boolean(item.description) && + styles.command.itemWithDescription, + )} > {item.icon ? (