@godxjp/ui 19.6.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 (326) 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 +14 -3
  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/collapsible.d.ts +23 -4
  20. package/dist/components/data-display/collapsible.js +119 -4
  21. package/dist/components/data-display/data-table.d.ts +39 -4
  22. package/dist/components/data-display/data-table.js +802 -270
  23. package/dist/components/data-display/descriptions.d.ts +27 -6
  24. package/dist/components/data-display/descriptions.js +58 -17
  25. package/dist/components/data-display/index.d.ts +5 -1
  26. package/dist/components/data-display/index.js +4 -0
  27. package/dist/components/data-display/legend.d.ts +15 -0
  28. package/dist/components/data-display/legend.js +11 -0
  29. package/dist/components/data-display/list-row.d.ts +10 -1
  30. package/dist/components/data-display/list-row.js +8 -2
  31. package/dist/components/data-display/popover.d.ts +60 -7
  32. package/dist/components/data-display/popover.js +268 -39
  33. package/dist/components/data-display/progress.d.ts +50 -2
  34. package/dist/components/data-display/progress.js +57 -9
  35. package/dist/components/data-display/range-timeline.d.ts +38 -0
  36. package/dist/components/data-display/range-timeline.js +161 -0
  37. package/dist/components/data-display/scroll-area.js +13 -2
  38. package/dist/components/data-display/service-launcher-card.js +10 -10
  39. package/dist/components/data-display/table.d.ts +11 -3
  40. package/dist/components/data-display/table.js +48 -18
  41. package/dist/components/data-display/tree-list.js +4 -9
  42. package/dist/components/data-entry/calendar.d.ts +2 -2
  43. package/dist/components/data-entry/calendar.js +79 -33
  44. package/dist/components/data-entry/cascader.d.ts +1 -1
  45. package/dist/components/data-entry/cascader.js +188 -24
  46. package/dist/components/data-entry/checkbox.d.ts +19 -6
  47. package/dist/components/data-entry/checkbox.js +55 -16
  48. package/dist/components/data-entry/choice-option.d.ts +1 -1
  49. package/dist/components/data-entry/color-picker.d.ts +1 -1
  50. package/dist/components/data-entry/color-picker.js +17 -5
  51. package/dist/components/data-entry/control-appearance.d.ts +64 -0
  52. package/dist/components/data-entry/control-appearance.js +39 -0
  53. package/dist/components/data-entry/control-surface.d.ts +61 -0
  54. package/dist/components/data-entry/control-surface.js +39 -0
  55. package/dist/components/data-entry/date-picker.d.ts +1 -1
  56. package/dist/components/data-entry/date-picker.js +344 -113
  57. package/dist/components/data-entry/date-range-picker.d.ts +2 -2
  58. package/dist/components/data-entry/date-range-picker.js +278 -140
  59. package/dist/components/data-entry/field.js +0 -1
  60. package/dist/components/data-entry/form-field.d.ts +1 -1
  61. package/dist/components/data-entry/form-field.js +39 -4
  62. package/dist/components/data-entry/form.d.ts +4 -0
  63. package/dist/components/data-entry/form.js +5 -3
  64. package/dist/components/data-entry/index.d.ts +7 -3
  65. package/dist/components/data-entry/index.js +10 -1
  66. package/dist/components/data-entry/input-otp.d.ts +1 -1
  67. package/dist/components/data-entry/input.d.ts +12 -34
  68. package/dist/components/data-entry/input.js +92 -24
  69. package/dist/components/data-entry/label.d.ts +3 -2
  70. package/dist/components/data-entry/label.js +23 -10
  71. package/dist/components/data-entry/month-picker.d.ts +2 -2
  72. package/dist/components/data-entry/month-picker.js +47 -10
  73. package/dist/components/data-entry/month-range-picker.d.ts +2 -2
  74. package/dist/components/data-entry/month-range-picker.js +51 -11
  75. package/dist/components/data-entry/number-input.d.ts +7 -0
  76. package/dist/components/data-entry/number-input.js +147 -98
  77. package/dist/components/data-entry/password-input.d.ts +1 -1
  78. package/dist/components/data-entry/radio.d.ts +1 -1
  79. package/dist/components/data-entry/radio.js +61 -13
  80. package/dist/components/data-entry/search-input.d.ts +1 -1
  81. package/dist/components/data-entry/search-input.js +16 -2
  82. package/dist/components/data-entry/search-select.d.ts +2 -2
  83. package/dist/components/data-entry/search-select.js +209 -78
  84. package/dist/components/data-entry/select.d.ts +22 -4
  85. package/dist/components/data-entry/select.js +215 -163
  86. package/dist/components/data-entry/slider.d.ts +9 -1
  87. package/dist/components/data-entry/slider.js +87 -9
  88. package/dist/components/data-entry/switch.d.ts +3 -0
  89. package/dist/components/data-entry/switch.js +29 -3
  90. package/dist/components/data-entry/textarea.d.ts +14 -56
  91. package/dist/components/data-entry/textarea.js +80 -33
  92. package/dist/components/data-entry/time-picker.d.ts +2 -2
  93. package/dist/components/data-entry/time-picker.js +333 -109
  94. package/dist/components/data-entry/time-range-picker.d.ts +5 -0
  95. package/dist/components/data-entry/time-range-picker.js +89 -0
  96. package/dist/components/data-entry/transfer.d.ts +1 -1
  97. package/dist/components/data-entry/transfer.js +99 -31
  98. package/dist/components/data-entry/tree-select-strategy.d.ts +1 -1
  99. package/dist/components/data-entry/tree-select.d.ts +1 -1
  100. package/dist/components/data-entry/tree-select.js +197 -92
  101. package/dist/components/data-entry/tree-utils.d.ts +1 -1
  102. package/dist/components/data-entry/tree-utils.js +7 -14
  103. package/dist/components/data-entry/upload-files.d.ts +2 -0
  104. package/dist/components/data-entry/upload-files.js +31 -0
  105. package/dist/components/data-entry/upload-request.d.ts +4 -0
  106. package/dist/components/data-entry/upload-request.js +53 -0
  107. package/dist/components/data-entry/upload-types.d.ts +28 -0
  108. package/dist/components/data-entry/upload-types.js +2 -0
  109. package/dist/components/data-entry/upload.d.ts +2 -2
  110. package/dist/components/data-entry/upload.js +482 -117
  111. package/dist/components/feedback/dialog.d.ts +105 -38
  112. package/dist/components/feedback/dialog.js +268 -193
  113. package/dist/components/feedback/overlay-close-focus.d.ts +31 -0
  114. package/dist/components/feedback/overlay-close-focus.js +31 -0
  115. package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
  116. package/dist/components/feedback/sheet.d.ts +53 -11
  117. package/dist/components/feedback/sheet.js +150 -81
  118. package/dist/components/feedback/tooltip.d.ts +51 -7
  119. package/dist/components/feedback/tooltip.js +107 -25
  120. package/dist/components/general/button.d.ts +1 -1
  121. package/dist/components/general/button.js +7 -3
  122. package/dist/components/general/index.d.ts +1 -0
  123. package/dist/components/general/index.js +2 -0
  124. package/dist/components/general/logo.d.ts +17 -0
  125. package/dist/components/general/logo.js +22 -16
  126. package/dist/components/general/typography.d.ts +3 -0
  127. package/dist/components/general/typography.js +15 -1
  128. package/dist/components/general/visually-hidden.d.ts +3 -0
  129. package/dist/components/general/visually-hidden.js +9 -0
  130. package/dist/components/layout/app-launcher.d.ts +34 -0
  131. package/dist/components/layout/app-launcher.js +228 -0
  132. package/dist/components/layout/app-shell.d.ts +3 -1
  133. package/dist/components/layout/app-shell.js +69 -12
  134. package/dist/components/layout/aspect-ratio.js +0 -1
  135. package/dist/components/layout/auth-divider.js +0 -1
  136. package/dist/components/layout/breadcrumb.d.ts +14 -2
  137. package/dist/components/layout/breadcrumb.js +46 -4
  138. package/dist/components/layout/flex.d.ts +1 -1
  139. package/dist/components/layout/flex.js +41 -3
  140. package/dist/components/layout/index.d.ts +3 -0
  141. package/dist/components/layout/index.js +5 -1
  142. package/dist/components/layout/nav-surface.d.ts +26 -0
  143. package/dist/components/layout/nav-surface.js +17 -0
  144. package/dist/components/layout/org-switcher.d.ts +5 -1
  145. package/dist/components/layout/org-switcher.js +25 -4
  146. package/dist/components/layout/page-container.d.ts +1 -1
  147. package/dist/components/layout/page-container.js +5 -3
  148. package/dist/components/layout/responsive-grid.d.ts +16 -2
  149. package/dist/components/layout/responsive-grid.js +29 -2
  150. package/dist/components/layout/separator.js +0 -1
  151. package/dist/components/layout/sidebar.js +4 -1
  152. package/dist/components/layout/split-pane.d.ts +14 -1
  153. package/dist/components/layout/split-pane.js +26 -13
  154. package/dist/components/layout/topbar-item.d.ts +3 -0
  155. package/dist/components/layout/topbar-item.js +19 -5
  156. package/dist/components/layout/topbar.d.ts +1 -1
  157. package/dist/components/layout/topbar.js +27 -6
  158. package/dist/components/navigation/app-setting-picker.js +21 -2
  159. package/dist/components/navigation/app-setting-toggle.d.ts +16 -0
  160. package/dist/components/navigation/app-setting-toggle.js +96 -0
  161. package/dist/components/navigation/dropdown-menu.d.ts +227 -18
  162. package/dist/components/navigation/dropdown-menu.js +402 -118
  163. package/dist/components/navigation/index.d.ts +2 -0
  164. package/dist/components/navigation/index.js +2 -0
  165. package/dist/components/navigation/pagination-utils.d.ts +2 -1
  166. package/dist/components/navigation/pagination.d.ts +2 -2
  167. package/dist/components/navigation/pagination.js +155 -83
  168. package/dist/components/navigation/steps.d.ts +2 -2
  169. package/dist/components/navigation/steps.js +29 -4
  170. package/dist/components/navigation/tabs.d.ts +29 -16
  171. package/dist/components/navigation/tabs.js +374 -144
  172. package/dist/components/ui/accordion.d.ts +50 -5
  173. package/dist/components/ui/accordion.js +239 -33
  174. package/dist/components/ui/aspect-ratio.d.ts +23 -2
  175. package/dist/components/ui/aspect-ratio.js +15 -13
  176. package/dist/components/ui/avatar.d.ts +29 -4
  177. package/dist/components/ui/avatar.js +111 -25
  178. package/dist/components/ui/hover-card.d.ts +42 -4
  179. package/dist/components/ui/hover-card.js +183 -27
  180. package/dist/components/ui/input-otp.d.ts +26 -28
  181. package/dist/components/ui/input-otp.js +50 -7
  182. package/dist/components/ui/label.js +0 -1
  183. package/dist/components/ui/password-input.d.ts +36 -2
  184. package/dist/components/ui/password-input.js +27 -7
  185. package/dist/components/ui/rating.d.ts +25 -0
  186. package/dist/components/ui/rating.js +67 -27
  187. package/dist/components/ui/segmented.d.ts +12 -3
  188. package/dist/components/ui/segmented.js +17 -2
  189. package/dist/components/ui/separator.d.ts +12 -2
  190. package/dist/components/ui/separator.js +30 -9
  191. package/dist/components/ui/tag-input.d.ts +45 -0
  192. package/dist/components/ui/tag-input.js +109 -27
  193. package/dist/components/ui/toggle-group.d.ts +50 -5
  194. package/dist/components/ui/toggle-group.js +79 -20
  195. package/dist/components/ui/toggle.d.ts +31 -5
  196. package/dist/components/ui/toggle.js +42 -3
  197. package/dist/form/form-context.d.ts +29 -0
  198. package/dist/form/form-context.js +44 -4
  199. package/dist/form/form-field-array.d.ts +22 -0
  200. package/dist/form/form-field-array.js +50 -0
  201. package/dist/form/form-field-control.d.ts +2 -1
  202. package/dist/form/form-field-control.js +116 -40
  203. package/dist/form/form-root.d.ts +2 -1
  204. package/dist/form/form-root.js +142 -23
  205. package/dist/form/index.d.ts +3 -1
  206. package/dist/form/index.js +12 -1
  207. package/dist/i18n/messages/en.json +64 -5
  208. package/dist/i18n/messages/ja.json +64 -5
  209. package/dist/i18n/messages/vi.json +64 -5
  210. package/dist/inertia/index.d.ts +20 -0
  211. package/dist/inertia/index.js +60 -1
  212. package/dist/lib/control-styles.d.ts +25 -3
  213. package/dist/lib/control-styles.js +9 -3
  214. package/dist/lib/datetime/picker-format.d.ts +8 -0
  215. package/dist/lib/datetime/picker-format.js +54 -0
  216. package/dist/lib/slot.d.ts +32 -0
  217. package/dist/lib/slot.js +22 -0
  218. package/dist/lib/variants.d.ts +22 -3
  219. package/dist/lib/variants.js +56 -1
  220. package/dist/props/components/app.prop.d.ts +25 -1
  221. package/dist/props/components/charts.prop.d.ts +21 -0
  222. package/dist/props/components/data-display.prop.d.ts +72 -4
  223. package/dist/props/components/data-entry.prop.d.ts +718 -46
  224. package/dist/props/components/form.prop.d.ts +142 -4
  225. package/dist/props/components/general.prop.d.ts +17 -1
  226. package/dist/props/components/index.d.ts +3 -3
  227. package/dist/props/components/layout.prop.d.ts +281 -11
  228. package/dist/props/components/navigation.prop.d.ts +114 -4
  229. package/dist/props/registry.d.ts +397 -11
  230. package/dist/props/registry.js +526 -11
  231. package/dist/props/vocabulary/content.prop.d.ts +1 -1
  232. package/dist/props/vocabulary/data.prop.d.ts +179 -1
  233. package/dist/props/vocabulary/index.d.ts +5 -5
  234. package/dist/props/vocabulary/interaction.prop.d.ts +68 -3
  235. package/dist/props/vocabulary/layout.prop.d.ts +57 -1
  236. package/dist/props/vocabulary/navigation.prop.d.ts +40 -0
  237. package/dist/props/vocabulary/shared.prop.d.ts +33 -0
  238. package/dist/styles/badge-layout.css +2 -1
  239. package/dist/styles/card-layout.css +26 -4
  240. package/dist/styles/chart-layout.css +15 -0
  241. package/dist/styles/control.css +657 -15
  242. package/dist/styles/core.css +5 -2
  243. package/dist/styles/data-display-layout.css +313 -6
  244. package/dist/styles/data-entry-layout.css +13 -0
  245. package/dist/styles/focus-ring.css +4 -0
  246. package/dist/styles/index.css +5 -2
  247. package/dist/styles/layout.css +327 -4
  248. package/dist/styles/navigation-layout.css +227 -0
  249. package/dist/styles/shell-layout.css +369 -13
  250. package/dist/styles/table-layout.css +95 -6
  251. package/dist/styles/text-layout.css +10 -4
  252. package/dist/tokens/base.css +2 -1
  253. package/dist/tokens/components/badge.css +1 -0
  254. package/dist/tokens/components/chart.css +6 -0
  255. package/dist/tokens/components/control.css +79 -2
  256. package/dist/tokens/components/data-display.css +20 -0
  257. package/dist/tokens/components/descriptions.css +11 -0
  258. package/dist/tokens/components/flex.css +8 -0
  259. package/dist/tokens/components/navigation.css +55 -0
  260. package/dist/tokens/components/shell.css +53 -3
  261. package/dist/tokens/components/table.css +14 -0
  262. package/dist/tokens/foundation.css +2 -0
  263. package/dist/tokens/semantic/layout.css +9 -0
  264. package/docs/COMPONENTS.md +9 -3
  265. package/docs/CONSUMER-RULES.md +13 -0
  266. package/docs/DESIGN-AUTHORITY.md +145 -83
  267. package/docs/DEVELOPMENT.md +4 -3
  268. package/docs/FORMS.md +151 -6
  269. package/docs/FRAME-COVERAGE-REPORT.md +32 -17
  270. package/docs/README.md +15 -15
  271. package/docs/STANDARDS-vocabulary-tokens.md +1 -1
  272. package/docs/TESTING.md +15 -6
  273. package/docs/WHAT-BELONGS-HERE.md +179 -0
  274. package/docs/charts/cjk-category-axis.tsx +81 -0
  275. package/docs/data-display/card/index.tsx +22 -0
  276. package/docs/data-display/data-table/examples/antd-parity.tsx +257 -0
  277. package/docs/data-display/data-table/index.tsx +23 -0
  278. package/docs/data-display/descriptions.tsx +41 -0
  279. package/docs/data-display/legend.tsx +145 -0
  280. package/docs/data-display/progress.tsx +32 -0
  281. package/docs/data-display/scroll-area.tsx +31 -25
  282. package/docs/data-display/table.tsx +104 -45
  283. package/docs/data-display/timeline.tsx +41 -0
  284. package/docs/data-entry/date-picker.tsx +85 -0
  285. package/docs/data-entry/date-range-picker.tsx +26 -0
  286. package/docs/data-entry/form-dynamic-fields.tsx +199 -0
  287. package/docs/data-entry/form.tsx +74 -4
  288. package/docs/data-entry/input-otp.tsx +24 -0
  289. package/docs/data-entry/input.tsx +46 -1
  290. package/docs/data-entry/month-range-picker.tsx +1 -1
  291. package/docs/data-entry/segmented.tsx +1 -1
  292. package/docs/data-entry/select.tsx +29 -2
  293. package/docs/data-entry/switch.tsx +41 -0
  294. package/docs/data-entry/textarea.tsx +38 -0
  295. package/docs/data-entry/time-picker.tsx +85 -1
  296. package/docs/data-entry/time-range-picker.tsx +55 -0
  297. package/docs/data-entry/transfer.tsx +17 -0
  298. package/docs/data-entry/upload.tsx +56 -12
  299. package/docs/feedback/sheet.tsx +1 -1
  300. package/docs/feedback/tooltip.tsx +1 -1
  301. package/docs/general/activity.tsx +2 -2
  302. package/docs/general/button/index.tsx +14 -1
  303. package/docs/general/typography.tsx +14 -1
  304. package/docs/layout/app-launcher.tsx +151 -0
  305. package/docs/layout/app-shell-arrangements.tsx +225 -0
  306. package/docs/layout/app-shell.tsx +11 -0
  307. package/docs/layout/aspect-ratio.tsx +1 -1
  308. package/docs/layout/flex.tsx +50 -0
  309. package/docs/layout/responsive-grid.tsx +21 -1
  310. package/docs/layout/topbar.tsx +5 -9
  311. package/docs/navigation/app-setting-picker.tsx +37 -1
  312. package/docs/navigation/app-setting-toggle.tsx +111 -0
  313. package/docs/navigation/breadcrumb.tsx +48 -0
  314. package/docs/navigation/dropdown-menu.tsx +21 -0
  315. package/docs/navigation/pagination.tsx +52 -0
  316. package/docs/navigation/steps.tsx +37 -0
  317. package/docs/navigation/tabs.tsx +97 -1
  318. package/docs/query/button-refetch.tsx +1 -0
  319. package/package.json +28 -8
  320. package/scripts/_agent-setup.mjs +182 -3
  321. package/scripts/consumer-rule.md +98 -0
  322. package/scripts/guinea-pig-skill.md +322 -0
  323. package/scripts/init-guinea-pig.mjs +84 -0
  324. package/scripts/postinstall.mjs +13 -2
  325. package/scripts/ui-audit.mjs +351 -37
  326. /package/dist/tokens/{antd.generated.css → derived.css} +0 -0
