diff --git a/go/cmd/kjol-website/app/components.go b/go/cmd/kjol-website/app/components.go
index 782d4cb0..52ab1c39 100644
--- a/go/cmd/kjol-website/app/components.go
+++ b/go/cmd/kjol-website/app/components.go
@@ -232,7 +232,7 @@ func badgesSection() func() *VNode {
ui.EnvBadge("staging"),
// Production deliberately renders NOTHING — the badge exists to tell you that
// you are NOT in production, and a badge that is always there says nothing.
- Span(Attr("class", "text-xs text-ink-muted"),
+ Span(Attr("class", "text-ss text-ink-muted"),
Text("(production renders nothing — that is the point of it)")),
),
),
@@ -473,7 +473,7 @@ func selectsSection() func() *VNode {
field("Timezone", ui.FormTimezoneSelector(ui.FormSelectProps{
Value: tz.Get(), OnChange: func(v string) { tz.Set(v) }})),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("one="+orElse(one.Get(), "—")+" several="+orElse(strings.Join(langs.Get(), ","), "—"))),
),
@@ -484,7 +484,7 @@ func selectsSection() func() *VNode {
OnSelect: func(o ui.FormSelectOption) { picked.Set(o.Label + " <" + o.Value + ">") },
}),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("Two characters before it asks; 200 ms after you stop typing. A response for a query "+
"you have already typed past is DISCARDED rather than shown — which is the whole bug "+
"with hand-rolled autocompletes.")),
@@ -500,7 +500,7 @@ func selectsSection() func() *VNode {
ShowSelectAll: true,
OnChange: func(v []string) { tags.Set(v) },
}),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("Same selection model as the field above; only the thing you click on differs.")),
),
)
@@ -535,7 +535,7 @@ func togglesSection() func() *VNode {
demo("Signature pad — "+itoa(len(signed.Get()))+" bytes of SVG",
pad.Render(ui.SignaturePadProps{}),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("Draw in it. Long strokes are smoothed; a single stray point is not a stroke and "+
"is dropped, so a click does not leave a dot behind.")),
),
@@ -584,7 +584,7 @@ func datesSection() func() *VNode {
OnNavigate: func(m time.Time) { month.Set(m) },
}),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("The same grid the picker drops down, usable directly when you want it inline.")),
),
)
@@ -676,7 +676,7 @@ func tablesSection() func() *VNode {
SortDesc: gridDesc.Get(),
SetSortDesc: func(b bool) { gridDesc.Set(b) },
}),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("Click a Qty or Price cell and type. The grid does not own the rows — it tells you "+
"which cell changed and hands the value back; what you do with it is yours.")),
),
@@ -801,7 +801,7 @@ func overlaysSection(push func(ui.ToastType, string)) func() *VNode {
tipFocus.Render(Span(Text("Shown on FOCUS, not hover — tab to the field")),
ui.FormInput(ui.FormInputProps{Placeholder: "Focus me"})),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("Narrow the window and hover \"Right\": it flips to the left, and its arrow follows "+
"it. A tooltip that only answers to a mouse is a tooltip a keyboard user cannot read.")),
),
@@ -862,7 +862,7 @@ func overlaysSection(push func(ui.ToastType, string)) func() *VNode {
hoverMenu.Item(ui.MenuItemProps{}, Text("Two")),
),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("Opening one closes the other — a single-open manager. Submenus are exempt, or a "+
"submenu would close the very menu it belongs to as it opened. The items raise toasts, "+
"which is how you can see that an item really does close its own menu.")),
@@ -889,7 +889,7 @@ func overlaysSection(push func(ui.ToastType, string)) func() *VNode {
}, ui.ModalOptions{Size: ui.ModalSmall})
}}),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("Open the modal, then the nested one inside it, and press Escape twice: modals unwind "+
"ONE LAYER per press rather than all at once.")),
@@ -994,7 +994,7 @@ func feedbackSection(toaster *ui.Toaster, tour *ui.Tutorial) func() *VNode {
demo("The guided tour",
row("flex flex-wrap items-center gap-3",
tour.StartButton(0, "", Text("Take the tour")),
- Span(Attr("class", "text-xs text-ink-muted"),
+ Span(Attr("class", "text-ss text-ink-muted"),
Text("It dims the page, cuts a hole around each target, and animates the spotlight from "+
"one to the next. Targets are CSS SELECTORS — the same section ids the sidebar jumps to.")),
),
@@ -1006,7 +1006,7 @@ func feedbackSection(toaster *ui.Toaster, tour *ui.Tutorial) func() *VNode {
OnClick: flash.Fire}),
ui.RemoteUpdateFlash(flash.Visible()),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("A two-second acknowledgement that data you are looking at was changed by somebody "+
"else. It is not a toast: it belongs next to the thing that moved, not in the corner.")),
),
@@ -1071,7 +1071,7 @@ func navigationSection() func() *VNode {
demo("Accordion — one open at a time, or several",
row("grid gap-6 lg:grid-cols-2",
row("flex flex-col gap-2",
- P(Attr("class", "text-xs font-semibold uppercase tracking-widest text-ink-faint"),
+ P(Attr("class", "text-ss font-semibold uppercase tracking-widest text-ink-faint"),
Text("SingleAccordion")),
ui.SingleAccordion([]ui.AccordionItemData{
{Title: "What is Kjøl Wasm Web?", Content: panel("kjol's Go→WebAssembly UI engine.")},
@@ -1080,7 +1080,7 @@ func navigationSection() func() *VNode {
}, acc.Get(), func(i int) { acc.Set(i) }),
),
row("flex flex-col gap-2",
- P(Attr("class", "text-xs font-semibold uppercase tracking-widest text-ink-faint"),
+ P(Attr("class", "text-ss font-semibold uppercase tracking-widest text-ink-faint"),
Text("Accordion (several at once)")),
ui.Accordion([]ui.AccordionItemData{
{Title: "First", Content: panel("Open me.")},
@@ -1107,7 +1107,7 @@ func navigationSection() func() *VNode {
}},
}, func(id string) { side.Set(id) }, ""),
),
- P(Attr("class", "mt-3 text-xs text-ink-muted"),
+ P(Attr("class", "mt-3 text-ss text-ink-muted"),
Text("It reports the id you clicked and nothing else. The sidebar on THIS page is the "+
"same idea, wired to scroll the section into view.")),
),
@@ -1230,7 +1230,7 @@ func chartsSection() func() *VNode {
row("mt-4 flex items-center gap-3",
ui.Button(ui.ButtonProps{Color: ui.ButtonPrimary, Small: true, Text: "New data", OnClick: func() { seed.Set(seed.Get() + 1) }}),
ui.Button(ui.ButtonProps{Color: ui.ButtonNeutral, Small: true, Text: threeDLabel, OnClick: func() { threeD.Set(!threeD.Get()) }}),
- Span(Attr("class", "text-xs text-ink-muted"), Text("Each chart takes a Title; a multi-series chart also draws a legend. Click a legend key (Errors, or a donut slice) to hide it — the scale and marks recompute. 3D extrudes the bars and tilts the donut.")),
+ Span(Attr("class", "text-ss text-ink-muted"), Text("Each chart takes a Title; a multi-series chart also draws a legend. Click a legend key (Errors, or a donut slice) to hide it — the scale and marks recompute. 3D extrudes the bars and tilts the donut.")),
),
),
@@ -1247,7 +1247,7 @@ func chartsSection() func() *VNode {
demo("US heatmap — a value per state, with proportional lat/lng points on top",
heat.Render(ui.USHeatmapProps{Data: usSignups, Points: usCities, Proportional: true}),
- Span(Attr("class", "mt-3 block text-xs text-ink-muted"),
+ Span(Attr("class", "mt-3 block text-ss text-ink-muted"),
Text("webui.USHeatmap shades each state on the choropleth ramp and projects lat/lng points "+
"with a Go albersUsa port — Anchorage and Honolulu land on the insets. Hover a state or a point.")),
),
diff --git a/go/cmd/kjol-website/app/docs.go b/go/cmd/kjol-website/app/docs.go
index bfdfb988..3c3f7a75 100644
--- a/go/cmd/kjol-website/app/docs.go
+++ b/go/cmd/kjol-website/app/docs.go
@@ -89,7 +89,7 @@ func docPage(eyebrow, title, lede string, sections ...*VNode) *VNode {
mods := []Mod{Attr("class", "pb-16")}
mods = append(mods,
Div(Attr("class", "border-b border-line pb-6"),
- P(Attr("class", "text-xs font-semibold uppercase tracking-widest text-accent"), Text(eyebrow)),
+ P(Attr("class", "text-ss font-semibold uppercase tracking-widest text-accent"), Text(eyebrow)),
H1(Attr("class", "mt-2 text-3xl font-semibold tracking-tight text-text-heading"), Text(title)),
P(Attr("class", "mt-3 text-ink-muted leading-relaxed"), Text(lede)),
),
@@ -150,7 +150,7 @@ func codeLang(caption, lang, src string) *VNode {
return Div(Attr("class", "mt-4 overflow-hidden rounded-default border border-neutral-800 bg-neutral-900"),
Div(Attr("class", "flex items-center gap-2 border-b border-neutral-800 px-4 py-2"),
- Span(Attr("class", "text-xs font-medium text-ink-faint font-mono"), Text(caption)),
+ Span(Attr("class", "text-ss font-medium text-ink-faint font-mono"), Text(caption)),
Span(Attr("class", "ml-auto rounded-full bg-white/5 px-2 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-ink-faint"), Text(lang)),
),
Pre(Attr("class", "overflow-x-auto px-4 py-3 text-[13px] leading-relaxed text-neutral-100 font-mono"), body),
@@ -164,7 +164,7 @@ func demo(title string, body ...*VNode) *VNode {
mods := []Mod{Attr("class", "mt-4 rounded-default border border-line bg-surface shadow-xs")}
mods = append(mods,
Div(Attr("class", "border-b border-line px-4 py-2"),
- Span(Attr("class", "text-xs text-ink-muted"), Text(title)),
+ Span(Attr("class", "text-ss text-ink-muted"), Text(title)),
),
)
inner := []Mod{Attr("class", "p-4")}
diff --git a/go/cmd/kjol-website/app/layers.go b/go/cmd/kjol-website/app/layers.go
index 002cf84e..336b9721 100644
--- a/go/cmd/kjol-website/app/layers.go
+++ b/go/cmd/kjol-website/app/layers.go
@@ -247,7 +247,7 @@ func layerItem(d Deps, l Layer) *VNode {
Span(Attr("class", "rounded-full bg-surface-raised px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-ink-muted"),
Text("reference")),
),
- Span(Attr("class", "text-xs text-ink-muted"), Text(l.Tagline)),
+ Span(Attr("class", "text-ss text-ink-muted"), Text(l.Tagline)),
)
}
@@ -257,6 +257,6 @@ func layerItem(d Deps, l Layer) *VNode {
}
return A(Attr("class", cls), Attr("href", l.Href),
Span(Attr("class", "text-sm font-medium text-ink"), Text(l.Name)),
- Span(Attr("class", "text-xs text-ink-muted"), Text(l.Tagline)),
+ Span(Attr("class", "text-ss text-ink-muted"), Text(l.Tagline)),
)
}
diff --git a/go/cmd/kjol-website/app/pages.go b/go/cmd/kjol-website/app/pages.go
index 846831ea..0d20c296 100644
--- a/go/cmd/kjol-website/app/pages.go
+++ b/go/cmd/kjol-website/app/pages.go
@@ -410,7 +410,7 @@ serving "./wwwroot" on http://localhost:8085`
func AboutPage(d Deps) func() *VNode {
return func() *VNode {
return Div(Attr("class", "mx-auto max-w-3xl py-4"),
- P(Attr("class", "text-xs font-semibold uppercase tracking-widest text-accent"), Text("About")),
+ P(Attr("class", "text-ss font-semibold uppercase tracking-widest text-accent"), Text("About")),
H1(Attr("class", "mt-2 text-4xl font-semibold tracking-tight text-text-heading"), Text("Why this exists")),
P(Attr("class", "mt-6 text-lg leading-relaxed text-ink-soft"),
diff --git a/go/cmd/kjol-website/frontend/src/layout/Shell.tsx b/go/cmd/kjol-website/frontend/src/layout/Shell.tsx
index e8cac115..26103537 100644
--- a/go/cmd/kjol-website/frontend/src/layout/Shell.tsx
+++ b/go/cmd/kjol-website/frontend/src/layout/Shell.tsx
@@ -98,7 +98,7 @@ function LayerItem(props: { layer: Layer; current?: Layer }) {
reference
- {props.layer.tagline}
+ {props.layer.tagline}
}
>
@@ -113,7 +113,7 @@ function LayerItem(props: { layer: Layer; current?: Layer }) {
}
>
{props.layer.name}
- {props.layer.tagline}
+ {props.layer.tagline}
);
diff --git a/go/cmd/kjol-website/frontend/src/pages/Components.tsx b/go/cmd/kjol-website/frontend/src/pages/Components.tsx
index 7b2c97f1..5d0ec95f 100644
--- a/go/cmd/kjol-website/frontend/src/pages/Components.tsx
+++ b/go/cmd/kjol-website/frontend/src/pages/Components.tsx
@@ -112,7 +112,7 @@ function Panel(props: { title: string; children?: JSXElement }) {
return (
- {props.title}
+ {props.title}
{props.children}
@@ -153,7 +153,7 @@ function Body() {
return (
-
Kjøl JS Web
+
Kjøl JS Web
Components
Every component in the Solid kit, running. Not a screenshot of one anywhere: each block
@@ -313,7 +313,7 @@ function Badges() {
kjol
-
+
Nothing beside the wordmark? Then this build is production — which is what it is telling
you.
@@ -429,7 +429,7 @@ function Icons() {
-
+
The last two are the same name in the solid and regular styles. Which one you get by
default is a CSS variable the app sets, read at runtime.
@@ -614,7 +614,7 @@ function Selects() {
setTz(e?.currentTarget?.value ?? e)} />
-
+
one: {one() || "—"} · several:{" "}
{many().join(", ") || "—"}
@@ -635,7 +635,7 @@ function Selects() {
onSelect={(value, option) => setPicked(option.label + " <" + value + ">")}
/>
-
+
Two characters before it asks; 200 ms after you stop typing. A response for a query you
have already typed past is DISCARDED rather than shown — which is the whole bug with
hand-rolled autocompletes.
@@ -655,7 +655,7 @@ function Selects() {
searchable
showSelectAll
/>
-
+
Same selection model as the field above; only the thing you click on differs.
@@ -698,7 +698,7 @@ function Toggles() {
-
+
Draw in it. Clearing it emits an empty string, so "did they sign?" is just a length check.
@@ -735,7 +735,7 @@ function Dates() {
-
+
The same grid the picker drops down, usable directly when you want it inline. Pass{" "}
variant="month" for the big version.
@@ -859,7 +859,7 @@ function Tables() {
sortDesc={sortDesc()}
setSortDesc={setSortDesc}
/>
-
+
Click a Qty or Price cell and type; Tab and the arrow keys move between editable cells.
The grid does not own the rows — it tells you which cell changed and hands the value back.
@@ -972,7 +972,7 @@ function Overlays() {
-
+
A tooltip that only answers to a mouse is a tooltip a keyboard user cannot read.
@@ -1048,7 +1048,7 @@ function Overlays() {
-
+
The items raise toasts, which is how you can see that an item really does close its own
menu — and that the one marked closeOnClick={"{false}"} does not.
@@ -1064,7 +1064,7 @@ function Overlays() {
Open wizard
-
+
Open the modal, then the nested one inside it, and press Escape twice: modals unwind ONE
LAYER per press rather than all at once.
@@ -1190,7 +1190,7 @@ function Feedback() {
Sticky (no timer)
-
+
useToast() throws outside a{" "}
<ToastProvider> — which is one of only two providers
this kit has.
@@ -1200,7 +1200,7 @@ function Feedback() {
Take the tour
-
+
It dims the page, cuts a hole around each target, and animates the spotlight from one
to the next. Targets are CSS SELECTORS — the same section ids the sidebar jumps to.
@@ -1214,7 +1214,7 @@ function Feedback() {
-
+
A brief acknowledgement that data you are looking at was changed by somebody else. It is
not a toast: it belongs next to the thing that moved, not in the corner.
@@ -1269,7 +1269,7 @@ function Navigation() {
-
+
Accordion (several at once)
-
+
It scrolls the element whose id matches the item into view —
so these really do jump, because those sections really do exist on this page.
@@ -1353,7 +1353,7 @@ function Search() {
onSelect={(value) => setHit(value)}
/>
-
+
The scorer is headless too: rankFuzzyMatches and{" "}
fuzzySegments give you the ranking and the highlight runs,
and you render them however you like.
@@ -1438,7 +1438,7 @@ function Charts() {
setThreeD(!threeD())}>
{threeD() ? "Flat" : "3D"}
-
+
Each chart carries a title; a multi-series chart also draws a
legend. Click a legend key — say Errors or a donut slice — to hide it, and the scale
and marks recompute from what's left. The threeD prop extrudes
@@ -1468,7 +1468,7 @@ function Charts() {
{ name: "Retries", data: shuffle([5, 7, 3, 9]) },
]} height={260} />
-
+
horizontal runs the categories down the y-axis;{" "}
stacked layers the series with a 2px surface gap between segments.
@@ -1476,7 +1476,7 @@ function Charts() {
v.toLocaleString("en-US")} />
-
+
@ui/USHeatmap shades each state on a themed sequential ramp and
projects points (latitude/longitude) with a dependency-free
albersUsa port — so Anchorage and Honolulu land on the Alaska and Hawaii insets. With{" "}
@@ -1557,7 +1557,7 @@ function Theming() {
)}
-
+
The swatch class is written out in full in the source, not built as{" "}
"bg-" + name. Tailwind finds the classes it must compile by
scanning the source for literal strings — a concatenation is invisible to it, and every
diff --git a/go/cmd/kjol-website/frontend/src/pages/Overview.tsx b/go/cmd/kjol-website/frontend/src/pages/Overview.tsx
index 3fcbfaa3..8a1b77b6 100644
--- a/go/cmd/kjol-website/frontend/src/pages/Overview.tsx
+++ b/go/cmd/kjol-website/frontend/src/pages/Overview.tsx
@@ -13,7 +13,7 @@ export function Overview() {
return (
-
Kjøl JS Web
+
Kjøl JS Web
A Solid kit, built by a Go toolchain
@@ -103,7 +103,7 @@ export function Overview() {
function Stage(props: { n: string; title: string; body: string }) {
return (
-
+
{props.n}
diff --git a/go/cmd/kjol-website/frontend/src/pages/public/Ssr.tsx b/go/cmd/kjol-website/frontend/src/pages/public/Ssr.tsx
index 7cc3c512..68bac74f 100644
--- a/go/cmd/kjol-website/frontend/src/pages/public/Ssr.tsx
+++ b/go/cmd/kjol-website/frontend/src/pages/public/Ssr.tsx
@@ -29,7 +29,7 @@ export function Ssr() {
return (
-
Kjøl JS Web
+
Kjøl JS Web
This page was rendered by Go
diff --git a/go/jsruntime/styles/theme.css b/go/jsruntime/styles/theme.css
index 9a526974..d90978d1 100644
--- a/go/jsruntime/styles/theme.css
+++ b/go/jsruntime/styles/theme.css
@@ -39,8 +39,7 @@
@theme {
/* Custom text sizes */
- --text-2xs: 0.75rem; /* Same size as Tailwind's default text-xs */
- --text-xs: 0.8rem; /* Override: Tailwind default is 0.75rem */
+ --text-ss: 0.8rem; /* Override: Tailwind default is 0.75rem */
/* Custom breakpoints (Tailwind defaults + xs + ultrawide) */
--breakpoint-xs: 375px;
diff --git a/go/jsruntime/uikit/AutoTable.tsx b/go/jsruntime/uikit/AutoTable.tsx
index 066cfa65..e49b5d1b 100644
--- a/go/jsruntime/uikit/AutoTable.tsx
+++ b/go/jsruntime/uikit/AutoTable.tsx
@@ -560,14 +560,14 @@ const HEADER_SORT_ICON_CLS: Record
= {
export const HEADER_PADDING_CLS: Record = {
[AUTOTABLE_SIZE_DEFAULT]: "p-4 text-sm",
[AUTOTABLE_SIZE_COMPACT]: "py-1.5 px-2 text-sm",
- [AUTOTABLE_SIZE_SUPERCOMPACT]: "py-1 px-2 text-xs",
+ [AUTOTABLE_SIZE_SUPERCOMPACT]: "py-1 px-2 text-ss",
};
// Body cell padding per table size — applied via [&_td]: on the tbody.
export const BODY_PADDING_CLS: Record = {
[AUTOTABLE_SIZE_DEFAULT]: "text-sm [&_td]:p-4",
[AUTOTABLE_SIZE_COMPACT]: "text-sm [&_td]:py-1 [&_td]:px-2",
- [AUTOTABLE_SIZE_SUPERCOMPACT]: "text-xs [&_td]:py-0.5 [&_td]:px-2",
+ [AUTOTABLE_SIZE_SUPERCOMPACT]: "text-ss [&_td]:py-0.5 [&_td]:px-2",
};
// Pagination padding per table size.
@@ -651,7 +651,7 @@ const FORMULA_PLACEHOLDER = `e.g. [Revenue] / SUM({
// Mobile: filters collapse behind a toggle; lg+ always shows the filter row inline.
const FILTERS_TOGGLE = "lg:hidden inline-flex w-full items-center justify-between gap-2 py-1 px-3 text-sm font-normal text-ink bg-surface-muted border border-line-strong rounded-default shadow-xs cursor-pointer hover:bg-surface-raised";
-const FILTERS_BADGE = "inline-flex items-center justify-center min-w-5 h-5 px-1.5 text-xs font-semibold text-white bg-sky-700 rounded-full";
+const FILTERS_BADGE = "inline-flex items-center justify-center min-w-5 h-5 px-1.5 text-ss font-semibold text-white bg-sky-700 rounded-full";
const FILTERS_BODY_BASE = "grow flex flex-col gap-3 min-w-0 max-w-full items-stretch overflow-visible lg:items-end max-lg:[&>*]:w-full max-lg:[&>*]:min-w-0 max-lg:[&_.search-fields]:w-full max-lg:[&_.search-fields]:flex-col [&>.quick-date-tags]:w-full";
const FILTERS_BODY_INLINE = FILTERS_BODY_BASE
+ " lg:flex lg:flex-row lg:flex-wrap lg:items-end lg:gap-x-3.5 lg:gap-y-2.5"
@@ -668,14 +668,14 @@ export const SEARCH_FIELDS = "search-fields flex flex-col items-stretch gap-3 w-
export const SEARCH_FIELDS_SPACER = "search-fields-spacer hidden lg:block flex-1 min-w-4 basis-full lg:basis-auto lg:min-w-[1rem]";
/** Combobox / custom filter control wrapper — pair with FormCombobox fieldWidth="grow". */
-export const AUTOTABLE_FILTER_FIELD = "flex flex-col gap-1 min-w-0 w-full overflow-visible [&>label]:text-xs [&>label]:font-medium [&>label]:text-ink [&_.relative]:w-full [&_.relative]:min-w-0 [&_.relative]:flex-none";
+export const AUTOTABLE_FILTER_FIELD = "flex flex-col gap-1 min-w-0 w-full overflow-visible [&>label]:text-ss [&>label]:font-medium [&>label]:text-ink [&_.relative]:w-full [&_.relative]:min-w-0 [&_.relative]:flex-none";
/** Sales report toolbar wrappers (presets row 1, filters + export row 2). */
export const SALES_REPORT_TOOLBAR = "sales-report-toolbar flex flex-col gap-2.5 w-full min-w-0 lg:contents";
export const SALES_REPORT_PRESETS = "sales-report-toolbar__presets min-w-0 w-full [&_.quick-date-tags]:gap-1.5";
export const SALES_REPORT_FILTERS = "search-fields sales-report-toolbar__filters flex flex-col items-stretch gap-3 w-full overflow-visible lg:flex-row lg:flex-wrap lg:items-end lg:gap-x-3.5 lg:gap-y-2.5 lg:w-auto lg:min-w-0 min-w-0 pt-0.5 border-t border-line [&>*]:min-w-0 [&>*]:max-lg:w-full lg:[&>*]:w-auto lg:[&>*:not(.sales-report-filter-date):not(.sales-report-filter-ref)]:flex-[1_1_8rem] lg:[&>*:not(.sales-report-filter-date):not(.sales-report-filter-ref)]:max-w-[12rem] [&_.relative]:w-full [&_.relative]:min-w-0 [&_.relative]:flex-none";
-export const AUTOTABLE_SEARCH_FIELD = "flex flex-col gap-1 min-w-0 w-full [&>label]:text-xs [&>label]:font-medium [&>label]:text-ink [&_.relative]:w-full [&_.relative]:min-w-0";
+export const AUTOTABLE_SEARCH_FIELD = "flex flex-col gap-1 min-w-0 w-full [&>label]:text-ss [&>label]:font-medium [&>label]:text-ink [&_.relative]:w-full [&_.relative]:min-w-0";
export const AUTOTABLE_SEARCH_FIELD_WIDE = AUTOTABLE_SEARCH_FIELD + " lg:flex-[2_1_12rem] lg:max-w-[20rem]";
export const AUTOTABLE_SEARCH_FIELD_NARROW = AUTOTABLE_SEARCH_FIELD + " lg:flex-[0_1_auto] lg:max-w-[11rem] lg:min-w-[7rem]";
export const AUTOTABLE_DATE_SEARCH_FIELD = AUTOTABLE_SEARCH_FIELD + " lg:flex-[1_1_10rem] lg:max-w-none";
@@ -1831,8 +1831,8 @@ function FormulaField(props: FormulaFieldProps) {
;
// -- Insert menus (Advanced mode), shown in a row above the formula input ----
- const MENU_TRIGGER = "inline-flex items-center gap-1 px-2 py-1 text-xs rounded-default border border-line-strong bg-surface-muted hover:bg-surface-raised text-ink cursor-pointer leading-none";
- const MENU_SEARCH = "w-full text-xs p-1 border border-line-strong rounded-default focus:outline-2 focus:outline-sky-500 focus:outline-offset-1";
+ const MENU_TRIGGER = "inline-flex items-center gap-1 px-2 py-1 text-ss rounded-default border border-line-strong bg-surface-muted hover:bg-surface-raised text-ink cursor-pointer leading-none";
+ const MENU_SEARCH = "w-full text-ss p-1 border border-line-strong rounded-default focus:outline-2 focus:outline-sky-500 focus:outline-offset-1";
const columnMenu = () =>
@@ -1850,17 +1850,17 @@ function FormulaField(props: FormulaFieldProps) {
class="flex items-center rounded-default hover:bg-surface-raised"
onMouseEnter={() => highlight([o.value])} onMouseLeave={() => highlight(null)}>
}
- No columns match.
+ No columns match.
@@ -1884,14 +1884,14 @@ function FormulaField(props: FormulaFieldProps) {
{(f: { name: string; sig: string; desc: string }) =>
}
}
- No functions match.
+ No functions match.
@@ -1911,12 +1911,12 @@ function FormulaField(props: FormulaFieldProps) {
{(c: { name: string; desc: string }) => }
- No constants match.
+ No constants match.
@@ -1948,7 +1948,7 @@ function FormulaField(props: FormulaFieldProps) {
-
+
References
@@ -2098,7 +2098,7 @@ function CalculatedColumnForm(props: CalculatedColumnFormProps) {
onHighlight={highlight}
apiRef={(api: FormulaFieldApi) => { formulaApi = api; }} />
- {formulaError()}
+ {formulaError()}
@@ -2130,11 +2130,11 @@ function CalculatedColumnForm(props: CalculatedColumnFormProps) {
- {errorMsg()}
+ {errorMsg()}
- handleRemove()}>Remove
+ handleRemove()}>Remove
close()}>Cancel
@@ -2235,7 +2235,7 @@ function SummaryRowForm(props: SummaryRowFormProps) {
onHighlight={highlight}
apiRef={(api: FormulaFieldApi) => { formulaApi = api; }} />
- {formulaError()}
+ {formulaError()}
@@ -2257,11 +2257,11 @@ function SummaryRowForm(props: SummaryRowFormProps) {
- {errorMsg()}
+ {errorMsg()}
- handleRemove()}>Remove
+ handleRemove()}>Remove
close()}>Cancel
@@ -2303,7 +2303,7 @@ function AddCalcMenu(props: AddCalcMenuProps) {
Calculated column
- A new column computed for each row
+ A new column computed for each row
@@ -2312,7 +2312,7 @@ function AddCalcMenu(props: AddCalcMenuProps) {
Summary row
- A total or aggregate shown in the footer
+ A total or aggregate shown in the footer
diff --git a/go/jsruntime/uikit/Badges.tsx b/go/jsruntime/uikit/Badges.tsx
index f908674f..e9d65ce1 100644
--- a/go/jsruntime/uikit/Badges.tsx
+++ b/go/jsruntime/uikit/Badges.tsx
@@ -7,7 +7,7 @@ export const BADGE_AMBER = "amber";
export const BADGE_NEUTRAL = "neutral";
export const BADGE_MUTED = "muted";
-const BASE = "inline-flex items-center gap-1 text-xs font-semibold py-0.5 px-2 rounded-default whitespace-nowrap";
+const BASE = "inline-flex items-center gap-1 text-ss font-semibold py-0.5 px-2 rounded-default whitespace-nowrap";
const COLORS: Record
= {
"green": "text-white bg-green-700",
diff --git a/go/jsruntime/uikit/Buttons.tsx b/go/jsruntime/uikit/Buttons.tsx
index 98b8ed15..357cda09 100644
--- a/go/jsruntime/uikit/Buttons.tsx
+++ b/go/jsruntime/uikit/Buttons.tsx
@@ -144,7 +144,7 @@ export function SegmentedButtons(props: SegmentedButtonsProps) {
const innerRadius = "rounded-default"; // chips: 4px
const outerRadius = "rounded-md"; // track: 4px + 2px = 6px
- const sizeCls = () => props.small ? "py-0.5 px-2 text-xs" : "py-1 px-3 text-sm";
+ const sizeCls = () => props.small ? "py-0.5 px-2 text-ss" : "py-1 px-3 text-sm";
const baseCls = "inline-flex items-center justify-center gap-1.5 flex-1 cursor-pointer font-medium transition-colors whitespace-nowrap disabled:opacity-50 disabled:cursor-not-allowed";
const activeCls = "bg-surface text-ink shadow-sm";
const inactiveCls = "text-ink-muted hover:text-ink";
diff --git a/go/jsruntime/uikit/Calendar.tsx b/go/jsruntime/uikit/Calendar.tsx
index 22f1f95c..f7431aea 100644
--- a/go/jsruntime/uikit/Calendar.tsx
+++ b/go/jsruntime/uikit/Calendar.tsx
@@ -21,14 +21,14 @@ export const CAL_MY_MONTH = "text-lg font-heading mx-4 flex-1 text-center font-s
export const CAL_WEEKDAYS_PICKER = "grid grid-cols-7 gap-[2px] mb-1";
export const CAL_WEEKDAYS_MONTH = "grid grid-cols-7 border-b border-line";
-export const CAL_WEEKDAY_PICKER = "text-center text-xs font-semibold text-ink-muted p-1";
-export const CAL_WEEKDAY_MONTH = "text-center text-xs font-semibold text-ink-muted p-2 uppercase tracking-wider";
+export const CAL_WEEKDAY_PICKER = "text-center text-ss font-semibold text-ink-muted p-1";
+export const CAL_WEEKDAY_MONTH = "text-center text-ss font-semibold text-ink-muted p-2 uppercase tracking-wider";
export const CAL_DAYS_PICKER = "grid grid-cols-7 gap-[2px]";
export const CAL_DAYS_MONTH = "grid grid-cols-7";
export const CAL_DAY_PICKER_BASE = "aspect-square flex items-center justify-center text-sm bg-transparent border-0 rounded-sm cursor-pointer text-ink p-0";
-export const CAL_DAY_MONTH_BASE = "min-h-[6.5rem] flex flex-col items-stretch justify-start p-1.5 border-r border-b border-line text-left gap-1 text-xs bg-transparent cursor-pointer";
+export const CAL_DAY_MONTH_BASE = "min-h-[6.5rem] flex flex-col items-stretch justify-start p-1.5 border-r border-b border-line text-left gap-1 text-ss bg-transparent cursor-pointer";
export const CAL_SELECT = "flex-1 py-1 px-2 text-sm font-semibold border border-line rounded-sm bg-surface text-ink cursor-pointer focus:outline-hidden focus:border-primary";
diff --git a/go/jsruntime/uikit/CellGrid.tsx b/go/jsruntime/uikit/CellGrid.tsx
index 6734866b..bda42f54 100644
--- a/go/jsruntime/uikit/CellGrid.tsx
+++ b/go/jsruntime/uikit/CellGrid.tsx
@@ -1,7 +1,7 @@
import { createSignal, createMemo, untrack, Show, For, JSXElement } from "solid-js";
import { Icon } from "./Icons.tsx";
-export const GRID_HEADER_CLS = "border-b border-r border-line-strong bg-surface-muted px-1.5 py-1.5 text-left text-xs font-bold uppercase text-ink whitespace-nowrap last:border-r-0";
+export const GRID_HEADER_CLS = "border-b border-r border-line-strong bg-surface-muted px-1.5 py-1.5 text-left text-ss font-bold uppercase text-ink whitespace-nowrap last:border-r-0";
interface SortableHeaderProps {
label: string;
@@ -411,7 +411,7 @@ export function CellGrid(props: CellGridProps) {
);
};
- const tableCls = () => "min-w-full w-max border-collapse " + (dense() ? "text-xs" : "text-sm");
+ const tableCls = () => "min-w-full w-max border-collapse " + (dense() ? "text-ss" : "text-sm");
return (
diff --git a/go/jsruntime/uikit/Chart.tsx b/go/jsruntime/uikit/Chart.tsx
index 131950cf..2883eb1e 100644
--- a/go/jsruntime/uikit/Chart.tsx
+++ b/go/jsruntime/uikit/Chart.tsx
@@ -586,7 +586,7 @@ function CartesianTooltip(p: {
});
const rows = () => p.props.series.map((s, i) => ({ s, i })).filter(({ i }) => !p.hidden.has(i));
return (
-
{p.label}
{(row) => (
@@ -704,7 +704,7 @@ function RadialChart(p: SubProps): JSXElement {
;
@@ -1537,7 +1537,7 @@ export function FormMultiSelect(props: FormMultiSelectProps) {
}
return
tagsContainerRef = el} class="flex flex-nowrap gap-1 overflow-hidden items-center">
- {(option) =>
+ {(option) =>
{option.label}