@godxjp/ui 20.0.0 → 20.1.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/README.md +8 -2
- package/dist/app/theme-axes.d.ts +2 -0
- package/dist/app/theme-axes.js +45 -0
- package/dist/components/charts/chart-cartesian.d.ts +2 -1
- package/dist/components/charts/chart-cartesian.js +52 -3
- package/dist/components/charts/chart-category-axis.d.ts +55 -0
- package/dist/components/charts/chart-category-axis.js +93 -0
- package/dist/components/charts/chart-frame.d.ts +10 -1
- package/dist/components/charts/chart-frame.js +19 -3
- package/dist/components/charts/compact-bar-trend.d.ts +1 -1
- package/dist/components/charts/compact-bar-trend.js +2 -0
- package/dist/components/charts/pie-chart.d.ts +1 -1
- package/dist/components/charts/pie-chart.js +12 -1
- package/dist/components/charts/recharts-peer.d.ts +49 -0
- package/dist/components/charts/recharts-peer.js +45 -0
- package/dist/components/data-display/card.d.ts +12 -1
- package/dist/components/data-display/card.js +22 -4
- package/dist/components/data-display/code-block.js +6 -2
- package/dist/components/data-display/data-table.d.ts +39 -4
- package/dist/components/data-display/data-table.js +802 -270
- package/dist/components/data-display/descriptions.d.ts +27 -6
- package/dist/components/data-display/descriptions.js +58 -17
- package/dist/components/data-display/index.d.ts +2 -0
- package/dist/components/data-display/index.js +2 -0
- package/dist/components/data-display/list-row.d.ts +10 -1
- package/dist/components/data-display/list-row.js +7 -1
- package/dist/components/data-display/popover.d.ts +2 -2
- package/dist/components/data-display/popover.js +61 -11
- package/dist/components/data-display/range-timeline.d.ts +38 -0
- package/dist/components/data-display/range-timeline.js +161 -0
- package/dist/components/data-display/scroll-area.js +13 -2
- package/dist/components/data-display/service-launcher-card.js +10 -10
- package/dist/components/data-display/table.d.ts +11 -3
- package/dist/components/data-display/table.js +48 -18
- package/dist/components/data-display/tree-list.js +4 -9
- package/dist/components/data-entry/calendar.d.ts +2 -2
- package/dist/components/data-entry/calendar.js +12 -1
- package/dist/components/data-entry/cascader.d.ts +1 -1
- package/dist/components/data-entry/cascader.js +188 -24
- package/dist/components/data-entry/color-picker.d.ts +1 -1
- package/dist/components/data-entry/color-picker.js +17 -5
- package/dist/components/data-entry/control-appearance.d.ts +64 -0
- package/dist/components/data-entry/control-appearance.js +39 -0
- package/dist/components/data-entry/control-surface.d.ts +61 -0
- package/dist/components/data-entry/control-surface.js +39 -0
- package/dist/components/data-entry/date-picker.d.ts +1 -1
- package/dist/components/data-entry/date-picker.js +344 -113
- package/dist/components/data-entry/date-range-picker.d.ts +1 -1
- package/dist/components/data-entry/date-range-picker.js +278 -140
- package/dist/components/data-entry/form-field.d.ts +1 -1
- package/dist/components/data-entry/form-field.js +39 -4
- package/dist/components/data-entry/form.d.ts +4 -0
- package/dist/components/data-entry/form.js +4 -2
- package/dist/components/data-entry/index.d.ts +7 -3
- package/dist/components/data-entry/index.js +10 -1
- package/dist/components/data-entry/input-otp.d.ts +1 -1
- package/dist/components/data-entry/input.d.ts +12 -34
- package/dist/components/data-entry/input.js +92 -24
- package/dist/components/data-entry/month-picker.d.ts +1 -1
- package/dist/components/data-entry/month-picker.js +47 -10
- package/dist/components/data-entry/month-range-picker.d.ts +1 -1
- package/dist/components/data-entry/month-range-picker.js +51 -11
- package/dist/components/data-entry/number-input.d.ts +7 -0
- package/dist/components/data-entry/number-input.js +147 -98
- package/dist/components/data-entry/password-input.d.ts +1 -1
- package/dist/components/data-entry/radio.d.ts +1 -1
- package/dist/components/data-entry/radio.js +61 -13
- package/dist/components/data-entry/search-input.d.ts +1 -1
- package/dist/components/data-entry/search-input.js +16 -2
- package/dist/components/data-entry/search-select.d.ts +2 -2
- package/dist/components/data-entry/search-select.js +209 -78
- package/dist/components/data-entry/select.d.ts +22 -4
- package/dist/components/data-entry/select.js +215 -163
- package/dist/components/data-entry/slider.d.ts +9 -1
- package/dist/components/data-entry/slider.js +87 -9
- package/dist/components/data-entry/switch.d.ts +3 -0
- package/dist/components/data-entry/switch.js +29 -3
- package/dist/components/data-entry/textarea.d.ts +14 -56
- package/dist/components/data-entry/textarea.js +80 -33
- package/dist/components/data-entry/time-picker.d.ts +2 -2
- package/dist/components/data-entry/time-picker.js +333 -109
- package/dist/components/data-entry/time-range-picker.d.ts +5 -0
- package/dist/components/data-entry/time-range-picker.js +89 -0
- package/dist/components/data-entry/transfer.d.ts +1 -1
- package/dist/components/data-entry/transfer.js +86 -28
- package/dist/components/data-entry/tree-select.d.ts +1 -1
- package/dist/components/data-entry/tree-select.js +201 -113
- package/dist/components/data-entry/tree-utils.js +7 -14
- package/dist/components/data-entry/upload-files.d.ts +2 -0
- package/dist/components/data-entry/upload-files.js +31 -0
- package/dist/components/data-entry/upload-request.d.ts +4 -0
- package/dist/components/data-entry/upload-request.js +53 -0
- package/dist/components/data-entry/upload-types.d.ts +28 -0
- package/dist/components/data-entry/upload-types.js +2 -0
- package/dist/components/data-entry/upload.d.ts +2 -2
- package/dist/components/data-entry/upload.js +475 -115
- package/dist/components/feedback/dialog.js +16 -19
- package/dist/components/general/button.d.ts +1 -1
- package/dist/components/general/button.js +5 -1
- package/dist/components/general/index.d.ts +1 -0
- package/dist/components/general/index.js +2 -0
- package/dist/components/general/typography.d.ts +3 -0
- package/dist/components/general/typography.js +15 -1
- package/dist/components/general/visually-hidden.d.ts +3 -0
- package/dist/components/general/visually-hidden.js +9 -0
- package/dist/components/layout/app-launcher.d.ts +34 -0
- package/dist/components/layout/app-launcher.js +228 -0
- package/dist/components/layout/app-shell.d.ts +2 -0
- package/dist/components/layout/app-shell.js +20 -7
- package/dist/components/layout/breadcrumb.d.ts +14 -2
- package/dist/components/layout/breadcrumb.js +46 -4
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +23 -2
- package/dist/components/layout/index.d.ts +3 -0
- package/dist/components/layout/index.js +5 -1
- package/dist/components/layout/org-switcher.js +20 -1
- package/dist/components/layout/page-container.d.ts +1 -1
- package/dist/components/layout/page-container.js +5 -3
- package/dist/components/layout/responsive-grid.d.ts +16 -2
- package/dist/components/layout/responsive-grid.js +29 -2
- package/dist/components/layout/topbar-item.d.ts +3 -0
- package/dist/components/layout/topbar-item.js +18 -3
- package/dist/components/layout/topbar.d.ts +1 -1
- package/dist/components/layout/topbar.js +27 -6
- package/dist/components/navigation/dropdown-menu.d.ts +30 -2
- package/dist/components/navigation/dropdown-menu.js +68 -11
- package/dist/components/navigation/pagination.d.ts +2 -2
- package/dist/components/navigation/pagination.js +155 -83
- package/dist/components/navigation/steps.d.ts +2 -2
- package/dist/components/navigation/steps.js +29 -4
- package/dist/components/navigation/tabs.d.ts +5 -33
- package/dist/components/navigation/tabs.js +232 -64
- package/dist/components/ui/input-otp.d.ts +26 -28
- package/dist/components/ui/input-otp.js +50 -7
- package/dist/components/ui/password-input.d.ts +36 -2
- package/dist/components/ui/password-input.js +27 -7
- package/dist/components/ui/rating.d.ts +25 -0
- package/dist/components/ui/rating.js +67 -27
- package/dist/components/ui/segmented.d.ts +9 -0
- package/dist/components/ui/segmented.js +17 -2
- package/dist/components/ui/separator.d.ts +4 -0
- package/dist/components/ui/separator.js +13 -0
- package/dist/components/ui/tag-input.d.ts +45 -0
- package/dist/components/ui/tag-input.js +109 -27
- package/dist/form/form-context.d.ts +29 -0
- package/dist/form/form-context.js +44 -4
- package/dist/form/form-field-array.d.ts +22 -0
- package/dist/form/form-field-array.js +50 -0
- package/dist/form/form-field-control.d.ts +2 -1
- package/dist/form/form-field-control.js +116 -40
- package/dist/form/form-root.d.ts +2 -1
- package/dist/form/form-root.js +142 -23
- package/dist/form/index.d.ts +3 -1
- package/dist/form/index.js +12 -1
- package/dist/i18n/messages/en.json +56 -5
- package/dist/i18n/messages/ja.json +56 -5
- package/dist/i18n/messages/vi.json +56 -5
- package/dist/inertia/index.d.ts +20 -0
- package/dist/inertia/index.js +60 -1
- package/dist/lib/control-styles.d.ts +25 -3
- package/dist/lib/control-styles.js +9 -3
- package/dist/lib/datetime/picker-format.d.ts +8 -0
- package/dist/lib/datetime/picker-format.js +54 -0
- package/dist/props/components/charts.prop.d.ts +21 -0
- package/dist/props/components/data-display.prop.d.ts +55 -4
- package/dist/props/components/data-entry.prop.d.ts +687 -43
- package/dist/props/components/form.prop.d.ts +142 -4
- package/dist/props/components/general.prop.d.ts +17 -1
- package/dist/props/components/index.d.ts +2 -2
- package/dist/props/components/layout.prop.d.ts +163 -6
- package/dist/props/components/navigation.prop.d.ts +113 -3
- package/dist/props/registry.d.ts +376 -10
- package/dist/props/registry.js +493 -9
- package/dist/props/vocabulary/data.prop.d.ts +179 -1
- package/dist/props/vocabulary/index.d.ts +4 -4
- package/dist/props/vocabulary/interaction.prop.d.ts +51 -2
- package/dist/props/vocabulary/navigation.prop.d.ts +40 -0
- package/dist/props/vocabulary/shared.prop.d.ts +33 -0
- package/dist/styles/badge-layout.css +2 -1
- package/dist/styles/card-layout.css +26 -4
- package/dist/styles/chart-layout.css +15 -0
- package/dist/styles/control.css +515 -14
- package/dist/styles/data-display-layout.css +241 -6
- package/dist/styles/data-entry-layout.css +13 -0
- package/dist/styles/layout.css +221 -4
- package/dist/styles/navigation-layout.css +227 -0
- package/dist/styles/shell-layout.css +229 -5
- package/dist/styles/table-layout.css +95 -6
- package/dist/styles/text-layout.css +5 -0
- package/dist/tokens/base.css +1 -0
- package/dist/tokens/components/badge.css +1 -0
- package/dist/tokens/components/chart.css +6 -0
- package/dist/tokens/components/control.css +79 -2
- package/dist/tokens/components/data-display.css +9 -0
- package/dist/tokens/components/descriptions.css +11 -0
- package/dist/tokens/components/flex.css +8 -0
- package/dist/tokens/components/navigation.css +55 -0
- package/dist/tokens/components/shell.css +50 -2
- package/dist/tokens/components/table.css +14 -0
- package/dist/tokens/semantic/layout.css +9 -0
- package/docs/CONSUMER-RULES.md +13 -0
- package/docs/DESIGN-AUTHORITY.md +43 -6
- package/docs/DEVELOPMENT.md +4 -3
- package/docs/FORMS.md +151 -6
- package/docs/FRAME-COVERAGE-REPORT.md +29 -16
- package/docs/README.md +1 -1
- package/docs/STANDARDS-vocabulary-tokens.md +1 -1
- package/docs/TESTING.md +15 -6
- package/docs/charts/cjk-category-axis.tsx +81 -0
- package/docs/data-display/card/index.tsx +22 -0
- package/docs/data-display/data-table/examples/antd-parity.tsx +257 -0
- package/docs/data-display/data-table/index.tsx +23 -0
- package/docs/data-display/descriptions.tsx +41 -0
- package/docs/data-display/scroll-area.tsx +31 -25
- package/docs/data-display/table.tsx +104 -45
- package/docs/data-display/timeline.tsx +41 -0
- package/docs/data-entry/date-picker.tsx +85 -0
- package/docs/data-entry/date-range-picker.tsx +26 -0
- package/docs/data-entry/form-dynamic-fields.tsx +199 -0
- package/docs/data-entry/form.tsx +74 -4
- package/docs/data-entry/input-otp.tsx +24 -0
- package/docs/data-entry/input.tsx +46 -1
- package/docs/data-entry/month-range-picker.tsx +1 -1
- package/docs/data-entry/select.tsx +27 -0
- package/docs/data-entry/switch.tsx +41 -0
- package/docs/data-entry/textarea.tsx +38 -0
- package/docs/data-entry/time-picker.tsx +85 -1
- package/docs/data-entry/time-range-picker.tsx +55 -0
- package/docs/data-entry/transfer.tsx +17 -0
- package/docs/data-entry/upload.tsx +56 -12
- package/docs/feedback/tooltip.tsx +1 -1
- package/docs/general/activity.tsx +2 -2
- package/docs/general/button/index.tsx +14 -1
- package/docs/general/typography.tsx +14 -1
- package/docs/layout/app-launcher.tsx +151 -0
- package/docs/layout/app-shell.tsx +11 -0
- package/docs/layout/flex.tsx +50 -0
- package/docs/layout/responsive-grid.tsx +21 -1
- package/docs/layout/topbar.tsx +5 -9
- package/docs/navigation/app-setting-picker.tsx +11 -0
- package/docs/navigation/breadcrumb.tsx +48 -0
- package/docs/navigation/dropdown-menu.tsx +21 -0
- package/docs/navigation/pagination.tsx +52 -0
- package/docs/navigation/steps.tsx +37 -0
- package/docs/navigation/tabs.tsx +97 -1
- package/docs/query/button-refetch.tsx +1 -0
- package/package.json +19 -2
- package/scripts/_agent-setup.mjs +19 -2
- package/scripts/init-guinea-pig.mjs +26 -4
- package/scripts/ui-audit.mjs +243 -30
|
@@ -2,11 +2,16 @@
|
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
import { mergeAriaIds } from "../../lib/field-a11y.js";
|
|
4
4
|
import { cn } from "../../lib/utils.js";
|
|
5
|
-
import { flexGapClass, padStyle } from "../../lib/variants.js";
|
|
5
|
+
import { flexGapClass, padStyle, padStepToken } from "../../lib/variants.js";
|
|
6
6
|
const toCssLength = (value) => typeof value === "number" ? `${value}px` : value;
|
|
7
7
|
function Flex({
|
|
8
8
|
as: Element = "div",
|
|
9
9
|
direction = "row",
|
|
10
|
+
grow,
|
|
11
|
+
shrink,
|
|
12
|
+
surface,
|
|
13
|
+
bleed,
|
|
14
|
+
reveal,
|
|
10
15
|
gap = "md",
|
|
11
16
|
gapRaw,
|
|
12
17
|
pad,
|
|
@@ -37,10 +42,24 @@ function Flex({
|
|
|
37
42
|
"aria-describedby": mergeAriaIds(props["aria-describedby"], ariaErrorMessage)
|
|
38
43
|
};
|
|
39
44
|
}
|
|
45
|
+
const responsive = typeof direction === "object";
|
|
46
|
+
const axes = responsive ? direction : { base: direction };
|
|
47
|
+
const cssDirection = (axis) => axis === "col" ? "column" : axis;
|
|
48
|
+
const directionVars = responsive ? Object.fromEntries(
|
|
49
|
+
Object.entries(axes).map(([step, axis]) => [
|
|
50
|
+
`--flex-direction-${step}`,
|
|
51
|
+
cssDirection(axis)
|
|
52
|
+
])
|
|
53
|
+
) : {};
|
|
40
54
|
return /* @__PURE__ */ jsx(
|
|
41
55
|
Element,
|
|
42
56
|
{
|
|
43
|
-
"data-direction": direction,
|
|
57
|
+
"data-direction": responsive ? "responsive" : direction,
|
|
58
|
+
"data-grow": grow ? "" : void 0,
|
|
59
|
+
"data-shrink": shrink === false ? "false" : void 0,
|
|
60
|
+
"data-surface": surface,
|
|
61
|
+
"data-reveal": reveal,
|
|
62
|
+
"data-list": Element === "ul" ? "disc" : Element === "ol" ? "decimal" : void 0,
|
|
44
63
|
"data-align": align,
|
|
45
64
|
"data-justify": justify,
|
|
46
65
|
"data-wrap": wrap ? "true" : void 0,
|
|
@@ -53,6 +72,8 @@ function Flex({
|
|
|
53
72
|
"data-pad-raw": padRaw === void 0 ? void 0 : "",
|
|
54
73
|
style: {
|
|
55
74
|
...style,
|
|
75
|
+
...directionVars,
|
|
76
|
+
...bleed === void 0 ? void 0 : { marginInline: `calc(-1 * ${padStepToken(bleed)})` },
|
|
56
77
|
...gapRaw === void 0 ? void 0 : { gap: `${gapRaw}px` },
|
|
57
78
|
...width === void 0 ? void 0 : { inlineSize: toCssLength(width) },
|
|
58
79
|
...padStyle(pad, padRaw)
|
|
@@ -7,6 +7,8 @@ export { NavList } from "./nav-list.js";
|
|
|
7
7
|
export type { NavListProp, NavListProps } from "./nav-list.js";
|
|
8
8
|
export { AppShell } from "./app-shell.js";
|
|
9
9
|
export type { AppShellProps } from "./app-shell.js";
|
|
10
|
+
export { AppLauncher } from "./app-launcher.js";
|
|
11
|
+
export type { AppLauncherApp, AppLauncherGroup, AppLauncherLabels, AppLauncherProp, AppLauncherProps, } from "./app-launcher.js";
|
|
10
12
|
export { OrgSwitcher } from "./org-switcher.js";
|
|
11
13
|
export type { OrgSwitcherLabels, OrgSwitcherOrganization, OrgSwitcherProp, OrgSwitcherProps, } from "./org-switcher.js";
|
|
12
14
|
export { AuthShell } from "./auth-shell.js";
|
|
@@ -54,3 +56,4 @@ export { LegalDocumentShell } from "./legal-document-shell.js";
|
|
|
54
56
|
export type { LegalDocumentSectionProp, LegalDocumentShellProp, LegalDocumentShellProps, } from "./legal-document-shell.js";
|
|
55
57
|
export { ServiceRolePanel } from "./service-role-panel.js";
|
|
56
58
|
export type { ServiceRoleItemProp, ServiceRolePanelProp, ServiceRolePanelProps, } from "./service-role-panel.js";
|
|
59
|
+
export { useAppShellNavigationMode } from "./app-shell.js";
|
|
@@ -3,6 +3,7 @@ import { Flex } from "./flex.js";
|
|
|
3
3
|
import { ResizablePanel, ResizablePanelGroup, ResizableHandle } from "./resizable.js";
|
|
4
4
|
import { NavList } from "./nav-list.js";
|
|
5
5
|
import { AppShell } from "./app-shell.js";
|
|
6
|
+
import { AppLauncher } from "./app-launcher.js";
|
|
6
7
|
import { OrgSwitcher } from "./org-switcher.js";
|
|
7
8
|
import { AuthShell } from "./auth-shell.js";
|
|
8
9
|
import { AuthDivider } from "./auth-divider.js";
|
|
@@ -25,8 +26,10 @@ import { Separator } from "./separator.js";
|
|
|
25
26
|
import { AspectRatio } from "./aspect-ratio.js";
|
|
26
27
|
import { LegalDocumentShell } from "./legal-document-shell.js";
|
|
27
28
|
import { ServiceRolePanel } from "./service-role-panel.js";
|
|
29
|
+
import { useAppShellNavigationMode } from "./app-shell.js";
|
|
28
30
|
export {
|
|
29
31
|
AccountChip,
|
|
32
|
+
AppLauncher,
|
|
30
33
|
AppShell,
|
|
31
34
|
AspectRatio,
|
|
32
35
|
AuthAccountSummary,
|
|
@@ -58,5 +61,6 @@ export {
|
|
|
58
61
|
SplitPane,
|
|
59
62
|
Topbar,
|
|
60
63
|
TopbarItem,
|
|
61
|
-
createSidebarLink
|
|
64
|
+
createSidebarLink,
|
|
65
|
+
useAppShellNavigationMode
|
|
62
66
|
};
|
|
@@ -3,6 +3,14 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Check, ChevronsUpDown, Loader2, RotateCcw } from "lucide-react";
|
|
5
5
|
import { cn } from "../../lib/utils.js";
|
|
6
|
+
import {
|
|
7
|
+
Dialog,
|
|
8
|
+
DialogBody,
|
|
9
|
+
DialogContent,
|
|
10
|
+
DialogHeader,
|
|
11
|
+
DialogTitle,
|
|
12
|
+
DialogTrigger
|
|
13
|
+
} from "../feedback/dialog.js";
|
|
6
14
|
import { Popover, PopoverContent, PopoverTrigger } from "../data-display/popover.js";
|
|
7
15
|
import {
|
|
8
16
|
Command,
|
|
@@ -163,7 +171,9 @@ function OrgSwitcher({
|
|
|
163
171
|
[controlled, onOpenChange]
|
|
164
172
|
);
|
|
165
173
|
const compactViewport = useSheetResponsiveMode("auto") === "bottom";
|
|
166
|
-
const
|
|
174
|
+
const responsivePair = responsive === "auto" || responsive === "dialog";
|
|
175
|
+
const sheet = responsive === "sheet" || responsivePair && compactViewport;
|
|
176
|
+
const dialog = responsive === "dialog" && !sheet;
|
|
167
177
|
const current = organizations.find((organization) => organization.id === value);
|
|
168
178
|
const fallbackName = current?.name ?? labels.title;
|
|
169
179
|
const triggerLabel = labels.trigger(fallbackName);
|
|
@@ -210,6 +220,15 @@ function OrgSwitcher({
|
|
|
210
220
|
)
|
|
211
221
|
] }) });
|
|
212
222
|
}
|
|
223
|
+
if (dialog) {
|
|
224
|
+
return /* @__PURE__ */ jsx("div", { className: cn("ui-org-switcher", className), "data-collapsed": collapsed || void 0, children: /* @__PURE__ */ jsxs(Dialog, { open: resolvedOpen, onOpenChange: setOpen, children: [
|
|
225
|
+
/* @__PURE__ */ jsx(DialogTrigger, { asChild: true, children: trigger }),
|
|
226
|
+
/* @__PURE__ */ jsxs(DialogContent, { className: "ui-org-switcher-dialog", children: [
|
|
227
|
+
/* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: labels.title }) }),
|
|
228
|
+
/* @__PURE__ */ jsx(DialogBody, { children: panel })
|
|
229
|
+
] })
|
|
230
|
+
] }) });
|
|
231
|
+
}
|
|
213
232
|
return /* @__PURE__ */ jsx("div", { className: cn("ui-org-switcher", className), "data-collapsed": collapsed || void 0, children: /* @__PURE__ */ jsxs(Popover, { open: resolvedOpen, onOpenChange: setOpen, children: [
|
|
214
233
|
/* @__PURE__ */ jsx(PopoverTrigger, { asChild: true, children: trigger }),
|
|
215
234
|
/* @__PURE__ */ jsx(PopoverContent, { align: "start", className: "ui-org-switcher-popover", "aria-label": labels.title, children: panel })
|
|
@@ -2,7 +2,7 @@ import type { PageContainerProp, PageInsetProp } from "../../props/components/la
|
|
|
2
2
|
export type { PageContainerProp, PageContainerProp as PageContainerProps, } from "../../props/components/layout.prop.js";
|
|
3
3
|
export type { BreadcrumbItemProp, BreadcrumbItemProp as BreadcrumbItem, } from "../../props/vocabulary/navigation.prop.js";
|
|
4
4
|
export declare function PageContainerInset({ className, children, ...props }: PageInsetProp): import("react").JSX.Element;
|
|
5
|
-
declare function PageContainerRoot({ title, subtitle, status, extra, toolbar, footer, breadcrumb, breadcrumbLabel, breadcrumbAriaLabel, linkComponent: LinkComponent, headerLoading, density, variant, preset, headerLayout, headerScale, measure, stickyFooter, footerReveal, fill, children, className, }: PageContainerProp): import("react").JSX.Element;
|
|
5
|
+
declare function PageContainerRoot({ title, subtitle, status, extra, toolbar, footer, toolbarPad, footerPad, breadcrumb, breadcrumbLabel, breadcrumbAriaLabel, linkComponent: LinkComponent, headerLoading, density, variant, preset, headerLayout, headerScale, measure, stickyFooter, footerReveal, fill, children, className, }: PageContainerProp): import("react").JSX.Element;
|
|
6
6
|
export declare const PageContainer: typeof PageContainerRoot & {
|
|
7
7
|
Inset: typeof PageContainerInset;
|
|
8
8
|
};
|
|
@@ -4,7 +4,7 @@ import { useEffect, useRef, useState } from "react";
|
|
|
4
4
|
import { ChevronRight } from "lucide-react";
|
|
5
5
|
import { useTranslation } from "../../i18n/use-translation.js";
|
|
6
6
|
import { cn } from "../../lib/utils.js";
|
|
7
|
-
import { densityClass, pageContainerVariantClass } from "../../lib/variants.js";
|
|
7
|
+
import { densityClass, pageContainerVariantClass, padStyle } from "../../lib/variants.js";
|
|
8
8
|
function scrollParent(el) {
|
|
9
9
|
let node = el?.parentElement ?? null;
|
|
10
10
|
while (node) {
|
|
@@ -40,6 +40,8 @@ function PageContainerRoot({
|
|
|
40
40
|
extra,
|
|
41
41
|
toolbar,
|
|
42
42
|
footer,
|
|
43
|
+
toolbarPad,
|
|
44
|
+
footerPad,
|
|
43
45
|
breadcrumb,
|
|
44
46
|
breadcrumbLabel,
|
|
45
47
|
breadcrumbAriaLabel,
|
|
@@ -146,9 +148,9 @@ function PageContainerRoot({
|
|
|
146
148
|
]
|
|
147
149
|
}
|
|
148
150
|
),
|
|
149
|
-
toolbar != null && /* @__PURE__ */ jsx("div", { className: "ui-page-toolbar", children: toolbar }),
|
|
151
|
+
toolbar != null && /* @__PURE__ */ jsx("div", { className: "ui-page-toolbar", style: padStyle(toolbarPad, void 0), children: toolbar }),
|
|
150
152
|
children != null && /* @__PURE__ */ jsx("div", { className: "ui-page-body", children }),
|
|
151
|
-
footer && /* @__PURE__ */ jsx("footer", { className: "ui-page-footer", children: footer })
|
|
153
|
+
footer && /* @__PURE__ */ jsx("footer", { className: "ui-page-footer", style: padStyle(footerPad, void 0), children: footer })
|
|
152
154
|
]
|
|
153
155
|
}
|
|
154
156
|
);
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import type { ReactNode } from "react";
|
|
2
|
-
import type { ResponsiveGridColumnsProp, ResponsiveGridPresetProp } from "../../props/components/layout.prop.js";
|
|
2
|
+
import type { ResponsiveGridColumnsProp, ResponsiveGridFlowProp, ResponsiveGridPresetProp } from "../../props/components/layout.prop.js";
|
|
3
|
+
import type { PadProp, PadRawProp } from "../../props/vocabulary/index.js";
|
|
3
4
|
import type { GapProp } from "../../props/vocabulary/layout.prop.js";
|
|
4
5
|
export type ResponsiveGridProps = {
|
|
6
|
+
pad?: PadProp;
|
|
7
|
+
padRaw?: PadRawProp;
|
|
5
8
|
/** Gap between cells, the same steps as Flex. Default `md`. */
|
|
6
9
|
gap?: GapProp;
|
|
7
10
|
/** Optional structural class override. */
|
|
8
11
|
className?: string;
|
|
9
12
|
columns?: ResponsiveGridColumnsProp;
|
|
13
|
+
/** Keep collections in a horizontal sequence; pair with ScrollArea orientation="horizontal". */
|
|
14
|
+
flow?: ResponsiveGridFlowProp;
|
|
10
15
|
/**
|
|
11
16
|
* Named column geometry for a recognised collection shape — see `ResponsiveGridPresetProp`.
|
|
12
17
|
* Wins over `columns` when both are set, so a caller migrating to a preset does not also need
|
|
@@ -15,4 +20,13 @@ export type ResponsiveGridProps = {
|
|
|
15
20
|
preset?: ResponsiveGridPresetProp;
|
|
16
21
|
children: ReactNode;
|
|
17
22
|
};
|
|
18
|
-
export declare function ResponsiveGrid({ columns, gap, preset, className, children, }: ResponsiveGridProps): import("react").JSX.Element;
|
|
23
|
+
export declare function ResponsiveGrid({ columns, flow, gap, pad, padRaw, preset, className, children, }: ResponsiveGridProps): import("react").JSX.Element;
|
|
24
|
+
export declare namespace ResponsiveGrid {
|
|
25
|
+
export { ResponsiveGridItem as Item };
|
|
26
|
+
}
|
|
27
|
+
/** A grid item owns its responsive span; no extra implicit columns on a narrow container. */
|
|
28
|
+
export declare function ResponsiveGridItem({ span, children, className, }: {
|
|
29
|
+
span?: ResponsiveGridColumnsProp;
|
|
30
|
+
children?: ReactNode;
|
|
31
|
+
className?: string;
|
|
32
|
+
}): import("react").JSX.Element;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { padStyle } from "../../lib/variants.js";
|
|
2
3
|
import { cn } from "../../lib/utils.js";
|
|
3
4
|
const RESPONSIVE_GRID_PRESET_COLUMNS = {
|
|
4
5
|
"pricing-plans": { base: 1, sm: 3, md: 3, lg: 3 }
|
|
@@ -29,14 +30,40 @@ function toStyle(resolved) {
|
|
|
29
30
|
}
|
|
30
31
|
function ResponsiveGrid({
|
|
31
32
|
columns = 4,
|
|
33
|
+
flow = "rows",
|
|
32
34
|
gap,
|
|
35
|
+
pad,
|
|
36
|
+
padRaw,
|
|
33
37
|
preset,
|
|
34
38
|
className,
|
|
35
39
|
children
|
|
36
40
|
}) {
|
|
37
41
|
const resolved = preset ? RESPONSIVE_GRID_PRESET_COLUMNS[preset] : resolveColumns(columns);
|
|
38
|
-
return /* @__PURE__ */ jsx("div", { className: "ui-responsive-grid-scope", children: /* @__PURE__ */ jsx(
|
|
42
|
+
return /* @__PURE__ */ jsx("div", { className: "ui-responsive-grid-scope", children: /* @__PURE__ */ jsx(
|
|
43
|
+
"div",
|
|
44
|
+
{
|
|
45
|
+
className: cn("ui-responsive-grid", className),
|
|
46
|
+
"data-gap": gap,
|
|
47
|
+
"data-flow": flow === "columns" ? "columns" : void 0,
|
|
48
|
+
style: { ...toStyle(resolved), ...padStyle(pad, padRaw) },
|
|
49
|
+
"data-pad-raw": padRaw === void 0 ? void 0 : "",
|
|
50
|
+
children
|
|
51
|
+
}
|
|
52
|
+
) });
|
|
39
53
|
}
|
|
54
|
+
function ResponsiveGridItem({
|
|
55
|
+
span = 1,
|
|
56
|
+
children,
|
|
57
|
+
className
|
|
58
|
+
}) {
|
|
59
|
+
const steps = typeof span === "number" ? { base: 1, sm: span, md: span, lg: span } : resolveColumns(span);
|
|
60
|
+
const style = Object.fromEntries(
|
|
61
|
+
Object.entries(steps).map(([step, value]) => [`--responsive-grid-item-${step}`, value])
|
|
62
|
+
);
|
|
63
|
+
return /* @__PURE__ */ jsx("div", { className: cn("ui-responsive-grid-item", className), style, children });
|
|
64
|
+
}
|
|
65
|
+
ResponsiveGrid.Item = ResponsiveGridItem;
|
|
40
66
|
export {
|
|
41
|
-
ResponsiveGrid
|
|
67
|
+
ResponsiveGrid,
|
|
68
|
+
ResponsiveGridItem
|
|
42
69
|
};
|
|
@@ -11,6 +11,9 @@ export type { TopbarItemProp, TopbarItemProp as TopbarItemProps, } from "../../p
|
|
|
11
11
|
* file resolves, including nothing at all while the `--focus-outline` switch ships off.
|
|
12
12
|
*/
|
|
13
13
|
export declare const TopbarItem: React.ForwardRefExoticComponent<Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "children"> & {
|
|
14
|
+
hideBelow?: import("../../props/index.js").BreakpointProp;
|
|
15
|
+
badge?: React.ReactNode;
|
|
16
|
+
badgeTone?: import("../../props/components/layout.prop.js").SidebarBadgeToneProp;
|
|
14
17
|
asChild?: boolean;
|
|
15
18
|
children?: React.ReactNode;
|
|
16
19
|
className?: import("../../props/index.js").ClassNameProp;
|
|
@@ -1,17 +1,32 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
2
|
import * as React from "react";
|
|
3
3
|
import { Slot } from "../../lib/slot.js";
|
|
4
4
|
import { cn } from "../../lib/utils.js";
|
|
5
|
-
const TopbarItem = React.forwardRef(function TopbarItem2({ asChild = false, className, type, ...props }, ref) {
|
|
5
|
+
const TopbarItem = React.forwardRef(function TopbarItem2({ asChild = false, className, type, hideBelow, badge, badgeTone, children, ...props }, ref) {
|
|
6
6
|
const Comp = asChild ? Slot : "button";
|
|
7
|
+
const showBadge = !asChild && badge !== void 0 && badge !== "";
|
|
8
|
+
const badgeNode = showBadge ? /* @__PURE__ */ jsx(
|
|
9
|
+
"span",
|
|
10
|
+
{
|
|
11
|
+
"data-slot": "topbar-item-badge",
|
|
12
|
+
className: "ui-topbar-item-badge",
|
|
13
|
+
"data-tone": badgeTone === "destructive" ? "destructive" : void 0,
|
|
14
|
+
children: badge
|
|
15
|
+
}
|
|
16
|
+
) : null;
|
|
7
17
|
return /* @__PURE__ */ jsx(
|
|
8
18
|
Comp,
|
|
9
19
|
{
|
|
10
20
|
ref,
|
|
11
21
|
"data-slot": "topbar-item",
|
|
22
|
+
"data-hide-below": hideBelow,
|
|
12
23
|
className: cn("ui-topbar-item ui-focus-ring", className),
|
|
13
24
|
type: asChild ? void 0 : type ?? "button",
|
|
14
|
-
...props
|
|
25
|
+
...props,
|
|
26
|
+
children: asChild ? children : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
27
|
+
children,
|
|
28
|
+
badgeNode
|
|
29
|
+
] })
|
|
15
30
|
}
|
|
16
31
|
);
|
|
17
32
|
});
|
|
@@ -4,4 +4,4 @@ export type { TopbarProp, TopbarProp as TopbarProps } from "../../props/componen
|
|
|
4
4
|
* Topbar — a PURE SLOT bar. It positions three clusters (`start` / `center` / `end`) and owns the
|
|
5
5
|
* bar's flex layout; it does NOT bake any chrome.
|
|
6
6
|
*/
|
|
7
|
-
export declare function Topbar({ start, center, end, className, children, ...props }: TopbarProp): import("react").JSX.Element;
|
|
7
|
+
export declare function Topbar({ start, center, end, className, children, height, pad, style, ...props }: TopbarProp): import("react").JSX.Element;
|
|
@@ -1,11 +1,32 @@
|
|
|
1
1
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { padStyle } from "../../lib/variants.js";
|
|
2
3
|
import { cn } from "../../lib/utils.js";
|
|
3
|
-
function Topbar({
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
function Topbar({
|
|
5
|
+
start,
|
|
6
|
+
center,
|
|
7
|
+
end,
|
|
8
|
+
className,
|
|
9
|
+
children,
|
|
10
|
+
height,
|
|
11
|
+
pad,
|
|
12
|
+
style,
|
|
13
|
+
...props
|
|
14
|
+
}) {
|
|
15
|
+
return /* @__PURE__ */ jsx(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
"data-height": height,
|
|
19
|
+
style: { ...style, ...padStyle(pad, void 0) },
|
|
20
|
+
"data-slot": "topbar",
|
|
21
|
+
className: cn("ui-topbar", className),
|
|
22
|
+
...props,
|
|
23
|
+
children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
24
|
+
start != null ? /* @__PURE__ */ jsx("div", { "data-slot": "topbar-start", className: "ui-topbar-start", children: start }) : null,
|
|
25
|
+
center != null ? /* @__PURE__ */ jsx("div", { "data-slot": "topbar-center", className: "ui-topbar-center", children: center }) : null,
|
|
26
|
+
end != null ? /* @__PURE__ */ jsx("div", { "data-slot": "topbar-end", className: "ui-topbar-end", children: end }) : null
|
|
27
|
+
] })
|
|
28
|
+
}
|
|
29
|
+
);
|
|
9
30
|
}
|
|
10
31
|
export {
|
|
11
32
|
Topbar
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { type MenuItemRenderProps, type PopoverProps, type PopoverRenderProps } from "react-aria-components";
|
|
3
|
+
import type { DropdownMenuPlacementProp } from "../../props/components/navigation.prop.js";
|
|
4
|
+
export type { DropdownMenuPlacementProp } from "../../props/components/navigation.prop.js";
|
|
3
5
|
/**
|
|
4
6
|
* Dịch trạng thái item của RAC sang bộ `data-*` mà Radix phát ra và CSS của kho đang bám.
|
|
5
7
|
*
|
|
@@ -98,7 +100,17 @@ type DropdownMenuSubProps = React.PropsWithChildren<DropdownMenuSubPropsOwn>;
|
|
|
98
100
|
* popover — nên thứ tự `<SubTrigger/>` rồi `<SubContent/>` của Radix ánh xạ thẳng.
|
|
99
101
|
*/
|
|
100
102
|
export declare function DropdownMenuSub({ children }: DropdownMenuSubProps): React.JSX.Element;
|
|
103
|
+
/**
|
|
104
|
+
* Width axis of the menu surface (gh#396) — the vocabulary `Select` already publishes, extended to
|
|
105
|
+
* the one member of the family that never got it. `"trigger"` matches the anchor, `"auto"` releases
|
|
106
|
+
* the floor and shrinks to the content, and `sm | md | lg` select the `--menu-content-width-*`
|
|
107
|
+
* ladder. Unset = today's `--dropdown-content-min-width`, so nothing moves.
|
|
108
|
+
*/
|
|
109
|
+
type DropdownMenuContentWidth = "trigger" | "auto" | "sm" | "md" | "lg";
|
|
101
110
|
interface DropdownMenuContentPropsOwn {
|
|
111
|
+
placement?: DropdownMenuPlacementProp;
|
|
112
|
+
arrow?: boolean;
|
|
113
|
+
width?: DropdownMenuContentWidth;
|
|
102
114
|
className?: string;
|
|
103
115
|
side?: "top" | "right" | "bottom" | "left";
|
|
104
116
|
align?: "start" | "center" | "end";
|
|
@@ -125,7 +137,7 @@ type DropdownMenuContentProps = React.PropsWithChildren<DropdownMenuContentProps
|
|
|
125
137
|
* NGAY ở ý định đóng: đúng lớp lỗi gh#385, đã sửa ở thượng nguồn. Phép đo là
|
|
126
138
|
* `src/components/__tests__/overlay-inert-release-385.test.tsx`.
|
|
127
139
|
*/
|
|
128
|
-
export declare function DropdownMenuContent({ children, className, side, align, sideOffset, alignOffset, avoidCollisions, collisionPadding, loop, hideWhenDetached, sticky, forceMount, }: DropdownMenuContentProps): React.JSX.Element;
|
|
140
|
+
export declare function DropdownMenuContent({ children, className, side, align, sideOffset, placement, arrow, width, alignOffset, avoidCollisions, collisionPadding, loop, hideWhenDetached, sticky, forceMount, }: DropdownMenuContentProps): React.JSX.Element;
|
|
129
141
|
interface DropdownMenuItemPropsOwn {
|
|
130
142
|
className?: string;
|
|
131
143
|
inset?: boolean;
|
|
@@ -150,6 +162,17 @@ type DropdownMenuLabelProps = React.PropsWithChildren<DropdownMenuLabelPropsOwn>
|
|
|
150
162
|
*
|
|
151
163
|
* `Header` không đi qua `useRenderProps`, nên `props.children` trong `render` CHÍNH là children của
|
|
152
164
|
* consumer — không có `Provider` chen vào như ở `MenuItem`. `Slot` vì thế nhận thẳng gói props.
|
|
165
|
+
*
|
|
166
|
+
* NHƯNG PHẢI RENDER RA `<div>`, KHÔNG PHẢI `<header>`. `<header>` mang vai trò ngầm `banner`, và
|
|
167
|
+
* `banner` không nằm trong danh sách con hợp lệ của `role="menu"` (axe: aria-required-children,
|
|
168
|
+
* ARIA 1.2 — menu chỉ nhận menuitem / menuitemcheckbox / menuitemradio / group / separator). Radix
|
|
169
|
+
* dựng `<div>`, vai trò `generic`, nên nó không bao giờ vấp lỗi này.
|
|
170
|
+
*
|
|
171
|
+
* `Header` vẫn được dùng chứ không thay bằng `<div>` trần: bộ dựng collection của RAC chỉ nhận các
|
|
172
|
+
* nút nó biết, một phần tử lạ đặt thẳng trong `Menu` sẽ bị nó bỏ. Nên giữ nút, đổi thẻ.
|
|
173
|
+
*
|
|
174
|
+
* Lỗi này ẩn suốt vì helper a11y dùng chung soi container của lần render, còn menu thì portal ra
|
|
175
|
+
* `document.body` — phép kiểm mang tên "open, fully-composed menu" thực chất soi một hộp rỗng.
|
|
153
176
|
*/
|
|
154
177
|
export declare function DropdownMenuLabel({ children, className, inset, asChild }: DropdownMenuLabelProps): React.JSX.Element;
|
|
155
178
|
interface DropdownMenuSeparatorProps {
|
|
@@ -166,6 +189,12 @@ interface DropdownMenuCheckboxItemPropsOwn {
|
|
|
166
189
|
asChild?: boolean;
|
|
167
190
|
}
|
|
168
191
|
type DropdownMenuCheckboxItemProps = React.PropsWithChildren<DropdownMenuCheckboxItemPropsOwn>;
|
|
192
|
+
/**
|
|
193
|
+
* Ở Radix mỗi CheckboxItem tự giữ `checked`. Ở RAC không có `isSelected` trên item: `aria-checked`
|
|
194
|
+
* và `role="menuitemcheckbox"` chỉ xuất hiện khi collection BAO QUANH khai báo `selectionMode`.
|
|
195
|
+
* Nên mỗi hàng độc lập được bọc trong một `MenuSection` một-phần-tử — đó là cái giá để giữ đúng
|
|
196
|
+
* vai trò ARIA mà consumer đang test.
|
|
197
|
+
*/
|
|
169
198
|
export declare function DropdownMenuCheckboxItem({ children, className, checked, onCheckedChange, disabled, textValue, asChild, }: DropdownMenuCheckboxItemProps): React.JSX.Element;
|
|
170
199
|
interface DropdownMenuRadioItemPropsOwn {
|
|
171
200
|
className?: string;
|
|
@@ -202,4 +231,3 @@ interface DropdownMenuSubContentPropsOwn {
|
|
|
202
231
|
type DropdownMenuSubContentProps = React.PropsWithChildren<DropdownMenuSubContentPropsOwn>;
|
|
203
232
|
export declare function DropdownMenuSubContent({ children, className, align, alignOffset, sideOffset, avoidCollisions, collisionPadding, loop, forceMount, hideWhenDetached, sticky, }: DropdownMenuSubContentProps): React.JSX.Element;
|
|
204
233
|
export declare const DropdownMenuShortcut: ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => React.JSX.Element;
|
|
205
|
-
export {};
|
|
@@ -3,6 +3,7 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import {
|
|
5
5
|
Header,
|
|
6
|
+
Button as AriaButton,
|
|
6
7
|
Menu,
|
|
7
8
|
MenuItem,
|
|
8
9
|
MenuSection,
|
|
@@ -11,11 +12,20 @@ import {
|
|
|
11
12
|
Popover,
|
|
12
13
|
Pressable,
|
|
13
14
|
Separator,
|
|
15
|
+
OverlayArrow,
|
|
14
16
|
SubmenuTrigger
|
|
15
17
|
} from "react-aria-components";
|
|
16
18
|
import { Check, ChevronRight } from "lucide-react";
|
|
17
19
|
import { cn } from "../../lib/utils.js";
|
|
18
20
|
import { Slot } from "../../lib/slot.js";
|
|
21
|
+
const DROPDOWN_MENU_PLACEMENT = {
|
|
22
|
+
top: { side: "top", align: "center" },
|
|
23
|
+
topStart: { side: "top", align: "start" },
|
|
24
|
+
topEnd: { side: "top", align: "end" },
|
|
25
|
+
bottom: { side: "bottom", align: "center" },
|
|
26
|
+
bottomStart: { side: "bottom", align: "start" },
|
|
27
|
+
bottomEnd: { side: "bottom", align: "end" }
|
|
28
|
+
};
|
|
19
29
|
function borrowedTag(children, asChild) {
|
|
20
30
|
return asChild ? React.Children.only(children) : null;
|
|
21
31
|
}
|
|
@@ -69,7 +79,16 @@ function DropdownMenuTrigger({ asChild, children, ...props }) {
|
|
|
69
79
|
"data-state": dataState
|
|
70
80
|
}) });
|
|
71
81
|
}
|
|
72
|
-
return /* @__PURE__ */ jsx(
|
|
82
|
+
return /* @__PURE__ */ jsx(
|
|
83
|
+
AriaButton,
|
|
84
|
+
{
|
|
85
|
+
...props,
|
|
86
|
+
isDisabled: props.disabled,
|
|
87
|
+
"data-slot": "dropdown-menu-trigger",
|
|
88
|
+
"data-state": dataState,
|
|
89
|
+
children
|
|
90
|
+
}
|
|
91
|
+
);
|
|
73
92
|
}
|
|
74
93
|
function DropdownMenuPortal({ children }) {
|
|
75
94
|
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
@@ -110,6 +129,9 @@ function DropdownMenuContent({
|
|
|
110
129
|
side,
|
|
111
130
|
align,
|
|
112
131
|
sideOffset = 4,
|
|
132
|
+
placement,
|
|
133
|
+
arrow,
|
|
134
|
+
width,
|
|
113
135
|
alignOffset,
|
|
114
136
|
avoidCollisions,
|
|
115
137
|
collisionPadding,
|
|
@@ -122,12 +144,13 @@ function DropdownMenuContent({
|
|
|
122
144
|
void sticky;
|
|
123
145
|
void forceMount;
|
|
124
146
|
const { modal } = React.useContext(DropdownMenuModalContext);
|
|
125
|
-
|
|
147
|
+
const anchor = placement ? DROPDOWN_MENU_PLACEMENT[placement] : void 0;
|
|
148
|
+
return /* @__PURE__ */ jsx(DropdownMenuPortal, { children: /* @__PURE__ */ jsxs(
|
|
126
149
|
Popover,
|
|
127
150
|
{
|
|
128
151
|
"data-slot": "dropdown-menu-content",
|
|
129
152
|
isNonModal: !modal,
|
|
130
|
-
placement: toPlacement(side, align),
|
|
153
|
+
placement: toPlacement(side ?? anchor?.side, align ?? anchor?.align),
|
|
131
154
|
offset: sideOffset,
|
|
132
155
|
crossOffset: alignOffset,
|
|
133
156
|
shouldFlip: avoidCollisions,
|
|
@@ -138,9 +161,30 @@ function DropdownMenuContent({
|
|
|
138
161
|
),
|
|
139
162
|
render: (props, state) => (
|
|
140
163
|
// `role={undefined}`: một menu không phải một dialog — xem radixSurfaceState.
|
|
141
|
-
/* @__PURE__ */ jsx(
|
|
164
|
+
/* @__PURE__ */ jsx(
|
|
165
|
+
"div",
|
|
166
|
+
{
|
|
167
|
+
...props,
|
|
168
|
+
role: void 0,
|
|
169
|
+
...radixSurfaceState(state),
|
|
170
|
+
"data-align": align ?? anchor?.align ?? "center",
|
|
171
|
+
"data-width": width
|
|
172
|
+
}
|
|
173
|
+
)
|
|
142
174
|
),
|
|
143
|
-
children:
|
|
175
|
+
children: [
|
|
176
|
+
/* @__PURE__ */ jsx(Menu, { shouldFocusWrap: loop, children }),
|
|
177
|
+
arrow ? /* @__PURE__ */ jsx(OverlayArrow, { children: /* @__PURE__ */ jsx(
|
|
178
|
+
"svg",
|
|
179
|
+
{
|
|
180
|
+
"data-slot": "dropdown-menu-arrow",
|
|
181
|
+
className: "ui-dropdown-menu-arrow",
|
|
182
|
+
viewBox: "0 0 10 5",
|
|
183
|
+
"aria-hidden": "true",
|
|
184
|
+
children: /* @__PURE__ */ jsx("path", { d: "M0 0 L5 5 L10 0 Z" })
|
|
185
|
+
}
|
|
186
|
+
) }) : null
|
|
187
|
+
]
|
|
144
188
|
}
|
|
145
189
|
) });
|
|
146
190
|
}
|
|
@@ -195,7 +239,12 @@ function DropdownMenuLabel({ children, className, inset, asChild }) {
|
|
|
195
239
|
{
|
|
196
240
|
...props
|
|
197
241
|
}
|
|
198
|
-
) :
|
|
242
|
+
) : (props) => /* @__PURE__ */ jsx(
|
|
243
|
+
"div",
|
|
244
|
+
{
|
|
245
|
+
...props
|
|
246
|
+
}
|
|
247
|
+
),
|
|
199
248
|
children
|
|
200
249
|
}
|
|
201
250
|
);
|
|
@@ -209,7 +258,6 @@ function DropdownMenuSeparator({ className }) {
|
|
|
209
258
|
}
|
|
210
259
|
);
|
|
211
260
|
}
|
|
212
|
-
const CHECKBOX_KEY = "checked-item";
|
|
213
261
|
function DropdownMenuCheckboxItem({
|
|
214
262
|
children,
|
|
215
263
|
className,
|
|
@@ -219,20 +267,21 @@ function DropdownMenuCheckboxItem({
|
|
|
219
267
|
textValue,
|
|
220
268
|
asChild
|
|
221
269
|
}) {
|
|
270
|
+
const checkboxKey = React.useId();
|
|
222
271
|
const tag = borrowedTag(children, asChild);
|
|
223
272
|
return /* @__PURE__ */ jsx(
|
|
224
273
|
MenuSection,
|
|
225
274
|
{
|
|
226
275
|
selectionMode: "multiple",
|
|
227
276
|
shouldCloseOnSelect: true,
|
|
228
|
-
selectedKeys: checked ? [
|
|
277
|
+
selectedKeys: checked ? [checkboxKey] : [],
|
|
229
278
|
onSelectionChange: (keys) => {
|
|
230
|
-
onCheckedChange?.(keys === "all" ? true : keys.has(
|
|
279
|
+
onCheckedChange?.(keys === "all" ? true : keys.has(checkboxKey));
|
|
231
280
|
},
|
|
232
281
|
children: /* @__PURE__ */ jsx(
|
|
233
282
|
MenuItem,
|
|
234
283
|
{
|
|
235
|
-
id:
|
|
284
|
+
id: checkboxKey,
|
|
236
285
|
isDisabled: disabled,
|
|
237
286
|
textValue,
|
|
238
287
|
className: cn("ui-dropdown-menu-checkbox-item", className),
|
|
@@ -350,7 +399,15 @@ function DropdownMenuSubContent({
|
|
|
350
399
|
),
|
|
351
400
|
render: (props, state) => (
|
|
352
401
|
// `role={undefined}`: một menu không phải một dialog — xem radixSurfaceState.
|
|
353
|
-
/* @__PURE__ */ jsx(
|
|
402
|
+
/* @__PURE__ */ jsx(
|
|
403
|
+
"div",
|
|
404
|
+
{
|
|
405
|
+
...props,
|
|
406
|
+
role: void 0,
|
|
407
|
+
...radixSurfaceState(state),
|
|
408
|
+
"data-align": align ?? "center"
|
|
409
|
+
}
|
|
410
|
+
)
|
|
354
411
|
),
|
|
355
412
|
children: /* @__PURE__ */ jsx(Menu, { shouldFocusWrap: loop, children })
|
|
356
413
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import type { PaginationProp } from "../../props/components/navigation.prop.js";
|
|
3
|
-
export type { PaginationProp, PaginationProp as PaginationProps, } from "../../props/components/navigation.prop.js";
|
|
3
|
+
export type { PaginationProp, PaginationProp as PaginationProps, PaginationSizeProp, PaginationAlignProp, } from "../../props/components/navigation.prop.js";
|
|
4
4
|
declare const PaginationContent: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLUListElement> & React.RefAttributes<HTMLUListElement>>;
|
|
5
5
|
declare const PaginationItem: React.ForwardRefExoticComponent<React.LiHTMLAttributes<HTMLLIElement> & React.RefAttributes<HTMLLIElement>>;
|
|
6
6
|
declare const PaginationLink: React.ForwardRefExoticComponent<Omit<Omit<React.DetailedHTMLProps<React.ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "ref">, "type"> & {
|
|
@@ -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, 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, }: PaginationProp): React.JSX.Element | null;
|
|
26
26
|
export { PaginationContent, PaginationItem, PaginationLink, PaginationEllipsis, PaginationPrevious, PaginationNext, };
|