@godxjp/ui 13.6.0 → 13.8.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 (106) hide show
  1. package/dist/app/index.js +4 -4
  2. package/dist/{checkbox-DAIwpMHO.d.ts → checkbox-BpnDa6_M.d.ts} +1 -1
  3. package/dist/{chunk-2JW2QLUU.js → chunk-2MRAHKOD.js} +3 -3
  4. package/dist/{chunk-6MZMMMHV.js → chunk-3VFNWVR7.js} +5 -5
  5. package/dist/{chunk-IRPZJKLU.js → chunk-4FGE5XVC.js} +10 -0
  6. package/dist/{chunk-J254ZX3A.js → chunk-4SSJ54R2.js} +4 -4
  7. package/dist/{chunk-C7W5BO7R.js → chunk-5732TWQF.js} +22 -1
  8. package/dist/chunk-57VDEN64.js +881 -0
  9. package/dist/{chunk-UKTVFPRV.js → chunk-65RWSIZF.js} +4 -4
  10. package/dist/{chunk-5XFFEW2P.js → chunk-A3J2G2ZA.js} +2 -2
  11. package/dist/{chunk-QTEPKNQE.js → chunk-B6S6LTWT.js} +1 -1
  12. package/dist/{chunk-PKSHDFKP.js → chunk-BJTNKNMY.js} +36 -10
  13. package/dist/{chunk-W2RYT6NT.js → chunk-D4JX6O2W.js} +3 -3
  14. package/dist/{chunk-KNI7QI4J.js → chunk-FLY23H4G.js} +2 -2
  15. package/dist/{chunk-ZYJRZLMZ.js → chunk-HIEGUYPP.js} +1 -1
  16. package/dist/{chunk-UVGI2RPC.js → chunk-HRW7JDUJ.js} +4 -4
  17. package/dist/{chunk-UDMFKYZG.js → chunk-I5D4QYZI.js} +3 -3
  18. package/dist/{chunk-76S3TQFH.js → chunk-IAJOP2Z3.js} +31 -13
  19. package/dist/{chunk-LFO5BJ4H.js → chunk-ION2KFXK.js} +2 -2
  20. package/dist/{chunk-6AIYMYSG.js → chunk-K24AQV4R.js} +1 -1
  21. package/dist/{chunk-6VUW6EKH.js → chunk-L6NMIUKC.js} +2 -2
  22. package/dist/{chunk-RBXVCWXL.js → chunk-LVLPNKJP.js} +2 -2
  23. package/dist/{chunk-HS73G2C3.js → chunk-NU2SOVTU.js} +9 -3
  24. package/dist/{chunk-B7R7DHZF.js → chunk-NZBAFFWP.js} +1 -1
  25. package/dist/{chunk-LTKHPOE3.js → chunk-PL4NEIVO.js} +1 -1
  26. package/dist/{chunk-ZOMIELKI.js → chunk-Q3KUZG4P.js} +1 -1
  27. package/dist/{chunk-DVV6UYVS.js → chunk-QE4IYHJU.js} +3 -3
  28. package/dist/{chunk-3JQDPNTA.js → chunk-R2TXLS7S.js} +1 -1
  29. package/dist/{chunk-2FJ5TMQU.js → chunk-X6AJ5HEI.js} +1 -1
  30. package/dist/{chunk-XZH3URGD.js → chunk-XBFUROAY.js} +6 -3
  31. package/dist/{chunk-I472SSN2.js → chunk-YLRCDJMR.js} +1 -1
  32. package/dist/chunk-YXVJFYQE.js +191 -0
  33. package/dist/components/admin/index.d.ts +2 -2
  34. package/dist/components/admin/index.js +23 -23
  35. package/dist/components/data-display/badge.js +3 -3
  36. package/dist/components/data-display/card.d.ts +2 -2
  37. package/dist/components/data-display/carousel.js +3 -3
  38. package/dist/components/data-display/index.js +7 -7
  39. package/dist/components/data-entry/calendar.d.ts +1 -1
  40. package/dist/components/data-entry/calendar.js +4 -4
  41. package/dist/components/data-entry/cascader.d.ts +1 -1
  42. package/dist/components/data-entry/cascader.js +4 -4
  43. package/dist/components/data-entry/checkbox.d.ts +2 -2
  44. package/dist/components/data-entry/color-picker.d.ts +1 -1
  45. package/dist/components/data-entry/color-picker.js +4 -4
  46. package/dist/components/data-entry/date-picker.d.ts +1 -1
  47. package/dist/components/data-entry/date-picker.js +6 -6
  48. package/dist/components/data-entry/date-range-picker.d.ts +6 -4
  49. package/dist/components/data-entry/date-range-picker.js +5 -6
  50. package/dist/components/data-entry/index.d.ts +24 -6
  51. package/dist/components/data-entry/index.js +21 -21
  52. package/dist/components/data-entry/input.js +3 -3
  53. package/dist/components/data-entry/radio.d.ts +1 -1
  54. package/dist/components/data-entry/select.d.ts +1 -1
  55. package/dist/components/data-entry/select.js +5 -5
  56. package/dist/components/data-entry/slider.d.ts +1 -1
  57. package/dist/components/data-entry/switch.d.ts +1 -1
  58. package/dist/components/data-entry/textarea.js +3 -3
  59. package/dist/components/data-entry/time-input.js +2 -2
  60. package/dist/components/data-entry/time-picker.d.ts +1 -1
  61. package/dist/components/data-entry/time-picker.js +5 -5
  62. package/dist/components/data-entry/transfer.d.ts +2 -2
  63. package/dist/components/data-entry/transfer.js +6 -6
  64. package/dist/components/data-entry/tree-select.d.ts +1 -1
  65. package/dist/components/data-entry/tree-select.js +4 -4
  66. package/dist/components/data-entry/upload.d.ts +2 -2
  67. package/dist/components/data-entry/upload.js +7 -7
  68. package/dist/components/data-grid/index.js +6 -6
  69. package/dist/components/feedback/alert.js +5 -5
  70. package/dist/components/feedback/dialog.js +5 -5
  71. package/dist/components/feedback/index.js +7 -7
  72. package/dist/components/general/button.d.ts +3 -1
  73. package/dist/components/general/button.js +3 -3
  74. package/dist/components/general/index.d.ts +1 -1
  75. package/dist/components/general/index.js +3 -3
  76. package/dist/components/layout/index.js +3 -3
  77. package/dist/components/navigation/index.js +9 -9
  78. package/dist/components/navigation/pagination.js +6 -6
  79. package/dist/components/navigation/steps.js +3 -3
  80. package/dist/components/query/index.d.ts +2 -2
  81. package/dist/components/query/index.js +5 -5
  82. package/dist/components/ui/index.d.ts +3 -3
  83. package/dist/components/ui/index.js +22 -22
  84. package/dist/{data-entry.prop-vn5VGnwY.d.ts → data-entry.prop-C9QWj5Kl.d.ts} +61 -2
  85. package/dist/form/index.js +1 -1
  86. package/dist/{general.prop-CzcLDzMw.d.ts → general.prop-CzlQin6v.d.ts} +11 -1
  87. package/dist/i18n/index.d.ts +6 -0
  88. package/dist/i18n/index.js +2 -2
  89. package/dist/index.d.ts +2 -2
  90. package/dist/index.js +31 -31
  91. package/dist/lib/datetime/index.js +1 -1
  92. package/dist/props/components/index.d.ts +3 -3
  93. package/dist/props/index.d.ts +3 -3
  94. package/dist/props/index.js +1 -1
  95. package/dist/props/registry.d.ts +10 -0
  96. package/dist/props/registry.js +1 -1
  97. package/dist/{query.prop-DAILZ0x5.d.ts → query.prop-CT2gFtr4.d.ts} +1 -1
  98. package/dist/{search-input-Oxwpv_s9.d.ts → search-input-d1g8eW9z.d.ts} +1 -1
  99. package/dist/styles/form-layout.css +5 -5
  100. package/dist/styles/layout.css +2 -2
  101. package/dist/tokens/base.css +1 -0
  102. package/dist/tokens/components/form.css +11 -0
  103. package/dist/tokens/semantic/layout.css +11 -0
  104. package/package.json +4 -2
  105. package/dist/chunk-GFDKJY63.js +0 -467
  106. package/dist/chunk-OIAT773P.js +0 -183