@@ -0,0 +1,89 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { useTranslation } from "../../i18n/use-translation.js";
5
+ import { useControlledLatch } from "../../lib/hooks.js";
6
+ import { pickGroupFieldA11y } from "../../lib/field-a11y.js";
7
+ import { Flex } from "../layout/flex.js";
8
+ import { TimePicker } from "./time-picker.js";
9
+ function edgeAllowClear(allowClear, edgeAllowsEmpty) {
10
+ if (!edgeAllowsEmpty || allowClear === false) return false;
11
+ return allowClear ?? true;
12
+ }
13
+ function TimeRangePicker({
14
+ value: controlledValue,
15
+ defaultValue,
16
+ onValueChange,
17
+ order = true,
18
+ open: openProp,
19
+ defaultOpen = false,
20
+ onOpenChange,
21
+ allowEmpty = [true, true],
22
+ name,
23
+ id,
24
+ placeholder,
25
+ className,
26
+ ref,
27
+ ...props
28
+ }) {
29
+ const { t } = useTranslation();
30
+ const autoId = React.useId();
31
+ const groupId = id ?? autoId;
32
+ const controlled = useControlledLatch(controlledValue !== void 0);
33
+ const [internal, setInternal] = React.useState(defaultValue ?? ["", ""]);
34
+ const value = controlled ? controlledValue ?? ["", ""] : internal;
35
+ const [internalOpen, setInternalOpen] = React.useState(defaultOpen);
36
+ const [activeEdge, setActiveEdge] = React.useState(0);
37
+ const open = openProp ?? internalOpen;
38
+ const changeOpen = (edge, next) => {
39
+ if (next) setActiveEdge(edge);
40
+ if (openProp === void 0) setInternalOpen(next);
41
+ onOpenChange?.(next);
42
+ };
43
+ const choose = (edge, time) => {
44
+ if (!time && !allowEmpty[edge]) return;
45
+ const next = [value[0], value[1]];
46
+ next[edge] = time;
47
+ if (order && next[0] && next[1] && next[0] > next[1]) next.reverse();
48
+ if (!controlled) setInternal(next);
49
+ onValueChange?.(next);
50
+ };
51
+ return /* @__PURE__ */ jsxs(Flex, { role: "group", id: groupId, className, gap: "sm", ...pickGroupFieldA11y(props), children: [
52
+ /* @__PURE__ */ jsx(
53
+ TimePicker,
54
+ {
55
+ ...props,
56
+ open: open && activeEdge === 0,
57
+ onOpenChange: (next) => changeOpen(0, next),
58
+ ref,
59
+ id: `${groupId}-from`,
60
+ name: name ? `${name}_from` : void 0,
61
+ "aria-labelledby": void 0,
62
+ "aria-label": t("dataEntry.dateRangePicker.from"),
63
+ placeholder: placeholder?.[0],
64
+ value: value[0],
65
+ onValueChange: (time) => choose(0, time),
66
+ allowClear: edgeAllowClear(props.allowClear, allowEmpty[0])
67
+ }
68
+ ),
69
+ /* @__PURE__ */ jsx(
70
+ TimePicker,
71
+ {
72
+ ...props,
73
+ open: open && activeEdge === 1,
74
+ onOpenChange: (next) => changeOpen(1, next),
75
+ id: `${groupId}-to`,
76
+ name: name ? `${name}_to` : void 0,
77
+ "aria-labelledby": void 0,
78
+ "aria-label": t("dataEntry.dateRangePicker.to"),
79
+ placeholder: placeholder?.[1],
80
+ value: value[1],
81
+ onValueChange: (time) => choose(1, time),
82
+ allowClear: edgeAllowClear(props.allowClear, allowEmpty[1])
83
+ }
84
+ )
85
+ ] });
86
+ }
87
+ export {
88
+ TimeRangePicker
89
+ };
@@ -1,4 +1,4 @@
1
1
  import * as React from "react";
