@godxjp/ui 33.24.0 → 33.25.1
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/README.md +14 -3
- package/agent/START-HERE.md +5 -5
- package/agent/components/CatalogDetail.json +7 -3
- package/agent/components/DatePicker.json +1 -1
- package/agent/components/DropdownMenu.json +1 -0
- package/agent/components/EditorialCard.json +2 -1
- package/agent/components/Image.json +6 -1
- package/agent/components/Pagination.json +5 -0
- package/agent/components/Popover.json +1 -0
- package/agent/components/Select.json +2 -1
- package/agent/components/Toaster.json +1 -1
- package/agent/components.json +26 -8
- package/agent/index.json +5 -5
- package/agent/llms.txt +6 -6
- package/agent/patterns/notice-bar.json +16 -0
- package/agent/patterns-index.json +15 -0
- package/agent/patterns.json +16 -0
- package/agent/rules.json +2 -2
- package/agent/tokens.json +37 -7
- package/dist/components/charts/chart-cartesian.js +5 -1
- package/dist/components/charts/chart-summary.d.ts +1 -1
- package/dist/components/charts/chart-summary.js +17 -6
- package/dist/components/charts/compact-bar-trend.js +4 -3
- package/dist/components/charts/pie-chart.js +2 -1
- package/dist/components/data-display/image.d.ts +1 -0
- package/dist/components/data-display/image.js +9 -1
- package/dist/components/data-display/popover.js +11 -0
- package/dist/components/data-entry/calendar.js +1 -1
- package/dist/components/data-entry/date-picker.js +22 -5
- package/dist/components/general/button.js +2 -2
- package/dist/components/layout/affix.js +20 -4
- package/dist/components/layout/editorial-catalog.d.ts +1 -1
- package/dist/components/layout/editorial-catalog.js +53 -15
- package/dist/components/navigation/dropdown-menu.d.ts +13 -3
- package/dist/components/navigation/dropdown-menu.js +36 -6
- package/dist/components/navigation/pagination.d.ts +1 -1
- package/dist/components/navigation/pagination.js +13 -1
- package/dist/contracts/measurement.json +1 -1
- package/dist/i18n/messages/en.json +1 -0
- package/dist/i18n/messages/ja.json +1 -0
- package/dist/i18n/messages/vi.json +1 -0
- package/dist/props/components/data-display.prop.d.ts +2 -0
- package/dist/props/components/layout.prop.d.ts +7 -2
- package/dist/props/components/navigation.prop.d.ts +3 -0
- package/dist/props/registry.d.ts +15 -3
- package/dist/props/registry.js +18 -1
- package/dist/styles/application.css +24 -0
- package/dist/styles/base.css +11 -0
- package/dist/styles/control.css +32 -19
- package/dist/styles/core.css +1 -0
- package/dist/styles/data-display-layout.css +7 -0
- package/dist/styles/dialog-layout.css +9 -0
- package/dist/styles/editorial-layout.css +2076 -0
- package/dist/styles/editorial.css +3 -0
- package/dist/styles/index.css +1 -0
- package/dist/styles/layers.json +39 -8
- package/dist/styles/layout.css +6 -1987
- package/dist/styles/precompiled/alert-layout.css +2 -0
- package/dist/styles/precompiled/badge-layout.css +2 -0
- package/dist/styles/precompiled/base.css +2 -0
- package/dist/styles/precompiled/card-layout.css +2 -0
- package/dist/styles/precompiled/chart-layout.css +2 -0
- package/dist/styles/precompiled/control.css +2 -0
- package/dist/styles/precompiled/data-display-layout.css +2 -0
- package/dist/styles/precompiled/data-entry-layout.css +2 -0
- package/dist/styles/precompiled/dialog-layout.css +2 -0
- package/dist/styles/precompiled/editorial-account-layout.css +2 -0
- package/dist/styles/precompiled/editorial-layout.css +2 -0
- package/dist/styles/precompiled/float-button-layout.css +2 -0
- package/dist/styles/precompiled/form-layout.css +2 -0
- package/dist/styles/precompiled/icon-layout.css +2 -0
- package/dist/styles/precompiled/layout.css +2 -0
- package/dist/styles/precompiled/logo-layout.css +2 -0
- package/dist/styles/precompiled/motion.css +2 -0
- package/dist/styles/precompiled/navigation-layout.css +2 -0
- package/dist/styles/precompiled/shell-layout.css +2 -0
- package/dist/styles/precompiled/table-layout.css +2 -0
- package/dist/styles/precompiled/text-layout.css +2 -0
- package/dist/styles/precompiled/toggle.css +2 -0
- package/dist/styles/precompiled/vendor-day-picker.css +2 -0
- package/dist/styles/precompiled/vendor-sonner.css +2 -0
- package/dist/styles.css +1 -1
- package/dist/tokens/components/control.css +3 -0
- package/dist/tokens/components/editorial.css +9 -6
- package/docs/CONSUMER-RULES.md +35 -0
- package/package.json +4 -2
- package/scripts/prune-css.mjs +56 -8
- package/scripts/ui-audit.mjs +36 -0
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
import { Check, ChevronRight } from "lucide-react";
|
|
23
23
|
import { ariaKeyShortcuts, parseShortcut, shouldHandleShortcut } from "../../lib/shortcut.js";
|
|
24
24
|
import { cn } from "../../lib/utils.js";
|
|
25
|
+
import { isDevelopment } from "../../lib/dev.js";
|
|
25
26
|
import { Slot } from "../../lib/slot.js";
|
|
26
27
|
const DROPDOWN_MENU_PLACEMENT = {
|
|
27
28
|
top: { side: "top", align: "center" },
|
|
@@ -40,7 +41,7 @@ class MenuCollectionBoundary extends React.Component {
|
|
|
40
41
|
// of gh#637 that cost the reporter a night of instrumenting `Object.prototype`.
|
|
41
42
|
componentDidCatch(error) {
|
|
42
43
|
console.error(
|
|
43
|
-
"[@godxjp/ui] DropdownMenu: the menu could not be built and was left empty; the rest of the application is unaffected. A menu's children must be collection nodes (DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuSub) or components returning one \u2014 an icon or a text label belongs INSIDE an item, not beside it. Underlying error:",
|
|
44
|
+
"[@godxjp/ui] DropdownMenu: the menu could not be built and was left empty; the rest of the application is unaffected. A menu's children must be collection nodes (DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuGroup, DropdownMenuSub) or components returning one \u2014 an icon or a text label belongs INSIDE an item, not beside it. Use Popover + ListRow for arbitrary panel content. Underlying error:",
|
|
44
45
|
error
|
|
45
46
|
);
|
|
46
47
|
}
|
|
@@ -51,6 +52,10 @@ class MenuCollectionBoundary extends React.Component {
|
|
|
51
52
|
function borrowedTag(children, asChild) {
|
|
52
53
|
return asChild ? React.Children.only(children) : null;
|
|
53
54
|
}
|
|
55
|
+
function borrowedHref(tag) {
|
|
56
|
+
const href = tag?.props?.href;
|
|
57
|
+
return typeof href === "string" ? href : void 0;
|
|
58
|
+
}
|
|
54
59
|
function renderItemTag(tag, domProps, content) {
|
|
55
60
|
if (!tag) {
|
|
56
61
|
return /* @__PURE__ */ jsx("div", { ...domProps, children: content });
|
|
@@ -331,6 +336,16 @@ function DropdownMenuSub({ children }) {
|
|
|
331
336
|
const parts = React.Children.toArray(children).filter(React.isValidElement);
|
|
332
337
|
return /* @__PURE__ */ jsx(SubmenuTrigger, { children: parts });
|
|
333
338
|
}
|
|
339
|
+
function hasNonMenuChildren(children) {
|
|
340
|
+
return React.Children.toArray(children).some((child) => {
|
|
341
|
+
if (!React.isValidElement(child)) return true;
|
|
342
|
+
if (typeof child.type === "string") return true;
|
|
343
|
+
if (child.type === React.Fragment || child.type === DropdownMenuGroup || child.type === DropdownMenuRadioGroup) {
|
|
344
|
+
return hasNonMenuChildren(child.props.children);
|
|
345
|
+
}
|
|
346
|
+
return false;
|
|
347
|
+
});
|
|
348
|
+
}
|
|
334
349
|
function DropdownMenuContent({
|
|
335
350
|
children,
|
|
336
351
|
className,
|
|
@@ -348,6 +363,13 @@ function DropdownMenuContent({
|
|
|
348
363
|
sticky,
|
|
349
364
|
forceMount
|
|
350
365
|
}) {
|
|
366
|
+
React.useEffect(() => {
|
|
367
|
+
if (isDevelopment() && hasNonMenuChildren(children)) {
|
|
368
|
+
console.error(
|
|
369
|
+
"[@godxjp/ui] DropdownMenuContent accepts menu collection children only. Use DropdownMenuItem for actions; use Popover + ListRow for notifications, headers, lists and links."
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
}, [children]);
|
|
351
373
|
void hideWhenDetached;
|
|
352
374
|
void sticky;
|
|
353
375
|
void forceMount;
|
|
@@ -417,6 +439,7 @@ function DropdownMenuItem({
|
|
|
417
439
|
textValue,
|
|
418
440
|
description,
|
|
419
441
|
asChild,
|
|
442
|
+
href,
|
|
420
443
|
...forwarded
|
|
421
444
|
}) {
|
|
422
445
|
const tag = borrowedTag(children, asChild);
|
|
@@ -426,6 +449,7 @@ function DropdownMenuItem({
|
|
|
426
449
|
MenuItem,
|
|
427
450
|
{
|
|
428
451
|
isDisabled: disabled,
|
|
452
|
+
href: href ?? borrowedHref(tag),
|
|
429
453
|
textValue: textValue ?? (typeof label === "string" ? label : void 0),
|
|
430
454
|
onAction: onSelect ? () => onSelect(selectEvent("dropdownmenu.itemSelect")) : void 0,
|
|
431
455
|
className: cn(
|
|
@@ -477,11 +501,17 @@ function DropdownMenuLabel({ children, className, inset, asChild }) {
|
|
|
477
501
|
{
|
|
478
502
|
...props
|
|
479
503
|
}
|
|
480
|
-
) : (props) =>
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
504
|
+
) : (props) => (
|
|
505
|
+
// RAC's `Header` element (it warns in dev when `render` returns another one, gh#1452),
|
|
506
|
+
// with the landmark dropped: `role="presentation"` is allowed on `header` and keeps
|
|
507
|
+
// the menu owning no `banner`.
|
|
508
|
+
/* @__PURE__ */ jsx(
|
|
509
|
+
"header",
|
|
510
|
+
{
|
|
511
|
+
role: "presentation",
|
|
512
|
+
...props
|
|
513
|
+
}
|
|
514
|
+
)
|
|
485
515
|
),
|
|
486
516
|
children
|
|
487
517
|
}
|
|
@@ -22,5 +22,5 @@ declare const PaginationNext: React.ForwardRefExoticComponent<Omit<Omit<React.De
|
|
|
22
22
|
disabled?: boolean;
|
|
23
23
|
href?: string;
|
|
24
24
|
} & React.RefAttributes<HTMLButtonElement>>;
|
|
25
|
-
export declare function Pagination({ ariaLabel, value, total, pageSize, pageSizeOptions, showSizeChanger, showTotal, hideOnSinglePage, simple, showQuickJumper, size, align, responsive, disabled, className, onValueChange, }: PaginationProp): React.JSX.Element | null;
|
|
25
|
+
export declare function Pagination({ ariaLabel, value, total, pageSize, pageSizeOptions, showSizeChanger, showTotal, hideOnSinglePage, simple, showQuickJumper, size, align, responsive, disabled, className, onValueChange, onPageIntent, }: PaginationProp): React.JSX.Element | null;
|
|
26
26
|
export { PaginationContent, PaginationItem, PaginationLink, PaginationEllipsis, PaginationPrevious, PaginationNext, };
|
|
@@ -122,7 +122,8 @@ function Pagination({
|
|
|
122
122
|
responsive = true,
|
|
123
123
|
disabled,
|
|
124
124
|
className,
|
|
125
|
-
onValueChange
|
|
125
|
+
onValueChange,
|
|
126
|
+
onPageIntent
|
|
126
127
|
}) {
|
|
127
128
|
const { t } = useTranslation();
|
|
128
129
|
const jumperId = React.useId();
|
|
@@ -138,6 +139,12 @@ function Pagination({
|
|
|
138
139
|
const nextPage = Math.min(Math.max(1, page), Math.max(1, Math.ceil(total / size2)));
|
|
139
140
|
onValueChange?.(nextPage, size2);
|
|
140
141
|
};
|
|
142
|
+
const intent = (page) => {
|
|
143
|
+
const notify = () => {
|
|
144
|
+
if (!disabled && page >= 1 && page <= totalPages) onPageIntent?.(page);
|
|
145
|
+
};
|
|
146
|
+
return { onPointerEnter: notify, onFocus: notify, onTouchStart: notify };
|
|
147
|
+
};
|
|
141
148
|
const commitJump = () => {
|
|
142
149
|
const parsed = Number.parseInt(jumperDraft, 10);
|
|
143
150
|
setJumperDraft("");
|
|
@@ -204,6 +211,7 @@ function Pagination({
|
|
|
204
211
|
size: "sm",
|
|
205
212
|
disabled: Boolean(disabled) || safeCurrent <= 1,
|
|
206
213
|
"aria-label": t("navigation.pagination.prev"),
|
|
214
|
+
...intent(safeCurrent - 1),
|
|
207
215
|
onClick: () => go(safeCurrent - 1),
|
|
208
216
|
children: /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true" })
|
|
209
217
|
}
|
|
@@ -221,6 +229,7 @@ function Pagination({
|
|
|
221
229
|
size: "sm",
|
|
222
230
|
disabled: Boolean(disabled) || safeCurrent >= totalPages,
|
|
223
231
|
"aria-label": t("navigation.pagination.next"),
|
|
232
|
+
...intent(safeCurrent + 1),
|
|
224
233
|
onClick: () => go(safeCurrent + 1),
|
|
225
234
|
children: /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true" })
|
|
226
235
|
}
|
|
@@ -264,6 +273,7 @@ function Pagination({
|
|
|
264
273
|
PaginationPrevious,
|
|
265
274
|
{
|
|
266
275
|
"aria-label": t("navigation.pagination.prev"),
|
|
276
|
+
...intent(safeCurrent - 1),
|
|
267
277
|
onClick: () => go(safeCurrent - 1),
|
|
268
278
|
disabled: Boolean(disabled) || safeCurrent <= 1,
|
|
269
279
|
children: /* @__PURE__ */ jsx(ChevronLeft, { "aria-hidden": "true" })
|
|
@@ -274,6 +284,7 @@ function Pagination({
|
|
|
274
284
|
PaginationLink,
|
|
275
285
|
{
|
|
276
286
|
isActive: page === safeCurrent,
|
|
287
|
+
...intent(page),
|
|
277
288
|
"aria-label": t("navigation.pagination.page", { page }),
|
|
278
289
|
onClick: () => {
|
|
279
290
|
if (!disabled) go(page);
|
|
@@ -287,6 +298,7 @@ function Pagination({
|
|
|
287
298
|
PaginationNext,
|
|
288
299
|
{
|
|
289
300
|
"aria-label": t("navigation.pagination.next"),
|
|
301
|
+
...intent(safeCurrent + 1),
|
|
290
302
|
onClick: () => go(safeCurrent + 1),
|
|
291
303
|
disabled: Boolean(disabled) || safeCurrent >= totalPages,
|
|
292
304
|
children: /* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": "true" })
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "AUTO-GENERATED by scripts/gen-measurement-contract.mjs — do not edit. Read this instead of guessing: docs/MEASUREMENT-CONTRACT.md.",
|
|
3
|
-
"version": "33.
|
|
3
|
+
"version": "33.25.1",
|
|
4
4
|
"targetSize": {
|
|
5
5
|
"standard": "WCAG 2.2 SC 2.5.8 Target Size (Minimum), level AA — 24×24 CSS px",
|
|
6
6
|
"min": 24,
|
|
@@ -811,6 +811,7 @@
|
|
|
811
811
|
"trendCurrent": "current",
|
|
812
812
|
"heatmapSummary": "Heatmap, {rows} × {columns}",
|
|
813
813
|
"heatmapHighest": "Highest: {value} at {row}, {column}",
|
|
814
|
+
"noData": "No data",
|
|
814
815
|
"heatmapNoData": "No data",
|
|
815
816
|
"heatmapTop": "Top {rank}",
|
|
816
817
|
"heatmapLegend": "Color scale",
|
|
@@ -786,6 +786,7 @@
|
|
|
786
786
|
"trendCurrent": "hiện tại",
|
|
787
787
|
"heatmapSummary": "Bản đồ nhiệt {rows} × {columns}",
|
|
788
788
|
"heatmapHighest": "Cao nhất: {value} tại {row}, {column}",
|
|
789
|
+
"noData": "Không có dữ liệu",
|
|
789
790
|
"heatmapNoData": "Không có dữ liệu",
|
|
790
791
|
"heatmapTop": "Hạng {rank}",
|
|
791
792
|
"heatmapLegend": "Thang màu",
|
|
@@ -1352,6 +1352,8 @@ export type ImageProp = Omit<React.ImgHTMLAttributes<HTMLImageElement>, "alt" |
|
|
|
1352
1352
|
fallback?: string;
|
|
1353
1353
|
/** Painted over the frame until the picture loads. `true` = the plain muted block. */
|
|
1354
1354
|
placeholder?: React.ReactNode | boolean;
|
|
1355
|
+
/** Resolved source status, including cached-before-mount images. Error stays final for fallback. */
|
|
1356
|
+
onStatusChange?: (status: "loading" | "loaded" | "error") => void;
|
|
1355
1357
|
/** `false` = a plain picture, not clickable, not in its group. Default `true`. */
|
|
1356
1358
|
preview?: boolean | ImagePreviewConfigProp;
|
|
1357
1359
|
/**
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Layout component prop types — @see docs/COMPONENTS.md#layout */
|
|
2
2
|
import type * as React from "react";
|
|
3
|
+
import type { ImageProp } from "./data-display.prop.js";
|
|
3
4
|
import type { ComponentType, ReactNode, SVGProps } from "react";
|
|
4
5
|
import type { BreadcrumbProp, BreadcrumbCurrentItemProp, TitleProp, SubtitleProp, StatusProp, ExtraProp, FooterProp, PageDensityProp, DensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, MobileShellHeightProp, MobileShellWidthProp, OrientationProp, TextAlignProp, TextToneProp, BreakpointProp, GapProp, PadProp, PadRawProp, ClassNameProp, ChildrenProp, IdProp, DisabledProp, DescriptionProp, ActionProp, IconProp, HeadingLevelProp, ToneProp, WidthProp, SizeProp, LabelProp, NameProp, PlaceholderProp } from "../vocabulary/index.js";
|
|
5
6
|
import type { EmptyStateToneProp } from "./data-display.prop.js";
|
|
@@ -2639,8 +2640,12 @@ export type EditorialFilterFieldProp = {
|
|
|
2639
2640
|
export type CatalogDetailProp = {
|
|
2640
2641
|
/** `"sealed"` frames a product package instead of a card. */
|
|
2641
2642
|
variant?: "card" | "sealed";
|
|
2642
|
-
/**
|
|
2643
|
-
media
|
|
2643
|
+
/** Custom media. Used when `image` is omitted. */
|
|
2644
|
+
media?: ReactNode;
|
|
2645
|
+
/** Kit-owned, source-keyed Image with loading skeleton and error fallback. Takes precedence over media. */
|
|
2646
|
+
image?: Pick<ImageProp, "src" | "alt" | "width" | "height" | "fallback"> & {
|
|
2647
|
+
priority?: boolean;
|
|
2648
|
+
};
|
|
2644
2649
|
/** The save toggle over the frame's corner (same shape as `CatalogCard`'s). */
|
|
2645
2650
|
favorite?: CatalogCardProp["favorite"];
|
|
2646
2651
|
/** A line under the frame (the picture's source, an official link). */
|
|
@@ -232,6 +232,9 @@ export type PaginationProp = {
|
|
|
232
232
|
disabled?: DisabledProp;
|
|
233
233
|
className?: ClassNameProp;
|
|
234
234
|
onValueChange?: (page: number, pageSize: number) => void;
|
|
235
|
+
/** Pointer enter, focus or touch start on an enabled page/previous/next target. May repeat;
|
|
236
|
+
* preload/cache the target without changing the controlled value. Also applies in simple mode. */
|
|
237
|
+
onPageIntent?: (page: number) => void;
|
|
235
238
|
};
|
|
236
239
|
/** @see Pagination — control tier (Ant Design `size`: `small` → `sm`, `middle` → `md`). */
|
|
237
240
|
export type PaginationSizeProp = "sm" | "md";
|
package/dist/props/registry.d.ts
CHANGED
|
@@ -1937,7 +1937,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
1937
1937
|
readonly CatalogDetailProp: {
|
|
1938
1938
|
readonly group: "layout";
|
|
1939
1939
|
readonly file: "components/layout.prop.ts";
|
|
1940
|
-
readonly vocabulary: readonly [
|
|
1940
|
+
readonly vocabulary: readonly [{
|
|
1941
|
+
readonly field: "image";
|
|
1942
|
+
readonly local: true;
|
|
1943
|
+
readonly reason: "Kit-owned source-keyed media configuration.";
|
|
1944
|
+
}, "TitleProp", "ClassNameProp", {
|
|
1941
1945
|
readonly field: "variant";
|
|
1942
1946
|
readonly local: true;
|
|
1943
1947
|
readonly reason: "Card or sealed-product frame.";
|
|
@@ -4066,7 +4070,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
4066
4070
|
readonly PaginationProp: {
|
|
4067
4071
|
readonly group: "navigation";
|
|
4068
4072
|
readonly file: "components/navigation.prop.ts";
|
|
4069
|
-
readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "ClassNameProp", "SizeProp"
|
|
4073
|
+
readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "DisabledProp", "ClassNameProp", "SizeProp", {
|
|
4074
|
+
readonly field: "onPageIntent";
|
|
4075
|
+
readonly local: true;
|
|
4076
|
+
readonly reason: "A page target intent event for cache/router preloading, separate from the controlled value channel; pointer enter, focus and touch start (gh#1472).";
|
|
4077
|
+
}];
|
|
4070
4078
|
};
|
|
4071
4079
|
readonly PaginationSizeProp: {
|
|
4072
4080
|
readonly group: "navigation";
|
|
@@ -5691,7 +5699,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
5691
5699
|
readonly ImageProp: {
|
|
5692
5700
|
readonly group: "data-display";
|
|
5693
5701
|
readonly file: "components/data-display.prop.ts";
|
|
5694
|
-
readonly vocabulary: readonly [
|
|
5702
|
+
readonly vocabulary: readonly [{
|
|
5703
|
+
readonly field: "onStatusChange";
|
|
5704
|
+
readonly local: true;
|
|
5705
|
+
readonly reason: "Resolved image loading state, including cached images and fallback.";
|
|
5706
|
+
}, "ClassNameProp", "PlaceholderProp", {
|
|
5695
5707
|
readonly field: "src";
|
|
5696
5708
|
readonly local: true;
|
|
5697
5709
|
readonly reason: "The native img src attribute.";
|
package/dist/props/registry.js
CHANGED
|
@@ -1892,6 +1892,7 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
1892
1892
|
group: "layout",
|
|
1893
1893
|
file: "components/layout.prop.ts",
|
|
1894
1894
|
vocabulary: [
|
|
1895
|
+
{ field: "image", local: true, reason: "Kit-owned source-keyed media configuration." },
|
|
1895
1896
|
"TitleProp",
|
|
1896
1897
|
"ClassNameProp",
|
|
1897
1898
|
{ field: "variant", local: true, reason: "Card or sealed-product frame." },
|
|
@@ -4264,7 +4265,18 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
4264
4265
|
PaginationProp: {
|
|
4265
4266
|
group: "navigation",
|
|
4266
4267
|
file: "components/navigation.prop.ts",
|
|
4267
|
-
vocabulary: [
|
|
4268
|
+
vocabulary: [
|
|
4269
|
+
"ValueProp",
|
|
4270
|
+
"OnValueChangeProp",
|
|
4271
|
+
"DisabledProp",
|
|
4272
|
+
"ClassNameProp",
|
|
4273
|
+
"SizeProp",
|
|
4274
|
+
{
|
|
4275
|
+
field: "onPageIntent",
|
|
4276
|
+
local: true,
|
|
4277
|
+
reason: "A page target intent event for cache/router preloading, separate from the controlled value channel; pointer enter, focus and touch start (gh#1472)."
|
|
4278
|
+
}
|
|
4279
|
+
]
|
|
4268
4280
|
},
|
|
4269
4281
|
PaginationSizeProp: {
|
|
4270
4282
|
group: "navigation",
|
|
@@ -6329,6 +6341,11 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
6329
6341
|
group: "data-display",
|
|
6330
6342
|
file: "components/data-display.prop.ts",
|
|
6331
6343
|
vocabulary: [
|
|
6344
|
+
{
|
|
6345
|
+
field: "onStatusChange",
|
|
6346
|
+
local: true,
|
|
6347
|
+
reason: "Resolved image loading state, including cached images and fallback."
|
|
6348
|
+
},
|
|
6332
6349
|
"ClassNameProp",
|
|
6333
6350
|
"PlaceholderProp",
|
|
6334
6351
|
{ field: "src", local: true, reason: "The native img src attribute." },
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
|
|
2
|
+
@layer theme, base, vendor, components, utilities;
|
|
3
|
+
@import "./vendor-sonner.css";
|
|
4
|
+
@import "./vendor-day-picker.css";
|
|
5
|
+
@import "./base.css";
|
|
6
|
+
@import "./shell-layout.css";
|
|
7
|
+
@import "./motion.css";
|
|
8
|
+
@import "./layout.css";
|
|
9
|
+
@import "./control.css";
|
|
10
|
+
@import "./toggle.css";
|
|
11
|
+
@import "./logo-layout.css";
|
|
12
|
+
@import "./card-layout.css";
|
|
13
|
+
@import "./text-layout.css";
|
|
14
|
+
@import "./table-layout.css";
|
|
15
|
+
@import "./dialog-layout.css";
|
|
16
|
+
@import "./alert-layout.css";
|
|
17
|
+
@import "./badge-layout.css";
|
|
18
|
+
@import "./data-display-layout.css";
|
|
19
|
+
@import "./data-entry-layout.css";
|
|
20
|
+
@import "./form-layout.css";
|
|
21
|
+
@import "./navigation-layout.css";
|
|
22
|
+
@import "./chart-layout.css";
|
|
23
|
+
@import "./float-button-layout.css";
|
|
24
|
+
@import "./icon-layout.css";
|
package/dist/styles/base.css
CHANGED
package/dist/styles/control.css
CHANGED
|
@@ -138,6 +138,12 @@
|
|
|
138
138
|
flex-shrink: 0;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
+
.ui-button--xs svg,
|
|
142
|
+
.ui-button--icon-xs svg {
|
|
143
|
+
width: var(--button-icon-size, var(--button-xs-icon-size));
|
|
144
|
+
height: var(--button-icon-size, var(--button-xs-icon-size));
|
|
145
|
+
}
|
|
146
|
+
|
|
141
147
|
.ui-button {
|
|
142
148
|
backdrop-filter: blur(var(--button-backdrop-blur-size))
|
|
143
149
|
saturate(var(--surface-backdrop-saturate, 160%));
|
|
@@ -1945,9 +1951,13 @@
|
|
|
1945
1951
|
max-block-size: var(--radix-popover-content-available-height);
|
|
1946
1952
|
max-inline-size: min(
|
|
1947
1953
|
var(--search-select-panel-max-width),
|
|
1948
|
-
calc(100vw - var(--search-select-panel-viewport-inset))
|
|
1954
|
+
calc(var(--popover-viewport-inline-size, 100vw) - var(--search-select-panel-viewport-inset))
|
|
1955
|
+
);
|
|
1956
|
+
min-inline-size: min(
|
|
1957
|
+
var(--radix-popover-trigger-width),
|
|
1958
|
+
var(--search-select-panel-max-width),
|
|
1959
|
+
calc(var(--popover-viewport-inline-size, 100vw) - var(--search-select-panel-viewport-inset))
|
|
1949
1960
|
);
|
|
1950
|
-
min-inline-size: var(--radix-popover-trigger-width);
|
|
1951
1961
|
}
|
|
1952
1962
|
|
|
1953
1963
|
.ui-search-select-panel[data-popup-match="content"] {
|
|
@@ -1955,8 +1965,16 @@
|
|
|
1955
1965
|
}
|
|
1956
1966
|
|
|
1957
1967
|
.ui-search-select-panel[data-popup-match="fixed"] {
|
|
1958
|
-
min-inline-size:
|
|
1959
|
-
|
|
1968
|
+
min-inline-size: min(
|
|
1969
|
+
var(--search-select-panel-inline-size, var(--radix-popover-trigger-width)),
|
|
1970
|
+
var(--search-select-panel-max-width),
|
|
1971
|
+
calc(var(--popover-viewport-inline-size, 100vw) - var(--search-select-panel-viewport-inset))
|
|
1972
|
+
);
|
|
1973
|
+
inline-size: min(
|
|
1974
|
+
var(--search-select-panel-inline-size, var(--radix-popover-trigger-width)),
|
|
1975
|
+
var(--search-select-panel-max-width),
|
|
1976
|
+
calc(var(--popover-viewport-inline-size, 100vw) - var(--search-select-panel-viewport-inset))
|
|
1977
|
+
);
|
|
1960
1978
|
}
|
|
1961
1979
|
|
|
1962
1980
|
.ui-search-select-selected-icon {
|
|
@@ -2243,6 +2261,12 @@
|
|
|
2243
2261
|
var(--menu-content-min-width),
|
|
2244
2262
|
var(--trigger-width, var(--menu-content-min-width))
|
|
2245
2263
|
);
|
|
2264
|
+
|
|
2265
|
+
inline-size: max-content;
|
|
2266
|
+
max-inline-size: min(
|
|
2267
|
+
var(--select-content-max-width),
|
|
2268
|
+
calc(100vw - var(--select-content-viewport-inset))
|
|
2269
|
+
);
|
|
2246
2270
|
overflow: hidden;
|
|
2247
2271
|
border-radius: var(--radius-md, calc(var(--radius) / var(--radius-ratio)));
|
|
2248
2272
|
border: var(--stroke-hairline) solid hsl(var(--border));
|
|
@@ -2262,6 +2286,7 @@
|
|
|
2262
2286
|
.ui-select-content[data-popup-match="fixed"] {
|
|
2263
2287
|
min-width: var(--select-content-inline-size);
|
|
2264
2288
|
width: var(--select-content-inline-size);
|
|
2289
|
+
max-inline-size: none;
|
|
2265
2290
|
}
|
|
2266
2291
|
|
|
2267
2292
|
.ui-select-viewport {
|
|
@@ -2287,21 +2312,9 @@
|
|
|
2287
2312
|
calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
|
|
2288
2313
|
);
|
|
2289
2314
|
padding-inline: var(--menu-item-space-inline);
|
|
2290
|
-
height:
|
|
2291
|
-
|
|
2292
|
-
|
|
2293
|
-
gap: var(--menu-item-space-gap);
|
|
2294
|
-
font-size: var(--menu-item-font-size);
|
|
2295
|
-
}
|
|
2296
|
-
|
|
2297
|
-
.ui-select-item,
|
|
2298
|
-
.ui-select-label {
|
|
2299
|
-
border-radius: var(
|
|
2300
|
-
--menu-item-radius,
|
|
2301
|
-
calc(var(--radius) / var(--radius-ratio) / var(--radius-ratio))
|
|
2302
|
-
);
|
|
2303
|
-
padding-inline: var(--menu-item-space-inline);
|
|
2304
|
-
height: var(--menu-item-height);
|
|
2315
|
+
height: auto;
|
|
2316
|
+
min-height: var(--menu-item-height);
|
|
2317
|
+
padding-block: max(0px, calc((var(--menu-item-height) - 1lh) / 2));
|
|
2305
2318
|
display: flex;
|
|
2306
2319
|
align-items: center;
|
|
2307
2320
|
gap: var(--menu-item-space-gap);
|
package/dist/styles/core.css
CHANGED
|
@@ -3768,6 +3768,13 @@
|
|
|
3768
3768
|
color: hsl(var(--muted-foreground));
|
|
3769
3769
|
}
|
|
3770
3770
|
|
|
3771
|
+
.ui-image-placeholder > * {
|
|
3772
|
+
min-block-size: 0;
|
|
3773
|
+
min-inline-size: 0;
|
|
3774
|
+
max-block-size: 100%;
|
|
3775
|
+
max-inline-size: 100%;
|
|
3776
|
+
}
|
|
3777
|
+
|
|
3771
3778
|
.ui-image-mask {
|
|
3772
3779
|
position: absolute;
|
|
3773
3780
|
inset: 0;
|
|
@@ -341,6 +341,9 @@
|
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
.ui-popover-content {
|
|
344
|
+
|
|
345
|
+
overflow: auto;
|
|
346
|
+
scroll-padding: calc(var(--focus-ring-width) + var(--focus-outline-offset));
|
|
344
347
|
z-index: var(--overlay-z-index);
|
|
345
348
|
|
|
346
349
|
width: var(--popover-surface-inline-size, var(--popover-width));
|
|
@@ -484,3 +487,9 @@
|
|
|
484
487
|
min-block-size: 0;
|
|
485
488
|
}
|
|
486
489
|
}
|
|
490
|
+
|
|
491
|
+
@layer components {
|
|
492
|
+
.ui-popover-content[data-flush] :focus-visible {
|
|
493
|
+
--focus-ring-contained-offset: var(--focus-ring-inset-offset);
|
|
494
|
+
}
|
|
495
|
+
}
|