@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.
Files changed (250) hide show
  1. package/README.md +8 -2
  2. package/dist/app/theme-axes.d.ts +2 -0
  3. package/dist/app/theme-axes.js +45 -0
  4. package/dist/components/charts/chart-cartesian.d.ts +2 -1
  5. package/dist/components/charts/chart-cartesian.js +52 -3
  6. package/dist/components/charts/chart-category-axis.d.ts +55 -0
  7. package/dist/components/charts/chart-category-axis.js +93 -0
  8. package/dist/components/charts/chart-frame.d.ts +10 -1
  9. package/dist/components/charts/chart-frame.js +19 -3
  10. package/dist/components/charts/compact-bar-trend.d.ts +1 -1
  11. package/dist/components/charts/compact-bar-trend.js +2 -0
  12. package/dist/components/charts/pie-chart.d.ts +1 -1
  13. package/dist/components/charts/pie-chart.js +12 -1
  14. package/dist/components/charts/recharts-peer.d.ts +49 -0
  15. package/dist/components/charts/recharts-peer.js +45 -0
  16. package/dist/components/data-display/card.d.ts +12 -1
  17. package/dist/components/data-display/card.js +22 -4
  18. package/dist/components/data-display/code-block.js +6 -2
  19. package/dist/components/data-display/data-table.d.ts +39 -4
  20. package/dist/components/data-display/data-table.js +802 -270
  21. package/dist/components/data-display/descriptions.d.ts +27 -6
  22. package/dist/components/data-display/descriptions.js +58 -17
  23. package/dist/components/data-display/index.d.ts +2 -0
  24. package/dist/components/data-display/index.js +2 -0
  25. package/dist/components/data-display/list-row.d.ts +10 -1
  26. package/dist/components/data-display/list-row.js +7 -1
  27. package/dist/components/data-display/popover.d.ts +2 -2
  28. package/dist/components/data-display/popover.js +61 -11
  29. package/dist/components/data-display/range-timeline.d.ts +38 -0
  30. package/dist/components/data-display/range-timeline.js +161 -0
  31. package/dist/components/data-display/scroll-area.js +13 -2
  32. package/dist/components/data-display/service-launcher-card.js +10 -10
  33. package/dist/components/data-display/table.d.ts +11 -3
  34. package/dist/components/data-display/table.js +48 -18
  35. package/dist/components/data-display/tree-list.js +4 -9
  36. package/dist/components/data-entry/calendar.d.ts +2 -2
  37. package/dist/components/data-entry/calendar.js +12 -1
  38. package/dist/components/data-entry/cascader.d.ts +1 -1
  39. package/dist/components/data-entry/cascader.js +188 -24
  40. package/dist/components/data-entry/color-picker.d.ts +1 -1
  41. package/dist/components/data-entry/color-picker.js +17 -5
  42. package/dist/components/data-entry/control-appearance.d.ts +64 -0
  43. package/dist/components/data-entry/control-appearance.js +39 -0
  44. package/dist/components/data-entry/control-surface.d.ts +61 -0
  45. package/dist/components/data-entry/control-surface.js +39 -0
  46. package/dist/components/data-entry/date-picker.d.ts +1 -1
  47. package/dist/components/data-entry/date-picker.js +344 -113
  48. package/dist/components/data-entry/date-range-picker.d.ts +1 -1
  49. package/dist/components/data-entry/date-range-picker.js +278 -140
  50. package/dist/components/data-entry/form-field.d.ts +1 -1
  51. package/dist/components/data-entry/form-field.js +39 -4
  52. package/dist/components/data-entry/form.d.ts +4 -0
  53. package/dist/components/data-entry/form.js +4 -2
  54. package/dist/components/data-entry/index.d.ts +7 -3
  55. package/dist/components/data-entry/index.js +10 -1
  56. package/dist/components/data-entry/input-otp.d.ts +1 -1
  57. package/dist/components/data-entry/input.d.ts +12 -34
  58. package/dist/components/data-entry/input.js +92 -24
  59. package/dist/components/data-entry/month-picker.d.ts +1 -1
  60. package/dist/components/data-entry/month-picker.js +47 -10
  61. package/dist/components/data-entry/month-range-picker.d.ts +1 -1
  62. package/dist/components/data-entry/month-range-picker.js +51 -11
  63. package/dist/components/data-entry/number-input.d.ts +7 -0
  64. package/dist/components/data-entry/number-input.js +147 -98
  65. package/dist/components/data-entry/password-input.d.ts +1 -1
  66. package/dist/components/data-entry/radio.d.ts +1 -1
  67. package/dist/components/data-entry/radio.js +61 -13
  68. package/dist/components/data-entry/search-input.d.ts +1 -1
  69. package/dist/components/data-entry/search-input.js +16 -2
  70. package/dist/components/data-entry/search-select.d.ts +2 -2
  71. package/dist/components/data-entry/search-select.js +209 -78
  72. package/dist/components/data-entry/select.d.ts +22 -4
  73. package/dist/components/data-entry/select.js +215 -163
  74. package/dist/components/data-entry/slider.d.ts +9 -1
  75. package/dist/components/data-entry/slider.js +87 -9
  76. package/dist/components/data-entry/switch.d.ts +3 -0
  77. package/dist/components/data-entry/switch.js +29 -3
  78. package/dist/components/data-entry/textarea.d.ts +14 -56
  79. package/dist/components/data-entry/textarea.js +80 -33
  80. package/dist/components/data-entry/time-picker.d.ts +2 -2
  81. package/dist/components/data-entry/time-picker.js +333 -109
  82. package/dist/components/data-entry/time-range-picker.d.ts +5 -0
  83. package/dist/components/data-entry/time-range-picker.js +89 -0
  84. package/dist/components/data-entry/transfer.d.ts +1 -1
  85. package/dist/components/data-entry/transfer.js +86 -28
  86. package/dist/components/data-entry/tree-select.d.ts +1 -1
  87. package/dist/components/data-entry/tree-select.js +201 -113
  88. package/dist/components/data-entry/tree-utils.js +7 -14
  89. package/dist/components/data-entry/upload-files.d.ts +2 -0
  90. package/dist/components/data-entry/upload-files.js +31 -0
  91. package/dist/components/data-entry/upload-request.d.ts +4 -0
  92. package/dist/components/data-entry/upload-request.js +53 -0
  93. package/dist/components/data-entry/upload-types.d.ts +28 -0
  94. package/dist/components/data-entry/upload-types.js +2 -0
  95. package/dist/components/data-entry/upload.d.ts +2 -2
  96. package/dist/components/data-entry/upload.js +475 -115
  97. package/dist/components/feedback/dialog.js +16 -19
  98. package/dist/components/general/button.d.ts +1 -1
  99. package/dist/components/general/button.js +5 -1
  100. package/dist/components/general/index.d.ts +1 -0
  101. package/dist/components/general/index.js +2 -0
  102. package/dist/components/general/typography.d.ts +3 -0
  103. package/dist/components/general/typography.js +15 -1
  104. package/dist/components/general/visually-hidden.d.ts +3 -0
  105. package/dist/components/general/visually-hidden.js +9 -0
  106. package/dist/components/layout/app-launcher.d.ts +34 -0
  107. package/dist/components/layout/app-launcher.js +228 -0
  108. package/dist/components/layout/app-shell.d.ts +2 -0
  109. package/dist/components/layout/app-shell.js +20 -7
  110. package/dist/components/layout/breadcrumb.d.ts +14 -2
  111. package/dist/components/layout/breadcrumb.js +46 -4
  112. package/dist/components/layout/flex.d.ts +1 -1
  113. package/dist/components/layout/flex.js +23 -2
  114. package/dist/components/layout/index.d.ts +3 -0
  115. package/dist/components/layout/index.js +5 -1
  116. package/dist/components/layout/org-switcher.js +20 -1
  117. package/dist/components/layout/page-container.d.ts +1 -1
  118. package/dist/components/layout/page-container.js +5 -3
  119. package/dist/components/layout/responsive-grid.d.ts +16 -2
  120. package/dist/components/layout/responsive-grid.js +29 -2
  121. package/dist/components/layout/topbar-item.d.ts +3 -0
  122. package/dist/components/layout/topbar-item.js +18 -3
  123. package/dist/components/layout/topbar.d.ts +1 -1
  124. package/dist/components/layout/topbar.js +27 -6
  125. package/dist/components/navigation/dropdown-menu.d.ts +30 -2
  126. package/dist/components/navigation/dropdown-menu.js +68 -11
  127. package/dist/components/navigation/pagination.d.ts +2 -2
  128. package/dist/components/navigation/pagination.js +155 -83
  129. package/dist/components/navigation/steps.d.ts +2 -2
  130. package/dist/components/navigation/steps.js +29 -4
  131. package/dist/components/navigation/tabs.d.ts +5 -33
  132. package/dist/components/navigation/tabs.js +232 -64
  133. package/dist/components/ui/input-otp.d.ts +26 -28
  134. package/dist/components/ui/input-otp.js +50 -7
  135. package/dist/components/ui/password-input.d.ts +36 -2
  136. package/dist/components/ui/password-input.js +27 -7
  137. package/dist/components/ui/rating.d.ts +25 -0
  138. package/dist/components/ui/rating.js +67 -27
  139. package/dist/components/ui/segmented.d.ts +9 -0
  140. package/dist/components/ui/segmented.js +17 -2
  141. package/dist/components/ui/separator.d.ts +4 -0
  142. package/dist/components/ui/separator.js +13 -0
  143. package/dist/components/ui/tag-input.d.ts +45 -0
  144. package/dist/components/ui/tag-input.js +109 -27
  145. package/dist/form/form-context.d.ts +29 -0
  146. package/dist/form/form-context.js +44 -4
  147. package/dist/form/form-field-array.d.ts +22 -0
  148. package/dist/form/form-field-array.js +50 -0
  149. package/dist/form/form-field-control.d.ts +2 -1
  150. package/dist/form/form-field-control.js +116 -40
  151. package/dist/form/form-root.d.ts +2 -1
  152. package/dist/form/form-root.js +142 -23
  153. package/dist/form/index.d.ts +3 -1
  154. package/dist/form/index.js +12 -1
  155. package/dist/i18n/messages/en.json +56 -5
  156. package/dist/i18n/messages/ja.json +56 -5
  157. package/dist/i18n/messages/vi.json +56 -5
  158. package/dist/inertia/index.d.ts +20 -0
  159. package/dist/inertia/index.js +60 -1
  160. package/dist/lib/control-styles.d.ts +25 -3
  161. package/dist/lib/control-styles.js +9 -3
  162. package/dist/lib/datetime/picker-format.d.ts +8 -0
  163. package/dist/lib/datetime/picker-format.js +54 -0
  164. package/dist/props/components/charts.prop.d.ts +21 -0
  165. package/dist/props/components/data-display.prop.d.ts +55 -4
  166. package/dist/props/components/data-entry.prop.d.ts +687 -43
  167. package/dist/props/components/form.prop.d.ts +142 -4
  168. package/dist/props/components/general.prop.d.ts +17 -1
  169. package/dist/props/components/index.d.ts +2 -2
  170. package/dist/props/components/layout.prop.d.ts +163 -6
  171. package/dist/props/components/navigation.prop.d.ts +113 -3
  172. package/dist/props/registry.d.ts +376 -10
  173. package/dist/props/registry.js +493 -9
  174. package/dist/props/vocabulary/data.prop.d.ts +179 -1
  175. package/dist/props/vocabulary/index.d.ts +4 -4
  176. package/dist/props/vocabulary/interaction.prop.d.ts +51 -2
  177. package/dist/props/vocabulary/navigation.prop.d.ts +40 -0
  178. package/dist/props/vocabulary/shared.prop.d.ts +33 -0
  179. package/dist/styles/badge-layout.css +2 -1
  180. package/dist/styles/card-layout.css +26 -4
  181. package/dist/styles/chart-layout.css +15 -0
  182. package/dist/styles/control.css +515 -14
  183. package/dist/styles/data-display-layout.css +241 -6
  184. package/dist/styles/data-entry-layout.css +13 -0
  185. package/dist/styles/layout.css +221 -4
  186. package/dist/styles/navigation-layout.css +227 -0
  187. package/dist/styles/shell-layout.css +229 -5
  188. package/dist/styles/table-layout.css +95 -6
  189. package/dist/styles/text-layout.css +5 -0
  190. package/dist/tokens/base.css +1 -0
  191. package/dist/tokens/components/badge.css +1 -0
  192. package/dist/tokens/components/chart.css +6 -0
  193. package/dist/tokens/components/control.css +79 -2
  194. package/dist/tokens/components/data-display.css +9 -0
  195. package/dist/tokens/components/descriptions.css +11 -0
  196. package/dist/tokens/components/flex.css +8 -0
  197. package/dist/tokens/components/navigation.css +55 -0
  198. package/dist/tokens/components/shell.css +50 -2
  199. package/dist/tokens/components/table.css +14 -0
  200. package/dist/tokens/semantic/layout.css +9 -0
  201. package/docs/CONSUMER-RULES.md +13 -0
  202. package/docs/DESIGN-AUTHORITY.md +43 -6
  203. package/docs/DEVELOPMENT.md +4 -3
  204. package/docs/FORMS.md +151 -6
  205. package/docs/FRAME-COVERAGE-REPORT.md +29 -16
  206. package/docs/README.md +1 -1
  207. package/docs/STANDARDS-vocabulary-tokens.md +1 -1
  208. package/docs/TESTING.md +15 -6
  209. package/docs/charts/cjk-category-axis.tsx +81 -0
  210. package/docs/data-display/card/index.tsx +22 -0
  211. package/docs/data-display/data-table/examples/antd-parity.tsx +257 -0
  212. package/docs/data-display/data-table/index.tsx +23 -0
  213. package/docs/data-display/descriptions.tsx +41 -0
  214. package/docs/data-display/scroll-area.tsx +31 -25
  215. package/docs/data-display/table.tsx +104 -45
  216. package/docs/data-display/timeline.tsx +41 -0
  217. package/docs/data-entry/date-picker.tsx +85 -0
  218. package/docs/data-entry/date-range-picker.tsx +26 -0
  219. package/docs/data-entry/form-dynamic-fields.tsx +199 -0
  220. package/docs/data-entry/form.tsx +74 -4
  221. package/docs/data-entry/input-otp.tsx +24 -0
  222. package/docs/data-entry/input.tsx +46 -1
  223. package/docs/data-entry/month-range-picker.tsx +1 -1
  224. package/docs/data-entry/select.tsx +27 -0
  225. package/docs/data-entry/switch.tsx +41 -0
  226. package/docs/data-entry/textarea.tsx +38 -0
  227. package/docs/data-entry/time-picker.tsx +85 -1
  228. package/docs/data-entry/time-range-picker.tsx +55 -0
  229. package/docs/data-entry/transfer.tsx +17 -0
  230. package/docs/data-entry/upload.tsx +56 -12
  231. package/docs/feedback/tooltip.tsx +1 -1
  232. package/docs/general/activity.tsx +2 -2
  233. package/docs/general/button/index.tsx +14 -1
  234. package/docs/general/typography.tsx +14 -1
  235. package/docs/layout/app-launcher.tsx +151 -0
  236. package/docs/layout/app-shell.tsx +11 -0
  237. package/docs/layout/flex.tsx +50 -0
  238. package/docs/layout/responsive-grid.tsx +21 -1
  239. package/docs/layout/topbar.tsx +5 -9
  240. package/docs/navigation/app-setting-picker.tsx +11 -0
  241. package/docs/navigation/breadcrumb.tsx +48 -0
  242. package/docs/navigation/dropdown-menu.tsx +21 -0
  243. package/docs/navigation/pagination.tsx +52 -0
  244. package/docs/navigation/steps.tsx +37 -0
  245. package/docs/navigation/tabs.tsx +97 -1
  246. package/docs/query/button-refetch.tsx +1 -0
  247. package/package.json +19 -2
  248. package/scripts/_agent-setup.mjs +19 -2
  249. package/scripts/init-guinea-pig.mjs +26 -4
  250. 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 sheet = responsive === "sheet" || responsive === "auto" && compactViewport;
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("div", { className: cn("ui-responsive-grid", className), "data-gap": gap, style: toStyle(resolved), children }) });
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({ start, center, end, className, children, ...props }) {
4
- return /* @__PURE__ */ jsx("div", { "data-slot": "topbar", className: cn("ui-topbar", className), ...props, children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
5
- start != null ? /* @__PURE__ */ jsx("div", { "data-slot": "topbar-start", className: "ui-topbar-start", children: start }) : null,
6
- center != null ? /* @__PURE__ */ jsx("div", { "data-slot": "topbar-center", className: "ui-topbar-center", children: center }) : null,
7
- end != null ? /* @__PURE__ */ jsx("div", { "data-slot": "topbar-end", className: "ui-topbar-end", children: end }) : null
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(Pressable, { children: /* @__PURE__ */ jsx("button", { type: "button", "data-slot": "dropdown-menu-trigger", "data-state": dataState, ...props, children }) });
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
- return /* @__PURE__ */ jsx(DropdownMenuPortal, { children: /* @__PURE__ */ jsx(
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("div", { ...props, role: void 0, ...radixSurfaceState(state) })
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: /* @__PURE__ */ jsx(Menu, { shouldFocusWrap: loop, 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
- ) : void 0,
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 ? [CHECKBOX_KEY] : [],
277
+ selectedKeys: checked ? [checkboxKey] : [],
229
278
  onSelectionChange: (keys) => {
230
- onCheckedChange?.(keys === "all" ? true : keys.has(CHECKBOX_KEY));
279
+ onCheckedChange?.(keys === "all" ? true : keys.has(checkboxKey));
231
280
  },
232
281
  children: /* @__PURE__ */ jsx(
233
282
  MenuItem,
234
283
  {
235
- id: CHECKBOX_KEY,
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("div", { ...props, role: void 0, ...radixSurfaceState(state) })
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, };