@@ -120,7 +120,8 @@ type FormProp = React.FormHTMLAttributes<HTMLFormElement> & {
120
120
  };
121
121
  /** @see FormField */
122
122
  type FormFieldProp = {
123
- id: IdProp;
123
+ /** Optional — auto-generated and injected into the child control when omitted. */
124
+ id?: IdProp;
124
125
  label: LabelProp;
125
126
  required?: RequiredProp;
126
127
  helper?: HelperProp;
@@ -217,6 +218,43 @@ type DatePickerProp = {
217
218
  /** Show an inline ✕ to clear the value when one is set (default true). */
218
219
  allowClear?: boolean;
219
220
  };
221
+ /** @see MonthPicker */
222
+ type MonthPickerProp = {
223
+ value?: ValueProp<Date>;
224
+ defaultValue?: DefaultValueProp<Date | undefined>;
225
+ onValueChange?: OnValueChangeProp<Date | undefined>;
226
+ placeholder?: PlaceholderProp;
227
+ disabled?: DisabledProp;
228
+ className?: ClassNameProp;
229
+ id?: IdProp;
230
+ /** Form field name — submits the display text (`yyyy/MM`). */
231
+ name?: NameProp;
232
+ /** Clamp the year navigation (inclusive). */
233
+ fromYear?: number;
234
+ toYear?: number;
235
+ /** Show an inline ✕ to clear the value when one is set (default true). */
236
+ allowClear?: boolean;
237
+ };
238
+ /**
239
+ * @see MonthRangePicker — both edges are normalized to the FIRST day of their month
240
+ * (the `DateRange` shape is shared with DateRangePicker so ranges interop).
241
+ */
242
+ type MonthRangePickerProp = {
243
+ value?: ValueProp<DateRange>;
244
+ defaultValue?: DefaultValueProp<DateRange | undefined>;
245
+ onValueChange?: OnValueChangeProp<DateRange | undefined>;
246
+ placeholder?: PlaceholderProp;
247
+ disabled?: DisabledProp;
248
+ className?: ClassNameProp;
249
+ id?: IdProp;
250
+ /** Form field name — emits the range as `${name}_from` / `${name}_to` `yyyy/MM` fields. */
251
+ name?: NameProp;
252
+ /** Clamp the year navigation (inclusive). */
253
+ fromYear?: number;
254
+ toYear?: number;
255
+ /** Show an inline ✕ to clear the range when one is set (default true). */
256
+ allowClear?: boolean;
257
+ };
220
258
  /** @see DateRangePicker */
221
259
  type DateRangePickerProp = {
222
260
  value?: ValueProp<DateRange>;
@@ -264,6 +302,11 @@ type SearchSelectOptionProp = {
264
302
  value: string;
265
303
  label: string;
266
304
  sublabel?: string;
305
+ /**
306
+ * Leading node (icon / avatar / flag) shown before the label in BOTH the option row and the
307
+ * trigger once selected. Keep it small (≈1em / a 16–20px avatar) so the trigger stays one line.
308
+ */
309
+ icon?: React.ReactNode;
267
310
  /** Optgroup-style heading this option belongs to (rendered once, in first-seen order). */
268
311
  group?: string;
269
312
  disabled?: boolean;
@@ -294,8 +337,24 @@ type SearchSelectProp = {
294
337
  loadOptions?: (params: SearchSelectLoadParamsProp) => Promise<SearchSelectLoadResultProp>;
295
338
  /** Custom per-option renderer (Ant-Design style). Defaults to label + optional sublabel. */
296
339
  renderOption?: (option: SearchSelectOptionProp) => React.ReactNode;
340
+ /**
341
+ * Custom renderer for the SELECTED value shown on the trigger (Ant Design `labelRender`).
342
+ * Receives the value, the resolved label, and the full option when it is loaded (undefined for
343
+ * an async preset whose page hasn't arrived). Only used while a value is selected; the
344
+ * placeholder still shows when empty. Overrides the default icon + label trigger content.
345
+ */
346
+ labelRender?: (selected: {
347
+ value: string;
348
+ label: React.ReactNode;
349
+ option?: SearchSelectOptionProp;
350
+ }) => React.ReactNode;
297
351
  /** Label for the current value when its option isn't in the loaded page (avoids a flash of id). */
298
352
  selectedLabel?: string;
353
+ /**
354
+ * Leading icon for the current value when its option isn't loaded yet (async + preset value) —
355
+ * the trigger counterpart of `selectedLabel`, so an edit form shows the picked icon at rest.
356
+ */
357
+ selectedIcon?: React.ReactNode;
299
358
  placeholder?: PlaceholderProp;
300
359
  searchPlaceholder?: PlaceholderProp;
301
360
  emptyMessage?: EmptyMessageProp;
@@ -415,4 +474,4 @@ type TransferProp = {
415
474
  onSelectChange?: (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => void;
416
475
  };
417
476
 
418
- export { type UploadVariantProp as A, collectUploadCommitActions as B, type CalendarProp as C, type DatePickerProp as D, createUploadItem as E, type FieldProp as F, type InputProp as I, type NumberInputProp as N, type RadioGroupProp as R, type SearchInputProp as S, type TextareaProp as T, type UploadCommitAction as U, type CascaderProp as a, type CheckboxGroupProp as b, type CheckboxProp as c, type ChoiceOptionProp as d, type ColorPickerProp as e, type DateRangePickerProp as f, type FormFieldProp as g, type FormProp as h, type RadioProp as i, type SearchSelectLoadParamsProp as j, type SearchSelectLoadResultProp as k, type SearchSelectOptionProp as l, type SelectDataProp as m, type ShowCheckedStrategyProp as n, type SliderProp as o, type SwitchProp as p, type TimePickerProp as q, type TransferItemProp as r, type TransferProp as s, type TreeFieldNamesProp as t, type TreeOptionProp as u, type TreeSelectProp as v, type UploadFileItem as w, type UploadFileItemProp as x, type UploadProp as y, type UploadVariant as z };
477
+ export { type UploadVariant as A, type UploadVariantProp as B, type CalendarProp as C, type DatePickerProp as D, collectUploadCommitActions as E, type FieldProp as F, createUploadItem as G, type InputProp as I, type MonthPickerProp as M, type NumberInputProp as N, type RadioGroupProp as R, type SearchInputProp as S, type TextareaProp as T, type UploadCommitAction as U, type CascaderProp as a, type CheckboxGroupProp as b, type CheckboxProp as c, type ChoiceOptionProp as d, type ColorPickerProp as e, type DateRangePickerProp as f, type FormFieldProp as g, type FormProp as h, type MonthRangePickerProp as i, type RadioProp as j, type SearchSelectLoadParamsProp as k, type SearchSelectLoadResultProp as l, type SearchSelectOptionProp as m, type SelectDataProp as n, type ShowCheckedStrategyProp as o, type SliderProp as p, type SwitchProp as q, type TimePickerProp as r, type TransferItemProp as s, type TransferProp as t, type TreeFieldNamesProp as u, type TreeOptionProp as v, type TreeSelectProp as w, type UploadFileItem as x, type UploadFileItemProp as y, type UploadProp as z };
@@ -1,4 +1,4 @@
1
- import { FormField } from '../chunk-76S3TQFH.js';
1
+ import { FormField } from '../chunk-IAJOP2Z3.js';
2
2
  import '../chunk-C3PKEV6S.js';
3
3
  import '../chunk-7PWBC4BY.js';
4
4
  import { cn } from '../chunk-U7N2A7A3.js';
@@ -52,10 +52,20 @@ type ButtonProp = React.ButtonHTMLAttributes<HTMLButtonElement> & {
52
52
  * Optional numeric count rendered as a borderless counter pill after the label
53
53
  * (filter tabs / segmented toggles, e.g. "Chờ bay 18"). Formatted with
54
54
  * `Intl.NumberFormat` in the active locale and styled to read on the button's
55
- * own variant — never nest a `Badge` inside a Button for this. `0` renders.
55
+ * own variant — never nest a `Badge` inside a Button for this.
56
56
  * Ignored when `asChild` (Radix Slot requires a single child).
57
57
  */
58
58
  count?: number;
59
+ /**
60
+ * Cap for `count` (Ant Badge parity). When `count` exceeds it the pill shows
61
+ * `{overflowCount}+` (e.g. `99+`). Defaults to 99.
62
+ */
63
+ overflowCount?: number;
64
+ /**
65
+ * Whether to render the pill when `count` is 0 (Ant Badge parity). Defaults to
66
+ * `true` (a `0` pill shows); pass `false` to hide the pill at zero.
67
+ */
68
+ showZero?: boolean;
59
69
  };
60
70
 
61
71
  export type { ButtonProp as B, HeadingProp as H, TextProp as T };
@@ -107,6 +107,12 @@ var dataEntry = {
107
107
  clear: "Xóa lựa chọn",
108
108
  loading: "Đang tải…",
109
109
  empty: "Không có kết quả"
110
+ },
111
+ monthPicker: {
112
+ openGrid: "Mở chọn tháng",
113
+ previousYear: "Năm trước",
114
+ nextYear: "Năm sau",
115
+ placeholder: "yyyy/mm"
110
116
  }
111
117
  };
112
118
  var feedback = {
@@ -1,2 +1,2 @@
1
- export { usePickerLocales, useTranslation } from '../chunk-QTEPKNQE.js';
2
- export { MESSAGE_CATALOG, resetI18nLocale, syncI18nLocale, translate, translateCurrent } from '../chunk-C7W5BO7R.js';
1
+ export { usePickerLocales, useTranslation } from '../chunk-B6S6LTWT.js';
2
+ export { MESSAGE_CATALOG, resetI18nLocale, syncI18nLocale, translate, translateCurrent } from '../chunk-5732TWQF.js';
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export { F as FlexAlignProp, a as FlexDirectionProp, b as FlexJustifyProp, c as
3
3
  export { F as Flex, P as PageContainer } from './flex-X2EFU1d5.js';
4
4
  export { C as ColumnDef, D as DataTable, a as Density, b as Descriptions, E as EmptyState } from './data-table-DRr70ULe.js';
5
5
  export { Badge } from './components/data-display/badge.js';
6
- export { F as Field, a as FormField, S as SearchInput } from './search-input-Oxwpv_s9.js';
6
+ export { F as Field, a as FormField, S as SearchInput } from './search-input-d1g8eW9z.js';
7
7
  export { a as SkeletonDetail, c as SkeletonRows, d as SkeletonStat, e as SkeletonTable } from './skeleton-cj9kh5wo.js';
8
8
  export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from './components/feedback/alert.js';
9
9
  export { Upload, useUploadDraft } from './components/data-entry/upload.js';
@@ -20,7 +20,7 @@ export { toast } from 'sonner';
20
20
  export { useDebouncedValue, useTimeoutFlag } from './lib/hooks.js';
21
21
  export { formatBytes, formatCurrency, humanError, shortId } from './components/admin/index.js';
22
22
  export { cn } from './lib/utils.js';
23
- export { F as FieldProps, B as collectUploadCommitActions, E as createUploadItem } from './data-entry.prop-vn5VGnwY.js';
23
+ export { F as FieldProps, E as collectUploadCommitActions, G as createUploadItem } from './data-entry.prop-C9QWj5Kl.js';
24
24
  export { c as AlertDialogProps } from './feedback.prop-CHlHDYZK.js';
25
25
  export { d as ToolbarGroupProps, e as ToolbarProps } from './navigation.prop-FCsOVGrP.js';
26
26
  export { j as formatDate } from './format-date-ByyZoqI5.js';
package/dist/index.js CHANGED
@@ -1,62 +1,62 @@
1
1
  import './chunk-2H65B4JA.js';
2
2
  import './chunk-IMERLXSC.js';
3
- import './chunk-GFDKJY63.js';
3
+ import './chunk-57VDEN64.js';
4
4
  import './chunk-VSUYVT2Q.js';
5
- import './chunk-UKTVFPRV.js';
5
+ import './chunk-65RWSIZF.js';
6
6
  import './chunk-S2IJKT3D.js';
7
7
  import './chunk-I7NQ2LIL.js';
8
- import './chunk-ZOMIELKI.js';
9
- import './chunk-3JQDPNTA.js';
10
- import './chunk-LFO5BJ4H.js';
11
- import './chunk-6MZMMMHV.js';
12
- import './chunk-OIAT773P.js';
13
- import './chunk-HS73G2C3.js';
8
+ import './chunk-Q3KUZG4P.js';
9
+ import './chunk-R2TXLS7S.js';
10
+ import './chunk-ION2KFXK.js';
11
+ import './chunk-3VFNWVR7.js';
12
+ import './chunk-YXVJFYQE.js';
13
+ import './chunk-NU2SOVTU.js';
14
14
  import './chunk-GJXOBDER.js';
15
- export { PageContainer } from './chunk-I472SSN2.js';
16
- import './chunk-XK3M3VRR.js';
17
- import './chunk-W4REF4TD.js';
18
- export { Toolbar, ToolbarGroup } from './chunk-UVGI2RPC.js';
19
- export { Steps } from './chunk-LTKHPOE3.js';
15
+ export { Toolbar, ToolbarGroup } from './chunk-HRW7JDUJ.js';
16
+ export { Steps } from './chunk-PL4NEIVO.js';
17
+ import './chunk-B73NA66T.js';
20
18
  import './chunk-WGWI7EGL.js';
21
- export { Pagination } from './chunk-2JW2QLUU.js';
19
+ export { Pagination } from './chunk-2MRAHKOD.js';
22
20
  export { Tabs, TabsContent, TabsList, TabsTrigger } from './chunk-V3N266PT.js';
21
+ export { PageContainer } from './chunk-YLRCDJMR.js';
22
+ import './chunk-XK3M3VRR.js';
23
+ import './chunk-W4REF4TD.js';
23
24
  import './chunk-HL3G4SVG.js';
24
- import './chunk-B73NA66T.js';
25
25
  import './chunk-LMKUKCTN.js';
26
26
  export { sonnerToast as toast } from './chunk-ES4Q3KGL.js';
27
27
  export { SkeletonDetail, SkeletonRows, SkeletonStat, SkeletonTable } from './chunk-2BR7KFCP.js';
28
28
  export { Toaster } from './chunk-TO7URV7U.js';
29
29
  import './chunk-32WO3YLB.js';
30
- export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from './chunk-W2RYT6NT.js';
31
- export { Transfer } from './chunk-DVV6UYVS.js';
32
- export { TreeSelect } from './chunk-5XFFEW2P.js';
33
- export { Upload, collectUploadCommitActions, createUploadItem, useUploadDraft } from './chunk-J254ZX3A.js';
34
- export { SearchInput } from './chunk-RBXVCWXL.js';
35
- export { formatBytes, formatCurrency, humanError, shortId } from './chunk-2FJ5TMQU.js';
36
- export { AlertDialog, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from './chunk-UDMFKYZG.js';
30
+ export { Alert, AlertActions, AlertContent, AlertDescription, AlertQueryError, AlertTitle } from './chunk-D4JX6O2W.js';
31
+ export { Transfer } from './chunk-QE4IYHJU.js';
32
+ export { TreeSelect } from './chunk-A3J2G2ZA.js';
33
+ export { Upload, collectUploadCommitActions, createUploadItem, useUploadDraft } from './chunk-4SSJ54R2.js';
34
+ export { SearchInput } from './chunk-LVLPNKJP.js';
35
+ export { formatBytes, formatCurrency, humanError, shortId } from './chunk-X6AJ5HEI.js';
36
+ export { AlertDialog, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from './chunk-I5D4QYZI.js';
37
37
  import './chunk-VU4GFGDG.js';
38
- import './chunk-PKSHDFKP.js';
38
+ import './chunk-BJTNKNMY.js';
39
39
  import './chunk-TBJBVEIP.js';
40
- export { Cascader } from './chunk-6VUW6EKH.js';
40
+ export { Cascader } from './chunk-L6NMIUKC.js';
41
41
  import './chunk-SMLKNECP.js';
42
42
  import './chunk-3R3QVJCB.js';
43
- import './chunk-6AIYMYSG.js';
44
- export { DataTable, Descriptions } from './chunk-KNI7QI4J.js';
43
+ import './chunk-K24AQV4R.js';
44
+ export { DataTable, Descriptions } from './chunk-FLY23H4G.js';
45
45
  import './chunk-DV52WNXO.js';
46
46
  export { EmptyState } from './chunk-YD7V2HGZ.js';
47
47
  export { Flex } from './chunk-INIIF7F7.js';
48
48
  import './chunk-BE6GJGKJ.js';
49
49
  export { Field } from './chunk-44YRPSZ7.js';
50
- import './chunk-XZH3URGD.js';
51
- export { Badge } from './chunk-ZYJRZLMZ.js';
50
+ import './chunk-XBFUROAY.js';
51
+ export { Badge } from './chunk-HIEGUYPP.js';
52
52
  import './chunk-DY5C44UP.js';
53
53
  import './chunk-3KPEZ5CF.js';
54
54
  import './chunk-IJ5ALJGA.js';
55
55
  import './chunk-B4K4BXEF.js';
56
- export { FormField } from './chunk-76S3TQFH.js';
56
+ export { FormField } from './chunk-IAJOP2Z3.js';
57
57
  import './chunk-C3PKEV6S.js';
58
58
  import './chunk-7PWBC4BY.js';
59
- import './chunk-QTEPKNQE.js';
60
- export { formatDate } from './chunk-C7W5BO7R.js';
59
+ import './chunk-B6S6LTWT.js';
60
+ export { formatDate } from './chunk-5732TWQF.js';
61
61
  export { useDebouncedValue, useTimeoutFlag } from './chunk-LFW37FGG.js';
62
62
  export { cn } from './chunk-U7N2A7A3.js';
@@ -1 +1 @@
1
- export { calendarDateToTZDate, detectFormatDateKind, disableLiveRelativeFormatting, enableLiveRelativeFormatting, formatAppDate, formatAppDateLong, formatAppDateTime, formatAppRelative, formatAppTime, formatCalendarDate, formatDate, formatTimeOfDay, getDatetimeContext, hhmmToTZDate, isDateOnlyString, isFormatDateValue, isValidHhmm, normalizeHhmm, parseDateInput, resetDatetimeContextForTests, syncDatetimeContext, toIsoDate } from '../../chunk-C7W5BO7R.js';
1
+ export { calendarDateToTZDate, detectFormatDateKind, disableLiveRelativeFormatting, enableLiveRelativeFormatting, formatAppDate, formatAppDateLong, formatAppDateTime, formatAppRelative, formatAppTime, formatCalendarDate, formatDate, formatTimeOfDay, getDatetimeContext, hhmmToTZDate, isDateOnlyString, isFormatDateValue, isValidHhmm, normalizeHhmm, parseDateInput, resetDatetimeContextForTests, syncDatetimeContext, toIsoDate } from '../../chunk-5732TWQF.js';
@@ -1,9 +1,9 @@
1
1
  export { A as AppShellProp, P as PageContainerProp, d as PageInsetProp, e as SidebarItemProp, f as SidebarProductProp, g as SidebarProp, h as SidebarSectionProp, T as TopbarProductProp, i as TopbarProjectProp, j as TopbarProp } from '../../layout.prop-D2be7gOo.js';
2
- export { B as ButtonProp } from '../../general.prop-CzcLDzMw.js';
3
- export { C as CalendarProp, a as CascaderProp, b as CheckboxGroupProp, c as CheckboxProp, d as ChoiceOptionProp, e as ColorPickerProp, D as DatePickerProp, f as DateRangePickerProp, g as FormFieldProp, I as InputProp, R as RadioGroupProp, i as RadioProp, S as SearchInputProp, n as ShowCheckedStrategyProp, o as SliderProp, p as SwitchProp, T as TextareaProp, q as TimePickerProp, r as TransferItemProp, s as TransferProp, t as TreeFieldNamesProp, u as TreeOptionProp, v as TreeSelectProp, x as UploadFileItemProp, y as UploadProp, A as UploadVariantProp } from '../../data-entry.prop-vn5VGnwY.js';
2
+ export { B as ButtonProp } from '../../general.prop-CzlQin6v.js';
3
+ export { C as CalendarProp, a as CascaderProp, b as CheckboxGroupProp, c as CheckboxProp, d as ChoiceOptionProp, e as ColorPickerProp, D as DatePickerProp, f as DateRangePickerProp, g as FormFieldProp, I as InputProp, R as RadioGroupProp, j as RadioProp, S as SearchInputProp, o as ShowCheckedStrategyProp, p as SliderProp, q as SwitchProp, T as TextareaProp, r as TimePickerProp, s as TransferItemProp, t as TransferProp, u as TreeFieldNamesProp, v as TreeOptionProp, w as TreeSelectProp, y as UploadFileItemProp, z as UploadProp, B as UploadVariantProp } from '../../data-entry.prop-C9QWj5Kl.js';
4
4
  export { B as BadgeProp, D as DataTableProp, a as DescriptionsItemProp, b as DescriptionsProp, E as EmptyStateProp } from '../../data-display.prop-CT0nVMdp.js';
5
5
  export { A as AlertActionsProp, a as AlertContentProp, b as AlertDescriptionProp, d as AlertProp, e as AlertQueryErrorProp, f as AlertTitleProp, S as SkeletonRowsProp } from '../../feedback.prop-CHlHDYZK.js';
6
- export { D as DataStateProp, I as InfiniteQueryHelpers, a as InfiniteQueryStateProp, P as PrefetchLinkProp } from '../../query.prop-DAILZ0x5.js';
6
+ export { D as DataStateProp, I as InfiniteQueryHelpers, a as InfiniteQueryStateProp, P as PrefetchLinkProp } from '../../query.prop-CT2gFtr4.js';
7
7
  export { P as PaginationProp, S as StepItemProp, a as StepStatusProp, b as StepsProp, T as TabItemProp, c as TabsProp } from '../../navigation.prop-FCsOVGrP.js';
8
8
  export { A as AppContextValue, a as AppProviderProp, b as AppSettingKind, c as AppSettingPickerProp } from '../../app.prop-CVY8V4ss.js';
9
9
  export { F as FieldErrorMessageProp, a as FormFieldControlProp, b as FormRootProp, U as UseZodFormOptionsProp, c as UseZodFormReturnProp, Z as ZodSchemaProp } from '../../form.prop-5cyL3bvT.js';
@@ -5,11 +5,11 @@ export { A as AlertVariantProp, B as BadgeVariantProp, a as BreakpointProp, b as
5
5
  export { B as BreadcrumbItem, B as BreadcrumbItemProp, a as BreadcrumbProp } from '../navigation.prop-CXDaVNaR.js';
6
6
  export { C as ColumnDef, C as ColumnDefProp, G as GetRowIdProp, H as HasActiveFiltersProp, O as OnClearFiltersProp, a as OnRowClickProp, b as OnSearchChangeProp, c as OnSelectChangeProp, d as OnSortChangeProp, e as OnTableDensityChangeProp, S as SelectedIdsProp } from '../data.prop-D0UEEczj.js';
7
7
  export { A as AppShellProp, P as PageContainerProp, P as PageContainerProps, d as PageInsetProp, e as SidebarItemProp, f as SidebarProductProp, g as SidebarProp, h as SidebarSectionProp, T as TopbarProductProp, i as TopbarProjectProp, j as TopbarProp } from '../layout.prop-D2be7gOo.js';
8
- export { B as ButtonProp, B as ButtonProps } from '../general.prop-CzcLDzMw.js';
9
- export { C as CalendarProp, a as CascaderProp, b as CheckboxGroupProp, c as CheckboxProp, d as ChoiceOptionProp, e as ColorPickerProp, D as DatePickerProp, f as DateRangePickerProp, g as FormFieldProp, I as InputProp, R as RadioGroupProp, i as RadioProp, S as SearchInputProp, n as ShowCheckedStrategyProp, o as SliderProp, p as SwitchProp, T as TextareaProp, q as TimePickerProp, r as TransferItemProp, s as TransferProp, t as TreeFieldNamesProp, u as TreeOptionProp, v as TreeSelectProp, x as UploadFileItemProp, y as UploadProp, A as UploadVariantProp } from '../data-entry.prop-vn5VGnwY.js';
8
+ export { B as ButtonProp, B as ButtonProps } from '../general.prop-CzlQin6v.js';
9
+ export { C as CalendarProp, a as CascaderProp, b as CheckboxGroupProp, c as CheckboxProp, d as ChoiceOptionProp, e as ColorPickerProp, D as DatePickerProp, f as DateRangePickerProp, g as FormFieldProp, I as InputProp, R as RadioGroupProp, j as RadioProp, S as SearchInputProp, o as ShowCheckedStrategyProp, p as SliderProp, q as SwitchProp, T as TextareaProp, r as TimePickerProp, s as TransferItemProp, t as TransferProp, u as TreeFieldNamesProp, v as TreeOptionProp, w as TreeSelectProp, y as UploadFileItemProp, z as UploadProp, B as UploadVariantProp } from '../data-entry.prop-C9QWj5Kl.js';
10
10
  export { B as BadgeProp, D as DataTableProp, a as DescriptionsItemProp, b as DescriptionsProp, E as EmptyStateProp } from '../data-display.prop-CT0nVMdp.js';
11
11
  export { A as AlertActionsProp, a as AlertContentProp, b as AlertDescriptionProp, d as AlertProp, e as AlertQueryErrorProp, f as AlertTitleProp, S as SkeletonRowsProp } from '../feedback.prop-CHlHDYZK.js';
12
- export { D as DataStateProp, I as InfiniteQueryHelpers, a as InfiniteQueryStateProp, P as PrefetchLinkProp } from '../query.prop-DAILZ0x5.js';
12
+ export { D as DataStateProp, I as InfiniteQueryHelpers, a as InfiniteQueryStateProp, P as PrefetchLinkProp } from '../query.prop-CT2gFtr4.js';
13
13
  export { P as PaginationProp, S as StepItemProp, a as StepStatusProp, b as StepsProp, T as TabItemProp, c as TabsProp } from '../navigation.prop-FCsOVGrP.js';
14
14
  export { A as AppContextValue, a as AppProviderProp, b as AppSettingKind, c as AppSettingPickerProp } from '../app.prop-CVY8V4ss.js';
15
15
  export { F as FieldErrorMessageProp, a as FormFieldControlProp, b as FormRootProp, U as UseZodFormOptionsProp, c as UseZodFormReturnProp, Z as ZodSchemaProp } from '../form.prop-5cyL3bvT.js';
@@ -1,3 +1,3 @@
1
1
  import '../chunk-B775Y6BE.js';
2
2
  import '../chunk-ZT5UEUBO.js';
3
- export { COMPONENT_PROP_REGISTRY, PROP_ALIASES_FORBIDDEN, VOCABULARY_REGISTRY } from '../chunk-IRPZJKLU.js';
3
+ export { COMPONENT_PROP_REGISTRY, PROP_ALIASES_FORBIDDEN, VOCABULARY_REGISTRY } from '../chunk-4FGE5XVC.js';
@@ -563,6 +563,16 @@ declare const COMPONENT_PROP_REGISTRY: {
563
563
  readonly file: "components/data-entry.prop.ts";
564
564
  readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "PlaceholderProp", "DisabledProp", "IdProp"];
565
565
  };
566
+ readonly MonthPickerProp: {
567
+ readonly group: "data-entry";
568
+ readonly file: "components/data-entry.prop.ts";
569
+ readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "PlaceholderProp", "DisabledProp", "IdProp"];
570
+ };
571
+ readonly MonthRangePickerProp: {
572
+ readonly group: "data-entry";
573
+ readonly file: "components/data-entry.prop.ts";
574
+ readonly vocabulary: readonly ["ValueProp", "OnValueChangeProp", "PlaceholderProp", "DisabledProp", "IdProp"];
575
+ };
566
576
  readonly DateRangePickerProp: {
567
577
  readonly group: "data-entry";
568
578
  readonly file: "components/data-entry.prop.ts";
@@ -1 +1 @@
1
- export { COMPONENT_PROP_REGISTRY, PROP_ALIASES_FORBIDDEN, VOCABULARY_REGISTRY } from '../chunk-IRPZJKLU.js';
1
+ export { COMPONENT_PROP_REGISTRY, PROP_ALIASES_FORBIDDEN, VOCABULARY_REGISTRY } from '../chunk-4FGE5XVC.js';
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { UseQueryResult, UseInfiniteQueryResult, InfiniteData, QueryKey, UseMutationResult } from '@tanstack/react-query';
3
3
  import { LinkProps } from 'react-router-dom';
4
- import { B as ButtonProp } from './general.prop-CzcLDzMw.js';
4
+ import { B as ButtonProp } from './general.prop-CzlQin6v.js';
5
5
  import { H as HandlerProp, a as ClassNameProp } from './shared.prop-BvMSLFJ6.js';
6
6
 
7
7
  /** Query / async lifecycle helpers — @see docs/COMPONENTS.md#query */
@@ -1,5 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { g as FormFieldProp, F as FieldProp } from './data-entry.prop-vn5VGnwY.js';
2
+ import { g as FormFieldProp, F as FieldProp } from './data-entry.prop-C9QWj5Kl.js';
3
3
  import * as React from 'react';
4
4
 
5
5
  declare function FormField({ id, label, required, helper, error, labelAddon, layout: layoutProp, labelWidth: labelWidthProp, controlWidth: controlWidthProp, colSpan, className, children, }: FormFieldProp): react_jsx_runtime.JSX.Element;
@@ -57,7 +57,7 @@
57
57
  ) {
58
58
  grid-template-columns: var(--form-label-width, max-content) minmax(0, 1fr);
59
59
  align-items: start;
60
- column-gap: var(--space-4);
60
+ column-gap: var(--form-label-gap);
61
61
  row-gap: var(--space-stack-xs);
62
62
  }
63
63
  .ui-form-field[data-collapse-below="false"]:is([data-layout="horizontal"], [data-layout="inline"])
@@ -80,7 +80,7 @@
80
80
  ) {
81
81
  grid-template-columns: var(--form-label-width, max-content) minmax(0, 1fr);
82
82
  align-items: start;
83
- column-gap: var(--space-4);
83
+ column-gap: var(--form-label-gap);
84
84
  row-gap: var(--space-stack-xs);
85
85
  }
86
86
  .ui-form-field[data-collapse-below="sm"]:is([data-layout="horizontal"], [data-layout="inline"])
@@ -104,7 +104,7 @@
104
104
  ) {
105
105
  grid-template-columns: var(--form-label-width, max-content) minmax(0, 1fr);
106
106
  align-items: start;
107
- column-gap: var(--space-4);
107
+ column-gap: var(--form-label-gap);
108
108
  row-gap: var(--space-stack-xs);
109
109
  }
110
110
  .ui-form-field[data-collapse-below="md"]:is([data-layout="horizontal"], [data-layout="inline"])
@@ -128,7 +128,7 @@
128
128
  ) {
129
129
  grid-template-columns: var(--form-label-width, max-content) minmax(0, 1fr);
130
130
  align-items: start;
131
- column-gap: var(--space-4);
131
+ column-gap: var(--form-label-gap);
132
132
  row-gap: var(--space-stack-xs);
133
133
  }
134
134
  .ui-form-field[data-collapse-below="lg"]:is([data-layout="horizontal"], [data-layout="inline"])
@@ -152,7 +152,7 @@
152
152
  ) {
153
153
  grid-template-columns: var(--form-label-width, max-content) minmax(0, 1fr);
154
154
  align-items: start;
155
- column-gap: var(--space-4);
155
+ column-gap: var(--form-label-gap);
156
156
  row-gap: var(--space-stack-xs);
157
157
  }
158
158
  .ui-form-field[data-collapse-below="xl"]:is([data-layout="horizontal"], [data-layout="inline"])
@@ -312,8 +312,8 @@
312
312
  display: flex;
313
313
  flex-direction: column;
314
314
  gap: var(--space-stack-sm);
315
- padding-bottom: var(--space-stack-md);
316
- border-bottom: 1px solid hsl(var(--border));
315
+ padding-bottom: var(--page-header-pad-bottom);
316
+ border-bottom: var(--page-header-divider);
317
317
  }
318
318
 
319
319
  .ui-page-header-row {
@@ -6,6 +6,7 @@
6
6
  @import "./foundation.css";
7
7
  @import "./semantic/layout.css";
8
8
  @import "./components/control.css";
9
+ @import "./components/form.css";
9
10
  @import "./components/card.css";
10
11
  @import "./components/table.css";
11
12
  @import "./components/feedback.css";
@@ -0,0 +1,11 @@
1
+ /* Form layout tokens: horizontal-layout label column geometry. */
2
+
3
+ :root {
4
+ /* Width of the label column in horizontal/inline layout. A service theme sets
5
+ * this once (e.g. 110px) to align every form to its design grid; the Form/
6
+ * FormField `labelWidth` prop overrides per form/field. */
7
+ --form-label-width: max-content;
8
+
9
+ /* Column gap between the label and its control in horizontal/inline layout. */
10
+ --form-label-gap: var(--space-4); /* 16px */
11
+ }
@@ -22,6 +22,17 @@
22
22
  --space-page-active-y: var(--space-page-y);
23
23
  --space-section-active: var(--space-section);
24
24
 
25
+ /* Full-bleed rule under the PageContainer header. OFF by default — the title/body
26
+ * gap already separates them; a divider is a service-theme opt-in:
27
+ * `--page-header-divider: 1px solid hsl(var(--border));` */
28
+ --page-header-divider: none;
29
+
30
+ /* Bottom inset of the page header, sized so title→body distance (this pad + the
31
+ * --space-section-active container gap) EQUALS the page's top padding — the title
32
+ * band reads vertically balanced (24 above / 24 below by default), instead of the
33
+ * old fixed 16px pad that left 24 above vs 32 below. */
34
+ --page-header-pad-bottom: calc(var(--space-page-active-y) - var(--space-section-active));
35
+
25
36
  /* Section "chrome" padding — the SHARED inset for header / body / footer of every overlay-ish
26
37
  * surface (Dialog · Sheet · Drawer · Card). One global knob: a service sets these once instead of
27
38
  * per-component. Vertical is tightened (16 vs the old 24) and density-aware (see density.css);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "13.6.0",
3
+ "version": "13.8.0",
4
4
  "type": "module",
5
5
  "packageManager": "pnpm@10.29.1",
6
6
  "sideEffects": false,
@@ -267,9 +267,10 @@
267
267
  "test:coverage": "vitest run --coverage",
268
268
  "check:example-imports": "node scripts/check-example-imports.mjs",
269
269
  "verify": "pnpm typecheck && pnpm lint && pnpm format && pnpm build && pnpm preview:build && pnpm check:example-imports && pnpm check:core-isolation && pnpm check:prop-vocabulary && pnpm check:token-tiers && pnpm check:control-sizing && pnpm check:mcp-sync && pnpm check:mcp-orphans && pnpm test",
270
- "verify:release": "pnpm typecheck && pnpm lint && pnpm build && pnpm preview:build && pnpm check:example-imports && pnpm check:core-isolation && pnpm check:prop-vocabulary && pnpm check:token-tiers && pnpm check:control-sizing && pnpm check:mcp-sync && pnpm check:mcp-orphans && pnpm test",
270
+ "verify:release": "pnpm typecheck && pnpm lint && pnpm build && pnpm preview:build && pnpm check:example-imports && pnpm check:core-isolation && pnpm check:prop-vocabulary && pnpm check:token-tiers && pnpm check:control-sizing && pnpm check:mcp-sync && pnpm check:mcp-orphans && pnpm check:mcp-prop-sync && pnpm test",
271
271
  "check:mcp-sync": "node scripts/check-mcp-sync.mjs",
272
272
  "check:mcp-orphans": "node scripts/check-mcp-orphans.mjs",
273
+ "check:mcp-prop-sync": "node scripts/check-mcp-prop-sync.mjs",
273
274
  "check:prop-vocabulary": "node scripts/check-prop-vocabulary.mjs",
274
275
  "check:token-tiers": "node scripts/check-token-tiers.mjs",
275
276
  "check:control-sizing": "node scripts/check-control-sizing.mjs",
@@ -280,6 +281,7 @@
280
281
  "docs:sync-primitives": "node preview/scripts/sync-primitive-docs.mjs && prettier --write \"docs/primitives/**/*.tsx\"",
281
282
  "audit": "node scripts/ui-audit.mjs",
282
283
  "build": "tsup && node scripts/copy-styles.mjs",
284
+ "dev": "node scripts/dev.mjs",
283
285
  "prepublishOnly": "pnpm run build"
284
286
  },
285
287
  "peerDependencies": {