@godxjp/ui 28.8.0 → 28.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/contracts/measurement.json +1 -1
- package/dist/lib/variants.js +4 -1
- package/dist/props/vocabulary/layout.prop.d.ts +1 -1
- package/dist/styles/base.css +47 -14
- package/dist/styles/card-layout.css +2 -2
- package/dist/styles/chart-layout.css +6 -6
- package/dist/styles/control.css +10 -4
- package/dist/styles/data-display-layout.css +20 -5
- package/dist/styles/density.css +2 -0
- package/dist/styles/dialog-layout.css +4 -1
- package/dist/styles/focus-ring.css +4 -1
- package/dist/styles/layout.css +13 -3
- package/dist/styles/shell-layout.css +25 -21
- package/dist/styles/text-layout.css +94 -23
- package/dist/tokens/components/activity.css +13 -4
- package/dist/tokens/components/attachments.css +1 -1
- package/dist/tokens/components/badge.css +1 -1
- package/dist/tokens/components/card.css +28 -7
- package/dist/tokens/components/chart.css +4 -1
- package/dist/tokens/components/chat-composer.css +4 -1
- package/dist/tokens/components/control.css +69 -30
- package/dist/tokens/components/conversations.css +4 -1
- package/dist/tokens/components/data-display.css +42 -15
- package/dist/tokens/components/data-entry.css +8 -2
- package/dist/tokens/components/descriptions.css +1 -1
- package/dist/tokens/components/feedback.css +8 -5
- package/dist/tokens/components/float-button.css +8 -2
- package/dist/tokens/components/legal-document.css +12 -3
- package/dist/tokens/components/logo.css +15 -6
- package/dist/tokens/components/mega-menu.css +14 -5
- package/dist/tokens/components/navigation.css +37 -13
- package/dist/tokens/components/segmented.css +4 -1
- package/dist/tokens/components/separator.css +4 -1
- package/dist/tokens/components/shell.css +96 -31
- package/dist/tokens/components/table.css +11 -5
- package/dist/tokens/components/thought-chain.css +4 -1
- package/dist/tokens/components/toggle.css +4 -1
- package/dist/tokens/components/tree.css +1 -1
- package/dist/tokens/components/upload.css +21 -9
- package/dist/tokens/foundation.css +24 -30
- package/dist/tokens/semantic/layout.css +19 -5
- package/docs/TOKENS.md +16 -1
- package/docs/showcase/case4-login.tsx +10 -2
- package/docs/showcase/case5-shift-calendar.tsx +1 -1
- package/docs/showcase/case6-agency-handy.tsx +6 -6
- package/docs/showcase/futurelastic-web.tsx +7 -9
- package/docs/showcase/marketing-page.tsx +13 -13
- package/docs/showcase/table-expandable-rows.tsx +4 -1
- package/package.json +4 -3
|
@@ -368,7 +368,7 @@ function TabBar({ active, onChange }: { active: string; onChange: (id: string) =
|
|
|
368
368
|
onClick={() => onChange(t.id)}
|
|
369
369
|
aria-current={isActive ? "page" : undefined}
|
|
370
370
|
className={
|
|
371
|
-
"
|
|
371
|
+
"text-[length:var(--font-size-2xs, calc(var(--font-size-base) / var(--font-size-ratio) / var(--font-size-ratio)))] h-full flex-col rounded-none font-medium " +
|
|
372
372
|
(isActive ? "text-primary" : "text-muted-foreground")
|
|
373
373
|
}
|
|
374
374
|
>
|
|
@@ -637,7 +637,7 @@ function InboundTab({
|
|
|
637
637
|
<ToggleGroupItem
|
|
638
638
|
key={f.id}
|
|
639
639
|
value={f.id}
|
|
640
|
-
className="
|
|
640
|
+
className="text-[length:var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)))] h-9 shrink-0 rounded-full whitespace-nowrap"
|
|
641
641
|
// The library's OWN counter pill, not a `Text` at 70% opacity (gh#643). The
|
|
642
642
|
// hand-rolled one measured 2.15:1 on the selected chip's --primary fill, because
|
|
643
643
|
// `opacity-70` blends whatever ink it inherits back towards the fill underneath it —
|
|
@@ -852,19 +852,19 @@ function OutboundTab({ seg, setSeg }: { seg: string; setSeg: (v: string) => void
|
|
|
852
852
|
<ResponsiveGrid columns={3} gap="xs">
|
|
853
853
|
<ToggleGroupItem
|
|
854
854
|
value="seal"
|
|
855
|
-
className="
|
|
855
|
+
className="text-[length:var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)))] h-9 rounded-xl whitespace-nowrap"
|
|
856
856
|
>
|
|
857
857
|
Chờ niêm phong
|
|
858
858
|
</ToggleGroupItem>
|
|
859
859
|
<ToggleGroupItem
|
|
860
860
|
value="handoff"
|
|
861
|
-
className="
|
|
861
|
+
className="text-[length:var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)))] h-9 rounded-xl whitespace-nowrap"
|
|
862
862
|
>
|
|
863
863
|
Chờ bàn giao
|
|
864
864
|
</ToggleGroupItem>
|
|
865
865
|
<ToggleGroupItem
|
|
866
866
|
value="done"
|
|
867
|
-
className="
|
|
867
|
+
className="text-[length:var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)))] h-9 rounded-xl whitespace-nowrap"
|
|
868
868
|
>
|
|
869
869
|
Đã bàn giao
|
|
870
870
|
</ToggleGroupItem>
|
|
@@ -1018,7 +1018,7 @@ export default function AgencyHandyShowcase() {
|
|
|
1018
1018
|
<ToggleGroupItem
|
|
1019
1019
|
key={s}
|
|
1020
1020
|
value={s}
|
|
1021
|
-
className="
|
|
1021
|
+
className="text-[length:var(--font-size-2xs, calc(var(--font-size-base) / var(--font-size-ratio) / var(--font-size-ratio)))] size-7 rounded-md uppercase"
|
|
1022
1022
|
title={s}
|
|
1023
1023
|
>
|
|
1024
1024
|
{s[0]}
|
|
@@ -55,16 +55,14 @@ const THEME = `
|
|
|
55
55
|
--font-family-display: "Sora", system-ui, sans-serif;
|
|
56
56
|
--font-family-body: "Be Vietnam Pro", system-ui, "Noto Sans JP", sans-serif;
|
|
57
57
|
--font-family-sans: var(--font-family-body);
|
|
58
|
-
/* 80px hero
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
because this declaration is on an ancestor of the heading. */
|
|
58
|
+
/* 80px hero, from the display ramp's BASE KNOB alone (gh#834).
|
|
59
|
+
This used to need a second line — --font-size-5xl: 5rem — and the comment that stood here said
|
|
60
|
+
why: --font-size-5xl was declared at :root as var(--font-size-display), so it substituted on
|
|
61
|
+
<html> and this scope merely INHERITED the answer root had given. Heading size="5xl" painted
|
|
62
|
+
54px with the display knob alone. The step is an initial knob now and the formula sits at the
|
|
63
|
+
call site, so one line moves the ramp: re-measured here at 80px, with 3xl/4xl following to
|
|
64
|
+
48.83/62.5px. */
|
|
66
65
|
--font-size-display: 5rem;
|
|
67
|
-
--font-size-5xl: 5rem;
|
|
68
66
|
/* The glass bar, opted into once (gh#831). acme-website.tsx hand-wrote the identical pair,
|
|
69
67
|
which is why these are framework knobs now and not two literals on .fl-navbar. */
|
|
70
68
|
--topbar-background-alpha: 80%;
|
|
@@ -34,12 +34,13 @@
|
|
|
34
34
|
* objects because no PROP reaches them. Each one is a named gap, in the order a reader meets them:
|
|
35
35
|
*
|
|
36
36
|
* 1. THE SECTION BAND — `paddingBlock: var(--space-section-band | --space-section-hero)`.
|
|
37
|
-
* gh#
|
|
38
|
-
* `
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
* `--
|
|
37
|
+
* PARTLY CLOSED by gh#839: the numeric `GapProp` ladder now reaches the two band steps, so
|
|
38
|
+
* `pad={{ block: 20 }}` (80px) and `pad={{ block: 24 }}` (96px) state the rhythm through the
|
|
39
|
+
* public API. The bands below still use an inline `style` because each one ALSO needs the
|
|
40
|
+
* centred inner column (`SHELL`), and nothing owns "full-bleed outside, measured column
|
|
41
|
+
* inside" — that half of gh#839 is open. Neither step has a compact variant either:
|
|
42
|
+
* `--space-section-hero` measures 96px at 1440 and at 320, where the package's own landing
|
|
43
|
+
* preset drops its band via `--centered-shell-landing-main-padding-block-compact`.
|
|
43
44
|
* 2. THE CENTRED COLUMN — `marginInline: auto` + `inlineSize: 100%` +
|
|
44
45
|
* `maxInlineSize: var(--page-measure-wide)` + `paddingInline: var(--space-6)`, repeated at
|
|
45
46
|
* every band. gh#831 minted `--page-measure-wide` and deliberately did not add
|
|
@@ -50,12 +51,11 @@
|
|
|
50
51
|
* here (`docs/roadmap/website-components.md` §5.2 proposed `--affix-inset-block-start` and
|
|
51
52
|
* `--affix-z-index`; neither shipped) and `Topbar` has no `sticky` prop.
|
|
52
53
|
* 4. THE GLASS — `--topbar-background-alpha` / `--topbar-backdrop-blur-size` as inline custom
|
|
53
|
-
* properties. They are `initial` by design, so a call site MUST set them, and that
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* foundation tier would close it properly. Measured result: `blur(8px)`.
|
|
54
|
+
* properties. They are `initial` by design, so a call site MUST set them, and that is correct.
|
|
55
|
+
* This used to read `--space-2`, borrowing a token that means something else, because the
|
|
56
|
+
* library had no blur SCALE at all. gh#837 closed that: `--blur-sm|md|lg` now exists in
|
|
57
|
+
* `foundation.css`, deliberately NOT `--scaling`-multiplied, because a backdrop blur is an
|
|
58
|
+
* optical effect and compact density does not mean thinner glass. Measured: `blur(8px)`.
|
|
59
59
|
* 5. THE HALO — `position: relative` / `overflow: hidden` on the band and `position: absolute` /
|
|
60
60
|
* `inset: 0` on the `.ui-brand-glow` layer. This is the package's own idiom (both siblings
|
|
61
61
|
* write `className="ui-brand-glow absolute inset-0"`), spelled as logical inline style so
|
|
@@ -189,7 +189,7 @@ const GLASS_BAR: CSSProperties = {
|
|
|
189
189
|
package writes for CenteredShell's landing preset, so no page-local media query. */
|
|
190
190
|
"--topbar-inset": "max(var(--space-6), calc((100% - var(--page-measure-wide)) / 2))",
|
|
191
191
|
"--topbar-background-alpha": "85%",
|
|
192
|
-
"--topbar-backdrop-blur-size": "var(--
|
|
192
|
+
"--topbar-backdrop-blur-size": "var(--blur-md)",
|
|
193
193
|
} as CSSProperties;
|
|
194
194
|
|
|
195
195
|
/** Per-instance halo shaping — the four `--brand-glow-*` knobs, at the call site. */
|
|
@@ -299,7 +299,10 @@ function DetailPanel({ employee }: { employee: Employee }) {
|
|
|
299
299
|
{/* Per-day breakdown — quiet nested list, real Card chrome */}
|
|
300
300
|
<Card>
|
|
301
301
|
<CardHeader>
|
|
302
|
-
<CardTitle
|
|
302
|
+
<CardTitle
|
|
303
|
+
level={2}
|
|
304
|
+
className="text-[length:var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)))]"
|
|
305
|
+
>
|
|
303
306
|
今週の打刻
|
|
304
307
|
</CardTitle>
|
|
305
308
|
<CardAction>
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@godxjp/ui",
|
|
3
|
-
"version": "28.
|
|
4
|
-
"godxUiMcp": "28.
|
|
3
|
+
"version": "28.9.0",
|
|
4
|
+
"godxUiMcp": "28.9.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -421,7 +421,8 @@
|
|
|
421
421
|
"gen:brand": "node scripts/gen-brand.mjs",
|
|
422
422
|
"check:absorbed-names": "node scripts/check-absorbed-names.mjs",
|
|
423
423
|
"check:frame-overflow": "node scripts/check-frame-overflow.mjs",
|
|
424
|
-
"check:frame-token-wins": "node scripts/check-frame-token-wins.mjs"
|
|
424
|
+
"check:frame-token-wins": "node scripts/check-frame-token-wins.mjs",
|
|
425
|
+
"check:frame-token-scope": "node scripts/check-frame-token-scope.mjs"
|
|
425
426
|
},
|
|
426
427
|
"peerDependencies": {
|
|
427
428
|
"@hookform/resolvers": "^5.2.0",
|