@godxjp/ui 31.28.4 → 31.30.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/agent/START-HERE.md +5 -5
- package/agent/components/AppLauncher.json +5 -0
- package/agent/components/Avatar.json +1 -0
- package/agent/components/Dialog.json +3 -1
- package/agent/components/Legend.json +1 -1
- package/agent/components/PasswordStrength.json +2 -2
- package/agent/components/RangeTimeline.json +28 -1
- package/agent/components/ResponsiveGrid.json +7 -0
- package/agent/components/Sidebar.json +5 -0
- package/agent/components/SortableList.json +78 -0
- package/agent/components/TopbarItem.json +1 -1
- package/agent/components-index.json +5 -0
- package/agent/components.json +131 -6
- package/agent/index.json +6 -6
- package/agent/llms.txt +6 -6
- package/agent/tokens.json +122 -2
- package/dist/components/data-display/legend.d.ts +3 -2
- package/dist/components/data-display/legend.js +10 -1
- package/dist/components/data-display/range-timeline.d.ts +93 -2
- package/dist/components/data-display/range-timeline.js +220 -58
- package/dist/components/data-entry/index.d.ts +2 -0
- package/dist/components/data-entry/index.js +2 -0
- package/dist/components/data-entry/password-strength.d.ts +15 -3
- package/dist/components/data-entry/password-strength.js +16 -34
- package/dist/components/data-entry/sortable-list.d.ts +10 -0
- package/dist/components/data-entry/sortable-list.js +237 -0
- package/dist/components/feedback/dialog.d.ts +8 -2
- package/dist/components/feedback/dialog.js +8 -1
- package/dist/components/feedback/sheet.js +1 -1
- package/dist/components/layout/app-launcher.d.ts +1 -1
- package/dist/components/layout/app-launcher.js +18 -14
- package/dist/components/layout/responsive-grid.d.ts +17 -2
- package/dist/components/layout/responsive-grid.js +17 -4
- package/dist/components/layout/sidebar.d.ts +1 -1
- package/dist/components/layout/sidebar.js +3 -0
- package/dist/components/layout/topbar-item.js +8 -2
- package/dist/components/ui/avatar.d.ts +3 -1
- package/dist/components/ui/avatar.js +2 -1
- package/dist/contracts/measurement.json +1 -1
- package/dist/i18n/messages/en.json +31 -1
- package/dist/i18n/messages/ja.json +31 -1
- package/dist/i18n/messages/vi.json +31 -1
- package/dist/props/components/data-display.prop.d.ts +18 -0
- package/dist/props/components/data-entry.prop.d.ts +34 -0
- package/dist/props/components/feedback.prop.d.ts +6 -1
- package/dist/props/components/layout.prop.d.ts +22 -0
- package/dist/props/registry.d.ts +33 -2
- package/dist/props/registry.js +44 -1
- package/dist/styles/control.css +50 -0
- package/dist/styles/data-display-layout.css +139 -2
- package/dist/styles/dialog-layout.css +14 -1
- package/dist/styles/layers.json +6 -1
- package/dist/styles/layout.css +29 -7
- package/dist/styles/shell-layout.css +26 -0
- package/dist/tokens/components/control.css +5 -0
- package/dist/tokens/components/data-display.css +12 -0
- package/dist/tokens/components/feedback.css +6 -0
- package/dist/tokens/components/shell.css +6 -0
- package/dist/tokens/semantic/layout.css +1 -4
- package/docs/FRAME-COVERAGE-REPORT.md +4 -3
- package/docs/data-display/avatar.tsx +32 -0
- package/docs/data-display/timeline.tsx +84 -1
- package/docs/data-entry/sortable-list.tsx +76 -0
- package/docs/feedback/dialog.tsx +37 -1
- package/docs/i18n/messages/en.json +62 -0
- package/docs/i18n/messages/ja.json +62 -0
- package/docs/i18n/messages/vi.json +62 -0
- package/docs/layout/app-launcher.tsx +17 -1
- package/docs/layout/responsive-grid.tsx +23 -0
- package/docs/layout/sidebar.tsx +24 -0
- package/docs/layout/topbar-item.tsx +11 -0
- package/package.json +2 -2
|
@@ -229,6 +229,30 @@
|
|
|
229
229
|
"symbols": "Ký hiệu",
|
|
230
230
|
"flags": "Cờ"
|
|
231
231
|
}
|
|
232
|
+
},
|
|
233
|
+
"sortableList": {
|
|
234
|
+
"handle": "Sắp xếp lại {label}",
|
|
235
|
+
"hint": "Nhấn Space để nhấc, phím mũi tên để di chuyển, Space để thả, Esc để huỷ.",
|
|
236
|
+
"lifted": "Đã nhấc {label}. Vị trí {position}/{count}.",
|
|
237
|
+
"moved": "{label}: vị trí {position}/{count}.",
|
|
238
|
+
"dropped": "Đã thả {label} ở vị trí {position}/{count}.",
|
|
239
|
+
"cancelled": "Đã huỷ di chuyển. {label} trở lại vị trí {position}/{count}."
|
|
240
|
+
},
|
|
241
|
+
"passwordStrength": {
|
|
242
|
+
"weak": "Yếu",
|
|
243
|
+
"fair": "Trung bình",
|
|
244
|
+
"strong": "Mạnh",
|
|
245
|
+
"meter": "Độ mạnh mật khẩu {score} trên 4",
|
|
246
|
+
"passed": "Đạt: ",
|
|
247
|
+
"failed": "Chưa đạt: ",
|
|
248
|
+
"announcement": "Độ mạnh mật khẩu: {strength}",
|
|
249
|
+
"rules": {
|
|
250
|
+
"length": "Tối thiểu 8 ký tự",
|
|
251
|
+
"upper": "Có chữ in hoa",
|
|
252
|
+
"lower": "Có chữ thường",
|
|
253
|
+
"number": "Có chữ số",
|
|
254
|
+
"symbol": "Có ký hiệu"
|
|
255
|
+
}
|
|
232
256
|
}
|
|
233
257
|
},
|
|
234
258
|
"feedback": {
|
|
@@ -717,7 +741,13 @@
|
|
|
717
741
|
"childRows": "Hàng con",
|
|
718
742
|
"outsideAfter": "Sau khoảng đang xem",
|
|
719
743
|
"outsideBefore": "Trước khoảng đang xem",
|
|
720
|
-
"schedule": "Lịch công việc"
|
|
744
|
+
"schedule": "Lịch công việc",
|
|
745
|
+
"noDates": "Chưa có ngày",
|
|
746
|
+
"resizeLabel": "Đổi độ rộng cột nhãn",
|
|
747
|
+
"overdue": "Quá hạn",
|
|
748
|
+
"overrun": "Vượt kế hoạch",
|
|
749
|
+
"early": "Sớm hơn kế hoạch",
|
|
750
|
+
"lateBy": "+{n} ngày"
|
|
721
751
|
},
|
|
722
752
|
"chat": {
|
|
723
753
|
"bubble": {
|
|
@@ -71,6 +71,15 @@ import type { TreeFieldNamesProp, TreeOptionProp } from "./data-entry.prop.js";
|
|
|
71
71
|
export type LegendItemProp = {
|
|
72
72
|
/** The tone this key explains — the SAME tone the marks it stands for are drawn in. */
|
|
73
73
|
tone: ToneProp;
|
|
74
|
+
color?: never;
|
|
75
|
+
label: LabelProp;
|
|
76
|
+
} | {
|
|
77
|
+
/**
|
|
78
|
+
* A hex colour from data (the same contract as `Badge color` / `RangeTimelineRow color`),
|
|
79
|
+
* for keys whose colours are user-chosen, e.g. a project's status colours (gh#1189).
|
|
80
|
+
*/
|
|
81
|
+
color: string;
|
|
82
|
+
tone?: never;
|
|
74
83
|
label: LabelProp;
|
|
75
84
|
};
|
|
76
85
|
/** @see Legend — the key for a colour-coded surface: a breakdown bar, a chart, a status column. */
|
|
@@ -303,6 +312,15 @@ export type AvatarPresenceProp = "online" | "away" | "busy" | "offline";
|
|
|
303
312
|
* @see Avatar
|
|
304
313
|
*/
|
|
305
314
|
export type AvatarAppearanceProp = "default" | "tinted";
|
|
315
|
+
/**
|
|
316
|
+
* How an `AvatarImage` fills its frame (`object-fit`). `cover` (default) fills the frame and crops
|
|
317
|
+
* — right for a photo of a face. `contain` shows the whole image inside the frame — right for a
|
|
318
|
+
* logo or an app icon that is wide, transparent or not centred, which `cover` would cut off
|
|
319
|
+
* (gh#1176). A full-bleed square icon (the GoDX service icon set) wants `cover`.
|
|
320
|
+
*
|
|
321
|
+
* @see Avatar
|
|
322
|
+
*/
|
|
323
|
+
export type AvatarImageFitProp = "cover" | "contain";
|
|
306
324
|
/** @see Badge */
|
|
307
325
|
export type BadgeProp = {
|
|
308
326
|
/**
|
|
@@ -2361,6 +2361,40 @@ export type AttachmentsRefProp = {
|
|
|
2361
2361
|
multiple?: boolean;
|
|
2362
2362
|
}) => void;
|
|
2363
2363
|
};
|
|
2364
|
+
/** One row of a {@link SortableListProp}: its key (`value`), and the name the announcements speak. */
|
|
2365
|
+
export type SortableListItemProp = {
|
|
2366
|
+
/** Stable key — the order is reported as these keys. */
|
|
2367
|
+
value: string;
|
|
2368
|
+
/** Spoken in the handle's name and the live announcements; rendered when there is no `renderItem`. */
|
|
2369
|
+
label: string;
|
|
2370
|
+
/** This item's grip is inert; other items still move past it. */
|
|
2371
|
+
disabled?: boolean;
|
|
2372
|
+
};
|
|
2373
|
+
/**
|
|
2374
|
+
* @see SortableList — reorder a flat list or a grid of tiles (gh#1173): pointer drag on each
|
|
2375
|
+
* item's grip, or the keyboard (Space/Enter lift, arrows / Home / End move, Space/Enter drop, Esc
|
|
2376
|
+
* cancel), with every step announced politely ("2 / 3"). The order is the value.
|
|
2377
|
+
*/
|
|
2378
|
+
export type SortableListProp = {
|
|
2379
|
+
items: SortableListItemProp[];
|
|
2380
|
+
/** The item keys in order. Controlled with `onValueChange`; keys not in `items` are ignored. */
|
|
2381
|
+
value?: ValueProp<string[]>;
|
|
2382
|
+
defaultValue?: DefaultValueProp<string[]>;
|
|
2383
|
+
/** Called once per drop with the keys in their new order (not on every preview step). */
|
|
2384
|
+
onValueChange?: OnValueChangeProp<string[]>;
|
|
2385
|
+
/** Draws an item's content beside its grip. Default: the item's `label`. */
|
|
2386
|
+
renderItem?: (item: SortableListItemProp, state: {
|
|
2387
|
+
index: number;
|
|
2388
|
+
dragging: boolean;
|
|
2389
|
+
}) => React.ReactNode;
|
|
2390
|
+
/** `list` stacks rows; `grid` flows tiles into auto-filled columns. Default `list`. */
|
|
2391
|
+
layout?: "list" | "grid";
|
|
2392
|
+
disabled?: DisabledProp;
|
|
2393
|
+
/** Accessible name of the list. */
|
|
2394
|
+
"aria-label"?: string;
|
|
2395
|
+
id?: IdProp;
|
|
2396
|
+
className?: ClassNameProp;
|
|
2397
|
+
};
|
|
2364
2398
|
/**
|
|
2365
2399
|
* @see EmojiPicker — a page icon / reaction picker (gh#1164): search by ja / en / vi keywords
|
|
2366
2400
|
* (emojibase-data, loaded for the active locale on first open), categories, per-user recents, a
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Feedback component prop types — @see docs/COMPONENTS.md#feedback */
|
|
2
2
|
import type * as React from "react";
|
|
3
3
|
import type { QueryErrorCategory } from "../../lib/query-error.js";
|
|
4
|
-
import type { AlertVariantProp, AvatarShapeProp, CalloutKindProp, CancelLabelProp, ChildrenProp, ClassNameProp, ConfirmLabelProp, ConfirmVariantProp, DefaultOpenProp, DescriptionProp, HandlerProp, IconProp, OpenProp, OnOpenChangeProp, PendingProp, ShapeProp, SizeProp, ToneProp, TitleProp } from "../vocabulary/index.js";
|
|
4
|
+
import type { AlertVariantProp, AvatarShapeProp, CalloutKindProp, CancelLabelProp, ChildrenProp, ClassNameProp, ConfirmLabelProp, ConfirmVariantProp, DefaultOpenProp, DescriptionProp, HandlerProp, IconProp, OpenProp, OnOpenChangeProp, PendingProp, ShapeProp, SizeProp, ToneProp, TitleProp, WidthProp } from "../vocabulary/index.js";
|
|
5
5
|
/**
|
|
6
6
|
* @see Dialog — the compound modal ROOT.
|
|
7
7
|
*
|
|
@@ -38,6 +38,11 @@ export type DialogContentProp = {
|
|
|
38
38
|
showClose?: boolean;
|
|
39
39
|
/** Semantic class for the scrim the surface owns (RAC nests overlay → modal → dialog). */
|
|
40
40
|
overlayClassName?: ClassNameProp;
|
|
41
|
+
/**
|
|
42
|
+
* Panel width (antd Modal `width`; same vocabulary as SheetContent `width`): number = px, string
|
|
43
|
+
* = any CSS length. Capped at the viewport minus `--dialog-viewport-inset`. Default 32rem.
|
|
44
|
+
*/
|
|
45
|
+
width?: WidthProp;
|
|
41
46
|
className?: ClassNameProp;
|
|
42
47
|
children?: ChildrenProp;
|
|
43
48
|
};
|
|
@@ -1430,6 +1430,16 @@ export type AppLauncherProp = {
|
|
|
1430
1430
|
*/
|
|
1431
1431
|
side?: "top" | "right" | "bottom" | "left";
|
|
1432
1432
|
align?: "start" | "center" | "end";
|
|
1433
|
+
/**
|
|
1434
|
+
* Secondary links UNDER the grid — "Request access", "All apps", "Add apps": the row Google
|
|
1435
|
+
* Workspace, Okta and Microsoft My Apps put below their launcher grid (gh#1172). Pass the links
|
|
1436
|
+
* themselves (`<a>` or a router link); the launcher draws the row (a hairline above it, the
|
|
1437
|
+
* small type step, `--app-launcher-footer-*`) outside the scrolling grid, so it stays in view and
|
|
1438
|
+
* comes after the tiles in focus order. Rendered in every state — loading, error and empty
|
|
1439
|
+
* included — because "request access" is most needed when there is nothing to open. Not a tile:
|
|
1440
|
+
* a link dressed as an app reads as an app.
|
|
1441
|
+
*/
|
|
1442
|
+
footer?: ReactNode;
|
|
1433
1443
|
open?: boolean;
|
|
1434
1444
|
onOpenChange?: (open: boolean) => void;
|
|
1435
1445
|
className?: ClassNameProp;
|
|
@@ -1463,6 +1473,14 @@ export type SidebarProp = {
|
|
|
1463
1473
|
* not belong here — see AppShell's `navRail` for where it goes and why.
|
|
1464
1474
|
*/
|
|
1465
1475
|
brand?: ReactNode | ((collapsed: boolean) => ReactNode);
|
|
1476
|
+
/**
|
|
1477
|
+
* The rail's ONE primary action ("New issue", "+ Create", "New page"), rendered between `brand`
|
|
1478
|
+
* and the scrolling nav and never scrolling with it. Put exactly one primary control here: a
|
|
1479
|
+
* `Button` (variant primary) full width when expanded, icon-only with an `aria-label` + tooltip
|
|
1480
|
+
* when collapsed. It takes a function for the same reason `brand` and `footer` do: it receives the
|
|
1481
|
+
* EFFECTIVE collapsed value, so the mobile drawer (which never collapses) gets the full button.
|
|
1482
|
+
*/
|
|
1483
|
+
action?: ReactNode | ((collapsed: boolean) => ReactNode);
|
|
1466
1484
|
collapsed?: boolean;
|
|
1467
1485
|
children?: ChildrenProp;
|
|
1468
1486
|
/**
|
|
@@ -1620,6 +1638,10 @@ export type TopbarItemProp = Omit<React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
|
1620
1638
|
*
|
|
1621
1639
|
* The count is not an accessible name: give the cell an `aria-label` that says what the number
|
|
1622
1640
|
* means (`aria-label={t("topbar.notifications.unread", { count })}`).
|
|
1641
|
+
*
|
|
1642
|
+
* Drawn under `asChild` too (gh#1171): the pill goes inside the child element, after its own
|
|
1643
|
+
* children, so a bell that is a link (`<TopbarItem asChild badge={3}><a …/></TopbarItem>`) keeps
|
|
1644
|
+
* its count.
|
|
1623
1645
|
*/
|
|
1624
1646
|
badge?: ReactNode;
|
|
1625
1647
|
/**
|
package/dist/props/registry.d.ts
CHANGED
|
@@ -2017,6 +2017,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
2017
2017
|
readonly file: "components/data-display.prop.ts";
|
|
2018
2018
|
readonly vocabulary: readonly [];
|
|
2019
2019
|
};
|
|
2020
|
+
readonly AvatarImageFitProp: {
|
|
2021
|
+
readonly group: "data-display";
|
|
2022
|
+
readonly file: "components/data-display.prop.ts";
|
|
2023
|
+
readonly vocabulary: readonly [];
|
|
2024
|
+
};
|
|
2020
2025
|
readonly BadgeProp: {
|
|
2021
2026
|
readonly group: "data-display";
|
|
2022
2027
|
readonly file: "components/data-display.prop.ts";
|
|
@@ -2428,7 +2433,7 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
2428
2433
|
readonly DialogContentProp: {
|
|
2429
2434
|
readonly group: "feedback";
|
|
2430
2435
|
readonly file: "components/feedback.prop.ts";
|
|
2431
|
-
readonly vocabulary: readonly ["ConfirmVariantProp", "ClassNameProp", "ChildrenProp", {
|
|
2436
|
+
readonly vocabulary: readonly ["ConfirmVariantProp", "ClassNameProp", "ChildrenProp", "WidthProp", {
|
|
2432
2437
|
readonly field: "showCloseButton";
|
|
2433
2438
|
readonly local: true;
|
|
2434
2439
|
readonly reason: 'Corner ✕ opt-out; defaults to false under variant="destructive".';
|
|
@@ -3312,13 +3317,39 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
3312
3317
|
readonly reason: "antd `onDrop` info: true when it lands as a sibling, false inside.";
|
|
3313
3318
|
}];
|
|
3314
3319
|
};
|
|
3320
|
+
readonly SortableListItemProp: {
|
|
3321
|
+
readonly group: "data-entry";
|
|
3322
|
+
readonly file: "components/data-entry.prop.ts";
|
|
3323
|
+
readonly vocabulary: readonly ["ValueProp", "LabelProp", "DisabledProp"];
|
|
3324
|
+
};
|
|
3325
|
+
readonly SortableListProp: {
|
|
3326
|
+
readonly group: "data-entry";
|
|
3327
|
+
readonly file: "components/data-entry.prop.ts";
|
|
3328
|
+
readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "DisabledProp", "IdProp", "ClassNameProp", {
|
|
3329
|
+
readonly field: "items";
|
|
3330
|
+
readonly local: true;
|
|
3331
|
+
readonly reason: "The rows to order — key + spoken label + per-item disabled; not select options (nothing is chosen, the order is the value).";
|
|
3332
|
+
}, {
|
|
3333
|
+
readonly field: "renderItem";
|
|
3334
|
+
readonly local: true;
|
|
3335
|
+
readonly reason: "Draws an item's content beside the grip, with its index and whether it is held.";
|
|
3336
|
+
}, {
|
|
3337
|
+
readonly field: "layout";
|
|
3338
|
+
readonly local: true;
|
|
3339
|
+
readonly reason: "list (stacked rows) vs grid (auto-filled tiles) — the same keyboard order either way; not OrientationProp, a grid is neither axis.";
|
|
3340
|
+
}, {
|
|
3341
|
+
readonly field: "aria-label";
|
|
3342
|
+
readonly local: true;
|
|
3343
|
+
readonly reason: "Accessible name of the list.";
|
|
3344
|
+
}];
|
|
3345
|
+
};
|
|
3315
3346
|
readonly EmojiPickerProp: {
|
|
3316
3347
|
readonly group: "data-entry";
|
|
3317
3348
|
readonly file: "components/data-entry.prop.ts";
|
|
3318
3349
|
readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "OpenProp", "DefaultOpenProp", "OnOpenChangeProp", "SizeProp", "DisabledProp", "IdProp", "ClassNameProp", {
|
|
3319
3350
|
readonly field: "removable";
|
|
3320
3351
|
readonly local: true;
|
|
3321
|
-
readonly reason:
|
|
3352
|
+
readonly reason: 'Whether "remove icon" is offered while a value is set — a picker for an OPTIONAL icon (gh#1164), not AllowClearProp\'s inline ✕ on a field.';
|
|
3322
3353
|
}, {
|
|
3323
3354
|
readonly field: "recentsKey";
|
|
3324
3355
|
readonly local: true;
|
package/dist/props/registry.js
CHANGED
|
@@ -2417,6 +2417,11 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
2417
2417
|
file: "components/data-display.prop.ts",
|
|
2418
2418
|
vocabulary: []
|
|
2419
2419
|
},
|
|
2420
|
+
AvatarImageFitProp: {
|
|
2421
|
+
group: "data-display",
|
|
2422
|
+
file: "components/data-display.prop.ts",
|
|
2423
|
+
vocabulary: []
|
|
2424
|
+
},
|
|
2420
2425
|
BadgeProp: {
|
|
2421
2426
|
group: "data-display",
|
|
2422
2427
|
file: "components/data-display.prop.ts",
|
|
@@ -2850,6 +2855,7 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
2850
2855
|
"ConfirmVariantProp",
|
|
2851
2856
|
"ClassNameProp",
|
|
2852
2857
|
"ChildrenProp",
|
|
2858
|
+
"WidthProp",
|
|
2853
2859
|
{
|
|
2854
2860
|
field: "showCloseButton",
|
|
2855
2861
|
local: true,
|
|
@@ -3917,6 +3923,39 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
3917
3923
|
}
|
|
3918
3924
|
]
|
|
3919
3925
|
},
|
|
3926
|
+
SortableListItemProp: {
|
|
3927
|
+
group: "data-entry",
|
|
3928
|
+
file: "components/data-entry.prop.ts",
|
|
3929
|
+
vocabulary: ["ValueProp", "LabelProp", "DisabledProp"]
|
|
3930
|
+
},
|
|
3931
|
+
SortableListProp: {
|
|
3932
|
+
group: "data-entry",
|
|
3933
|
+
file: "components/data-entry.prop.ts",
|
|
3934
|
+
vocabulary: [
|
|
3935
|
+
"ValueProp",
|
|
3936
|
+
"DefaultValueProp",
|
|
3937
|
+
"OnValueChangeProp",
|
|
3938
|
+
"DisabledProp",
|
|
3939
|
+
"IdProp",
|
|
3940
|
+
"ClassNameProp",
|
|
3941
|
+
{
|
|
3942
|
+
field: "items",
|
|
3943
|
+
local: true,
|
|
3944
|
+
reason: "The rows to order \u2014 key + spoken label + per-item disabled; not select options (nothing is chosen, the order is the value)."
|
|
3945
|
+
},
|
|
3946
|
+
{
|
|
3947
|
+
field: "renderItem",
|
|
3948
|
+
local: true,
|
|
3949
|
+
reason: "Draws an item's content beside the grip, with its index and whether it is held."
|
|
3950
|
+
},
|
|
3951
|
+
{
|
|
3952
|
+
field: "layout",
|
|
3953
|
+
local: true,
|
|
3954
|
+
reason: "list (stacked rows) vs grid (auto-filled tiles) \u2014 the same keyboard order either way; not OrientationProp, a grid is neither axis."
|
|
3955
|
+
},
|
|
3956
|
+
{ field: "aria-label", local: true, reason: "Accessible name of the list." }
|
|
3957
|
+
]
|
|
3958
|
+
},
|
|
3920
3959
|
EmojiPickerProp: {
|
|
3921
3960
|
group: "data-entry",
|
|
3922
3961
|
file: "components/data-entry.prop.ts",
|
|
@@ -3946,7 +3985,11 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
3946
3985
|
local: true,
|
|
3947
3986
|
reason: "Replaces the default trigger button (a page icon drawn large, a reaction chip) \u2014 a ReactNode slot, not a TriggerProp mode."
|
|
3948
3987
|
},
|
|
3949
|
-
{
|
|
3988
|
+
{
|
|
3989
|
+
field: "aria-label",
|
|
3990
|
+
local: true,
|
|
3991
|
+
reason: "Accessible name of the trigger and the popover."
|
|
3992
|
+
}
|
|
3950
3993
|
]
|
|
3951
3994
|
},
|
|
3952
3995
|
TreeProp: {
|
package/dist/styles/control.css
CHANGED
|
@@ -1026,6 +1026,56 @@
|
|
|
1026
1026
|
background-color: hsl(var(--accent));
|
|
1027
1027
|
}
|
|
1028
1028
|
|
|
1029
|
+
.ui-sortable-list-items {
|
|
1030
|
+
display: flex;
|
|
1031
|
+
flex-direction: column;
|
|
1032
|
+
gap: var(--sortable-list-gap);
|
|
1033
|
+
margin: 0;
|
|
1034
|
+
padding: 0;
|
|
1035
|
+
list-style: none;
|
|
1036
|
+
}
|
|
1037
|
+
|
|
1038
|
+
.ui-sortable-list[data-layout="grid"] .ui-sortable-list-items {
|
|
1039
|
+
display: grid;
|
|
1040
|
+
grid-template-columns: repeat(
|
|
1041
|
+
auto-fill,
|
|
1042
|
+
minmax(min(100%, var(--sortable-list-grid-item-min-inline-size)), 1fr)
|
|
1043
|
+
);
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
.ui-sortable-list-item {
|
|
1047
|
+
display: flex;
|
|
1048
|
+
min-inline-size: 0;
|
|
1049
|
+
align-items: center;
|
|
1050
|
+
gap: var(--sortable-list-gap);
|
|
1051
|
+
border: var(--stroke-hairline) solid hsl(var(--border));
|
|
1052
|
+
border-radius: var(--sortable-list-item-radius);
|
|
1053
|
+
background: hsl(var(--card));
|
|
1054
|
+
padding: var(--sortable-list-item-padding);
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
.ui-sortable-list-item[data-dragging] {
|
|
1058
|
+
position: relative;
|
|
1059
|
+
z-index: 1;
|
|
1060
|
+
border-color: hsl(var(--ring));
|
|
1061
|
+
box-shadow: var(--shadow-md);
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
.ui-sortable-list-content {
|
|
1065
|
+
min-inline-size: 0;
|
|
1066
|
+
flex: 1 1 0%;
|
|
1067
|
+
}
|
|
1068
|
+
|
|
1069
|
+
.ui-sortable-list-handle {
|
|
1070
|
+
flex-shrink: 0;
|
|
1071
|
+
cursor: grab;
|
|
1072
|
+
touch-action: none;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
.ui-sortable-list-item[data-dragging] .ui-sortable-list-handle {
|
|
1076
|
+
cursor: grabbing;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1029
1079
|
.ui-emoji-picker-grid {
|
|
1030
1080
|
display: flex;
|
|
1031
1081
|
flex-direction: column;
|
|
@@ -72,6 +72,10 @@
|
|
|
72
72
|
object-fit: cover;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
.ui-avatar-image[data-fit="contain"] {
|
|
76
|
+
object-fit: contain;
|
|
77
|
+
}
|
|
78
|
+
|
|
75
79
|
.ui-avatar-fallback {
|
|
76
80
|
display: flex;
|
|
77
81
|
width: 100%;
|
|
@@ -349,6 +353,10 @@
|
|
|
349
353
|
border-radius: var(--legend-swatch-radius);
|
|
350
354
|
}
|
|
351
355
|
|
|
356
|
+
.ui-legend-swatch[data-color="true"] {
|
|
357
|
+
background: var(--legend-swatch-color, hsl(var(--muted-foreground)));
|
|
358
|
+
}
|
|
359
|
+
|
|
352
360
|
.ui-legend-swatch[data-tone="default"] {
|
|
353
361
|
background: hsl(
|
|
354
362
|
var(
|
|
@@ -2004,6 +2012,50 @@
|
|
|
2004
2012
|
.ui-range-timeline-header {
|
|
2005
2013
|
background: hsl(var(--muted));
|
|
2006
2014
|
}
|
|
2015
|
+
|
|
2016
|
+
.ui-range-timeline-label-resizer {
|
|
2017
|
+
position: absolute;
|
|
2018
|
+
inset-block: 0;
|
|
2019
|
+
inset-inline-end: calc(var(--range-timeline-resizer-inline-size) / -2);
|
|
2020
|
+
z-index: 2;
|
|
2021
|
+
inline-size: var(--range-timeline-resizer-inline-size);
|
|
2022
|
+
cursor: col-resize;
|
|
2023
|
+
touch-action: none;
|
|
2024
|
+
}
|
|
2025
|
+
.ui-range-timeline-label-resizer::after {
|
|
2026
|
+
content: "";
|
|
2027
|
+
position: absolute;
|
|
2028
|
+
inset-block: 0;
|
|
2029
|
+
inset-inline-start: 50%;
|
|
2030
|
+
inline-size: var(--range-timeline-resizer-active-width);
|
|
2031
|
+
translate: -50% 0;
|
|
2032
|
+
background: transparent;
|
|
2033
|
+
}
|
|
2034
|
+
.ui-range-timeline-label-resizer:hover::after,
|
|
2035
|
+
.ui-range-timeline-label-resizer:focus-visible::after {
|
|
2036
|
+
background: hsl(var(--primary));
|
|
2037
|
+
}
|
|
2038
|
+
.ui-range-timeline-label-resizer:focus-visible {
|
|
2039
|
+
outline: none;
|
|
2040
|
+
}
|
|
2041
|
+
|
|
2042
|
+
.ui-range-timeline[data-busy="true"] .ui-range-timeline-body {
|
|
2043
|
+
opacity: var(--range-timeline-busy-body-alpha);
|
|
2044
|
+
}
|
|
2045
|
+
.ui-range-timeline-busy {
|
|
2046
|
+
position: relative;
|
|
2047
|
+
overflow: hidden;
|
|
2048
|
+
block-size: var(--range-timeline-busy-line-block-size);
|
|
2049
|
+
background: hsl(var(--primary) / 0.2);
|
|
2050
|
+
}
|
|
2051
|
+
.ui-range-timeline-busy::before {
|
|
2052
|
+
content: "";
|
|
2053
|
+
position: absolute;
|
|
2054
|
+
inset-block: 0;
|
|
2055
|
+
inline-size: 30%;
|
|
2056
|
+
background: hsl(var(--primary));
|
|
2057
|
+
animation: ui-range-timeline-busy var(--duration-slow, 1.2s) ease-in-out infinite;
|
|
2058
|
+
}
|
|
2007
2059
|
.ui-range-timeline-label {
|
|
2008
2060
|
position: sticky;
|
|
2009
2061
|
inset-inline-start: 0;
|
|
@@ -2105,10 +2157,77 @@
|
|
|
2105
2157
|
--radius-sm,
|
|
2106
2158
|
calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
|
|
2107
2159
|
);
|
|
2108
|
-
background: hsl(var(--primary));
|
|
2109
|
-
color: hsl(var(--primary-foreground));
|
|
2160
|
+
background: var(--range-timeline-bar-color, hsl(var(--primary)));
|
|
2161
|
+
color: var(--range-timeline-bar-ink, hsl(var(--primary-foreground)));
|
|
2162
|
+
}
|
|
2163
|
+
|
|
2164
|
+
.ui-range-timeline-plan,
|
|
2165
|
+
.ui-range-timeline-overrun,
|
|
2166
|
+
.ui-range-timeline-early {
|
|
2167
|
+
position: absolute;
|
|
2168
|
+
inset-block-start: 50%;
|
|
2169
|
+
transform: translateY(-50%);
|
|
2170
|
+
block-size: var(--range-timeline-bar-height);
|
|
2171
|
+
}
|
|
2172
|
+
.ui-range-timeline-plan {
|
|
2173
|
+
border: var(--range-timeline-plan-border-width) dashed hsl(var(--foreground) / 0.45);
|
|
2174
|
+
border-radius: var(
|
|
2175
|
+
--radius-sm,
|
|
2176
|
+
calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
|
|
2177
|
+
);
|
|
2178
|
+
}
|
|
2179
|
+
.ui-range-timeline-overrun {
|
|
2180
|
+
z-index: 1;
|
|
2181
|
+
display: flex;
|
|
2182
|
+
align-items: center;
|
|
2183
|
+
justify-content: flex-end;
|
|
2184
|
+
overflow: visible;
|
|
2185
|
+
background: hsl(var(--destructive));
|
|
2186
|
+
color: hsl(var(--destructive-foreground));
|
|
2187
|
+
pointer-events: none;
|
|
2188
|
+
}
|
|
2189
|
+
.ui-range-timeline-variance {
|
|
2190
|
+
position: absolute;
|
|
2191
|
+
inset-inline-start: 100%;
|
|
2192
|
+
padding-inline: var(--space-1);
|
|
2193
|
+
color: hsl(var(--text-error));
|
|
2194
|
+
font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
|
|
2195
|
+
font-weight: var(--font-weight-medium);
|
|
2196
|
+
white-space: nowrap;
|
|
2197
|
+
}
|
|
2198
|
+
.ui-range-timeline-plan-note {
|
|
2199
|
+
position: absolute;
|
|
2200
|
+
inset-block-start: 50%;
|
|
2201
|
+
transform: translateY(-50%);
|
|
2202
|
+
padding-inline: var(--space-1);
|
|
2203
|
+
color: hsl(var(--muted-foreground));
|
|
2204
|
+
font-size: var(--font-size-xs, calc(var(--font-size-base) / var(--font-size-ratio)));
|
|
2205
|
+
white-space: nowrap;
|
|
2206
|
+
pointer-events: none;
|
|
2207
|
+
}
|
|
2208
|
+
.ui-range-timeline-early {
|
|
2209
|
+
z-index: 1;
|
|
2210
|
+
inline-size: var(--range-timeline-early-marker-inline-size);
|
|
2211
|
+
background: hsl(var(--success));
|
|
2212
|
+
pointer-events: none;
|
|
2213
|
+
}
|
|
2214
|
+
.ui-range-timeline-bar[data-muted="true"] {
|
|
2215
|
+
opacity: var(--range-timeline-bar-muted-alpha);
|
|
2216
|
+
}
|
|
2217
|
+
.ui-range-timeline-bar[data-overdue="true"] {
|
|
2218
|
+
box-shadow: inset calc(-1 * var(--range-timeline-bar-overdue-width)) 0 0 hsl(var(--destructive));
|
|
2219
|
+
}
|
|
2220
|
+
[dir="rtl"] .ui-range-timeline-bar[data-overdue="true"] {
|
|
2221
|
+
box-shadow: inset var(--range-timeline-bar-overdue-width) 0 0 hsl(var(--destructive));
|
|
2222
|
+
}
|
|
2223
|
+
|
|
2224
|
+
.ui-range-timeline-bar-hit {
|
|
2225
|
+
position: absolute;
|
|
2226
|
+
inset: 0;
|
|
2227
|
+
border-radius: inherit;
|
|
2110
2228
|
}
|
|
2111
2229
|
.ui-range-timeline-handle {
|
|
2230
|
+
z-index: 1;
|
|
2112
2231
|
position: absolute;
|
|
2113
2232
|
inset-block: 0;
|
|
2114
2233
|
min-inline-size: 0;
|
|
@@ -3368,3 +3487,21 @@
|
|
|
3368
3487
|
display: contents;
|
|
3369
3488
|
}
|
|
3370
3489
|
}
|
|
3490
|
+
|
|
3491
|
+
@keyframes ui-range-timeline-busy {
|
|
3492
|
+
from {
|
|
3493
|
+
inset-inline-start: -30%;
|
|
3494
|
+
}
|
|
3495
|
+
to {
|
|
3496
|
+
inset-inline-start: 100%;
|
|
3497
|
+
}
|
|
3498
|
+
}
|
|
3499
|
+
|
|
3500
|
+
@media (prefers-reduced-motion: reduce) {
|
|
3501
|
+
.ui-range-timeline-busy::before {
|
|
3502
|
+
animation: none;
|
|
3503
|
+
inset-inline-start: 0;
|
|
3504
|
+
inline-size: 100%;
|
|
3505
|
+
opacity: 0.6;
|
|
3506
|
+
}
|
|
3507
|
+
}
|
|
@@ -47,7 +47,12 @@
|
|
|
47
47
|
top: 50%;
|
|
48
48
|
z-index: var(--overlay-z-index);
|
|
49
49
|
display: grid;
|
|
50
|
-
width: min(
|
|
50
|
+
width: min(
|
|
51
|
+
var(--dialog-width, var(--dialog-width-default)),
|
|
52
|
+
calc(100% - var(--dialog-viewport-inset))
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
--tw-animation-duration: var(--dialog-motion-duration, var(--duration-fast));
|
|
51
56
|
max-width: none;
|
|
52
57
|
transform: translate(-50%, -50%);
|
|
53
58
|
gap: var(--dialog-space-gap);
|
|
@@ -424,6 +429,14 @@
|
|
|
424
429
|
inset: 0;
|
|
425
430
|
}
|
|
426
431
|
|
|
432
|
+
.ui-sheet-panel[data-state="open"] {
|
|
433
|
+
--tw-animation-duration: var(--sheet-enter-duration, var(--duration-fast));
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
.ui-sheet-panel[data-state="closed"] {
|
|
437
|
+
--tw-animation-duration: var(--sheet-exit-duration, var(--duration-fast));
|
|
438
|
+
}
|
|
439
|
+
|
|
427
440
|
.ui-sheet-panel {
|
|
428
441
|
|
|
429
442
|
background-color: var(--sheet-surface-background, hsl(var(--background)));
|
package/dist/styles/layers.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "31.
|
|
2
|
+
"version": "31.30.0",
|
|
3
3
|
"generatedBy": "scripts/gen-style-layers.mjs — do not edit by hand; run `pnpm gen:style-layers`",
|
|
4
4
|
"base": "base.css",
|
|
5
5
|
"fonts": "fonts.css",
|
|
@@ -1035,6 +1035,11 @@
|
|
|
1035
1035
|
"control.css"
|
|
1036
1036
|
]
|
|
1037
1037
|
},
|
|
1038
|
+
"SortableList": {
|
|
1039
|
+
"layers": [
|
|
1040
|
+
"control.css"
|
|
1041
|
+
]
|
|
1042
|
+
},
|
|
1038
1043
|
"SpaceCompact": {
|
|
1039
1044
|
"layers": [
|
|
1040
1045
|
"layout.css"
|