2
2
  import type { TransferProp } from "../../props/components/data-entry.prop.js";
3
3
  export type { TransferProp, TransferProp as TransferProps, TransferItemProp, } from "../../props/components/data-entry.prop.js";
4
- export declare function Transfer({ dataSource, targetKeys, onValueChange, titles, showSearch, oneWay, disabled, id, className, selectedKeys: selectedKeysProp, onSelectChange, ...ariaProps }: TransferProp): React.JSX.Element;
4
+ export declare function Transfer({ dataSource, targetKeys: legacyTargetKeys, value, defaultValue, name, readOnly, pagination, defaultTargetKeys, onValueChange, titles, showSearch, showSelectAll, filterOption, render, oneWay, disabled, id, className, selectedKeys: selectedKeysProp, onSelectChange, ...ariaProps }: TransferProp): React.JSX.Element;
@@ -1,11 +1,12 @@
1
1
  "use client";
2
- import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
4
  import { ChevronLeft, ChevronRight } from "lucide-react";
5
5
  import { useTranslation } from "../../i18n/use-translation.js";
6
6
  import { cn } from "../../lib/utils.js";
7
7
  import { pickGroupFieldA11y } from "../../lib/field-a11y.js";
8
8
  import { Button } from "../general/button.js";
9
+ import { Pagination } from "../navigation/pagination.js";
9
10
  import { ScrollArea } from "../data-display/scroll-area.js";
