@godxjp/ui 27.1.0 → 27.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/data-display/badge.d.ts +10 -3
- package/dist/components/data-display/badge.js +14 -3
- package/dist/components/data-display/data-table.d.ts +20 -12
- package/dist/components/data-display/data-table.js +53 -5
- package/dist/components/data-display/range-timeline.d.ts +16 -0
- package/dist/components/data-display/range-timeline.js +115 -80
- package/dist/components/data-display/table.d.ts +16 -0
- package/dist/components/data-display/table.js +2 -0
- package/dist/components/data-entry/checkbox.js +23 -5
- package/dist/components/data-entry/command.d.ts +3 -1
- package/dist/components/data-entry/command.js +10 -2
- package/dist/components/data-entry/form-field.js +9 -8
- package/dist/components/data-entry/index.d.ts +1 -0
- package/dist/components/data-entry/search-select.js +145 -136
- package/dist/components/data-entry/select.js +38 -3
- package/dist/components/layout/org-switcher.js +1 -1
- package/dist/components/layout/responsive-grid.d.ts +8 -2
- package/dist/components/layout/responsive-grid.js +2 -0
- package/dist/contracts/measurement.json +1 -1
- package/dist/form/form-field-control.d.ts +1 -1
- package/dist/form/form-field-control.js +32 -23
- package/dist/i18n/messages/en.json +2 -1
- package/dist/i18n/messages/ja.json +2 -1
- package/dist/i18n/messages/vi.json +2 -1
- package/dist/props/components/data-display.prop.d.ts +12 -0
- package/dist/props/components/data-entry.prop.d.ts +10 -0
- package/dist/props/components/form.prop.d.ts +34 -2
- package/dist/props/components/index.d.ts +1 -1
- package/dist/props/components/layout.prop.d.ts +7 -0
- package/dist/props/registry.d.ts +26 -3
- package/dist/props/registry.js +25 -2
- package/dist/props/vocabulary/data.prop.d.ts +27 -1
- package/dist/props/vocabulary/index.d.ts +1 -1
- package/dist/styles/control.css +44 -1
- package/dist/styles/data-display-layout.css +58 -1
- package/dist/styles/form-layout.css +21 -0
- package/dist/styles/layout.css +7 -0
- package/dist/styles/navigation-layout.css +5 -1
- package/dist/styles/shell-layout.css +1 -14
- package/dist/styles/table-layout.css +80 -8
- package/dist/tokens/components/control.css +5 -0
- package/dist/tokens/components/data-display.css +6 -0
- package/dist/tokens/components/navigation.css +1 -1
- package/dist/tokens/components/table.css +2 -0
- package/docs/DESIGN-AUTHORITY.md +32 -1
- package/docs/data-display/data-table/examples/server-paged.tsx +156 -0
- package/docs/data-display/data-table/examples/striped-list.tsx +173 -0
- package/docs/data-display/popover.tsx +43 -1
- package/docs/data-display/timeline.tsx +73 -9
- package/docs/data-entry/command.tsx +80 -1
- package/docs/data-entry/form-root.tsx +12 -2
- package/docs/layout/responsive-grid.tsx +100 -0
- package/package.json +3 -2
|
@@ -51,6 +51,7 @@ function FormFieldControl({
|
|
|
51
51
|
feedback,
|
|
52
52
|
preserve,
|
|
53
53
|
className,
|
|
54
|
+
valuePropName,
|
|
54
55
|
children
|
|
55
56
|
}) {
|
|
56
57
|
const autoId = React.useId();
|
|
@@ -62,9 +63,23 @@ function FormFieldControl({
|
|
|
62
63
|
const isDisabled = disabled ?? formDisabled;
|
|
63
64
|
const disabledProp = isDisabled ? { disabled: true } : disabled === false ? { disabled: false } : void 0;
|
|
64
65
|
const readValue = (args, previousValue) => {
|
|
65
|
-
const
|
|
66
|
+
const extracted = getValueFromEvent ? getValueFromEvent(...args) : extractControlValue(args[0]);
|
|
67
|
+
const raw = valuePropName === "checked" ? extracted === true : extracted;
|
|
66
68
|
return normalize ? normalize(raw, previousValue) : raw;
|
|
67
69
|
};
|
|
70
|
+
const renderControl = (bag) => {
|
|
71
|
+
const render = children;
|
|
72
|
+
if (valuePropName === "checked") {
|
|
73
|
+
const { value, onChange, ...rest } = bag;
|
|
74
|
+
return render({
|
|
75
|
+
...rest,
|
|
76
|
+
checked: value === true,
|
|
77
|
+
onCheckedChange: (checked) => onChange(checked),
|
|
78
|
+
...disabledProp
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
return render(bindField({ ...bag, ...disabledProp }));
|
|
82
|
+
};
|
|
68
83
|
if (adapter) {
|
|
69
84
|
const fieldName = String(name);
|
|
70
85
|
return /* @__PURE__ */ jsx(
|
|
@@ -81,17 +96,14 @@ function FormFieldControl({
|
|
|
81
96
|
hasFeedback,
|
|
82
97
|
feedback,
|
|
83
98
|
className,
|
|
84
|
-
children:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
...disabledProp
|
|
93
|
-
})
|
|
94
|
-
)
|
|
99
|
+
children: renderControl({
|
|
100
|
+
id: resolvedId,
|
|
101
|
+
name: fieldName,
|
|
102
|
+
value: adapter.getValue(fieldName),
|
|
103
|
+
onChange: (...args) => adapter.setValue(fieldName, readValue(args, adapter.getValue(fieldName))),
|
|
104
|
+
onBlur: () => adapter.onBlur?.(fieldName),
|
|
105
|
+
ref: noopRef
|
|
106
|
+
})
|
|
95
107
|
}
|
|
96
108
|
);
|
|
97
109
|
}
|
|
@@ -125,17 +137,14 @@ function FormFieldControl({
|
|
|
125
137
|
hasFeedback,
|
|
126
138
|
feedback,
|
|
127
139
|
className,
|
|
128
|
-
children:
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
...disabledProp
|
|
137
|
-
})
|
|
138
|
-
)
|
|
140
|
+
children: renderControl({
|
|
141
|
+
id: resolvedId,
|
|
142
|
+
name: field.name,
|
|
143
|
+
value: field.value,
|
|
144
|
+
onChange: (...args) => field.onChange(readValue(args, field.value)),
|
|
145
|
+
onBlur: field.onBlur,
|
|
146
|
+
ref: field.ref
|
|
147
|
+
})
|
|
139
148
|
}
|
|
140
149
|
)
|
|
141
150
|
}
|
|
@@ -607,7 +607,8 @@
|
|
|
607
607
|
"trendCurrent": "current"
|
|
608
608
|
},
|
|
609
609
|
"rangeTimeline": {
|
|
610
|
-
"
|
|
610
|
+
"outsideAfter": "After the visible range",
|
|
611
|
+
"outsideBefore": "Before the visible range",
|
|
611
612
|
"schedule": "Schedule"
|
|
612
613
|
},
|
|
613
614
|
"textExamples": {
|
|
@@ -595,7 +595,8 @@
|
|
|
595
595
|
"trendCurrent": "hiện tại"
|
|
596
596
|
},
|
|
597
597
|
"rangeTimeline": {
|
|
598
|
-
"
|
|
598
|
+
"outsideAfter": "Sau khoảng đang xem",
|
|
599
|
+
"outsideBefore": "Trước khoảng đang xem",
|
|
599
600
|
"schedule": "Lịch công việc"
|
|
600
601
|
},
|
|
601
602
|
"textExamples": {
|
|
@@ -294,6 +294,12 @@ export type BadgeProp = {
|
|
|
294
294
|
* Port name `onRemove` (not `onClose`) — see {@link Badge} JSDoc and `docs/DESIGN-AUTHORITY.md`.
|
|
295
295
|
*/
|
|
296
296
|
onRemove?: () => void;
|
|
297
|
+
/**
|
|
298
|
+
* The × button's full accessible name, verbatim (antd 5.15+ `closable={{ 'aria-label' }}`, gh#706).
|
|
299
|
+
* Without it the name quotes the chip's label — a string `children`, or the label's rendered text
|
|
300
|
+
* when `children` is a link or other node.
|
|
301
|
+
*/
|
|
302
|
+
removeLabel?: string;
|
|
297
303
|
};
|
|
298
304
|
/** @see CredentialReveal */
|
|
299
305
|
/**
|
|
@@ -403,6 +409,12 @@ export type DataTableProp<T> = {
|
|
|
403
409
|
onRow?: OnRowProp<T>;
|
|
404
410
|
/** Outer frame + vertical rules between columns (antd `bordered`). */
|
|
405
411
|
bordered?: boolean;
|
|
412
|
+
/**
|
|
413
|
+
* Zebra rows by logical record (Element Plus `stripe`, Bootstrap `.table-striped`; antd has no
|
|
414
|
+
* prop). Omit to inherit the theme default `--table-row-striped-alpha`; `true` / `false`
|
|
415
|
+
* override it for this table.
|
|
416
|
+
*/
|
|
417
|
+
striped?: boolean;
|
|
406
418
|
/** Explain the next sort step in a tooltip on sortable headers (antd `showSorterTooltip`). */
|
|
407
419
|
showSorterTooltip?: boolean;
|
|
408
420
|
/** Table-wide sort cycle; a column's own `sortDirections` wins (antd `sortDirections`). */
|
|
@@ -114,6 +114,16 @@ export type ControlCountProp = {
|
|
|
114
114
|
strategy?: (value: string) => number;
|
|
115
115
|
};
|
|
116
116
|
/** @see Input */
|
|
117
|
+
/** `Command` — the library's own knob; cmdk's root props pass through untouched beside it. */
|
|
118
|
+
export type CommandProp = {
|
|
119
|
+
/**
|
|
120
|
+
* antd `List` `split`: draw the list as ONE ruled box — group padding 0, rows full-bleed to the
|
|
121
|
+
* panel edge with a square highlight, a hairline `border-block-end` between rows and none after
|
|
122
|
+
* the last visible one. For option / checkbox lists (filter facets, pickers). Default `false`:
|
|
123
|
+
* a command palette keeps its airy, inset rows.
|
|
124
|
+
*/
|
|
125
|
+
split?: boolean;
|
|
126
|
+
};
|
|
117
127
|
export type InputProp = Omit<React.InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> & {
|
|
118
128
|
onValueChange?: (value: string) => void;
|
|
119
129
|
/** Control height tier: `md` (default), `sm` or `lg` — the same tiers as SelectTrigger. */
|
|
@@ -117,7 +117,12 @@ export type FormRootProp<TFieldValues extends FieldValues> = {
|
|
|
117
117
|
/** @see FormFieldControl */
|
|
118
118
|
export type FormFieldControlProp<TFieldValues extends FieldValues> = Pick<import("./data-entry.prop.js").FormFieldProp, "id" | "field" | "labelAddon" | "layout" | "labelWidth" | "controlWidth" | "colSpan"> & {
|
|
119
119
|
name: FieldPath<TFieldValues>;
|
|
120
|
-
|
|
120
|
+
/**
|
|
121
|
+
* Field label. Optional (antd `Form.Item`): omitted, the field renders NO label row and reserves
|
|
122
|
+
* no space for one — the boolean-field shape, where the control carries its own inline label
|
|
123
|
+
* (`valuePropName="checked"` + `<Checkbox {...field}>label</Checkbox>`).
|
|
124
|
+
*/
|
|
125
|
+
label?: LabelProp;
|
|
121
126
|
required?: RequiredProp;
|
|
122
127
|
helper?: HelperProp;
|
|
123
128
|
/**
|
|
@@ -164,6 +169,12 @@ export type FormFieldControlProp<TFieldValues extends FieldValues> = Pick<import
|
|
|
164
169
|
*/
|
|
165
170
|
preserve?: boolean;
|
|
166
171
|
className?: string;
|
|
172
|
+
} & ({
|
|
173
|
+
/**
|
|
174
|
+
* Which prop of the control carries the value (antd `valuePropName`). Default `"value"`: the
|
|
175
|
+
* render prop receives `value` / `onChange` / `onValueChange`.
|
|
176
|
+
*/
|
|
177
|
+
valuePropName?: "value";
|
|
167
178
|
children: (field: {
|
|
168
179
|
id: string;
|
|
169
180
|
name: string;
|
|
@@ -180,7 +191,28 @@ export type FormFieldControlProp<TFieldValues extends FieldValues> = Pick<import
|
|
|
180
191
|
/** Present (and `true`) only when the field is disabled, so `{...field}` never re-enables a control. */
|
|
181
192
|
disabled?: DisabledProp;
|
|
182
193
|
}) => React.ReactNode;
|
|
183
|
-
}
|
|
194
|
+
} | {
|
|
195
|
+
/**
|
|
196
|
+
* `"checked"` (antd `valuePropName="checked"`) — a boolean field. The render prop receives
|
|
197
|
+
* `checked` / `onCheckedChange` instead of `value` / `onChange`, so
|
|
198
|
+
* `{(field) => <Checkbox {...field}>label</Checkbox>}` (or `<Switch {...field} />`) needs no
|
|
199
|
+
* wiring. The stored value is always a boolean: `"indeterminate"` and any non-`true` payload
|
|
200
|
+
* store `false`.
|
|
201
|
+
*/
|
|
202
|
+
valuePropName: "checked";
|
|
203
|
+
children: (field: {
|
|
204
|
+
id: string;
|
|
205
|
+
name: string;
|
|
206
|
+
/** `true` only when the stored value is exactly `true`. */
|
|
207
|
+
checked: boolean;
|
|
208
|
+
onCheckedChange: (checked: boolean | "indeterminate") => void;
|
|
209
|
+
onBlur: () => void;
|
|
210
|
+
/** Same callback ref as the `"value"` bag — spreads onto `Checkbox` / `Switch` with no cast. */
|
|
211
|
+
ref: React.RefCallback<HTMLElement>;
|
|
212
|
+
/** Present (and `true`) only when the field is disabled, so `{...field}` never re-enables a control. */
|
|
213
|
+
disabled?: DisabledProp;
|
|
214
|
+
}) => React.ReactNode;
|
|
215
|
+
});
|
|
184
216
|
/**
|
|
185
217
|
* @see FormFieldArray — dynamic repeating fields (antd `Form.List`) on react-hook-form's
|
|
186
218
|
* `useFieldArray`. `name` is the array field; each row hands back the dotted path prefix to build
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type { AppLauncherApp, AppLauncherGroup, AppLauncherLabels, AppLauncherProp, AppShellProp, AuthFooterProp, AuthIdentityProp, OrgSwitcherLabels, OrgSwitcherOrganization, OrgSwitcherProp, DragAxisProp, DragBoundsProp, DraggablePanelLabels, DraggablePanelPlacementProp, DraggablePanelPositionProp, DraggablePanelProp, PageContainerProp, PageInsetProp, SidebarItemProp, SidebarProductProp, SidebarProp, SidebarSectionProp, TopbarProp, } from "./layout.prop.js";
|
|
2
2
|
export type { ButtonProp } from "./general.prop.js";
|
|
3
|
-
export type { InputProp, TextareaProp, FormFieldProp, SearchInputProp, CheckboxProp, CheckboxGroupProp, ChoiceOptionProp, RadioProp, RadioGroupProp, SwitchProp, SliderProp, CalendarProp, DatePickerProp, TimePickerProp, ColorPickerProp, UploadProp, UploadFileItemProp, UploadVariantProp, TreeOptionProp, TreeFieldNamesProp, CascaderProp, TreeSelectProp, ShowCheckedStrategyProp, TransferProp, TransferItemProp, } from "./data-entry.prop.js";
|
|
3
|
+
export type { CommandProp, InputProp, TextareaProp, FormFieldProp, SearchInputProp, CheckboxProp, CheckboxGroupProp, ChoiceOptionProp, RadioProp, RadioGroupProp, SwitchProp, SliderProp, CalendarProp, DatePickerProp, TimePickerProp, ColorPickerProp, UploadProp, UploadFileItemProp, UploadVariantProp, TreeOptionProp, TreeFieldNamesProp, CascaderProp, TreeSelectProp, ShowCheckedStrategyProp, TransferProp, TransferItemProp, } from "./data-entry.prop.js";
|
|
4
4
|
export type { AvatarProp, EmptyStateProp, DescriptionsProp, DescriptionsItemProp, BadgeProp, DataTableProp, QrCodeProp, } from "./data-display.prop.js";
|
|
5
5
|
export type { ChartDatum, ChartSeriesProp, LineChartProp, BarChartProp, AreaChartProp, PieChartProp, } from "./charts.prop.js";
|
|
6
6
|
export type { AlertQueryErrorProp, AlertProp, DialogProp, DialogContentProp, AlertTitleProp, AlertContentProp, AlertDescriptionProp, AlertActionsProp, SheetResponsiveProp, SkeletonRowsProp, } from "./feedback.prop.js";
|
|
@@ -266,6 +266,13 @@ export type ResponsiveGridColumnsProp = number | {
|
|
|
266
266
|
*/
|
|
267
267
|
export type ResponsiveGridFlowProp = "rows" | "columns";
|
|
268
268
|
export type ResponsiveGridPresetProp = "pricing-plans";
|
|
269
|
+
/**
|
|
270
|
+
* Block-axis alignment of the cells in each grid row — antd `Row align`, spelled with Flex's
|
|
271
|
+
* `FlexAlignProp` values (antd `top` → `start`; `stretch` is the same word). `stretch` gives every
|
|
272
|
+
* cell the height of the tallest one, so an empty Kanban lane is still a full-height drop zone.
|
|
273
|
+
* Omitted, each flow keeps its own alignment: `columns` → `start`, `rows` → the grid's stretch.
|
|
274
|
+
*/
|
|
275
|
+
export type ResponsiveGridAlignProp = Extract<FlexAlignProp, "start" | "stretch">;
|
|
269
276
|
export type MasterDetailRailWidthProp = "narrow" | "compact" | "standard" | "wide";
|
|
270
277
|
export type MasterDetailRailProp = "master" | "detail";
|
|
271
278
|
/**
|
package/dist/props/registry.d.ts
CHANGED
|
@@ -352,7 +352,12 @@ export declare const VOCABULARY_REGISTRY: {
|
|
|
352
352
|
readonly TablePaginationProp: {
|
|
353
353
|
readonly file: "vocabulary/data.prop.ts";
|
|
354
354
|
readonly category: "data";
|
|
355
|
-
readonly description: "DataTable pagination object surface — 1-based current | pageSize | total | pageSizeOptions | showSizeChanger | onChange (antd TablePaginationConfig); `false` hides the pager";
|
|
355
|
+
readonly description: "DataTable pagination object surface — 1-based current | pageSize | total | pageSizeOptions | showSizeChanger | showTotal | position | onChange (antd TablePaginationConfig); `false` hides the pager. Without a composed DataTable.Pagination the table renders its own Pagination footer (total + page numbers, density-sized); total > data.length ≤ pageSize reads as server paging";
|
|
356
|
+
};
|
|
357
|
+
readonly TablePaginationPositionProp: {
|
|
358
|
+
readonly file: "vocabulary/data.prop.ts";
|
|
359
|
+
readonly category: "data";
|
|
360
|
+
readonly description: "DataTable pagination footer position (antd TablePaginationPosition, logical) — topStart | topCenter | topEnd | bottomStart | bottomCenter | bottomEnd (default) | none";
|
|
356
361
|
};
|
|
357
362
|
readonly TableCellIndentProp: {
|
|
358
363
|
readonly file: "vocabulary/data.prop.ts";
|
|
@@ -799,6 +804,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
799
804
|
readonly file: "components/layout.prop.ts";
|
|
800
805
|
readonly vocabulary: readonly [];
|
|
801
806
|
};
|
|
807
|
+
readonly ResponsiveGridAlignProp: {
|
|
808
|
+
readonly group: "layout";
|
|
809
|
+
readonly file: "components/layout.prop.ts";
|
|
810
|
+
readonly vocabulary: readonly [];
|
|
811
|
+
};
|
|
802
812
|
readonly MasterDetailRailWidthProp: {
|
|
803
813
|
readonly group: "layout";
|
|
804
814
|
readonly file: "components/layout.prop.ts";
|
|
@@ -1322,6 +1332,15 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
1322
1332
|
readonly file: "components/data-entry.prop.ts";
|
|
1323
1333
|
readonly vocabulary: readonly ["PlaceholderProp", "ValueProp", "DisabledProp"];
|
|
1324
1334
|
};
|
|
1335
|
+
readonly CommandProp: {
|
|
1336
|
+
readonly group: "data-entry";
|
|
1337
|
+
readonly file: "components/data-entry.prop.ts";
|
|
1338
|
+
readonly vocabulary: readonly [{
|
|
1339
|
+
readonly field: "split";
|
|
1340
|
+
readonly local: true;
|
|
1341
|
+
readonly reason: "antd List `split` — ruled-list presentation (row dividers, 0 list padding) for option/checkbox lists; the rest of the root API is cmdk's (gh#699).";
|
|
1342
|
+
}];
|
|
1343
|
+
};
|
|
1325
1344
|
readonly TextareaProp: {
|
|
1326
1345
|
readonly group: "data-entry";
|
|
1327
1346
|
readonly file: "components/data-entry.prop.ts";
|
|
@@ -1686,7 +1705,7 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
1686
1705
|
readonly DataTableProp: {
|
|
1687
1706
|
readonly group: "data-display";
|
|
1688
1707
|
readonly file: "components/data-display.prop.ts";
|
|
1689
|
-
readonly vocabulary: readonly ["ColumnDefProp", "DensityProp", "SortStateProp", "SelectedIdsProp", "GetRowLabelProp", "HandlerProp", "TablePresetProp", "TableColumnPriorityProp", "BreakpointProp", "ColumnFixedProp", "ColumnFilterItemProp", "ColumnFilterStateProp", "ColumnSorterProp", "TableRowSelectionProp", "TableExpandableProp", "TableSummaryProp", "TableScrollProp", "TableStickyProp", "OnRowProp", "TablePaginationProp", "SortDirectionProp", "OnColumnFilterChangeProp"];
|
|
1708
|
+
readonly vocabulary: readonly ["ColumnDefProp", "DensityProp", "SortStateProp", "SelectedIdsProp", "GetRowLabelProp", "HandlerProp", "TablePresetProp", "TableColumnPriorityProp", "BreakpointProp", "ColumnFixedProp", "ColumnFilterItemProp", "ColumnFilterStateProp", "ColumnSorterProp", "TableRowSelectionProp", "TableExpandableProp", "TableSummaryProp", "TableScrollProp", "TableStickyProp", "OnRowProp", "TablePaginationProp", "TablePaginationPositionProp", "SortDirectionProp", "OnColumnFilterChangeProp"];
|
|
1690
1709
|
};
|
|
1691
1710
|
readonly ListRowDensityProp: {
|
|
1692
1711
|
readonly group: "data-display";
|
|
@@ -2883,7 +2902,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
2883
2902
|
readonly vocabulary: readonly ["LabelProp", {
|
|
2884
2903
|
readonly field: "columns";
|
|
2885
2904
|
readonly local: true;
|
|
2886
|
-
readonly reason: "Labels
|
|
2905
|
+
readonly reason: "Labels, positive numeric unit counts and an optional muted flag (non-working period) define a consumer-supplied axis.";
|
|
2906
|
+
}, {
|
|
2907
|
+
readonly field: "bordered";
|
|
2908
|
+
readonly local: true;
|
|
2909
|
+
readonly reason: "Rules the body as a grid (row rules, header rule, a vertical rule per column); default true, same name and default as Calendar bordered.";
|
|
2887
2910
|
}, {
|
|
2888
2911
|
readonly field: "bands";
|
|
2889
2912
|
readonly local: true;
|
package/dist/props/registry.js
CHANGED
|
@@ -350,7 +350,12 @@ const VOCABULARY_REGISTRY = {
|
|
|
350
350
|
TablePaginationProp: {
|
|
351
351
|
file: "vocabulary/data.prop.ts",
|
|
352
352
|
category: "data",
|
|
353
|
-
description: "DataTable pagination object surface \u2014 1-based current | pageSize | total | pageSizeOptions | showSizeChanger | onChange (antd TablePaginationConfig); `false` hides the pager"
|
|
353
|
+
description: "DataTable pagination object surface \u2014 1-based current | pageSize | total | pageSizeOptions | showSizeChanger | showTotal | position | onChange (antd TablePaginationConfig); `false` hides the pager. Without a composed DataTable.Pagination the table renders its own Pagination footer (total + page numbers, density-sized); total > data.length \u2264 pageSize reads as server paging"
|
|
354
|
+
},
|
|
355
|
+
TablePaginationPositionProp: {
|
|
356
|
+
file: "vocabulary/data.prop.ts",
|
|
357
|
+
category: "data",
|
|
358
|
+
description: "DataTable pagination footer position (antd TablePaginationPosition, logical) \u2014 topStart | topCenter | topEnd | bottomStart | bottomCenter | bottomEnd (default) | none"
|
|
354
359
|
},
|
|
355
360
|
TableCellIndentProp: {
|
|
356
361
|
file: "vocabulary/data.prop.ts",
|
|
@@ -794,6 +799,7 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
794
799
|
ResponsiveGridFlowProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
|
|
795
800
|
ResponsiveGridColumnsProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
|
|
796
801
|
ResponsiveGridPresetProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
|
|
802
|
+
ResponsiveGridAlignProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
|
|
797
803
|
MasterDetailRailWidthProp: {
|
|
798
804
|
group: "layout",
|
|
799
805
|
file: "components/layout.prop.ts",
|
|
@@ -1499,6 +1505,17 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
1499
1505
|
file: "components/data-entry.prop.ts",
|
|
1500
1506
|
vocabulary: ["PlaceholderProp", "ValueProp", "DisabledProp"]
|
|
1501
1507
|
},
|
|
1508
|
+
CommandProp: {
|
|
1509
|
+
group: "data-entry",
|
|
1510
|
+
file: "components/data-entry.prop.ts",
|
|
1511
|
+
vocabulary: [
|
|
1512
|
+
{
|
|
1513
|
+
field: "split",
|
|
1514
|
+
local: true,
|
|
1515
|
+
reason: "antd List `split` \u2014 ruled-list presentation (row dividers, 0 list padding) for option/checkbox lists; the rest of the root API is cmdk's (gh#699)."
|
|
1516
|
+
}
|
|
1517
|
+
]
|
|
1518
|
+
},
|
|
1502
1519
|
TextareaProp: {
|
|
1503
1520
|
group: "data-entry",
|
|
1504
1521
|
file: "components/data-entry.prop.ts",
|
|
@@ -2045,6 +2062,7 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
2045
2062
|
"TableStickyProp",
|
|
2046
2063
|
"OnRowProp",
|
|
2047
2064
|
"TablePaginationProp",
|
|
2065
|
+
"TablePaginationPositionProp",
|
|
2048
2066
|
"SortDirectionProp",
|
|
2049
2067
|
"OnColumnFilterChangeProp"
|
|
2050
2068
|
]
|
|
@@ -3385,7 +3403,12 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
3385
3403
|
{
|
|
3386
3404
|
field: "columns",
|
|
3387
3405
|
local: true,
|
|
3388
|
-
reason: "Labels
|
|
3406
|
+
reason: "Labels, positive numeric unit counts and an optional muted flag (non-working period) define a consumer-supplied axis."
|
|
3407
|
+
},
|
|
3408
|
+
{
|
|
3409
|
+
field: "bordered",
|
|
3410
|
+
local: true,
|
|
3411
|
+
reason: "Rules the body as a grid (row rules, header rule, a vertical rule per column); default true, same name and default as Calendar bordered."
|
|
3389
3412
|
},
|
|
3390
3413
|
{
|
|
3391
3414
|
field: "bands",
|
|
@@ -265,18 +265,44 @@ export type OnRowProp<T> = (row: T, index: number) => (React.HTMLAttributes<HTML
|
|
|
265
265
|
* Pagination object surface (antd `TablePaginationConfig`). 1-BASED `current`, like antd — the
|
|
266
266
|
* TanStack-shaped `{ pageIndex, pageSize }` form the prop already accepted is still accepted and
|
|
267
267
|
* is told apart by its `pageIndex` field. `false` hides the pager entirely.
|
|
268
|
+
*
|
|
269
|
+
* Given WITHOUT a composed `<DataTable.Pagination>`, the table renders its own antd footer: the
|
|
270
|
+
* real `Pagination` (total + page numbers) at `position`, sized from the table's `density`.
|
|
271
|
+
* A composed `<DataTable.Pagination>` keeps its own footer and wins — never two pagers.
|
|
268
272
|
*/
|
|
269
273
|
export type TablePaginationProp = {
|
|
270
274
|
/** 1-based current page. */
|
|
271
275
|
current?: number;
|
|
272
276
|
pageSize?: number;
|
|
273
|
-
/**
|
|
277
|
+
/**
|
|
278
|
+
* Total row count on the server — drives the page count. As in antd, a `total` larger than
|
|
279
|
+
* `data.length` with no more than `pageSize` rows is read as SERVER paging: `data` is the current
|
|
280
|
+
* page, shown as is, and the footer offers `ceil(total / pageSize)` pages.
|
|
281
|
+
*/
|
|
274
282
|
total?: number;
|
|
275
283
|
pageSizeOptions?: number[];
|
|
276
284
|
/** Default `true`. `false` drops the rows-per-page select. */
|
|
277
285
|
showSizeChanger?: boolean;
|
|
286
|
+
/** antd `showTotal` — `true` for the localized total label, or a `(total, range)` render. */
|
|
287
|
+
showTotal?: boolean | ((total: number, range: [number, number]) => React.ReactNode);
|
|
288
|
+
/**
|
|
289
|
+
* antd `hideOnSinglePage`, whose antd default is `false` — and that default is kept HERE, in the
|
|
290
|
+
* table footer, although the standalone `Pagination` defaults it to `true` (gh#711). A list
|
|
291
|
+
* screen's footer carries the total and the rows-per-page select, so hiding it on the last page
|
|
292
|
+
* of a shrinking filter makes the row count disappear exactly when the user is checking it.
|
|
293
|
+
*/
|
|
294
|
+
hideOnSinglePage?: boolean;
|
|
295
|
+
/** antd `position`, logical spelling. Default `["bottomEnd"]` (antd `bottomRight`). */
|
|
296
|
+
position?: TablePaginationPositionProp[];
|
|
278
297
|
onChange?: (page: number, pageSize: number) => void;
|
|
279
298
|
};
|
|
299
|
+
/**
|
|
300
|
+
* Where DataTable's own pagination footer sits (antd `TablePaginationPosition`). antd's physical
|
|
301
|
+
* `topLeft` / `bottomRight` become `topStart` / `bottomEnd` here — the same logical respelling as
|
|
302
|
+
* `DropdownMenuPlacementProp` — so an RTL table puts the pager on its reading end with no second
|
|
303
|
+
* value. `none` renders no footer while the pagination state stays live.
|
|
304
|
+
*/
|
|
305
|
+
export type TablePaginationPositionProp = "topStart" | "topCenter" | "topEnd" | "bottomStart" | "bottomCenter" | "bottomEnd" | "none";
|
|
280
306
|
/**
|
|
281
307
|
* Descriptions column count (antd `column`). A plain number keeps this library's own mobile-first
|
|
282
308
|
* ladder; the `{ sm, md, lg, xl }` object is antd's responsive form, expressed against this
|
|
@@ -4,4 +4,4 @@ export type { TitleProp, SubtitleProp, StatusProp, DescriptionProp, ExtraProp, F
|
|
|
4
4
|
export type { PageDensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, MobileShellHeightProp, MobileShellWidthProp, OrientationProp, TableDensityProp, DensityProp, GapNameProp, PadProp, PadRawProp, PadSides, GapProp, GapStepProp, } from "./layout.prop.js";
|
|
5
5
|
export type { ButtonVariantProp, ButtonSizeProp, BadgeVariantProp, AppSettingPickerAppearanceProp, AppSettingToggleAppearanceProp, ShapeProp, AvatarShapeProp, TextSizeProp, TextToneProp, FontWeightProp, HeadingLevelProp, TextAlignProp, TextWhitespaceProp, TypographyTypeProp, TitleLevelProp, TypographyCopyConfigProp, TypographyEditConfigProp, TypographyEllipsisConfigProp, TypographyActionsConfigProp, SizeProp, ControlStatusProp, ControlVariantProp, FormLayoutProp, DescriptionsLayoutProp, BreakpointProp, ConfirmVariantProp, ToneProp, AlertVariantProp, SortDirectionProp, ColumnAlignProp, SortStateProp, RevealDelayProp, ActivityVariantProp, ActivityAnnounceProp, } from "./interaction.prop.js";
|
|
6
6
|
export type { BreadcrumbItemProp, BreadcrumbProp, BreadcrumbItemMenuProp, BreadcrumbItemMenuEntryProp, BreadcrumbSeparatorProp, BreadcrumbItemRenderProp, } from "./navigation.prop.js";
|
|
7
|
-
export type { GetRowIdProp, GetRowLabelProp, OnRowClickProp, ColumnDefProp, TablePresetProp, TableColumnPriorityProp, TableCellIndentProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, TableRowToneProp, RowToneProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, ColumnFixedProp, ColumnFilterValueProp, ColumnFilterItemProp, ColumnFilterStateProp, OnColumnFilterChangeProp, ColumnCompareProp, ColumnSorterProp, TableSelectionItemProp, TableRowSelectionProp, TableExpandableProp, TableSummaryProp, TableScrollProp, TableStickyProp, OnRowProp, TablePaginationProp, DescriptionsColumnProp, DescriptionsSpanProp, DescriptionsItemsProp, } from "./data.prop.js";
|
|
7
|
+
export type { GetRowIdProp, GetRowLabelProp, OnRowClickProp, ColumnDefProp, TablePresetProp, TableColumnPriorityProp, TableCellIndentProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, TableRowToneProp, RowToneProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, ColumnFixedProp, ColumnFilterValueProp, ColumnFilterItemProp, ColumnFilterStateProp, OnColumnFilterChangeProp, ColumnCompareProp, ColumnSorterProp, TableSelectionItemProp, TableRowSelectionProp, TableExpandableProp, TableSummaryProp, TableScrollProp, TableStickyProp, OnRowProp, TablePaginationProp, TablePaginationPositionProp, DescriptionsColumnProp, DescriptionsSpanProp, DescriptionsItemsProp, } from "./data.prop.js";
|
package/dist/styles/control.css
CHANGED
|
@@ -377,6 +377,14 @@
|
|
|
377
377
|
line-height: 0;
|
|
378
378
|
}
|
|
379
379
|
|
|
380
|
+
.ui-choice-field > .ui-choice-control {
|
|
381
|
+
display: flex;
|
|
382
|
+
align-items: center;
|
|
383
|
+
font-size: var(--font-size-base);
|
|
384
|
+
line-height: var(--control-label-line-height);
|
|
385
|
+
min-block-size: 1lh;
|
|
386
|
+
}
|
|
387
|
+
|
|
380
388
|
.ui-choice-input {
|
|
381
389
|
position: absolute;
|
|
382
390
|
inset: 0;
|
|
@@ -770,6 +778,30 @@
|
|
|
770
778
|
opacity: 0.5;
|
|
771
779
|
}
|
|
772
780
|
|
|
781
|
+
.ui-command[data-split] .ui-command-group {
|
|
782
|
+
padding: var(--command-list-split-padding);
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
.ui-command[data-split] .ui-command-item {
|
|
786
|
+
border-radius: 0;
|
|
787
|
+
margin-inline: calc(-1 * var(--command-list-split-inset));
|
|
788
|
+
padding-inline: calc(var(--command-list-split-inset) + var(--command-input-padding-x));
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
.ui-command[data-split] .ui-command-group [cmdk-group-heading] {
|
|
792
|
+
padding-inline: calc(var(--command-list-split-inset) + var(--command-input-padding-x));
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
.ui-command[data-split] .ui-command-item:has(+ .ui-command-item) {
|
|
796
|
+
border-block-end: var(--command-item-divider-width) solid
|
|
797
|
+
hsl(var(--command-item-divider-color, var(--border)));
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
.ui-command[data-split] .ui-command-group:not([hidden]) ~ .ui-command-group:not([hidden]) {
|
|
801
|
+
border-block-start: var(--command-item-divider-width) solid
|
|
802
|
+
hsl(var(--command-item-divider-color, var(--border)));
|
|
803
|
+
}
|
|
804
|
+
|
|
773
805
|
[data-slot="dialog-content"].ui-command-palette {
|
|
774
806
|
top: var(--command-palette-inset-top);
|
|
775
807
|
width: min(
|
|
@@ -1060,7 +1092,9 @@
|
|
|
1060
1092
|
border: 0;
|
|
1061
1093
|
padding: 0;
|
|
1062
1094
|
cursor: pointer;
|
|
1063
|
-
color: hsl(
|
|
1095
|
+
color: hsl(
|
|
1096
|
+
var(--rating-star-empty-color, var(--muted-foreground)) / var(--rating-star-empty-alpha)
|
|
1097
|
+
);
|
|
1064
1098
|
line-height: 0;
|
|
1065
1099
|
}
|
|
1066
1100
|
.ui-rating-star:disabled {
|
|
@@ -1509,6 +1543,10 @@
|
|
|
1509
1543
|
padding: var(--search-select-list-space-inset);
|
|
1510
1544
|
}
|
|
1511
1545
|
|
|
1546
|
+
.ui-command[data-split] .ui-search-select-list {
|
|
1547
|
+
padding: var(--command-list-split-padding);
|
|
1548
|
+
}
|
|
1549
|
+
|
|
1512
1550
|
.ui-search-select-option-slot {
|
|
1513
1551
|
min-inline-size: 0;
|
|
1514
1552
|
flex: 1 1 0%;
|
|
@@ -1702,6 +1740,11 @@
|
|
|
1702
1740
|
display: contents;
|
|
1703
1741
|
}
|
|
1704
1742
|
|
|
1743
|
+
.ui-select-root > [data-react-aria-prevent-focus][aria-hidden="true"] {
|
|
1744
|
+
position: absolute !important;
|
|
1745
|
+
inset: auto !important;
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1705
1748
|
.ui-select-content {
|
|
1706
1749
|
position: relative;
|
|
1707
1750
|
z-index: var(--overlay-z-index);
|
|
@@ -1328,12 +1328,69 @@
|
|
|
1328
1328
|
min-inline-size: 0;
|
|
1329
1329
|
overflow: hidden;
|
|
1330
1330
|
padding: var(--space-2);
|
|
1331
|
-
border-inline-end:
|
|
1331
|
+
border-inline-end: var(--range-timeline-grid-width) solid
|
|
1332
|
+
hsl(var(--range-timeline-border-color));
|
|
1332
1333
|
}
|
|
1333
1334
|
.ui-range-timeline-track {
|
|
1334
1335
|
position: relative;
|
|
1335
1336
|
min-inline-size: 0;
|
|
1336
1337
|
}
|
|
1338
|
+
|
|
1339
|
+
.ui-range-timeline-body {
|
|
1340
|
+
position: relative;
|
|
1341
|
+
isolation: isolate;
|
|
1342
|
+
}
|
|
1343
|
+
.ui-range-timeline-grid {
|
|
1344
|
+
position: absolute;
|
|
1345
|
+
inset: 0;
|
|
1346
|
+
z-index: -1;
|
|
1347
|
+
display: grid;
|
|
1348
|
+
grid-template-columns: var(--range-timeline-label-width) minmax(0, 1fr);
|
|
1349
|
+
pointer-events: none;
|
|
1350
|
+
}
|
|
1351
|
+
.ui-range-timeline-grid-column {
|
|
1352
|
+
min-inline-size: 0;
|
|
1353
|
+
padding-inline: var(--space-2);
|
|
1354
|
+
border-inline-end: var(--range-timeline-grid-width) solid transparent;
|
|
1355
|
+
}
|
|
1356
|
+
.ui-range-timeline-grid-column[data-muted="true"] {
|
|
1357
|
+
background: var(--range-timeline-muted-column-background, hsl(var(--muted)));
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
.ui-range-timeline[data-bordered="true"] .ui-range-timeline-column,
|
|
1361
|
+
.ui-range-timeline[data-bordered="true"] .ui-range-timeline-label,
|
|
1362
|
+
.ui-range-timeline[data-bordered="true"] .ui-range-timeline-grid-column {
|
|
1363
|
+
border-inline-end-color: var(--range-timeline-grid-color, hsl(var(--input)));
|
|
1364
|
+
}
|
|
1365
|
+
.ui-range-timeline[data-bordered="true"] .ui-range-timeline-header + .ui-range-timeline-header,
|
|
1366
|
+
.ui-range-timeline[data-bordered="true"] .ui-range-timeline-row {
|
|
1367
|
+
border-block-start: var(--range-timeline-grid-width) solid
|
|
1368
|
+
var(--range-timeline-grid-color, hsl(var(--input)));
|
|
1369
|
+
}
|
|
1370
|
+
.ui-range-timeline-outside {
|
|
1371
|
+
position: absolute;
|
|
1372
|
+
inset-block: 0;
|
|
1373
|
+
display: flex;
|
|
1374
|
+
align-items: center;
|
|
1375
|
+
gap: var(--space-1);
|
|
1376
|
+
padding-inline: var(--space-2);
|
|
1377
|
+
color: hsl(var(--muted-foreground));
|
|
1378
|
+
}
|
|
1379
|
+
.ui-range-timeline-outside[data-direction="before"] {
|
|
1380
|
+
inset-inline-start: 0;
|
|
1381
|
+
}
|
|
1382
|
+
.ui-range-timeline-outside[data-direction="after"] {
|
|
1383
|
+
inset-inline-end: 0;
|
|
1384
|
+
}
|
|
1385
|
+
.ui-range-timeline-outside-icon {
|
|
1386
|
+
inline-size: var(--icon-size-sm);
|
|
1387
|
+
block-size: var(--icon-size-sm);
|
|
1388
|
+
flex-shrink: 0;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
[dir="rtl"] .ui-range-timeline-outside-icon {
|
|
1392
|
+
transform: scaleX(-1);
|
|
1393
|
+
}
|
|
1337
1394
|
.ui-range-timeline-bar {
|
|
1338
1395
|
position: absolute;
|
|
1339
1396
|
inset-block-start: 50%;
|
|
@@ -110,6 +110,11 @@
|
|
|
110
110
|
> * {
|
|
111
111
|
max-inline-size: 100%;
|
|
112
112
|
}
|
|
113
|
+
|
|
114
|
+
.ui-form-field[data-collapse-below="false"][data-layout="horizontal"]
|
|
115
|
+
> .ui-form-field-control:first-child {
|
|
116
|
+
grid-column-start: 2;
|
|
117
|
+
}
|
|
113
118
|
.ui-form-field[data-collapse-below="false"][data-label-align="end"]:is(
|
|
114
119
|
[data-layout="horizontal"],
|
|
115
120
|
[data-layout="inline"]
|
|
@@ -139,6 +144,10 @@
|
|
|
139
144
|
> * {
|
|
140
145
|
max-inline-size: 100%;
|
|
141
146
|
}
|
|
147
|
+
.ui-form-field[data-collapse-below="sm"][data-layout="horizontal"]
|
|
148
|
+
> .ui-form-field-control:first-child {
|
|
149
|
+
grid-column-start: 2;
|
|
150
|
+
}
|
|
142
151
|
.ui-form-field[data-collapse-below="sm"][data-label-align="end"]:is(
|
|
143
152
|
[data-layout="horizontal"],
|
|
144
153
|
[data-layout="inline"]
|
|
@@ -169,6 +178,10 @@
|
|
|
169
178
|
> * {
|
|
170
179
|
max-inline-size: 100%;
|
|
171
180
|
}
|
|
181
|
+
.ui-form-field[data-collapse-below="md"][data-layout="horizontal"]
|
|
182
|
+
> .ui-form-field-control:first-child {
|
|
183
|
+
grid-column-start: 2;
|
|
184
|
+
}
|
|
172
185
|
.ui-form-field[data-collapse-below="md"][data-label-align="end"]:is(
|
|
173
186
|
[data-layout="horizontal"],
|
|
174
187
|
[data-layout="inline"]
|
|
@@ -199,6 +212,10 @@
|
|
|
199
212
|
> * {
|
|
200
213
|
max-inline-size: 100%;
|
|
201
214
|
}
|
|
215
|
+
.ui-form-field[data-collapse-below="lg"][data-layout="horizontal"]
|
|
216
|
+
> .ui-form-field-control:first-child {
|
|
217
|
+
grid-column-start: 2;
|
|
218
|
+
}
|
|
202
219
|
.ui-form-field[data-collapse-below="lg"][data-label-align="end"]:is(
|
|
203
220
|
[data-layout="horizontal"],
|
|
204
221
|
[data-layout="inline"]
|
|
@@ -229,6 +246,10 @@
|
|
|
229
246
|
> * {
|
|
230
247
|
max-inline-size: 100%;
|
|
231
248
|
}
|
|
249
|
+
.ui-form-field[data-collapse-below="xl"][data-layout="horizontal"]
|
|
250
|
+
> .ui-form-field-control:first-child {
|
|
251
|
+
grid-column-start: 2;
|
|
252
|
+
}
|
|
232
253
|
.ui-form-field[data-collapse-below="xl"][data-label-align="end"]:is(
|
|
233
254
|
[data-layout="horizontal"],
|
|
234
255
|
[data-layout="inline"]
|
package/dist/styles/layout.css
CHANGED
|
@@ -321,6 +321,13 @@
|
|
|
321
321
|
align-items: start;
|
|
322
322
|
}
|
|
323
323
|
|
|
324
|
+
.ui-responsive-grid[data-align="start"] {
|
|
325
|
+
align-items: start;
|
|
326
|
+
}
|
|
327
|
+
.ui-responsive-grid[data-align="stretch"] {
|
|
328
|
+
align-items: stretch;
|
|
329
|
+
}
|
|
330
|
+
|
|
324
331
|
.ui-responsive-grid[data-gap="none"] {
|
|
325
332
|
gap: 0;
|
|
326
333
|
}
|