10
11
  import { Checkbox } from "./checkbox.js";
11
12
  import { SearchInput } from "./search-input.js";
@@ -15,8 +16,11 @@ function TransferPanel({
15
16
  items,
16
17
  selectedKeys,
17
18
  onSelectChange,
18
- onSelectAll,
19
19
  showSearch,
20
+ showSelectAll,
21
+ filterOption,
22
+ render,
23
+ pagination,
20
24
  disabled,
21
25
  searchPlaceholder,
22
26
  emptyText,
@@ -26,15 +30,21 @@ function TransferPanel({
26
30
  const titleId = React.useId();
27
31
  const [query, setQuery] = React.useState("");
28
32
  const filtered = React.useMemo(() => {
29
- const q = query.trim().toLowerCase();
33
+ const q = query.trim();
30
34
  if (!q) return items;
35
+ if (filterOption) return items.filter((item) => filterOption(q, item));
36
+ const needle = q.toLowerCase();
31
37
  return items.filter((item) => {
32
- const titleMatch = reactNodeText(item.title).toLowerCase().includes(q);
33
- const descMatch = item.description ? reactNodeText(item.description).toLowerCase().includes(q) : false;
38
+ const titleMatch = reactNodeText(item.title).toLowerCase().includes(needle);
39
+ const descMatch = item.description ? reactNodeText(item.description).toLowerCase().includes(needle) : false;
34
40
  return titleMatch || descMatch;
35
41
  });
36
- }, [items, query]);
37
- const enabledItems = filtered.filter((i) => !i.disabled);
42
+ }, [items, query, filterOption]);
43
+ const [page, setPage] = React.useState(1);
44
+ const pageSize = typeof pagination === "object" ? Math.max(1, Math.floor(pagination.pageSize ?? 10)) : 10;
45
+ const currentPage = Math.min(page, Math.max(1, Math.ceil(filtered.length / pageSize)));
46
+ const visible = pagination ? filtered.slice((currentPage - 1) * pageSize, currentPage * pageSize) : filtered;
47
+ const enabledItems = visible.filter((i) => !i.disabled);
38
48
  const allChecked = enabledItems.length > 0 && enabledItems.every((i) => selectedKeys.includes(i.key));
39
49
  const indeterminate = !allChecked && enabledItems.some((i) => selectedKeys.includes(i.key));
40
50
  const toggleKey = (key, checked) => {
@@ -42,16 +52,21 @@ function TransferPanel({
42
52
  };
43
53
  return /* @__PURE__ */ jsxs("div", { className: "ui-transfer-pane", children: [
44
54
  /* @__PURE__ */ jsxs("div", { className: "ui-transfer-pane-header", children: [
45
- /* @__PURE__ */ jsxs("label", { className: "ui-transfer-pane-check", children: [
46
- /* @__PURE__ */ jsx(
55
+ /* @__PURE__ */ jsxs("div", { className: "ui-transfer-pane-check", children: [
56
+ showSelectAll ? /* @__PURE__ */ jsx(
47
57
  Checkbox,
48
58
  {
49
59
  checked: allChecked ? true : indeterminate ? "indeterminate" : false,
50
60
  disabled: Boolean(disabled) || enabledItems.length === 0,
51
- onCheckedChange: (v) => onSelectAll(v === true),
61
+ onCheckedChange: (v) => {
62
+ const keys = enabledItems.map((item) => item.key);
63
+ onSelectChange(
64
+ v === true ? [.../* @__PURE__ */ new Set([...selectedKeys, ...keys])] : selectedKeys.filter((key) => !keys.includes(key))
65
+ );
66
+ },
52
67
  "aria-label": direction === "left" ? t("dataEntry.transfer.selectAllSource") : t("dataEntry.transfer.selectAllTarget")
53
68
  }
54
- ),
69
+ ) : null,
55
70
  /* @__PURE__ */ jsx("span", { id: titleId, children: title })
56
71
  ] }),
57
72
  /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground text-xs", children: [
@@ -63,14 +78,18 @@ function TransferPanel({
63
78
  showSearch && /* @__PURE__ */ jsx("div", { className: "ui-transfer-search", "data-disabled": disabled ? "" : void 0, children: /* @__PURE__ */ jsx(
64
79
  SearchInput,
65
80
  {
66
- onSearch: setQuery,
81
+ onSearch: (next) => {
82
+ setQuery(next);
83
+ setPage(1);
84
+ },
85
+ disabled,
67
86
  placeholder: searchPlaceholder,
68
87
  ariaLabel: searchPlaceholder,
69
88
  debounce: 0
70
89
  }
71
90
  ) }),
72
- /* @__PURE__ */ jsx(ScrollArea, { className: "flex-1", children: /* @__PURE__ */ jsx("ul", { className: "ui-transfer-list", "aria-labelledby": titleId, children: filtered.length === 0 ? /* @__PURE__ */ jsx("li", { className: "ui-transfer-empty", children: emptyText }) : filtered.map((item) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
73
- "label",
91
+ /* @__PURE__ */ jsx(ScrollArea, { className: "flex-1", children: /* @__PURE__ */ jsx("ul", { className: "ui-transfer-list", "aria-labelledby": titleId, children: filtered.length === 0 ? /* @__PURE__ */ jsx("li", { className: "ui-transfer-empty", children: emptyText }) : visible.map((item) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
92
+ "div",
74
93
  {
75
94
  className: cn(
76
95
  "ui-transfer-row",
@@ -81,27 +100,58 @@ function TransferPanel({
81
100
  /* @__PURE__ */ jsx(
82
101
  Checkbox,
83
102
  {
103
+ id: `${titleId}-${item.key}-box`,
84
104
  checked: selectedKeys.includes(item.key),
85
105
  disabled: Boolean(disabled) || Boolean(item.disabled),
86
106
  onCheckedChange: (v) => toggleKey(item.key, v === true),
107
+ "aria-labelledby": `${titleId}-${item.key}`,
87
108
  className: "ui-transfer-row-check"
88
109
  }
89
110
  ),
90
- /* @__PURE__ */ jsxs("span", { className: "ui-transfer-row-body", children: [
91
- /* @__PURE__ */ jsx("span", { className: "block truncate font-medium", children: item.title }),
92
- item.description && /* @__PURE__ */ jsx("span", { className: "ui-transfer-row-description text-muted-foreground block truncate", children: item.description })
93
- ] })
111
+ /* @__PURE__ */ jsx(
112
+ "label",
113
+ {
114
+ className: "ui-transfer-row-body",
115
+ id: `${titleId}-${item.key}`,
116
+ htmlFor: `${titleId}-${item.key}-box`,
117
+ children: render ? render(item) : /* @__PURE__ */ jsxs(Fragment, { children: [
118
+ /* @__PURE__ */ jsx("span", { className: "block truncate font-medium", children: item.title }),
119
+ item.description && /* @__PURE__ */ jsx("span", { className: "ui-transfer-row-description text-muted-foreground block truncate", children: item.description })
120
+ ] })
121
+ }
122
+ )
94
123
  ]
95
124
  }
96
- ) }, item.key)) }) })
125
+ ) }, item.key)) }) }),
126
+ pagination && filtered.length > pageSize ? /* @__PURE__ */ jsx(
127
+ Pagination,
128
+ {
129
+ value: currentPage,
130
+ pageSize,
131
+ total: filtered.length,
132
+ onValueChange: setPage,
133
+ showSizeChanger: false,
134
+ simple: true,
135
+ disabled
136
+ }
137
+ ) : null
97
138
  ] });
98
139
  }
99
140
  function Transfer({
100
141
  dataSource,
101
- targetKeys,
142
+ targetKeys: legacyTargetKeys,
143
+ value,
144
+ defaultValue,
145
+ name,
146
+ readOnly,
147
+ pagination,
148
+ defaultTargetKeys,
102
149
  onValueChange,
103
150
  titles,
104
151
  showSearch,
152
+ showSelectAll = true,
153
+ filterOption,
154
+ render,
105
155
  oneWay,
106
156
  disabled,
107
157
  id,
@@ -114,22 +164,33 @@ function Transfer({
114
164
  const groupA11y = pickGroupFieldA11y(ariaProps);
115
165
  const [internalSelected, setInternalSelected] = React.useState([[], []]);
116
166
  const selected = selectedKeysProp ?? internalSelected;
167
+ const [internalTargetKeys, setInternalTargetKeys] = React.useState(
168
+ defaultValue ?? defaultTargetKeys ?? []
169
+ );
170
+ const targetKeysProp = value ?? legacyTargetKeys;
171
+ const isTargetControlled = targetKeysProp !== void 0;
172
+ const targetKeys = isTargetControlled ? targetKeysProp : internalTargetKeys;
117
173
  const sourceItems = dataSource.filter((item) => !targetKeys.includes(item.key));
118
174
  const targetItems = dataSource.filter((item) => targetKeys.includes(item.key));
119
175
  const setSelected = (side, keys) => {
120
176
  const next = side === 0 ? [keys, selected[1]] : [selected[0], keys];
121
- if (selectedKeysProp) onSelectChange?.(next[0], next[1]);
122
- else setInternalSelected(next);
177
+ if (!selectedKeysProp) setInternalSelected(next);
178
+ onSelectChange?.(next[0], next[1]);
123
179
  };
124
180
  const move = (direction) => {
125
181
  const fromSide = direction === "right" ? 0 : 1;
126
- const keys = selected[fromSide];
182
+ if (disabled || readOnly) return;
183
+ const available = direction === "right" ? sourceItems : targetItems;
184
+ const keys = selected[fromSide].filter(
185
+ (key) => available.some((item) => item.key === key && !item.disabled)
186
+ );
127
187
  if (!keys.length) return;
128
188
  const nextTarget = direction === "right" ? [...targetKeys, ...keys.filter((k) => !targetKeys.includes(k))] : targetKeys.filter((k) => !keys.includes(k));
189
+ if (!isTargetControlled) setInternalTargetKeys(nextTarget);
129
190
  onValueChange?.(nextTarget, direction, keys);
130
191
  const cleared = fromSide === 0 ? [[], selected[1]] : [selected[0], []];
131
- if (selectedKeysProp) onSelectChange?.(cleared[0], cleared[1]);
132
- else setInternalSelected(cleared);
192
+ if (!selectedKeysProp) setInternalSelected(cleared);
193
+ onSelectChange?.(cleared[0], cleared[1]);
133
194
  };
134
195
  const leftTitle = titles?.[0] ?? t("dataEntry.transfer.source");
135
196
  const rightTitle = titles?.[1] ?? t("dataEntry.transfer.target");
@@ -142,6 +203,7 @@ function Transfer({
142
203
  "aria-disabled": disabled ? true : void 0,
143
204
  className: cn("ui-transfer", className),
144
205
  children: [
206
+ name && !disabled ? targetKeys.map((key) => /* @__PURE__ */ jsx("input", { type: "hidden", name, value: key }, key)) : null,
145
207
  /* @__PURE__ */ jsx(
146
208
  TransferPanel,
147
209
  {
@@ -150,9 +212,12 @@ function Transfer({
150
212
  items: sourceItems,
151
213
  selectedKeys: selected[0],
152
214
  onSelectChange: (keys) => setSelected(0, keys),
153
- onSelectAll: (checked) => setSelected(0, checked ? sourceItems.filter((i) => !i.disabled).map((i) => i.key) : []),
154
215
  showSearch,
155
- disabled,
216
+ showSelectAll,
217
+ filterOption,
218
+ render,
219
+ disabled: disabled || readOnly,
220
+ pagination,
156
221
  searchPlaceholder: t("dataEntry.transfer.searchPlaceholder"),
157
222
  emptyText: t("dataEntry.transfer.empty")
158
223
  }
@@ -164,7 +229,7 @@ function Transfer({
164
229
  type: "button",
165
230
  size: "icon",
166
231
  variant: "outline",
167
- disabled: Boolean(disabled) || selected[0].length === 0,
232
+ disabled: Boolean(disabled || readOnly) || selected[0].length === 0,
168
233
  "aria-label": t("dataEntry.transfer.moveRight"),
169
234
  onClick: () => move("right"),
170
235
  children: /* @__PURE__ */ jsx(ChevronRight, { className: "ui-transfer-action-icon", "aria-hidden": "true" })
@@ -176,7 +241,7 @@ function Transfer({
176
241
  type: "button",
177
242
  size: "icon",
178
243
  variant: "outline",
179
- disabled: Boolean(disabled) || selected[1].length === 0,
244
+ disabled: Boolean(disabled || readOnly) || selected[1].length === 0,
180
245
  "aria-label": t("dataEntry.transfer.moveLeft"),
181
246
  onClick: () => move("left"),
182
247
  children: /* @__PURE__ */ jsx(ChevronLeft, { className: "ui-transfer-action-icon", "aria-hidden": "true" })
@@ -191,9 +256,12 @@ function Transfer({
191
256
  items: targetItems,
192
257
  selectedKeys: selected[1],
193
258
  onSelectChange: (keys) => setSelected(1, keys),
194
- onSelectAll: (checked) => setSelected(1, checked ? targetItems.filter((i) => !i.disabled).map((i) => i.key) : []),
195
259
  showSearch,
196
- disabled,
260
+ showSelectAll,
261
+ filterOption,
262
+ render,
263
+ disabled: disabled || readOnly,
264
+ pagination,
197
265
  searchPlaceholder: t("dataEntry.transfer.searchPlaceholder"),
198
266
  emptyText: t("dataEntry.transfer.empty")
199
267
  }
@@ -1,4 +1,4 @@
1
- /** Ant Design `showCheckedStrategy` equivalents for TreeSelect. */
1
+ /** `showCheckedStrategy` equivalents for TreeSelect — the conventional enterprise names. */
2
2
  export declare const SHOW_CHILD: "SHOW_CHILD";
3
3
  export declare const SHOW_PARENT: "SHOW_PARENT";
4
4
  export declare const SHOW_ALL: "SHOW_ALL";
@@ -2,7 +2,7 @@ import * as React from "react";
2
2
  import type { TreeSelectProp } from "../../props/components/data-entry.prop.js";
3
3
  export type { TreeSelectProp, TreeSelectProp as TreeSelectProps, } from "../../props/components/data-entry.prop.js";
4
4
  export { SHOW_CHILD, SHOW_PARENT, SHOW_ALL } from "./tree-select-strategy.js";
5
- declare function TreeSelectRoot({ treeData: treeDataProp, value, defaultValue, onValueChange, multiple, treeCheckable, treeCheckStrictly, showSearch, showCheckedStrategy, treeDefaultExpandAll, placeholder, disabled, allowClear, className, id, fieldNames, ...ariaProps }: TreeSelectProp): React.JSX.Element;
5
+ declare function TreeSelectRoot({ treeData: treeDataProp, value, defaultValue, onValueChange, multiple, treeCheckable, treeCheckStrictly, showSearch, showCheckedStrategy, treeDefaultExpandAll, placeholder, disabled, readOnly, name, allowClear, className, id, fieldNames, size, status, variant, loading, open: openProp, defaultOpen, onOpenChange, loadData, treeTitleRender, maxTagCount, maxTagPlaceholder, notFoundContent, autoClearSearchValue, search: searchProp, onSearchChange, ...ariaProps }: TreeSelectProp): React.JSX.Element;
6
6
  export declare const TreeSelect: typeof TreeSelectRoot & {
7
7
  SHOW_CHILD: "SHOW_CHILD";
8
8
  SHOW_PARENT: "SHOW_PARENT";